diff --git a/.github/workflows/build_zephyr.yml b/.github/workflows/build_zephyr.yml index f8781c2..6561a3a 100644 --- a/.github/workflows/build_zephyr.yml +++ b/.github/workflows/build_zephyr.yml @@ -49,6 +49,15 @@ jobs: uses: actions/checkout@v4 with: path: app + + - name: Process Board name + id: nicename + shell: bash + run: | + BOARD_NICENAME=${{ inputs.BOARD }} + BOARD_NICENAME=${BOARD_NICENAME//\//_} + echo "BOARD_NICENAME=${BOARD_NICENAME}" >> $GITHUB_OUTPUT + - name: Setup West workspace run: | west init -l app @@ -60,23 +69,24 @@ jobs: - name: Build with West run: | - west build -p -b ${{ inputs.BOARD }} app + west build -p -b ${{ inputs.BOARD }} --sysbuild app - name: Prepare artifacts + shell: bash if: inputs.ARTIFACT == true && inputs.TAG != '' run: | - cd build/zephyr + cd build mkdir -p artifacts - mv merged.hex ./artifacts/golioth-${{ github.event.repository.name }}_${{ inputs.TAG }}_${{ inputs.BOARD }}_full.hex - mv app_update.bin ./artifacts/golioth-${{ github.event.repository.name }}_${{ inputs.TAG }}_${{ inputs.BOARD }}_update.bin - mv zephyr.elf ./artifacts/golioth-${{ github.event.repository.name }}_${{ inputs.TAG }}_${{ inputs.BOARD }}.elf + mv merged.hex ./artifacts/modbus_${{ inputs.TAG }}_${{ steps.nicename.outputs.BOARD_NICENAME }}_full.hex + mv app/zephyr/zephyr.signed.bin ./artifacts/modbus_${{ inputs.TAG }}_${{ steps.nicename.outputs.BOARD_NICENAME }}_update.bin + mv app/zephyr/zephyr.elf ./artifacts/modbus_${{ inputs.TAG }}_${{ steps.nicename.outputs.BOARD_NICENAME }}.elf # Run IDs are unique per repo but are reused on re-runs - name: Save artifact if: inputs.ARTIFACT == true - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: build_artifacts_${{ github.run_id }} + name: build_artifacts_${{ github.run_id }}_${{ steps.nicename.outputs.BOARD_NICENAME }} path: | - build/zephyr/artifacts/* + build/artifacts/* diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ea9ce0d..4049d5e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ on: version: description: 'Release Version.' required: true - default: 'v0.0.0' + default: 'template_v0.0.0' type: string jobs: @@ -17,7 +17,7 @@ jobs: strategy: matrix: ZEPHYR_SDK: [0.16.3] - BOARD: ["nrf9160dk_nrf9160_ns","aludel_mini_v1_sparkfun9160_ns"] + BOARD: ["nrf9160dk/nrf9160/ns","aludel_mini/nrf9160/ns","aludel_elixir/nrf9160/ns"] uses: ./.github/workflows/build_zephyr.yml with: @@ -36,10 +36,11 @@ jobs: uses: actions/checkout@v4 - name: Download artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: build_artifacts_${{ github.run_id }} + pattern: build_artifacts_* path: ~/artifacts + merge-multiple: true - name: Create Release manually with GH CLI run: gh release create --title ${{ inputs.version }} --draft ${{ inputs.version }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 788335a..b41af92 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,17 +1,30 @@ # Copyright (c) 2023 Golioth, Inc. # SPDX-License-Identifier: Apache-2.0 -name: Test firmware +name: Test firmware on: pull_request: push: + branches: [ main ] jobs: - test_build: + test_build_nrf9160dk: uses: ./.github/workflows/build_zephyr.yml with: ZEPHYR_SDK: 0.16.3 - BOARD: aludel_mini_v1_sparkfun9160_ns - ARTIFACT: false \ No newline at end of file + BOARD: nrf9160dk/nrf9160/ns + ARTIFACT: false + test_build_aludel_elixir: + uses: ./.github/workflows/build_zephyr.yml + with: + ZEPHYR_SDK: 0.16.3 + BOARD: aludel_elixir/nrf9160/ns + ARTIFACT: false + test_build_aludel_mini: + uses: ./.github/workflows/build_zephyr.yml + with: + ZEPHYR_SDK: 0.16.3 + BOARD: aludel_mini/nrf9160/ns + ARTIFACT: false diff --git a/README.md b/README.md index 2613c18..080b678 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ images](https://github.com/golioth/reference-design-modbus-vibration-monitor/rel ### Additional Sensors/Components - Texas Instruments THVD1426 RS-485 transceiver +- Banner QM30VT2 Banner Modbus temperature & vibration sensor ## Golioth Features @@ -123,7 +124,8 @@ the LightDB Stream service: { "sensor": { "temperature": { - "celcius": 27.08 + "celcius": 21.96, + "farenheight": 71.53 }, "x_axis": { "acceleration": { @@ -294,7 +296,9 @@ folder. The `build` and `deps` directories being one level higher prevents the repo from cataloging all of the changes to the dependencies and the build (so no `.gitignore` is needed). -### Use `west` to initialize the workspace and install dependencies +Prior to building, update `VERSION` file to reflect the firmware version +number you want to assign to this build. Then run the following commands +to build and program the firmware onto the device. > [!WARNING] > You must perform a pristine build (use `-p` or remove the `build` diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..16a1373 --- /dev/null +++ b/VERSION @@ -0,0 +1,5 @@ +VERSION_MAJOR = 1 +VERSION_MINOR = 0 +PATCHLEVEL = 0 +VERSION_TWEAK = 0 +EXTRAVERSION = diff --git a/boards/aludel_elixir_ns.conf b/boards/aludel_elixir_ns.conf index bf0db0d..15d5024 100644 --- a/boards/aludel_elixir_ns.conf +++ b/boards/aludel_elixir_ns.conf @@ -18,11 +18,11 @@ CONFIG_NET_SOCKETS_TLS_PRIORITY=35 # Modem library CONFIG_NRF_MODEM_LIB=y -CONFIG_NRF_MODEM_LIB_ON_FAULT_APPLICATION_SPECIFIC=y # LTE connectivity with network connection manager -CONFIG_LTE_CONNECTIVITY=y -CONFIG_LTE_CONNECTIVITY_AUTO_CONNECT=n +CONFIG_NRF_MODEM_LIB_NET_IF=y +CONFIG_NRF_MODEM_LIB_NET_IF_AUTO_START=y +CONFIG_NRF_MODEM_LIB_NET_IF_AUTO_CONNECT=n CONFIG_NET_CONNECTION_MANAGER=y CONFIG_NET_CONNECTION_MANAGER_MONITOR_STACK_SIZE=1024 @@ -33,6 +33,12 @@ CONFIG_GOLIOTH_SAMPLE_NRF91_LTE_MONITOR=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED=n CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED=n +# MbedTLS configuration to support p-384 curve. These options +# enable using the MbedTLS built-in support for operations not +# supported by the default nRF Oberon crypto backend +CONFIG_NORDIC_SECURITY_BACKEND=n +CONFIG_MBEDTLS_LEGACY_CRYPTO_C=y + # Add Network Info Support CONFIG_MODEM_INFO=y @@ -41,3 +47,5 @@ CONFIG_BOOTLOADER_MCUBOOT=y # Use Golioth Ostentus Faceplate CONFIG_LIB_OSTENTUS=y + +CONFIG_REGULATOR=y diff --git a/boards/aludel_elixir_ns_B.overlay b/boards/aludel_elixir_ns.overlay similarity index 56% rename from boards/aludel_elixir_ns_B.overlay rename to boards/aludel_elixir_ns.overlay index 0ba274f..7eece62 100644 --- a/boards/aludel_elixir_ns_B.overlay +++ b/boards/aludel_elixir_ns.overlay @@ -10,6 +10,19 @@ }; }; +&i2c2 { + status = "okay"; + + /* Needed for I2C writes used by libostentus */ + zephyr,concat-buf-size = <48>; + + ostentus@12 { + status = "okay"; + compatible = "golioth,ostentus"; + reg = <0x12>; + }; +}; + &mikrobus_serial { status = "okay"; @@ -18,7 +31,3 @@ status = "okay"; }; }; - -&qwiic_i2c { - status = "okay"; -}; diff --git a/boards/aludel_elixir_ns_A.overlay b/boards/aludel_elixir_ns_A.overlay deleted file mode 100644 index 2284a69..0000000 --- a/boards/aludel_elixir_ns_A.overlay +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2024 Golioth, Inc. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -&mikrobus_serial { - status = "okay"; - - modbus0 { - compatible = "zephyr,modbus-serial"; - status = "okay"; - }; -}; - -&qwiic_i2c { - status = "okay"; -}; diff --git a/boards/aludel_mini_v1_sparkfun9160_ns.conf b/boards/aludel_mini_nrf9160_ns.conf similarity index 73% rename from boards/aludel_mini_v1_sparkfun9160_ns.conf rename to boards/aludel_mini_nrf9160_ns.conf index 2661b0d..3cd1a5e 100644 --- a/boards/aludel_mini_v1_sparkfun9160_ns.conf +++ b/boards/aludel_mini_nrf9160_ns.conf @@ -18,11 +18,11 @@ CONFIG_NET_SOCKETS_TLS_PRIORITY=35 # Modem library CONFIG_NRF_MODEM_LIB=y -CONFIG_NRF_MODEM_LIB_ON_FAULT_APPLICATION_SPECIFIC=y # LTE connectivity with network connection manager -CONFIG_LTE_CONNECTIVITY=y -CONFIG_LTE_CONNECTIVITY_AUTO_CONNECT=n +CONFIG_NRF_MODEM_LIB_NET_IF=y +CONFIG_NRF_MODEM_LIB_NET_IF_AUTO_START=y +CONFIG_NRF_MODEM_LIB_NET_IF_AUTO_CONNECT=n CONFIG_NET_CONNECTION_MANAGER=y CONFIG_NET_CONNECTION_MANAGER_MONITOR_STACK_SIZE=1024 @@ -33,6 +33,12 @@ CONFIG_GOLIOTH_SAMPLE_NRF91_LTE_MONITOR=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED=n CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED=n +# MbedTLS configuration to support p-384 curve. These options +# enable using the MbedTLS built-in support for operations not +# supported by the default nRF Oberon crypto backend +CONFIG_NORDIC_SECURITY_BACKEND=n +CONFIG_MBEDTLS_LEGACY_CRYPTO_C=y + # Battery Support CONFIG_ALUDEL_BATTERY_MONITOR=y @@ -41,6 +47,3 @@ CONFIG_MODEM_INFO=y # Generate MCUboot compatible images CONFIG_BOOTLOADER_MCUBOOT=y - -# Use Golioth Ostentus Faceplate -CONFIG_LIB_OSTENTUS=y diff --git a/boards/aludel_mini_v1_sparkfun9160_ns.overlay b/boards/aludel_mini_nrf9160_ns.overlay similarity index 68% rename from boards/aludel_mini_v1_sparkfun9160_ns.overlay rename to boards/aludel_mini_nrf9160_ns.overlay index 8eb50c9..5487974 100644 --- a/boards/aludel_mini_v1_sparkfun9160_ns.overlay +++ b/boards/aludel_mini_nrf9160_ns.overlay @@ -6,10 +6,21 @@ / { zephyr,user { - rs485-8-click-en-gpios = <&mikrobus_header_1 1 GPIO_ACTIVE_HIGH>; + rs485-8-click-en-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>; }; }; +&i2c2 { + /* Needed for I2C writes used by libostentus */ + zephyr,concat-buf-size = <48>; + + ostentus@12 { + status = "okay"; + compatible = "golioth,ostentus"; + reg = <0x12>; + }; +}; + /* On this board, mikrobus_spi == spi2 & mikrobus_serial == uart2, and a * limitation of the nRF9160 is that both can't be enabled simultaneously. * On this board, mikrobus_spi is enabled by default and mikrobus_serial is diff --git a/boards/nrf9160dk_nrf9160_ns.conf b/boards/nrf9160dk_nrf9160_ns.conf index a326eed..a7af8eb 100644 --- a/boards/nrf9160dk_nrf9160_ns.conf +++ b/boards/nrf9160dk_nrf9160_ns.conf @@ -18,11 +18,11 @@ CONFIG_NET_SOCKETS_TLS_PRIORITY=35 # Modem library CONFIG_NRF_MODEM_LIB=y -CONFIG_NRF_MODEM_LIB_ON_FAULT_APPLICATION_SPECIFIC=y # LTE connectivity with network connection manager -CONFIG_LTE_CONNECTIVITY=y -CONFIG_LTE_CONNECTIVITY_AUTO_CONNECT=n +CONFIG_NRF_MODEM_LIB_NET_IF=y +CONFIG_NRF_MODEM_LIB_NET_IF_AUTO_START=y +CONFIG_NRF_MODEM_LIB_NET_IF_AUTO_CONNECT=n CONFIG_NET_CONNECTION_MANAGER=y CONFIG_NET_CONNECTION_MANAGER_MONITOR_STACK_SIZE=1024 @@ -33,6 +33,12 @@ CONFIG_GOLIOTH_SAMPLE_NRF91_LTE_MONITOR=y CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED=n CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED=n +# MbedTLS configuration to support p-384 curve. These options +# enable using the MbedTLS built-in support for operations not +# supported by the default nRF Oberon crypto backend +CONFIG_NORDIC_SECURITY_BACKEND=n +CONFIG_MBEDTLS_LEGACY_CRYPTO_C=y + # Add Network Info Support CONFIG_MODEM_INFO=y diff --git a/boards/nrf9160dk_nrf9160_ns.overlay b/boards/nrf9160dk_nrf9160_ns.overlay index 1dc3c55..d61c190 100644 --- a/boards/nrf9160dk_nrf9160_ns.overlay +++ b/boards/nrf9160dk_nrf9160_ns.overlay @@ -6,7 +6,7 @@ / { zephyr,user { - rs485-8-click-en-gpios = <&mikrobus_header_1 1 GPIO_ACTIVE_HIGH>; + rs485-8-click-en-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>; }; aliases { @@ -14,7 +14,7 @@ }; }; -&mikrobus_serial { +&uart1 { status = "okay"; modbus0 { @@ -22,3 +22,26 @@ status = "okay"; }; }; + +&pinctrl { + /* + * The default pin group includes RTS/CTS HW flow control, but the Arduino + * Uno Click Shield board does not connect these pins (only TX/RX are used). + * This keeps RX/TX on the same pins, but just removes RTS/CTS from the + * pin groups. + */ + uart1_default: uart1_default { + group1 { + psels = , + ; + }; + }; + + uart1_sleep: uart1_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/pipelines/json-to-lightdb.yml b/pipelines/json-to-lightdb.yml new file mode 100644 index 0000000..c3f7614 --- /dev/null +++ b/pipelines/json-to-lightdb.yml @@ -0,0 +1,19 @@ +filter: + path: "*" + content_type: application/json +steps: + - name: step-0 + destination: + type: batch + version: v1 + - name: step-1 + transformer: + type: extract-timestamp + version: v1 + - name: step-2 + transformer: + type: inject-path + version: v1 + destination: + type: lightdb-stream + version: v1 diff --git a/pm_static.yml b/pm_static.yml new file mode 100644 index 0000000..86793bb --- /dev/null +++ b/pm_static.yml @@ -0,0 +1,214 @@ +EMPTY_0: + address: 0xc000 + end_address: 0x10000 + placement: + before: + - mcuboot_pad + region: flash_primary + size: 0x4000 +EMPTY_1: + address: 0xfa000 + end_address: 0x100000 + placement: + after: + - settings_storage + region: flash_primary + size: 0x6000 +EMPTY_2: + address: 0xf0000 + end_address: 0xf8000 + placement: + after: + - mcuboot_secondary + region: flash_primary + size: 0x8000 +app: + address: 0x18000 + end_address: 0x80000 + region: flash_primary + size: 0x68000 +mcuboot: + address: 0x0 + end_address: 0xc000 + placement: + before: + - mcuboot_primary + region: flash_primary + size: 0xc000 +mcuboot_pad: + address: 0x10000 + end_address: 0x10200 + placement: + align: + start: 0x8000 + before: + - mcuboot_primary_app + region: flash_primary + size: 0x200 +mcuboot_primary: + address: 0x10000 + end_address: 0x80000 + orig_span: &id001 + - app + - tfm + - mcuboot_pad + region: flash_primary + sharers: 0x1 + size: 0x70000 + span: *id001 +mcuboot_primary_app: + address: 0x10200 + end_address: 0x80000 + orig_span: &id002 + - app + - tfm + region: flash_primary + size: 0x6fe00 + span: *id002 +mcuboot_secondary: + address: 0x80000 + end_address: 0xf0000 + placement: + after: + - mcuboot_primary + align: + start: 0x8000 + region: flash_primary + share_size: + - mcuboot_primary + size: 0x70000 +mcuboot_sram: + address: 0x20000000 + end_address: 0x20008000 + orig_span: &id003 + - tfm_sram + region: sram_primary + size: 0x8000 + span: *id003 +nonsecure_storage: + address: 0xf8000 + end_address: 0xfa000 + orig_span: &id004 + - settings_storage + region: flash_primary + size: 0x2000 + span: *id004 +nrf_modem_lib_ctrl: + address: 0x20008000 + end_address: 0x200084e8 + inside: + - sram_nonsecure + placement: + after: + - tfm_sram + - start + region: sram_primary + size: 0x4e8 +nrf_modem_lib_rx: + address: 0x2000a568 + end_address: 0x2000c568 + inside: + - sram_nonsecure + placement: + after: + - nrf_modem_lib_tx + region: sram_primary + size: 0x2000 +nrf_modem_lib_sram: + address: 0x20008000 + end_address: 0x2000c568 + orig_span: &id005 + - nrf_modem_lib_ctrl + - nrf_modem_lib_tx + - nrf_modem_lib_rx + region: sram_primary + size: 0x4568 + span: *id005 +nrf_modem_lib_tx: + address: 0x200084e8 + end_address: 0x2000a568 + inside: + - sram_nonsecure + placement: + after: + - nrf_modem_lib_ctrl + region: sram_primary + size: 0x2080 +otp: + address: 0xff8108 + end_address: 0xff83fc + region: otp + size: 0x2f4 +settings_storage: + address: 0xf8000 + end_address: 0xfa000 + inside: + - nonsecure_storage + placement: + align: + start: 0x8000 + before: + - end + region: flash_primary + size: 0x2000 +sram_nonsecure: + address: 0x20008000 + end_address: 0x20040000 + orig_span: &id006 + - sram_primary + - nrf_modem_lib_ctrl + - nrf_modem_lib_tx + - nrf_modem_lib_rx + region: sram_primary + size: 0x38000 + span: *id006 +sram_primary: + address: 0x2000c568 + end_address: 0x20040000 + region: sram_primary + size: 0x33a98 +sram_secure: + address: 0x20000000 + end_address: 0x20008000 + orig_span: &id007 + - tfm_sram + region: sram_primary + size: 0x8000 + span: *id007 +tfm: + address: 0x10200 + end_address: 0x18000 + inside: + - mcuboot_primary_app + placement: + before: + - app + region: flash_primary + size: 0x7e00 +tfm_nonsecure: + address: 0x18000 + end_address: 0x80000 + orig_span: &id008 + - app + region: flash_primary + size: 0x68000 + span: *id008 +tfm_secure: + address: 0x10000 + end_address: 0x18000 + orig_span: &id009 + - mcuboot_pad + - tfm + region: flash_primary + size: 0x8000 + span: *id009 +tfm_sram: + address: 0x20000000 + end_address: 0x20008000 + inside: + - sram_secure + placement: + after: + - start + region: sram_primary + size: 0x8000 diff --git a/prj.conf b/prj.conf index 5ff1089..3d64a6f 100644 --- a/prj.conf +++ b/prj.conf @@ -20,7 +20,8 @@ CONFIG_GOLIOTH_LOG_LEVEL_ERR=y CONFIG_GOLIOTH_SAMPLE_COMMON=y # Configure Golioth SDK dependencies -CONFIG_EVENTFD_MAX=14 +CONFIG_ZVFS_EVENTFD_MAX=14 +CONFIG_ZVFS_OPEN_MAX=23 CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=1536 CONFIG_MBEDTLS_ENABLE_HEAP=y CONFIG_MBEDTLS_HEAP_SIZE=10240 @@ -28,7 +29,6 @@ CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=2048 CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=2048 CONFIG_NETWORKING=y CONFIG_NET_IPV4=y -CONFIG_POSIX_MAX_FDS=23 # Application CONFIG_MAIN_STACK_SIZE=4096 @@ -49,7 +49,7 @@ CONFIG_REBOOT=y # The rest of the runtime credentials config CONFIG_SETTINGS=y CONFIG_SETTINGS_RUNTIME=y -CONFIG_GOLIOTH_SAMPLE_PSK_SETTINGS=y +CONFIG_GOLIOTH_SAMPLE_SETTINGS=y CONFIG_GOLIOTH_SAMPLE_SETTINGS_AUTOLOAD=y CONFIG_GOLIOTH_SAMPLE_SETTINGS_SHELL=y @@ -69,6 +69,3 @@ CONFIG_MODBUS_ROLE_CLIENT=y CONFIG_MODBUS_FP_EXTENSIONS=n CONFIG_LOG_BUFFER_SIZE=2048 - -# Firmware version used in DFU process -CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION="1.0.0" diff --git a/src/app_rpc.c b/src/app_rpc.c index fd1daaf..d379eee 100644 --- a/src/app_rpc.c +++ b/src/app_rpc.c @@ -5,7 +5,6 @@ */ #include -#include LOG_MODULE_REGISTER(app_rpc, LOG_LEVEL_DBG); #include diff --git a/src/app_sensors.c b/src/app_sensors.c index fed4a07..1435b56 100644 --- a/src/app_sensors.c +++ b/src/app_sensors.c @@ -9,6 +9,7 @@ LOG_MODULE_REGISTER(app_sensors, LOG_LEVEL_DBG); #include #include +#include #include #include #include @@ -19,6 +20,7 @@ LOG_MODULE_REGISTER(app_sensors, LOG_LEVEL_DBG); #ifdef CONFIG_LIB_OSTENTUS #include +static const struct device *o_dev = DEVICE_DT_GET_ANY(golioth_ostentus); #endif #ifdef CONFIG_ALUDEL_BATTERY_MONITOR @@ -123,13 +125,12 @@ void app_sensors_init(void) } /* Callback for LightDB Stream */ -static void async_error_handler(struct golioth_client *client, - const struct golioth_response *response, - const char *path, +static void async_error_handler(struct golioth_client *client, enum golioth_status status, + const struct golioth_coap_rsp_code *coap_rsp_code, const char *path, void *arg) { - if (response->status != GOLIOTH_OK) { - LOG_ERR("Async task failed: %d", response->status); + if (status != GOLIOTH_OK) { + LOG_ERR("Async task failed: %d", status); return; } } @@ -143,11 +144,12 @@ void app_sensors_read_and_stream(void) static uint8_t qm30vt2_unit_id = 1; struct qm30vt2_measurement meas = {0}; + /* Golioth custom hardware for demos */ IF_ENABLED(CONFIG_ALUDEL_BATTERY_MONITOR, ( read_and_report_battery(client); IF_ENABLED(CONFIG_LIB_OSTENTUS, ( - slide_set(BATTERY_V, get_batt_v_str(), strlen(get_batt_v_str())); - slide_set(BATTERY_LVL, get_batt_lvl_str(), + ostentus_slide_set(o_dev, BATTERY_V, get_batt_v_str(), strlen(get_batt_v_str())); + ostentus_slide_set(o_dev, BATTERY_LVL, get_batt_lvl_str(), strlen(get_batt_lvl_str())); )); )); @@ -212,6 +214,7 @@ void app_sensors_read_and_stream(void) LOG_WRN("Device is not connected to Golioth, unable to send sensor data"); } + /* Golioth custom hardware for demos */ IF_ENABLED(CONFIG_LIB_OSTENTUS, ( /* Update slide values on Ostentus * -values should be sent as strings @@ -219,91 +222,91 @@ void app_sensors_read_and_stream(void) */ snprintk(json_buf, sizeof(json_buf), "%.2f F", sensor_value_to_double(&meas.temp_f)); - slide_set(TEMP_F, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, TEMP_F, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.2f C", sensor_value_to_double(&meas.temp_c)); - slide_set(TEMP_C, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, TEMP_C, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.4f in/sec", sensor_value_to_double(&meas.z_vel_rms_in)); - slide_set(Z_VEL_RMS_IN, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_VEL_RMS_IN, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f mm/sec", sensor_value_to_double(&meas.z_vel_rms_mm)); - slide_set(Z_VEL_RMS_MM, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_VEL_RMS_MM, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.4f in/sec", sensor_value_to_double(&meas.x_vel_rms_in)); - slide_set(X_VEL_RMS_IN, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_VEL_RMS_IN, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f mm/sec", sensor_value_to_double(&meas.x_vel_rms_mm)); - slide_set(X_VEL_RMS_MM, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_VEL_RMS_MM, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f G", sensor_value_to_double(&meas.z_acc_peak)); - slide_set(Z_ACC_PEAK, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_ACC_PEAK, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f G", sensor_value_to_double(&meas.x_acc_peak)); - slide_set(X_ACC_PEAK, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_ACC_PEAK, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.1f Hz", sensor_value_to_double(&meas.z_vel_peak_freq)); - slide_set(Z_VEL_FREQ, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_VEL_FREQ, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.1f Hz", sensor_value_to_double(&meas.x_vel_peak_freq)); - slide_set(X_VEL_FREQ, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_VEL_FREQ, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f G", sensor_value_to_double(&meas.z_acc_rms)); - slide_set(Z_ACC_RMS, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_ACC_RMS, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f G", sensor_value_to_double(&meas.x_acc_rms)); - slide_set(X_ACC_RMS, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_ACC_RMS, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f", sensor_value_to_double(&meas.z_acc_kurt)); - slide_set(Z_ACC_KURT, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_ACC_KURT, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f", sensor_value_to_double(&meas.x_acc_kurt)); - slide_set(X_ACC_KURT, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_ACC_KURT, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f", sensor_value_to_double(&meas.z_acc_cf)); - slide_set(Z_ACC_CF, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_ACC_CF, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f", sensor_value_to_double(&meas.x_acc_cf)); - slide_set(X_ACC_CF, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_ACC_CF, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.4f in/sec", sensor_value_to_double(&meas.z_vel_peak_in)); - slide_set(Z_VEL_PEAK_IN, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_VEL_PEAK_IN, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f mm/sec", sensor_value_to_double(&meas.z_vel_peak_mm)); - slide_set(Z_VEL_PEAK_MM, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_VEL_PEAK_MM, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.4f in/sec", sensor_value_to_double(&meas.x_vel_peak_in)); - slide_set(X_VEL_PEAK_IN, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_VEL_PEAK_IN, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f mm/sec", sensor_value_to_double(&meas.x_vel_peak_mm)); - slide_set(X_VEL_PEAK_MM, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_VEL_PEAK_MM, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f G", sensor_value_to_double(&meas.z_acc_rms_hf)); - slide_set(Z_ACC_RMS_HF, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, Z_ACC_RMS_HF, json_buf, strlen(json_buf)); snprintk(json_buf, sizeof(json_buf), "%.3f G", sensor_value_to_double(&meas.x_acc_rms_hf)); - slide_set(X_ACC_RMS_HF, json_buf, strlen(json_buf)); + ostentus_slide_set(o_dev, X_ACC_RMS_HF, json_buf, strlen(json_buf)); )); } diff --git a/src/app_settings.c b/src/app_settings.c index 0dbba5b..b7de2e3 100644 --- a/src/app_settings.c +++ b/src/app_settings.c @@ -14,7 +14,7 @@ LOG_MODULE_REGISTER(app_settings, LOG_LEVEL_DBG); static int32_t _loop_delay_s = 60; #define LOOP_DELAY_S_MAX 43200 -#define LOOP_DELAY_S_MIN 0 +#define LOOP_DELAY_S_MIN 1 int32_t get_loop_delay_s(void) { diff --git a/src/app_state.c b/src/app_state.c index a15d5aa..bad0e9a 100644 --- a/src/app_state.c +++ b/src/app_state.c @@ -24,12 +24,13 @@ uint32_t _example_int1 = 1; static struct golioth_client *client; static void async_handler(struct golioth_client *client, - const struct golioth_response *response, - const char *path, - void *arg) + enum golioth_status status, + const struct golioth_coap_rsp_code *coap_rsp_code, + const char *path, + void *arg) { - if (response->status != GOLIOTH_OK) { - LOG_WRN("Failed to set state: %d", response->status); + if (status != GOLIOTH_OK) { + LOG_WRN("Failed to set state: %d", status); return; } @@ -81,20 +82,16 @@ int app_state_update_actual(void) return err; } -static void app_state_desired_handler(struct golioth_client *client, - const struct golioth_response *response, - const char *path, - const uint8_t *payload, - size_t payload_size, +static void app_state_desired_handler(struct golioth_client *client, enum golioth_status status, + const struct golioth_coap_rsp_code *coap_rsp_code, + const char *path, const uint8_t *payload, size_t payload_size, void *arg) { int err = 0; int ret; - if (response->status != GOLIOTH_OK) { - LOG_ERR("Failed to receive '%s' endpoint: %d", - APP_STATE_DESIRED_ENDP, - response->status); + if (status != GOLIOTH_OK) { + LOG_ERR("Failed to receive '%s' endpoint: %d", APP_STATE_DESIRED_ENDP, status); return; } @@ -173,8 +170,11 @@ int app_state_observe(struct golioth_client *state_client) client = state_client; - err = golioth_lightdb_observe_async(client, APP_STATE_DESIRED_ENDP, - app_state_desired_handler, NULL); + err = golioth_lightdb_observe_async(client, + APP_STATE_DESIRED_ENDP, + GOLIOTH_CONTENT_TYPE_JSON, + app_state_desired_handler, + NULL); if (err) { LOG_WRN("failed to observe lightdb path: %d", err); return err; diff --git a/src/battery_monitor/battery.c b/src/battery_monitor/battery.c index 230938f..e77180f 100644 --- a/src/battery_monitor/battery.c +++ b/src/battery_monitor/battery.c @@ -310,13 +310,12 @@ void log_battery_data(void) LOG_INF("Battery measurement: voltage=%s, level=%s", get_batt_v_str(), get_batt_lvl_str()); } -static void async_error_handler(struct golioth_client *client, - const struct golioth_response *response, - const char *path, +static void async_error_handler(struct golioth_client *client, enum golioth_status status, + const struct golioth_coap_rsp_code *coap_rsp_code, const char *path, void *arg) { - if (response->status != GOLIOTH_OK) { - LOG_ERR("Failed to stream battery data: %d", response->status); + if (status != GOLIOTH_OK) { + LOG_ERR("Failed to stream battery data: %d", status); return; } } @@ -333,13 +332,8 @@ int stream_battery_data(struct golioth_client *client, struct battery_data *batt batt_data->battery_level_pptt % 100); /* LOG_DBG("%s", json_buf); */ - err = golioth_stream_set_async(client, - stream_endpoint, - GOLIOTH_CONTENT_TYPE_JSON, - json_buf, - strlen(json_buf), - async_error_handler, - NULL); + err = golioth_stream_set_async(client, stream_endpoint, GOLIOTH_CONTENT_TYPE_JSON, json_buf, + strlen(json_buf), async_error_handler, NULL); if (err) { LOG_ERR("Failed to send battery data to Golioth: %d", err); } @@ -371,6 +365,8 @@ int read_and_report_battery(struct golioth_client *client) LOG_ERR("Error streaming battery info"); return err; } + } else { + LOG_DBG("No connection available, skipping streaming battery info"); } return 0; diff --git a/src/main.c b/src/main.c index 566ed72..ff3a9b4 100644 --- a/src/main.c +++ b/src/main.c @@ -8,6 +8,7 @@ #include LOG_MODULE_REGISTER(golioth_modbus_vibration_monitor, LOG_LEVEL_DBG); +#include #include "app_rpc.h" #include "app_settings.h" #include "app_state.h" @@ -23,6 +24,8 @@ LOG_MODULE_REGISTER(golioth_modbus_vibration_monitor, LOG_LEVEL_DBG); #endif #ifdef CONFIG_LIB_OSTENTUS #include +#include +static const struct device *o_dev = DEVICE_DT_GET_ANY(golioth_ostentus); #endif #ifdef CONFIG_ALUDEL_BATTERY_MONITOR #include "battery_monitor/battery.h" @@ -34,8 +37,9 @@ LOG_MODULE_REGISTER(golioth_modbus_vibration_monitor, LOG_LEVEL_DBG); #include #endif -/* Current firmware version; update in prj.conf or via build argument */ -static const char *_current_version = CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION; +/* Current firmware version; update in VERSION */ +static const char *_current_version = + STRINGIFY(APP_VERSION_MAJOR) "." STRINGIFY(APP_VERSION_MINOR) "." STRINGIFY(APP_PATCHLEVEL); static struct golioth_client *client; K_SEM_DEFINE(connected, 0, 1); @@ -109,7 +113,7 @@ static void lte_handler(const struct lte_lc_evt *const evt) (evt->nw_reg_status == LTE_LC_NW_REG_REGISTERED_ROAMING)) { /* Change the state of the Internet LED on Ostentus */ - IF_ENABLED(CONFIG_LIB_OSTENTUS, (led_internet_set(1);)); + IF_ENABLED(CONFIG_LIB_OSTENTUS, (ostentus_led_internet_set(o_dev, 1);)); if (!client) { /* Create and start a Golioth Client */ @@ -157,7 +161,7 @@ void golioth_connection_led_set(uint8_t state) gpio_pin_set_dt(&golioth_led, pin_state); #endif /* #if DT_NODE_EXISTS(DT_ALIAS(golioth_led)) */ /* Change the state of the Golioth LED on Ostentus */ - IF_ENABLED(CONFIG_LIB_OSTENTUS, (led_golioth_set(pin_state);)); + IF_ENABLED(CONFIG_LIB_OSTENTUS, (ostentus_led_golioth_set(o_dev, pin_state);)); } int main(void) @@ -169,16 +173,26 @@ int main(void) LOG_DBG("Started Modbus Vibration Monitor app"); - LOG_INF("Firmware version: %s", CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION); + LOG_INF("Firmware version: %s", _current_version); IF_ENABLED(CONFIG_MODEM_INFO, (log_modem_firmware_version();)); IF_ENABLED(CONFIG_LIB_OSTENTUS, ( - /* Clear Ostentus memory */ - clear_memory(); + /* Reset Ostentus and pause for reboot */ + ostentus_reset(o_dev); + k_msleep(300); + + /* Read firmware version from faceplate */ + char *o_version = (char *)calloc(32, sizeof(char)); + + ostentus_version_get(o_dev, o_version, 32); + LOG_INF("Ostentus reports firmware version: %s", o_version); + free(o_version); + /* Update Ostentus LEDS using bitmask (Power On and Battery) */ - led_bitmask(LED_POW | LED_BAT); + ostentus_led_bitmask(o_dev, LED_POW | LED_BAT); + /* Show Golioth Logo on Ostentus ePaper screen */ - show_splash(); + ostentus_show_splash(o_dev); )); /* Get system thread id so loop delay change event can wake main */ @@ -201,7 +215,7 @@ int main(void) */ LOG_INF("Connecting to LTE, this may take some time..."); - lte_lc_init_and_connect_async(lte_handler); + lte_lc_connect_async(lte_handler); #else /* If nRF9160 is not used, start the Golioth Client and block until connected */ @@ -242,43 +256,49 @@ int main(void) * - use the enum in app_sensors.h to add new keys * - values are updated using these keys (see app_sensors.c) */ - slide_add(TEMP_F, LABEL_TEMP, strlen(LABEL_TEMP)); - slide_add(TEMP_C, LABEL_TEMP, strlen(LABEL_TEMP)); - slide_add(Z_VEL_RMS_IN, LABEL_Z_VEL_RMS, strlen(LABEL_Z_VEL_RMS)); - slide_add(Z_VEL_RMS_MM, LABEL_Z_VEL_RMS, strlen(LABEL_Z_VEL_RMS)); - slide_add(X_VEL_RMS_IN, LABEL_X_VEL_RMS, strlen(LABEL_X_VEL_RMS)); - slide_add(X_VEL_RMS_MM, LABEL_X_VEL_RMS, strlen(LABEL_X_VEL_RMS)); - slide_add(Z_ACC_PEAK, LABEL_Z_ACC_PEAK, strlen(LABEL_Z_ACC_PEAK)); - slide_add(X_ACC_PEAK, LABEL_X_ACC_PEAK, strlen(LABEL_X_ACC_PEAK)); - slide_add(Z_VEL_FREQ, LABEL_Z_VEL_FREQ, strlen(LABEL_Z_VEL_FREQ)); - slide_add(X_VEL_FREQ, LABEL_X_VEL_FREQ, strlen(LABEL_X_VEL_FREQ)); - slide_add(Z_ACC_RMS, LABEL_Z_ACC_RMS, strlen(LABEL_Z_ACC_RMS)); - slide_add(X_ACC_RMS, LABEL_X_ACC_RMS, strlen(LABEL_X_ACC_RMS)); - slide_add(Z_ACC_KURT, LABEL_Z_ACC_KURT, strlen(LABEL_Z_ACC_KURT)); - slide_add(X_ACC_KURT, LABEL_X_ACC_KURT, strlen(LABEL_X_ACC_KURT)); - slide_add(Z_ACC_CF, LABEL_Z_ACC_CF, strlen(LABEL_Z_ACC_CF)); - slide_add(X_ACC_CF, LABEL_X_ACC_CF, strlen(LABEL_X_ACC_CF)); - slide_add(Z_VEL_PEAK_IN, LABEL_Z_VEL_PEAK, strlen(LABEL_Z_VEL_PEAK)); - slide_add(Z_VEL_PEAK_MM, LABEL_Z_VEL_PEAK, strlen(LABEL_Z_VEL_PEAK)); - slide_add(X_VEL_PEAK_IN, LABEL_X_VEL_PEAK, strlen(LABEL_X_VEL_PEAK)); - slide_add(X_VEL_PEAK_MM, LABEL_X_VEL_PEAK, strlen(LABEL_X_VEL_PEAK)); - slide_add(Z_ACC_RMS_HF, LABEL_Z_ACC_RMS_HF, strlen(LABEL_Z_ACC_RMS_HF)); - slide_add(X_ACC_RMS_HF, LABEL_X_ACC_RMS_HF, strlen(LABEL_X_ACC_RMS_HF)); + ostentus_slide_add(o_dev, TEMP_F, LABEL_TEMP, strlen(LABEL_TEMP)); + ostentus_slide_add(o_dev, TEMP_C, LABEL_TEMP, strlen(LABEL_TEMP)); + ostentus_slide_add(o_dev, Z_VEL_RMS_IN, LABEL_Z_VEL_RMS, strlen(LABEL_Z_VEL_RMS)); + ostentus_slide_add(o_dev, Z_VEL_RMS_MM, LABEL_Z_VEL_RMS, strlen(LABEL_Z_VEL_RMS)); + ostentus_slide_add(o_dev, X_VEL_RMS_IN, LABEL_X_VEL_RMS, strlen(LABEL_X_VEL_RMS)); + ostentus_slide_add(o_dev, X_VEL_RMS_MM, LABEL_X_VEL_RMS, strlen(LABEL_X_VEL_RMS)); + ostentus_slide_add(o_dev, Z_ACC_PEAK, LABEL_Z_ACC_PEAK, strlen(LABEL_Z_ACC_PEAK)); + ostentus_slide_add(o_dev, X_ACC_PEAK, LABEL_X_ACC_PEAK, strlen(LABEL_X_ACC_PEAK)); + ostentus_slide_add(o_dev, Z_VEL_FREQ, LABEL_Z_VEL_FREQ, strlen(LABEL_Z_VEL_FREQ)); + ostentus_slide_add(o_dev, X_VEL_FREQ, LABEL_X_VEL_FREQ, strlen(LABEL_X_VEL_FREQ)); + ostentus_slide_add(o_dev, Z_ACC_RMS, LABEL_Z_ACC_RMS, strlen(LABEL_Z_ACC_RMS)); + ostentus_slide_add(o_dev, X_ACC_RMS, LABEL_X_ACC_RMS, strlen(LABEL_X_ACC_RMS)); + ostentus_slide_add(o_dev, Z_ACC_KURT, LABEL_Z_ACC_KURT, strlen(LABEL_Z_ACC_KURT)); + ostentus_slide_add(o_dev, X_ACC_KURT, LABEL_X_ACC_KURT, strlen(LABEL_X_ACC_KURT)); + ostentus_slide_add(o_dev, Z_ACC_CF, LABEL_Z_ACC_CF, strlen(LABEL_Z_ACC_CF)); + ostentus_slide_add(o_dev, X_ACC_CF, LABEL_X_ACC_CF, strlen(LABEL_X_ACC_CF)); + ostentus_slide_add(o_dev, Z_VEL_PEAK_IN, LABEL_Z_VEL_PEAK, strlen(LABEL_Z_VEL_PEAK)); + ostentus_slide_add(o_dev, Z_VEL_PEAK_MM, LABEL_Z_VEL_PEAK, strlen(LABEL_Z_VEL_PEAK)); + ostentus_slide_add(o_dev, X_VEL_PEAK_IN, LABEL_X_VEL_PEAK, strlen(LABEL_X_VEL_PEAK)); + ostentus_slide_add(o_dev, X_VEL_PEAK_MM, LABEL_X_VEL_PEAK, strlen(LABEL_X_VEL_PEAK)); + ostentus_slide_add(o_dev, Z_ACC_RMS_HF, LABEL_Z_ACC_RMS_HF, strlen(LABEL_Z_ACC_RMS_HF)); + ostentus_slide_add(o_dev, X_ACC_RMS_HF, LABEL_X_ACC_RMS_HF, strlen(LABEL_X_ACC_RMS_HF)); IF_ENABLED(CONFIG_ALUDEL_BATTERY_MONITOR, ( - slide_add(BATTERY_V, LABEL_BATTERY, strlen(LABEL_BATTERY)); - slide_add(BATTERY_LVL, LABEL_BATTERY, strlen(LABEL_BATTERY)); + ostentus_slide_add(o_dev, + BATTERY_V, + LABEL_BATTERY, + strlen(LABEL_BATTERY)); + ostentus_slide_add(o_dev, + BATTERY_LVL, + LABEL_BATTERY, + strlen(LABEL_BATTERY)); )); - slide_add(FIRMWARE, LABEL_FIRMWARE, strlen(LABEL_FIRMWARE)); + ostentus_slide_add(o_dev, FIRMWARE, LABEL_FIRMWARE, strlen(LABEL_FIRMWARE)); - /* Set the title ofthe Ostentus summary slide (optional) */ - summary_title(SUMMARY_TITLE, strlen(SUMMARY_TITLE)); + /* Set the title of the Ostentus summary slide (optional) */ + ostentus_summary_title(o_dev, SUMMARY_TITLE, strlen(SUMMARY_TITLE)); /* Update the Firmware slide with the firmware version */ - slide_set(FIRMWARE, CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION, - strlen(CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION)); + ostentus_slide_set(o_dev, FIRMWARE, (char *)_current_version, + strlen(_current_version)); /* Start Ostentus slideshow with 30 second delay between slides */ - slideshow(30000); + ostentus_slideshow(o_dev, 30000); )); while (true) { diff --git a/sysbuild.conf b/sysbuild.conf new file mode 100644 index 0000000..47f00ff --- /dev/null +++ b/sysbuild.conf @@ -0,0 +1 @@ +SB_CONFIG_BOOTLOADER_MCUBOOT=y diff --git a/west.yml b/west.yml index 9d041e1..93c41ef 100644 --- a/west.yml +++ b/west.yml @@ -7,7 +7,7 @@ manifest: projects: - name: golioth path: modules/lib/golioth-firmware-sdk - revision: v0.12.2 + revision: v0.17.0 url: https://github.com/golioth/golioth-firmware-sdk.git west-commands: scripts/west-commands.yml submodules: true @@ -24,6 +24,7 @@ manifest: - mcuboot - net-tools - nrfxlib + - oberon-psa-crypto - qcbor - segger - tfm-mcuboot @@ -33,17 +34,17 @@ manifest: - name: golioth-zephyr-boards path: deps/modules/lib/golioth-boards - revision: v1.1.1 + revision: v2.0.1 url: https://github.com/golioth/golioth-zephyr-boards - name: libostentus path: deps/modules/lib/libostentus - revision: v1.0.0 + revision: v2.0.0 url: https://github.com/golioth/libostentus - name: zephyr-network-info path: deps/modules/lib/network-info - revision: v1.1.1 + revision: v1.2.0 url: https://github.com/golioth/zephyr-network-info self: