From 3a9aa67edfa9edc57015bd6dbb78cb0da7d92eb1 Mon Sep 17 00:00:00 2001 From: a1257330 Date: Mon, 11 May 2026 15:36:52 +0530 Subject: [PATCH 1/3] ti: add TI SimpleLink Wi-SUN FAN platform support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce the TI CC13xx/CC13x4 Wi-SUN FAN family as a supported csmp-agent-lib target. The implementation uses SDK-only prebuilt libraries (no external source repositories required); all Wi-SUN MAC, Nanostack, and TLS symbols are supplied by the SDK's maclib_secure, wisun_rn_mbed_ns_tls_lib, and wisun_ncp_lib archives, selected automatically by SysConfig via ti_utils_build_linker.cmd.genlibs. Five LaunchPad variants are supported and built in a single ./build.sh ti_simplelink_wisun invocation by a BOARD_DIRS wildcard over Vendors/TI/*/csmp_example_tirf/freertos/ticlang/. Adding a new board requires only placing a directory there. osal/ti_simplelink_wisun: - osal_ti_simplelink_wisun.c: FreeRTOS/Nanostack OSAL implementation; socket, thread, mutex, timer, and NV-storage bindings for CC13xx - osal_platform_types.h: platform type definitions and mbed_tracef forward declaration; guards main() in CsmpAgentLib_sample.c via OSAL_TI_SIMPLELINK_WISUN so the library compiles without a duplicate entry point when linked into the board firmware - ti_simplelink_wisun.mak: SDK include paths for device headers, FreeRTOS portable layer, Nanostack public API, mbedTLS, and NVOCMP; supports CC13X4, CC13X2X7, CC13X2, and CC13X1 via DEVICE_FAMILY sample/tlvs/ti_simplelink_wisun_tlvs.c: - TI-specific TLV callbacks: wpanstatus, RPL, interface metrics, firmware image info, and hardware description; reads live data from Nanostack ws_management_api and nwk_stats_api - g_tx_power_dbm: file-scoped variable set by application.c from CONFIG_TRANSMIT_POWER; extern declaration removed from the shared CsmpAgentLib_sample_tlvs.h to keep platform-specific symbols out of the common header Vendors/TI/application (shared across all boards): - main.c / application.c: Wi-SUN border router node application; initialises mesh_system, opens UDP socket to NMS, starts CSMP agent task; sets g_tx_power_dbm from SysConfig CONFIG_TRANSMIT_POWER - mbed_config_app.h / advanced_config.h: Wi-SUN PHY configuration (FAN 1.1, North America 915 MHz, FH mode) - wisun_certificates.h / ws_router_fan_cert_certificates.h: device and CA certificate buffers for WPA2 network authentication - defines/router.opts: compile-time CSMP options; NMS address set via -DCSMP_AGENT_NMS_ADDRESS; device type OPENCSMP Vendors/TI//csmp_example_tirf: - Five board configurations: LP_CC1312R7, LP_CC1352P7_1 (Cortex-M4F, CC13X2X7) and LP_EM_CC1314R10, LP_EM_CC1354P10_1, LP_EM_CC1354P10_6 (Cortex-M33, CC13X4); each board carries only its board-specific csmp_example.syscfg (--board target) and ticlang/makefile (CPU flags, device include paths, linker command file) - M4F boards: -mcpu=cortex-m4 -march=armv7e-m -mfpu=fpv4-sp-d16, cc13x2x7_cc26x2x7.cmd, ARM_CM4F FreeRTOS port - M33F boards: -mcpu=cortex-m33 -mfpu=fpv5-sp-d16, cc13x4_cc26x4.cmd, ARM_CM33/non_secure FreeRTOS port - genLibs: TI154Stack.genLibs = "none" removed from syscfg so SysConfig emits prebuilt .a paths into genlibs; build previously required compiling ~250 MAC/Nanostack/TLS source files from the wisunfan development repo — now resolved entirely from SDK ti_simplelink_wisun.target / sample/ti_simplelink_wisun.target: - Root library target builds csmp_agent_lib_ti_simplelink_wisun.a using TI ARM Clang; board target loops over BOARD_DIRS and invokes each board makefile with CSMP_AGENT_LIB_INSTALL_DIR and SDK paths - Tool paths (SYSCONFIG_TOOL, TICLANG_ARMCOMPILER) sourced from SDK's imports.mak; user edits SIMPLELINK_SDK_LINUX in two .target files and imports.mak once per machine Vendors/TI/README.md: - Complete setup guide covering network architecture (Linux Host container + wfantund container two-container model), build configuration, TPD pre-provisioning, border router setup, flashing, IPv6 routing, and end-to-end verification build.sh / sample/Makefile / Makefile: - sample/Makefile clean: invoke ti_simplelink_wisun.target clean to remove board .obj, .hex, .out, and SysConfig-generated files - Board makefile clean uses *.obj glob instead of $(OBJECTS) to catch stale artifacts from previous full-source builds Signed-off-by: Aryan Arora --- Makefile | 6 +- .../freertos/csmp_example.syscfg | 208 ++ .../freertos/ticlang/Release.mak | 4 + .../freertos/ticlang/SecureBoot.mak | 8 + .../freertos/ticlang/cc13x2x7_cc26x2x7.cmd | 172 ++ .../freertos/ticlang/makefile | 556 +++++ .../freertos/csmp_example.syscfg | 208 ++ .../freertos/ticlang/Release.mak | 4 + .../freertos/ticlang/SecureBoot.mak | 8 + .../freertos/ticlang/cc13x2x7_cc26x2x7.cmd | 142 ++ .../freertos/ticlang/makefile | 556 +++++ .../freertos/csmp_example.syscfg | 208 ++ .../freertos/ticlang/Release.mak | 4 + .../freertos/ticlang/SecureBoot.mak | 8 + .../freertos/ticlang/cc13x4_cc26x4.cmd | 172 ++ .../freertos/ticlang/makefile | 552 +++++ .../freertos/csmp_example.syscfg | 208 ++ .../freertos/ticlang/Release.mak | 4 + .../freertos/ticlang/SecureBoot.mak | 8 + .../freertos/ticlang/cc13x4_cc26x4.cmd | 172 ++ .../freertos/ticlang/makefile | 552 +++++ .../freertos/csmp_example.syscfg | 208 ++ .../freertos/ticlang/Release.mak | 4 + .../freertos/ticlang/SecureBoot.mak | 8 + .../freertos/ticlang/cc13x4_cc26x4.cmd | 172 ++ .../freertos/ticlang/makefile | 552 +++++ Vendors/TI/README.md | 610 ++++++ Vendors/TI/application/advanced_config.h | 92 + Vendors/TI/application/application.c | 1809 +++++++++++++++++ Vendors/TI/application/defines/router.opts | 50 + Vendors/TI/application/main.c | 343 ++++ .../mbed_config-868mhz-fixed-chan.h | 314 +++ .../mbed_config-916mhz-fixed-chan.h | 314 +++ Vendors/TI/application/mbed_config-916mhz.h | 314 +++ Vendors/TI/application/mbed_config_app.h | 28 + Vendors/TI/application/mbed_config_app_cert.h | 28 + Vendors/TI/application/mbedtls_wisun_config.h | 203 ++ Vendors/TI/application/wisun_certificates.h | 139 ++ .../ws_router_fan_cert_certificates.h | 153 ++ build.sh | 1 + osal/osal.h | 3 + .../ti_simplelink_wisun/osal_platform_types.h | 150 ++ .../osal_ti_simplelink_wisun.c | 621 ++++++ .../ti_simplelink_wisun.mak | 71 + sample/CsmpAgentLib_sample.c | 2 + sample/Makefile | 5 + sample/tlvs/ti_simplelink_wisun_tlvs.c | 1226 +++++++++++ src/coap/coapclient.c | 5 +- ti_simplelink_wisun.target | 97 + 49 files changed, 11279 insertions(+), 3 deletions(-) mode change 100755 => 100644 Makefile create mode 100644 Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg create mode 100644 Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/Release.mak create mode 100644 Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak create mode 100644 Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd create mode 100644 Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile create mode 100644 Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg create mode 100644 Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/Release.mak create mode 100644 Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak create mode 100644 Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd create mode 100644 Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile create mode 100644 Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg create mode 100644 Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/Release.mak create mode 100644 Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak create mode 100644 Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd create mode 100644 Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile create mode 100644 Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg create mode 100644 Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/Release.mak create mode 100644 Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak create mode 100644 Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd create mode 100644 Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile create mode 100644 Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg create mode 100644 Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/Release.mak create mode 100644 Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak create mode 100644 Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd create mode 100644 Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile create mode 100644 Vendors/TI/README.md create mode 100644 Vendors/TI/application/advanced_config.h create mode 100644 Vendors/TI/application/application.c create mode 100644 Vendors/TI/application/defines/router.opts create mode 100644 Vendors/TI/application/main.c create mode 100644 Vendors/TI/application/mbed_config-868mhz-fixed-chan.h create mode 100644 Vendors/TI/application/mbed_config-916mhz-fixed-chan.h create mode 100644 Vendors/TI/application/mbed_config-916mhz.h create mode 100644 Vendors/TI/application/mbed_config_app.h create mode 100644 Vendors/TI/application/mbed_config_app_cert.h create mode 100644 Vendors/TI/application/mbedtls_wisun_config.h create mode 100644 Vendors/TI/application/wisun_certificates.h create mode 100644 Vendors/TI/application/ws_router_fan_cert_certificates.h create mode 100644 osal/ti_simplelink_wisun/osal_platform_types.h create mode 100644 osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c create mode 100644 osal/ti_simplelink_wisun/ti_simplelink_wisun.mak mode change 100755 => 100644 sample/Makefile create mode 100644 sample/tlvs/ti_simplelink_wisun_tlvs.c create mode 100644 ti_simplelink_wisun.target diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 index 112d230..b487bf1 --- a/Makefile +++ b/Makefile @@ -8,9 +8,10 @@ # linux - POSIX Linux # freertos - FreeRTOS # efr32_wisun - EFR32 with Wi-SUN stack and FreeRTOS +# ti_simplelink_wisun - TI CC13xx Wi-SUN FAN + FreeRTOS # clean - clean binaries # -.PHONY : linux freertos efr32_wisun clean +.PHONY : linux freertos efr32_wisun ti_simplelink_wisun clean linux: make -f linux.target @@ -21,6 +22,9 @@ freertos: efr32_wisun: make -f efr32_wisun.target +ti_simplelink_wisun: + make -f ti_simplelink_wisun.target + clean: -rm -rf build/ -rm -f *.o diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg new file mode 100644 index 0000000..74ebe49 --- /dev/null +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2018, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +// @cliArgs --board /ti/boards/LP_CC1312R7 --rtos freertos + +/* + * csmp_example_tirf.syscfg + */ + +/* ======== RF ======== */ +var RF = scripting.addModule("/ti/drivers/RF"); + +/* If an antenna component exists, assign it to the RF instance */ +if (system.deviceData.board && system.deviceData.board.components.RF) { + RF.$hardware = system.deviceData.board.components.RF; +} + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var trng = TRNG.addInstance(); +trng.$name = "NANOSTACK_TRNG"; + + +/* ======== Watchdog ======== */ +var Watchdog = scripting.addModule("/ti/drivers/Watchdog", {}, false); +var Watchdog1 = Watchdog.addInstance(); + +/* ======== UART ======== */ +var UART = scripting.addModule("/ti/drivers/UART2", {}, false); +var UART2 = UART.addInstance(); +UART2.$hardware = system.deviceData.board.components.XDS110UART; +/* set UART Ringbuffer size to 128 bytes */ +UART2.rxRingBufferSize = 128; +UART2.txRingBufferSize = 128; + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var TRNG1 = TRNG.addInstance(); + +/* ======== NVS ======== */ +const deviceName = system.getScript("/ti/ti_wisunfan/ti_wisunfan_common.js").getLaunchPadFromDevice(); +var NVS = scripting.addModule("/ti/drivers/NVS"); // Add a NVS module +var NVS_INT = NVS.addInstance(); // Add an internal NVS module instance + +NVS_INT.$name = "CONFIG_NVSINTERNAL"; // Internal NVS +if (deviceName.includes("R7") || deviceName.includes("P7")) +{ + NVS_INT.internalFlash.regionBase = 0xA8000; +} +else if (deviceName.includes("R10") || deviceName.includes("P10")) +{ + NVS_INT.internalFlash.regionBase = 0xFC000; +} +else +{ + NVS_INT.internalFlash.regionBase = 0x52000; +} +NVS_INT.internalFlash.regionSize = 0x4000; + +/* ======== NVS External Flash (Off-Chip OAD secondary slot) ======== */ +var NVS_EXT = NVS.addInstance(); +NVS_EXT.$name = "CONFIG_NVSEXTERNAL"; +NVS_EXT.nvsType = "External"; +/* Bind to on-board SPI flash (MX25R8035F on LP_CC1352P7_1) — same pattern as coap_oad_offchip */ +if (system.deviceData.board && system.deviceData.board.components.SPI_FLASH) { + NVS_EXT.$hardware = system.deviceData.board.components.SPI_FLASH; + var NVSSPI25XDevice1 = NVS_EXT.externalFlash.spiFlashDevice; + NVSSPI25XDevice1.$name = "CONFIG_NVS_SPI_0"; + NVSSPI25XDevice1.chipSelectPinInstance.mode = "Output"; + NVSSPI25XDevice1.chipSelectPinInstance.$name = "CONFIG_GPIO_SPI_FLASH_CS"; + var SPI = NVSSPI25XDevice1.sharedSpiInstance; + SPI.$name = "Board_SPI_0"; + NVS_EXT.externalFlash.regionBase = 0; + NVS_EXT.externalFlash.verifyBufferSize = 64; + NVS_EXT.externalFlash.regionSize = 0xA8000; // 672 KB = imgtool --slot-size 0xA8000 +} + +/* ======== LED Red ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_R = LED.addInstance(); // Add a LED module instance for LED_R + +/* If a red LED component exists, assign it to the LED_R instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_RED) { + LED_R.$hardware = system.deviceData.board.components.LED_RED; +} +else +{ + LED_R.mode = "Output"; // Set the LED pin to output +} + +LED_R.$name = "CONFIG_LED_RED"; +LED_R.gpioPin.$name = "CONFIG_GPIO_RLED"; // Descriptive name for the LED_R GPIO +LED_R.gpioPin.mode = "Output"; + + +/* ======== LED Green ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_G = LED.addInstance(); // Add a LED module instance for LED_G + +/* If a red LED component exists, assign it to the LED_G instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_GREEN) { + LED_G.$hardware = system.deviceData.board.components.LED_GREEN; +} +else +{ + LED_G.mode = "Output"; // Set the LED pin to output +} + +LED_G.$name = "CONFIG_LED_GREEN"; +LED_G.gpioPin.$name = "CONFIG_GPIO_GLED"; // Descriptive name for the LED_G GPIO +LED_G.gpioPin.mode = "Output"; + +/* ======== Left Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_L = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_L + +/* If a BUTTON0 component exists, assign it to the BUTTON_L instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-1"]) { + BUTTON_L.$hardware = system.deviceData.board.components["BTN-1"]; +} + +BUTTON_L.$name = "CONFIG_BTN_LEFT"; +BUTTON_L.gpioPin.$name = "CONFIG_GPIO_BTN1"; // Descriptive name for the BUTTON_L GPIO +BUTTON_L.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== Right Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_R = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_R + +/* If a BUTTON0 component exists, assign it to the BUTTON_R instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-2"]) { + BUTTON_R.$hardware = system.deviceData.board.components["BTN-2"]; +} + +BUTTON_R.$name = "CONFIG_BTN_RIGHT"; +BUTTON_R.gpioPin.$name = "CONFIG_GPIO_BTN2"; // Descriptive name for the BUTTON_R GPIO +BUTTON_R.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== RF Design ======== */ +var rfDesign = scripting.addModule("ti/devices/radioconfig/rfdesign"); +const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings; +for(var setting in rfDesignSettings) +{ + rfDesign[setting] = rfDesignSettings[setting]; +} + +/* ======== TI-15.4 Stack ======== */ +var TI154Stack = scripting.addModule("/ti/ti_wisunfan/ti_wisunfan"); +if(rfDesignSettings.rfDesign !== undefined) +{ + TI154Stack.rfDesign = rfDesignSettings.rfDesign; +} + +TI154Stack.project = "routernode"; +TI154Stack.lockProject = true; +TI154Stack.rxOnIdle = true; +TI154Stack.secureLevel = "macSecure"; +TI154Stack.rapidJoin = false; + +/* ======== Device ======== */ +var device = scripting.addModule("ti/devices/CCFG"); +const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings; +for(var setting in ccfgSettings) +{ + device[setting] = ccfgSettings[setting]; +} +/* Note: CCFG is retained in the application build. When preparing the MCUBoot- + * compatible OTA image, use: tiarmobjcopy --remove-section=.ccfg to exclude it. + * MCUBoot owns the CCFG (at 0xAC000) — but we strip it at image-prep time, not here. */ + +/* genLibs omitted — SysConfig generates prebuilt library entries in ti_utils_build_linker.cmd.genlibs */ + +/* ======== RTOS ======== */ +const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); +FreeRTOS.heapSize = 0x8000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00000800; + +const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/Release.mak b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/Release.mak new file mode 100644 index 0000000..2e3e1f7 --- /dev/null +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/Release.mak @@ -0,0 +1,4 @@ + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak new file mode 100644 index 0000000..8d9ee62 --- /dev/null +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -0,0 +1,8 @@ +LFLAGS += -Wl,--define=SBL_ENABLE + + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex + $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin + $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd new file mode 100644 index 0000000..a79efc7 --- /dev/null +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd @@ -0,0 +1,172 @@ +/****************************************************************************** + + @file cc13x2x7_cc26x2x7.cmd + + @brief Linker configuration file + + Group: WCS LPC + Target Device: cc13xx_cc26xx + + ****************************************************************************** + + Copyright (c) 2016-2025, Texas Instruments Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ****************************************************************************** + + + *****************************************************************************/ + +/* Retain interrupt vector table variable */ +--retain "*(.resetVecs)" +/* Override default entry point. */ +#ifdef FREERTOS +--entry_point resetISR +--heap_size=0 /* minimize heap since we are using heap_4.c */ +#else +--entry_point ResetISR +#endif +/* Allow main() to take args */ +--args 0x8 +--stack_size=1600 +/* Suppress warnings and errors: */ +/* - 10063: Warning about entry point not being _c_int00 */ +/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */ +/* files compiled using Keil (ARM compiler) */ +--diag_suppress=10063,16011,16012,10247-D + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/****************************************************************************** + Memory Sizes + *****************************************************************************/ +#ifdef SBL_ENABLE +#define MCUBOOT_HEAD_SIZE 0x80 +#define ENTRY_SIZE 0x100 +#define MCUBOOT_RESERVED_TRAILER_SIZE 0x2000 + +#define PRIMARY_SLOT_BASE 0x0 +#define FLASH_BASE PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE + ENTRY_SIZE +#define FLASH_SIZE 0xA8000 - MCUBOOT_HEAD_SIZE - ENTRY_SIZE - MCUBOOT_RESERVED_TRAILER_SIZE + +#define ENTRY_START (PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE) +#define ENTRY_END (ENTRY_START + ENTRY_SIZE - 1) +#else +#define FLASH_BASE 0x00000000 +#define FLASH_SIZE 0xAE000 + +#define FLASH_LAST_BASE 0xAE000 +#define FLASH_LAST_SIZE 0x2000 +#endif + +#define RAM_BASE 0x20000000 +#define RAM_SIZE 0x24000 + +/****************************************************************************** + System memory map + *****************************************************************************/ +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = FLASH_BASE, length = FLASH_SIZE + +#ifdef SBL_ENABLE + /* MCUBoot requires reset vecs (program entry) be placed at start of image */ + ENTRY (RX) : origin = ENTRY_START, length = ENTRY_SIZE +#else + /* Last page of flash for CCFG */ + FLASH_LAST (RX) : origin = FLASH_LAST_BASE, length = FLASH_LAST_SIZE +#endif + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = RAM_BASE, length = RAM_SIZE +} + +/****************************************************************************** + Section allocation in memory + *****************************************************************************/ +SECTIONS +{ +#ifdef SBL_ENABLE + .resetVecs : > ENTRY + .text : > FLASH +#else + .resetVecs : > FLASH_BASE + .text : >> FLASH_LAST | FLASH +#endif + .const : > FLASH + .constdata : > FLASH + .rodata : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + .emb_text : > FLASH +#ifndef SBL_ENABLE + .ccfg : > FLASH_LAST (HIGH) +#endif + +#ifdef FREERTOS + .ramVecs : > RAM_BASE, type=NOINIT + .bss : >> SRAM + .data : > SRAM + .sysmem : > SRAM + .stack : > SRAM (HIGH) + .nonretenvar : > SRAM +#else + .bss : >> SRAM + GROUP > SRAM + { + .data + .ramVecs + .sysmem + .nonretenvar + } LOAD_END(heapStart) + + .stack : > SRAM (HIGH) LOAD_START(heapEnd) +#endif +} + +/* Create global constant that points to top of stack */ +/* CCS: Change stack size under Project Properties */ +__STACK_TOP = __stack + __STACK_SIZE; + +#ifdef TIRTOS7 +--symbol_map __TI_STACK_SIZE=__STACK_SIZE +--symbol_map __TI_STACK_BASE=__stack + +-u_c_int00 +#endif diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile new file mode 100644 index 0000000..8b8d824 --- /dev/null +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile @@ -0,0 +1,556 @@ +# SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR is passed in by the parent build +# (sample/ti_simplelink_wisun.target) or can be set on the command line: +# make SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR=/path/to/simplelink_cc13xx_cc26xx_sdk_8_32_00_07 +SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= + +-include $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/imports.mak + +CC = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +LNK = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +HEX = "$(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy" + +SYSCONFIG_GUI_TOOL = $(dir $(SYSCONFIG_TOOL))sysconfig_gui$(suffix $(SYSCONFIG_TOOL)) +SYSCFG_CMD_STUB = $(SYSCONFIG_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_GUI_CMD_STUB = $(SYSCONFIG_GUI_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_FILES := $(shell $(SYSCFG_CMD_STUB) --listGeneratedFiles --listReferencedFiles --output . ../../freertos/csmp_example.syscfg) + +SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) +SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) +SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) + +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +NAME = ns_node_csmp + +# Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), +# which will then be appended to below. +CONFIG := RELEASE +ifeq ($(CONFIG), RELEASE) + include Release.mak +else ifeq ($(CONFIG), SECUREBOOT) + include SecureBoot.mak +endif + +CFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X2X7 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM4F" \ + -gdwarf-3 \ + -mcpu=cortex-m4 \ + -march=armv7e-m \ + -mthumb \ + -mfloat-abi=hard \ + -mfpu=fpv4-sp-d16 + +CPPFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X2X7 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM4F" \ + -gdwarf-3 \ + -mcpu=cortex-m4 \ + -march=armv7e-m \ + -mthumb \ + -mfloat-abi=hard \ + -mfpu=fpv4-sp-d16 + +LFLAGS += "$(CSMP_AGENT_LIB_INSTALL_DIR)/build/debug/csmp_agent_lib_ti_simplelink_wisun.a" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel" \ + -Wl,--diag_suppress=10063 \ + -Wl,--define=FREERTOS \ + ti_utils_build_linker.cmd.genlibs \ + ../../freertos/ticlang/cc13x2x7_cc26x2x7.cmd \ + "-Wl,-m,$(NAME).map" \ + -Wl,--rom_model \ + -Wl,--warn_sections \ + "-L$(TICLANG_ARMCOMPILER)/lib" \ + -llibc.a + +# Note, the config-specific postbuild goal is defined in each {config}.mak file, +# which was included above based on the value of the CONFIG variable. +all: postbuild + +.INTERMEDIATE: syscfg +$(SYSCFG_FILES): syscfg + @ echo generation complete + +syscfg: ../../freertos/csmp_example.syscfg + @ echo Generating configuration files... + @ $(SYSCFG_CMD_STUB) --output $(@D) $< + + +# Helpful hint that the user needs to use a standalone SysConfig installation +$(SYSCONFIG_GUI_TOOL): + $(error $(dir $(SYSCONFIG_TOOL)) does not contain the GUI framework \ + necessary to launch the SysConfig GUI. Please set SYSCONFIG_TOOL \ + (in your SDK's imports.mak) to a standalone SysConfig installation \ + rather than one inside CCS) + +syscfg-gui: ../../freertos/csmp_example.syscfg $(SYSCONFIG_GUI_TOOL) + @ echo Opening SysConfig GUI + @ $(SYSCFG_GUI_CMD_STUB) $< + +define C_RULE +$(basename $(notdir $(1))).obj: $(1) $(SYSCFG_H_FILES) + @ echo Building $$@ + @ $(CC) $(CFLAGS) -c $$< -o $$@ +endef + +$(foreach c_file,$(SYSCFG_C_FILES),$(eval $(call C_RULE,$(c_file)))) + +application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_crc.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/crc.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_nvocmp.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/nvocmp.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/sample/tlvs/ti_simplelink_wisun_tlvs.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_osal_osal_ti_simplelink_wisun.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_fhss_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_platform_ns_trace.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform/ns_trace.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/wisun_tasklet.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_cfg.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level/mac_cfg.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_settings.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx/mac_settings.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_radio_configuration_mac_user_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards/mac_user_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_macTask.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/macTask.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/timac_fhss_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port_timers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port_timers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_mac_header_helper_functions.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/mac_header_helper_functions.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_sw_mac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mcps_sap.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mcps_sap.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_security_mib.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_security_mib.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mlme.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mlme.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_queue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_queue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_debug_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/debug_uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_src_ncp_ncp_base_mtd.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp/ncp_base_mtd.cpp $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +$(NAME).out: $(OBJECTS) + @ echo linking $@ + @ $(LNK) -Wl,-u,_c_int00 $(OBJECTS) $(LFLAGS) -o $(NAME).out + +$(NAME).hex: $(NAME).out + @ echo building $@ + @ $(HEX) -O ihex $? $@ + +clean: + @ echo Cleaning... + @ $(RM) *.obj *.out *.hex *.map *.d > $(DEVNULL) 2>&1 + @ $(RM) ti_devices_config.c ti_radio_config.c ti_radio_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_drivers_config.c ti_drivers_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_wisunfan_config.h ti_wisunfan_features.h > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_linker.cmd.genlibs ti_utils_build_linker.cmd.genmap > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_compiler.opt FreeRTOSConfig.h > $(DEVNULL) 2>&1 + @ $(RM) ti_freertos_config.c ti_freertos_portable_config.c syscfg_c.rov.xs > $(DEVNULL) 2>&1 diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg new file mode 100644 index 0000000..9f63e95 --- /dev/null +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2018, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +// @cliArgs --board /ti/boards/LP_CC1352P7_1 --rtos freertos + +/* + * csmp_example_tirf.syscfg + */ + +/* ======== RF ======== */ +var RF = scripting.addModule("/ti/drivers/RF"); + +/* If an antenna component exists, assign it to the RF instance */ +if (system.deviceData.board && system.deviceData.board.components.RF) { + RF.$hardware = system.deviceData.board.components.RF; +} + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var trng = TRNG.addInstance(); +trng.$name = "NANOSTACK_TRNG"; + + +/* ======== Watchdog ======== */ +var Watchdog = scripting.addModule("/ti/drivers/Watchdog", {}, false); +var Watchdog1 = Watchdog.addInstance(); + +/* ======== UART ======== */ +var UART = scripting.addModule("/ti/drivers/UART2", {}, false); +var UART2 = UART.addInstance(); +UART2.$hardware = system.deviceData.board.components.XDS110UART; +/* set UART Ringbuffer size to 128 bytes */ +UART2.rxRingBufferSize = 128; +UART2.txRingBufferSize = 128; + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var TRNG1 = TRNG.addInstance(); + +/* ======== NVS ======== */ +const deviceName = system.getScript("/ti/ti_wisunfan/ti_wisunfan_common.js").getLaunchPadFromDevice(); +var NVS = scripting.addModule("/ti/drivers/NVS"); // Add a NVS module +var NVS_INT = NVS.addInstance(); // Add an internal NVS module instance + +NVS_INT.$name = "CONFIG_NVSINTERNAL"; // Internal NVS +if (deviceName.includes("R7") || deviceName.includes("P7")) +{ + NVS_INT.internalFlash.regionBase = 0xA8000; +} +else if (deviceName.includes("R10") || deviceName.includes("P10")) +{ + NVS_INT.internalFlash.regionBase = 0xFC000; +} +else +{ + NVS_INT.internalFlash.regionBase = 0x52000; +} +NVS_INT.internalFlash.regionSize = 0x4000; + +/* ======== NVS External Flash (Off-Chip OAD secondary slot) ======== */ +var NVS_EXT = NVS.addInstance(); +NVS_EXT.$name = "CONFIG_NVSEXTERNAL"; +NVS_EXT.nvsType = "External"; +/* Bind to on-board SPI flash (MX25R8035F on LP_CC1352P7_1) — same pattern as coap_oad_offchip */ +if (system.deviceData.board && system.deviceData.board.components.SPI_FLASH) { + NVS_EXT.$hardware = system.deviceData.board.components.SPI_FLASH; + var NVSSPI25XDevice1 = NVS_EXT.externalFlash.spiFlashDevice; + NVSSPI25XDevice1.$name = "CONFIG_NVS_SPI_0"; + NVSSPI25XDevice1.chipSelectPinInstance.mode = "Output"; + NVSSPI25XDevice1.chipSelectPinInstance.$name = "CONFIG_GPIO_SPI_FLASH_CS"; + var SPI = NVSSPI25XDevice1.sharedSpiInstance; + SPI.$name = "Board_SPI_0"; + NVS_EXT.externalFlash.regionBase = 0; + NVS_EXT.externalFlash.verifyBufferSize = 64; + NVS_EXT.externalFlash.regionSize = 0xA8000; // 672 KB = imgtool --slot-size 0xA8000 +} + +/* ======== LED Red ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_R = LED.addInstance(); // Add a LED module instance for LED_R + +/* If a red LED component exists, assign it to the LED_R instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_RED) { + LED_R.$hardware = system.deviceData.board.components.LED_RED; +} +else +{ + LED_R.mode = "Output"; // Set the LED pin to output +} + +LED_R.$name = "CONFIG_LED_RED"; +LED_R.gpioPin.$name = "CONFIG_GPIO_RLED"; // Descriptive name for the LED_R GPIO +LED_R.gpioPin.mode = "Output"; + + +/* ======== LED Green ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_G = LED.addInstance(); // Add a LED module instance for LED_G + +/* If a red LED component exists, assign it to the LED_G instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_GREEN) { + LED_G.$hardware = system.deviceData.board.components.LED_GREEN; +} +else +{ + LED_G.mode = "Output"; // Set the LED pin to output +} + +LED_G.$name = "CONFIG_LED_GREEN"; +LED_G.gpioPin.$name = "CONFIG_GPIO_GLED"; // Descriptive name for the LED_G GPIO +LED_G.gpioPin.mode = "Output"; + +/* ======== Left Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_L = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_L + +/* If a BUTTON0 component exists, assign it to the BUTTON_L instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-1"]) { + BUTTON_L.$hardware = system.deviceData.board.components["BTN-1"]; +} + +BUTTON_L.$name = "CONFIG_BTN_LEFT"; +BUTTON_L.gpioPin.$name = "CONFIG_GPIO_BTN1"; // Descriptive name for the BUTTON_L GPIO +BUTTON_L.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== Right Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_R = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_R + +/* If a BUTTON0 component exists, assign it to the BUTTON_R instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-2"]) { + BUTTON_R.$hardware = system.deviceData.board.components["BTN-2"]; +} + +BUTTON_R.$name = "CONFIG_BTN_RIGHT"; +BUTTON_R.gpioPin.$name = "CONFIG_GPIO_BTN2"; // Descriptive name for the BUTTON_R GPIO +BUTTON_R.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== RF Design ======== */ +var rfDesign = scripting.addModule("ti/devices/radioconfig/rfdesign"); +const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings; +for(var setting in rfDesignSettings) +{ + rfDesign[setting] = rfDesignSettings[setting]; +} + +/* ======== TI-15.4 Stack ======== */ +var TI154Stack = scripting.addModule("/ti/ti_wisunfan/ti_wisunfan"); +if(rfDesignSettings.rfDesign !== undefined) +{ + TI154Stack.rfDesign = rfDesignSettings.rfDesign; +} + +TI154Stack.project = "routernode"; +TI154Stack.lockProject = true; +TI154Stack.rxOnIdle = true; +TI154Stack.secureLevel = "macSecure"; +TI154Stack.rapidJoin = false; + +/* ======== Device ======== */ +var device = scripting.addModule("ti/devices/CCFG"); +const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings; +for(var setting in ccfgSettings) +{ + device[setting] = ccfgSettings[setting]; +} +/* Note: CCFG is retained in the application build. When preparing the MCUBoot- + * compatible OTA image, use: tiarmobjcopy --remove-section=.ccfg to exclude it. + * MCUBoot owns the CCFG (at 0xAC000) — but we strip it at image-prep time, not here. */ + +/* genLibs omitted — SysConfig generates prebuilt library entries in ti_utils_build_linker.cmd.genlibs */ + +/* ======== RTOS ======== */ +const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); +FreeRTOS.heapSize = 0x8000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00000800; + +const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/Release.mak b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/Release.mak new file mode 100644 index 0000000..2e3e1f7 --- /dev/null +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/Release.mak @@ -0,0 +1,4 @@ + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak new file mode 100644 index 0000000..8d9ee62 --- /dev/null +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -0,0 +1,8 @@ +LFLAGS += -Wl,--define=SBL_ENABLE + + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex + $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin + $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd new file mode 100644 index 0000000..87dd30a --- /dev/null +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/cc13x2x7_cc26x2x7.cmd @@ -0,0 +1,142 @@ +/****************************************************************************** + + @file cc13x2x7_cc26x2x7.cmd + + @brief Linker configuration file + + Group: WCS LPC + $Target Device: DEVICES $ + + ****************************************************************************** + $License: BSD3 2016 $ + ****************************************************************************** + $Release Name: PACKAGE NAME $ + $Release Date: PACKAGE RELEASE DATE $ + *****************************************************************************/ + +/* Retain interrupt vector table variable */ +--retain "*(.resetVecs)" +/* Override default entry point. */ +#ifdef FREERTOS +--entry_point resetISR +--heap_size=0 /* minimize heap since we are using heap_4.c */ +#else +--entry_point ResetISR +#endif +/* Allow main() to take args */ +--args 0x8 +--stack_size=1600 +/* Suppress warnings and errors: */ +/* - 10063: Warning about entry point not being _c_int00 */ +/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */ +/* files compiled using Keil (ARM compiler) */ +--diag_suppress=10063,16011,16012,10247-D + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/****************************************************************************** + Memory Sizes + *****************************************************************************/ +#ifdef SBL_ENABLE +#define MCUBOOT_HEAD_SIZE 0x80 +#define ENTRY_SIZE 0x100 +#define MCUBOOT_RESERVED_TRAILER_SIZE 0x2000 + +#define PRIMARY_SLOT_BASE 0x0 +#define FLASH_BASE PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE + ENTRY_SIZE +#define FLASH_SIZE 0xA8000 - MCUBOOT_HEAD_SIZE - ENTRY_SIZE - MCUBOOT_RESERVED_TRAILER_SIZE + +#define ENTRY_START (PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE) +#define ENTRY_END (ENTRY_START + ENTRY_SIZE - 1) +#else +#define FLASH_BASE 0x00000000 +#define FLASH_SIZE 0xAE000 + +#define FLASH_LAST_BASE 0xAE000 +#define FLASH_LAST_SIZE 0x2000 +#endif + +#define RAM_BASE 0x20000000 +#define RAM_SIZE 0x24000 + +/****************************************************************************** + System memory map + *****************************************************************************/ +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = FLASH_BASE, length = FLASH_SIZE + +#ifdef SBL_ENABLE + /* MCUBoot requires reset vecs (program entry) be placed at start of image */ + ENTRY (RX) : origin = ENTRY_START, length = ENTRY_SIZE +#else + /* Last page of flash for CCFG */ + FLASH_LAST (RX) : origin = FLASH_LAST_BASE, length = FLASH_LAST_SIZE +#endif + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = RAM_BASE, length = RAM_SIZE +} + +/****************************************************************************** + Section allocation in memory + *****************************************************************************/ +SECTIONS +{ +#ifdef SBL_ENABLE + .resetVecs : > ENTRY + .text : > FLASH +#else + .resetVecs : > FLASH_BASE + .text : >> FLASH_LAST | FLASH +#endif + .const : > FLASH + .constdata : > FLASH + .rodata : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + .emb_text : > FLASH +#ifndef SBL_ENABLE + .ccfg : > FLASH_LAST (HIGH) +#endif + +#ifdef FREERTOS + .ramVecs : > RAM_BASE, type=NOINIT + .bss : >> SRAM + .data : > SRAM + .sysmem : > SRAM + .stack : > SRAM (HIGH) + .nonretenvar : > SRAM +#else + .bss : >> SRAM + GROUP > SRAM + { + .data + .ramVecs + .sysmem + .nonretenvar + } LOAD_END(heapStart) + + .stack : > SRAM (HIGH) LOAD_START(heapEnd) +#endif +} + +/* Create global constant that points to top of stack */ +/* CCS: Change stack size under Project Properties */ +__STACK_TOP = __stack + __STACK_SIZE; + +#ifdef TIRTOS7 +--symbol_map __TI_STACK_SIZE=__STACK_SIZE +--symbol_map __TI_STACK_BASE=__stack + +-u_c_int00 +#endif diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile new file mode 100644 index 0000000..8b8d824 --- /dev/null +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile @@ -0,0 +1,556 @@ +# SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR is passed in by the parent build +# (sample/ti_simplelink_wisun.target) or can be set on the command line: +# make SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR=/path/to/simplelink_cc13xx_cc26xx_sdk_8_32_00_07 +SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= + +-include $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/imports.mak + +CC = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +LNK = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +HEX = "$(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy" + +SYSCONFIG_GUI_TOOL = $(dir $(SYSCONFIG_TOOL))sysconfig_gui$(suffix $(SYSCONFIG_TOOL)) +SYSCFG_CMD_STUB = $(SYSCONFIG_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_GUI_CMD_STUB = $(SYSCONFIG_GUI_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_FILES := $(shell $(SYSCFG_CMD_STUB) --listGeneratedFiles --listReferencedFiles --output . ../../freertos/csmp_example.syscfg) + +SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) +SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) +SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) + +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +NAME = ns_node_csmp + +# Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), +# which will then be appended to below. +CONFIG := RELEASE +ifeq ($(CONFIG), RELEASE) + include Release.mak +else ifeq ($(CONFIG), SECUREBOOT) + include SecureBoot.mak +endif + +CFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X2X7 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM4F" \ + -gdwarf-3 \ + -mcpu=cortex-m4 \ + -march=armv7e-m \ + -mthumb \ + -mfloat-abi=hard \ + -mfpu=fpv4-sp-d16 + +CPPFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X2X7 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x2x7_cc26x2x7/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM4F" \ + -gdwarf-3 \ + -mcpu=cortex-m4 \ + -march=armv7e-m \ + -mthumb \ + -mfloat-abi=hard \ + -mfpu=fpv4-sp-d16 + +LFLAGS += "$(CSMP_AGENT_LIB_INSTALL_DIR)/build/debug/csmp_agent_lib_ti_simplelink_wisun.a" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel" \ + -Wl,--diag_suppress=10063 \ + -Wl,--define=FREERTOS \ + ti_utils_build_linker.cmd.genlibs \ + ../../freertos/ticlang/cc13x2x7_cc26x2x7.cmd \ + "-Wl,-m,$(NAME).map" \ + -Wl,--rom_model \ + -Wl,--warn_sections \ + "-L$(TICLANG_ARMCOMPILER)/lib" \ + -llibc.a + +# Note, the config-specific postbuild goal is defined in each {config}.mak file, +# which was included above based on the value of the CONFIG variable. +all: postbuild + +.INTERMEDIATE: syscfg +$(SYSCFG_FILES): syscfg + @ echo generation complete + +syscfg: ../../freertos/csmp_example.syscfg + @ echo Generating configuration files... + @ $(SYSCFG_CMD_STUB) --output $(@D) $< + + +# Helpful hint that the user needs to use a standalone SysConfig installation +$(SYSCONFIG_GUI_TOOL): + $(error $(dir $(SYSCONFIG_TOOL)) does not contain the GUI framework \ + necessary to launch the SysConfig GUI. Please set SYSCONFIG_TOOL \ + (in your SDK's imports.mak) to a standalone SysConfig installation \ + rather than one inside CCS) + +syscfg-gui: ../../freertos/csmp_example.syscfg $(SYSCONFIG_GUI_TOOL) + @ echo Opening SysConfig GUI + @ $(SYSCFG_GUI_CMD_STUB) $< + +define C_RULE +$(basename $(notdir $(1))).obj: $(1) $(SYSCFG_H_FILES) + @ echo Building $$@ + @ $(CC) $(CFLAGS) -c $$< -o $$@ +endef + +$(foreach c_file,$(SYSCFG_C_FILES),$(eval $(call C_RULE,$(c_file)))) + +application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_crc.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/crc.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_nvocmp.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/nvocmp.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/sample/tlvs/ti_simplelink_wisun_tlvs.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_osal_osal_ti_simplelink_wisun.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_fhss_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_platform_ns_trace.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform/ns_trace.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/wisun_tasklet.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_cfg.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level/mac_cfg.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_settings.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx/mac_settings.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_radio_configuration_mac_user_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards/mac_user_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_macTask.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/macTask.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/timac_fhss_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port_timers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port_timers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_mac_header_helper_functions.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/mac_header_helper_functions.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_sw_mac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mcps_sap.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mcps_sap.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_security_mib.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_security_mib.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mlme.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mlme.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_queue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_queue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_debug_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/debug_uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_src_ncp_ncp_base_mtd.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp/ncp_base_mtd.cpp $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +$(NAME).out: $(OBJECTS) + @ echo linking $@ + @ $(LNK) -Wl,-u,_c_int00 $(OBJECTS) $(LFLAGS) -o $(NAME).out + +$(NAME).hex: $(NAME).out + @ echo building $@ + @ $(HEX) -O ihex $? $@ + +clean: + @ echo Cleaning... + @ $(RM) *.obj *.out *.hex *.map *.d > $(DEVNULL) 2>&1 + @ $(RM) ti_devices_config.c ti_radio_config.c ti_radio_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_drivers_config.c ti_drivers_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_wisunfan_config.h ti_wisunfan_features.h > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_linker.cmd.genlibs ti_utils_build_linker.cmd.genmap > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_compiler.opt FreeRTOSConfig.h > $(DEVNULL) 2>&1 + @ $(RM) ti_freertos_config.c ti_freertos_portable_config.c syscfg_c.rov.xs > $(DEVNULL) 2>&1 diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg new file mode 100644 index 0000000..da04b5b --- /dev/null +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2018, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +// @cliArgs --board /ti/boards/LP_EM_CC1314R10 --rtos freertos + +/* + * csmp_example_tirf.syscfg + */ + +/* ======== RF ======== */ +var RF = scripting.addModule("/ti/drivers/RF"); + +/* If an antenna component exists, assign it to the RF instance */ +if (system.deviceData.board && system.deviceData.board.components.RF) { + RF.$hardware = system.deviceData.board.components.RF; +} + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var trng = TRNG.addInstance(); +trng.$name = "NANOSTACK_TRNG"; + + +/* ======== Watchdog ======== */ +var Watchdog = scripting.addModule("/ti/drivers/Watchdog", {}, false); +var Watchdog1 = Watchdog.addInstance(); + +/* ======== UART ======== */ +var UART = scripting.addModule("/ti/drivers/UART2", {}, false); +var UART2 = UART.addInstance(); +UART2.$hardware = system.deviceData.board.components.XDS110UART; +/* set UART Ringbuffer size to 128 bytes */ +UART2.rxRingBufferSize = 128; +UART2.txRingBufferSize = 128; + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var TRNG1 = TRNG.addInstance(); + +/* ======== NVS ======== */ +const deviceName = system.getScript("/ti/ti_wisunfan/ti_wisunfan_common.js").getLaunchPadFromDevice(); +var NVS = scripting.addModule("/ti/drivers/NVS"); // Add a NVS module +var NVS_INT = NVS.addInstance(); // Add an internal NVS module instance + +NVS_INT.$name = "CONFIG_NVSINTERNAL"; // Internal NVS +if (deviceName.includes("R7") || deviceName.includes("P7")) +{ + NVS_INT.internalFlash.regionBase = 0xA8000; +} +else if (deviceName.includes("R10") || deviceName.includes("P10")) +{ + NVS_INT.internalFlash.regionBase = 0xFC000; +} +else +{ + NVS_INT.internalFlash.regionBase = 0x52000; +} +NVS_INT.internalFlash.regionSize = 0x4000; + +/* ======== NVS External Flash (Off-Chip OAD secondary slot) ======== */ +var NVS_EXT = NVS.addInstance(); +NVS_EXT.$name = "CONFIG_NVSEXTERNAL"; +NVS_EXT.nvsType = "External"; +/* Bind to on-board SPI flash (MX25R8035F on LP_CC1352P7_1) — same pattern as coap_oad_offchip */ +if (system.deviceData.board && system.deviceData.board.components.SPI_FLASH) { + NVS_EXT.$hardware = system.deviceData.board.components.SPI_FLASH; + var NVSSPI25XDevice1 = NVS_EXT.externalFlash.spiFlashDevice; + NVSSPI25XDevice1.$name = "CONFIG_NVS_SPI_0"; + NVSSPI25XDevice1.chipSelectPinInstance.mode = "Output"; + NVSSPI25XDevice1.chipSelectPinInstance.$name = "CONFIG_GPIO_SPI_FLASH_CS"; + var SPI = NVSSPI25XDevice1.sharedSpiInstance; + SPI.$name = "Board_SPI_0"; + NVS_EXT.externalFlash.regionBase = 0; + NVS_EXT.externalFlash.verifyBufferSize = 64; + NVS_EXT.externalFlash.regionSize = 0xA8000; // 672 KB = imgtool --slot-size 0xA8000 +} + +/* ======== LED Red ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_R = LED.addInstance(); // Add a LED module instance for LED_R + +/* If a red LED component exists, assign it to the LED_R instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_RED) { + LED_R.$hardware = system.deviceData.board.components.LED_RED; +} +else +{ + LED_R.mode = "Output"; // Set the LED pin to output +} + +LED_R.$name = "CONFIG_LED_RED"; +LED_R.gpioPin.$name = "CONFIG_GPIO_RLED"; // Descriptive name for the LED_R GPIO +LED_R.gpioPin.mode = "Output"; + + +/* ======== LED Green ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_G = LED.addInstance(); // Add a LED module instance for LED_G + +/* If a red LED component exists, assign it to the LED_G instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_GREEN) { + LED_G.$hardware = system.deviceData.board.components.LED_GREEN; +} +else +{ + LED_G.mode = "Output"; // Set the LED pin to output +} + +LED_G.$name = "CONFIG_LED_GREEN"; +LED_G.gpioPin.$name = "CONFIG_GPIO_GLED"; // Descriptive name for the LED_G GPIO +LED_G.gpioPin.mode = "Output"; + +/* ======== Left Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_L = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_L + +/* If a BUTTON0 component exists, assign it to the BUTTON_L instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-1"]) { + BUTTON_L.$hardware = system.deviceData.board.components["BTN-1"]; +} + +BUTTON_L.$name = "CONFIG_BTN_LEFT"; +BUTTON_L.gpioPin.$name = "CONFIG_GPIO_BTN1"; // Descriptive name for the BUTTON_L GPIO +BUTTON_L.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== Right Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_R = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_R + +/* If a BUTTON0 component exists, assign it to the BUTTON_R instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-2"]) { + BUTTON_R.$hardware = system.deviceData.board.components["BTN-2"]; +} + +BUTTON_R.$name = "CONFIG_BTN_RIGHT"; +BUTTON_R.gpioPin.$name = "CONFIG_GPIO_BTN2"; // Descriptive name for the BUTTON_R GPIO +BUTTON_R.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== RF Design ======== */ +var rfDesign = scripting.addModule("ti/devices/radioconfig/rfdesign"); +const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings; +for(var setting in rfDesignSettings) +{ + rfDesign[setting] = rfDesignSettings[setting]; +} + +/* ======== TI-15.4 Stack ======== */ +var TI154Stack = scripting.addModule("/ti/ti_wisunfan/ti_wisunfan"); +if(rfDesignSettings.rfDesign !== undefined) +{ + TI154Stack.rfDesign = rfDesignSettings.rfDesign; +} + +TI154Stack.project = "routernode"; +TI154Stack.lockProject = true; +TI154Stack.rxOnIdle = true; +TI154Stack.secureLevel = "macSecure"; +TI154Stack.rapidJoin = false; + +/* ======== Device ======== */ +var device = scripting.addModule("ti/devices/CCFG"); +const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings; +for(var setting in ccfgSettings) +{ + device[setting] = ccfgSettings[setting]; +} +/* Note: CCFG is retained in the application build. When preparing the MCUBoot- + * compatible OTA image, use: tiarmobjcopy --remove-section=.ccfg to exclude it. + * MCUBoot owns the CCFG (at 0xAC000) — but we strip it at image-prep time, not here. */ + +/* genLibs omitted — SysConfig generates prebuilt library entries in ti_utils_build_linker.cmd.genlibs */ + +/* ======== RTOS ======== */ +const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); +FreeRTOS.heapSize = 0x8000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00000800; + +const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/Release.mak b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/Release.mak new file mode 100644 index 0000000..2e3e1f7 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/Release.mak @@ -0,0 +1,4 @@ + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak new file mode 100644 index 0000000..8d9ee62 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -0,0 +1,8 @@ +LFLAGS += -Wl,--define=SBL_ENABLE + + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex + $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin + $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd new file mode 100644 index 0000000..e49cf98 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd @@ -0,0 +1,172 @@ +/****************************************************************************** + + @file cc13x4_cc26x4.cmd + + @brief Linker configuration file + + Group: WCS LPC + Target Device: cc13xx_cc26xx + + ****************************************************************************** + + Copyright (c) 2016-2025, Texas Instruments Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ****************************************************************************** + + + *****************************************************************************/ + +/* Retain interrupt vector table variable */ +--retain "*(.resetVecs)" +/* Override default entry point. */ +#ifdef FREERTOS +--entry_point resetISR +--heap_size=0 /* minimize heap since we are using heap_4.c */ +#else +--entry_point ResetISR +#endif +/* Allow main() to take args */ +--args 0x8 +--stack_size=1600 +/* Suppress warnings and errors: */ +/* - 10063: Warning about entry point not being _c_int00 */ +/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */ +/* files compiled using Keil (ARM compiler) */ +--diag_suppress=10063,16011,16012,10247-D + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/****************************************************************************** + Memory Sizes + *****************************************************************************/ +#ifdef SBL_ENABLE +#define MCUBOOT_HEAD_SIZE 0x80 +#define ENTRY_SIZE 0x100 +#define MCUBOOT_RESERVED_TRAILER_SIZE 0x2000 + +#define PRIMARY_SLOT_BASE 0x6000 +#define FLASH_BASE PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE + ENTRY_SIZE +#define FLASH_SIZE 0xA8000 - MCUBOOT_HEAD_SIZE - ENTRY_SIZE - MCUBOOT_RESERVED_TRAILER_SIZE + +#define ENTRY_START (PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE) +#define ENTRY_END (ENTRY_START + ENTRY_SIZE - 1) +#else +#define FLASH_BASE 0x00000 +#define FLASH_SIZE 0x100000 + +#define CCFG_BASE 0x50000000 +#define CCFG_SIZE 0x800 +#endif + +#define RAM_BASE 0x20000000 +#define RAM_SIZE 0x40000 + +/****************************************************************************** + System memory map + *****************************************************************************/ +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = FLASH_BASE, length = FLASH_SIZE + +#ifdef SBL_ENABLE + /* MCUBoot requires reset vecs (program entry) be placed at start of image */ + ENTRY (RX) : origin = ENTRY_START, length = ENTRY_SIZE +#else + /* CCFG section */ + CCFG (RX) : origin = CCFG_BASE, length = CCFG_SIZE +#endif + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = RAM_BASE, length = RAM_SIZE +} + +/****************************************************************************** + Section allocation in memory + *****************************************************************************/ +SECTIONS +{ +#ifdef SBL_ENABLE + .resetVecs : > ENTRY + .text : > FLASH +#else + .resetVecs : > FLASH_BASE + .text : >> FLASH +#endif + .const : > FLASH + .constdata : > FLASH + .rodata : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + .emb_text : > FLASH +#ifndef SBL_ENABLE + .ccfg : > CCFG +#endif + +#ifdef FREERTOS + .ramVecs : > RAM_BASE, type=NOINIT + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM (HIGH) + .nonretenvar : > SRAM +#else + GROUP > SRAM + { + .data + .bss + .ramVecs + .sysmem + .nonretenvar + } LOAD_END(heapStart) + + .stack : > SRAM (HIGH) LOAD_START(heapEnd) +#endif +} + +/* Create global constant that points to top of stack */ +/* CCS: Change stack size under Project Properties */ +__STACK_TOP = __stack + __STACK_SIZE; + +#ifdef TIRTOS7 +--symbol_map __TI_STACK_SIZE=__STACK_SIZE +--symbol_map __TI_STACK_BASE=__stack + +-u_c_int00 +#endif diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile new file mode 100644 index 0000000..ca3e93e --- /dev/null +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile @@ -0,0 +1,552 @@ +# SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR is passed in by the parent build +# (sample/ti_simplelink_wisun.target) or can be set on the command line: +# make SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR=/path/to/simplelink_cc13xx_cc26xx_sdk_8_32_00_07 +SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= + +-include $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/imports.mak + +CC = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +LNK = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +HEX = "$(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy" + +SYSCONFIG_GUI_TOOL = $(dir $(SYSCONFIG_TOOL))sysconfig_gui$(suffix $(SYSCONFIG_TOOL)) +SYSCFG_CMD_STUB = $(SYSCONFIG_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_GUI_CMD_STUB = $(SYSCONFIG_GUI_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_FILES := $(shell $(SYSCFG_CMD_STUB) --listGeneratedFiles --listReferencedFiles --output . ../../freertos/csmp_example.syscfg) + +SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) +SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) +SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) + +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +NAME = ns_node_csmp + +# Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), +# which will then be appended to below. +CONFIG := RELEASE +ifeq ($(CONFIG), RELEASE) + include Release.mak +else ifeq ($(CONFIG), SECUREBOOT) + include SecureBoot.mak +endif + +CFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X4 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM33/non_secure" \ + -gdwarf-3 \ + -mcpu=cortex-m33 \ + -mfloat-abi=hard \ + -mfpu=fpv5-sp-d16 + +CPPFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X4 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM33/non_secure" \ + -gdwarf-3 \ + -mcpu=cortex-m33 \ + -mfloat-abi=hard \ + -mfpu=fpv5-sp-d16 + +LFLAGS += "$(CSMP_AGENT_LIB_INSTALL_DIR)/build/debug/csmp_agent_lib_ti_simplelink_wisun.a" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel" \ + -Wl,--diag_suppress=10063 \ + -Wl,--define=FREERTOS \ + ti_utils_build_linker.cmd.genlibs \ + ../../freertos/ticlang/cc13x4_cc26x4.cmd \ + "-Wl,-m,$(NAME).map" \ + -Wl,--rom_model \ + -Wl,--warn_sections \ + "-L$(TICLANG_ARMCOMPILER)/lib" \ + -llibc.a + +# Note, the config-specific postbuild goal is defined in each {config}.mak file, +# which was included above based on the value of the CONFIG variable. +all: postbuild + +.INTERMEDIATE: syscfg +$(SYSCFG_FILES): syscfg + @ echo generation complete + +syscfg: ../../freertos/csmp_example.syscfg + @ echo Generating configuration files... + @ $(SYSCFG_CMD_STUB) --output $(@D) $< + + +# Helpful hint that the user needs to use a standalone SysConfig installation +$(SYSCONFIG_GUI_TOOL): + $(error $(dir $(SYSCONFIG_TOOL)) does not contain the GUI framework \ + necessary to launch the SysConfig GUI. Please set SYSCONFIG_TOOL \ + (in your SDK's imports.mak) to a standalone SysConfig installation \ + rather than one inside CCS) + +syscfg-gui: ../../freertos/csmp_example.syscfg $(SYSCONFIG_GUI_TOOL) + @ echo Opening SysConfig GUI + @ $(SYSCFG_GUI_CMD_STUB) $< + +define C_RULE +$(basename $(notdir $(1))).obj: $(1) $(SYSCFG_H_FILES) + @ echo Building $$@ + @ $(CC) $(CFLAGS) -c $$< -o $$@ +endef + +$(foreach c_file,$(SYSCFG_C_FILES),$(eval $(call C_RULE,$(c_file)))) + +application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_crc.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/crc.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_nvocmp.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/nvocmp.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/sample/tlvs/ti_simplelink_wisun_tlvs.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_osal_osal_ti_simplelink_wisun.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_fhss_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_platform_ns_trace.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform/ns_trace.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/wisun_tasklet.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_cfg.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level/mac_cfg.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_settings.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx/mac_settings.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_radio_configuration_mac_user_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards/mac_user_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_macTask.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/macTask.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/timac_fhss_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port_timers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port_timers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_mac_header_helper_functions.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/mac_header_helper_functions.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_sw_mac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mcps_sap.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mcps_sap.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_security_mib.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_security_mib.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mlme.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mlme.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_queue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_queue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_debug_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/debug_uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_src_ncp_ncp_base_mtd.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp/ncp_base_mtd.cpp $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +$(NAME).out: $(OBJECTS) + @ echo linking $@ + @ $(LNK) -Wl,-u,_c_int00 $(OBJECTS) $(LFLAGS) -o $(NAME).out + +$(NAME).hex: $(NAME).out + @ echo building $@ + @ $(HEX) -O ihex $? $@ + +clean: + @ echo Cleaning... + @ $(RM) *.obj *.out *.hex *.map *.d > $(DEVNULL) 2>&1 + @ $(RM) ti_devices_config.c ti_radio_config.c ti_radio_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_drivers_config.c ti_drivers_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_wisunfan_config.h ti_wisunfan_features.h > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_linker.cmd.genlibs ti_utils_build_linker.cmd.genmap > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_compiler.opt FreeRTOSConfig.h > $(DEVNULL) 2>&1 + @ $(RM) ti_freertos_config.c ti_freertos_portable_config.c syscfg_c.rov.xs > $(DEVNULL) 2>&1 diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg new file mode 100644 index 0000000..2d73316 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2018, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +// @cliArgs --board /ti/boards/LP_EM_CC1354P10_1 --rtos freertos + +/* + * csmp_example_tirf.syscfg + */ + +/* ======== RF ======== */ +var RF = scripting.addModule("/ti/drivers/RF"); + +/* If an antenna component exists, assign it to the RF instance */ +if (system.deviceData.board && system.deviceData.board.components.RF) { + RF.$hardware = system.deviceData.board.components.RF; +} + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var trng = TRNG.addInstance(); +trng.$name = "NANOSTACK_TRNG"; + + +/* ======== Watchdog ======== */ +var Watchdog = scripting.addModule("/ti/drivers/Watchdog", {}, false); +var Watchdog1 = Watchdog.addInstance(); + +/* ======== UART ======== */ +var UART = scripting.addModule("/ti/drivers/UART2", {}, false); +var UART2 = UART.addInstance(); +UART2.$hardware = system.deviceData.board.components.XDS110UART; +/* set UART Ringbuffer size to 128 bytes */ +UART2.rxRingBufferSize = 128; +UART2.txRingBufferSize = 128; + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var TRNG1 = TRNG.addInstance(); + +/* ======== NVS ======== */ +const deviceName = system.getScript("/ti/ti_wisunfan/ti_wisunfan_common.js").getLaunchPadFromDevice(); +var NVS = scripting.addModule("/ti/drivers/NVS"); // Add a NVS module +var NVS_INT = NVS.addInstance(); // Add an internal NVS module instance + +NVS_INT.$name = "CONFIG_NVSINTERNAL"; // Internal NVS +if (deviceName.includes("R7") || deviceName.includes("P7")) +{ + NVS_INT.internalFlash.regionBase = 0xA8000; +} +else if (deviceName.includes("R10") || deviceName.includes("P10")) +{ + NVS_INT.internalFlash.regionBase = 0xFC000; +} +else +{ + NVS_INT.internalFlash.regionBase = 0x52000; +} +NVS_INT.internalFlash.regionSize = 0x4000; + +/* ======== NVS External Flash (Off-Chip OAD secondary slot) ======== */ +var NVS_EXT = NVS.addInstance(); +NVS_EXT.$name = "CONFIG_NVSEXTERNAL"; +NVS_EXT.nvsType = "External"; +/* Bind to on-board SPI flash (MX25R8035F on LP_CC1352P7_1) — same pattern as coap_oad_offchip */ +if (system.deviceData.board && system.deviceData.board.components.SPI_FLASH) { + NVS_EXT.$hardware = system.deviceData.board.components.SPI_FLASH; + var NVSSPI25XDevice1 = NVS_EXT.externalFlash.spiFlashDevice; + NVSSPI25XDevice1.$name = "CONFIG_NVS_SPI_0"; + NVSSPI25XDevice1.chipSelectPinInstance.mode = "Output"; + NVSSPI25XDevice1.chipSelectPinInstance.$name = "CONFIG_GPIO_SPI_FLASH_CS"; + var SPI = NVSSPI25XDevice1.sharedSpiInstance; + SPI.$name = "Board_SPI_0"; + NVS_EXT.externalFlash.regionBase = 0; + NVS_EXT.externalFlash.verifyBufferSize = 64; + NVS_EXT.externalFlash.regionSize = 0xA8000; // 672 KB = imgtool --slot-size 0xA8000 +} + +/* ======== LED Red ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_R = LED.addInstance(); // Add a LED module instance for LED_R + +/* If a red LED component exists, assign it to the LED_R instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_RED) { + LED_R.$hardware = system.deviceData.board.components.LED_RED; +} +else +{ + LED_R.mode = "Output"; // Set the LED pin to output +} + +LED_R.$name = "CONFIG_LED_RED"; +LED_R.gpioPin.$name = "CONFIG_GPIO_RLED"; // Descriptive name for the LED_R GPIO +LED_R.gpioPin.mode = "Output"; + + +/* ======== LED Green ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_G = LED.addInstance(); // Add a LED module instance for LED_G + +/* If a red LED component exists, assign it to the LED_G instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_GREEN) { + LED_G.$hardware = system.deviceData.board.components.LED_GREEN; +} +else +{ + LED_G.mode = "Output"; // Set the LED pin to output +} + +LED_G.$name = "CONFIG_LED_GREEN"; +LED_G.gpioPin.$name = "CONFIG_GPIO_GLED"; // Descriptive name for the LED_G GPIO +LED_G.gpioPin.mode = "Output"; + +/* ======== Left Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_L = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_L + +/* If a BUTTON0 component exists, assign it to the BUTTON_L instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-1"]) { + BUTTON_L.$hardware = system.deviceData.board.components["BTN-1"]; +} + +BUTTON_L.$name = "CONFIG_BTN_LEFT"; +BUTTON_L.gpioPin.$name = "CONFIG_GPIO_BTN1"; // Descriptive name for the BUTTON_L GPIO +BUTTON_L.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== Right Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_R = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_R + +/* If a BUTTON0 component exists, assign it to the BUTTON_R instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-2"]) { + BUTTON_R.$hardware = system.deviceData.board.components["BTN-2"]; +} + +BUTTON_R.$name = "CONFIG_BTN_RIGHT"; +BUTTON_R.gpioPin.$name = "CONFIG_GPIO_BTN2"; // Descriptive name for the BUTTON_R GPIO +BUTTON_R.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== RF Design ======== */ +var rfDesign = scripting.addModule("ti/devices/radioconfig/rfdesign"); +const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings; +for(var setting in rfDesignSettings) +{ + rfDesign[setting] = rfDesignSettings[setting]; +} + +/* ======== TI-15.4 Stack ======== */ +var TI154Stack = scripting.addModule("/ti/ti_wisunfan/ti_wisunfan"); +if(rfDesignSettings.rfDesign !== undefined) +{ + TI154Stack.rfDesign = rfDesignSettings.rfDesign; +} + +TI154Stack.project = "routernode"; +TI154Stack.lockProject = true; +TI154Stack.rxOnIdle = true; +TI154Stack.secureLevel = "macSecure"; +TI154Stack.rapidJoin = false; + +/* ======== Device ======== */ +var device = scripting.addModule("ti/devices/CCFG"); +const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings; +for(var setting in ccfgSettings) +{ + device[setting] = ccfgSettings[setting]; +} +/* Note: CCFG is retained in the application build. When preparing the MCUBoot- + * compatible OTA image, use: tiarmobjcopy --remove-section=.ccfg to exclude it. + * MCUBoot owns the CCFG (at 0xAC000) — but we strip it at image-prep time, not here. */ + +/* genLibs omitted — SysConfig generates prebuilt library entries in ti_utils_build_linker.cmd.genlibs */ + +/* ======== RTOS ======== */ +const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); +FreeRTOS.heapSize = 0x8000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00000800; + +const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/Release.mak b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/Release.mak new file mode 100644 index 0000000..2e3e1f7 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/Release.mak @@ -0,0 +1,4 @@ + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak new file mode 100644 index 0000000..8d9ee62 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -0,0 +1,8 @@ +LFLAGS += -Wl,--define=SBL_ENABLE + + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex + $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin + $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd new file mode 100644 index 0000000..e49cf98 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd @@ -0,0 +1,172 @@ +/****************************************************************************** + + @file cc13x4_cc26x4.cmd + + @brief Linker configuration file + + Group: WCS LPC + Target Device: cc13xx_cc26xx + + ****************************************************************************** + + Copyright (c) 2016-2025, Texas Instruments Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ****************************************************************************** + + + *****************************************************************************/ + +/* Retain interrupt vector table variable */ +--retain "*(.resetVecs)" +/* Override default entry point. */ +#ifdef FREERTOS +--entry_point resetISR +--heap_size=0 /* minimize heap since we are using heap_4.c */ +#else +--entry_point ResetISR +#endif +/* Allow main() to take args */ +--args 0x8 +--stack_size=1600 +/* Suppress warnings and errors: */ +/* - 10063: Warning about entry point not being _c_int00 */ +/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */ +/* files compiled using Keil (ARM compiler) */ +--diag_suppress=10063,16011,16012,10247-D + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/****************************************************************************** + Memory Sizes + *****************************************************************************/ +#ifdef SBL_ENABLE +#define MCUBOOT_HEAD_SIZE 0x80 +#define ENTRY_SIZE 0x100 +#define MCUBOOT_RESERVED_TRAILER_SIZE 0x2000 + +#define PRIMARY_SLOT_BASE 0x6000 +#define FLASH_BASE PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE + ENTRY_SIZE +#define FLASH_SIZE 0xA8000 - MCUBOOT_HEAD_SIZE - ENTRY_SIZE - MCUBOOT_RESERVED_TRAILER_SIZE + +#define ENTRY_START (PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE) +#define ENTRY_END (ENTRY_START + ENTRY_SIZE - 1) +#else +#define FLASH_BASE 0x00000 +#define FLASH_SIZE 0x100000 + +#define CCFG_BASE 0x50000000 +#define CCFG_SIZE 0x800 +#endif + +#define RAM_BASE 0x20000000 +#define RAM_SIZE 0x40000 + +/****************************************************************************** + System memory map + *****************************************************************************/ +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = FLASH_BASE, length = FLASH_SIZE + +#ifdef SBL_ENABLE + /* MCUBoot requires reset vecs (program entry) be placed at start of image */ + ENTRY (RX) : origin = ENTRY_START, length = ENTRY_SIZE +#else + /* CCFG section */ + CCFG (RX) : origin = CCFG_BASE, length = CCFG_SIZE +#endif + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = RAM_BASE, length = RAM_SIZE +} + +/****************************************************************************** + Section allocation in memory + *****************************************************************************/ +SECTIONS +{ +#ifdef SBL_ENABLE + .resetVecs : > ENTRY + .text : > FLASH +#else + .resetVecs : > FLASH_BASE + .text : >> FLASH +#endif + .const : > FLASH + .constdata : > FLASH + .rodata : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + .emb_text : > FLASH +#ifndef SBL_ENABLE + .ccfg : > CCFG +#endif + +#ifdef FREERTOS + .ramVecs : > RAM_BASE, type=NOINIT + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM (HIGH) + .nonretenvar : > SRAM +#else + GROUP > SRAM + { + .data + .bss + .ramVecs + .sysmem + .nonretenvar + } LOAD_END(heapStart) + + .stack : > SRAM (HIGH) LOAD_START(heapEnd) +#endif +} + +/* Create global constant that points to top of stack */ +/* CCS: Change stack size under Project Properties */ +__STACK_TOP = __stack + __STACK_SIZE; + +#ifdef TIRTOS7 +--symbol_map __TI_STACK_SIZE=__STACK_SIZE +--symbol_map __TI_STACK_BASE=__stack + +-u_c_int00 +#endif diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile new file mode 100644 index 0000000..ca3e93e --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile @@ -0,0 +1,552 @@ +# SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR is passed in by the parent build +# (sample/ti_simplelink_wisun.target) or can be set on the command line: +# make SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR=/path/to/simplelink_cc13xx_cc26xx_sdk_8_32_00_07 +SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= + +-include $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/imports.mak + +CC = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +LNK = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +HEX = "$(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy" + +SYSCONFIG_GUI_TOOL = $(dir $(SYSCONFIG_TOOL))sysconfig_gui$(suffix $(SYSCONFIG_TOOL)) +SYSCFG_CMD_STUB = $(SYSCONFIG_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_GUI_CMD_STUB = $(SYSCONFIG_GUI_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_FILES := $(shell $(SYSCFG_CMD_STUB) --listGeneratedFiles --listReferencedFiles --output . ../../freertos/csmp_example.syscfg) + +SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) +SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) +SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) + +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +NAME = ns_node_csmp + +# Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), +# which will then be appended to below. +CONFIG := RELEASE +ifeq ($(CONFIG), RELEASE) + include Release.mak +else ifeq ($(CONFIG), SECUREBOOT) + include SecureBoot.mak +endif + +CFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X4 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM33/non_secure" \ + -gdwarf-3 \ + -mcpu=cortex-m33 \ + -mfloat-abi=hard \ + -mfpu=fpv5-sp-d16 + +CPPFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X4 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM33/non_secure" \ + -gdwarf-3 \ + -mcpu=cortex-m33 \ + -mfloat-abi=hard \ + -mfpu=fpv5-sp-d16 + +LFLAGS += "$(CSMP_AGENT_LIB_INSTALL_DIR)/build/debug/csmp_agent_lib_ti_simplelink_wisun.a" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel" \ + -Wl,--diag_suppress=10063 \ + -Wl,--define=FREERTOS \ + ti_utils_build_linker.cmd.genlibs \ + ../../freertos/ticlang/cc13x4_cc26x4.cmd \ + "-Wl,-m,$(NAME).map" \ + -Wl,--rom_model \ + -Wl,--warn_sections \ + "-L$(TICLANG_ARMCOMPILER)/lib" \ + -llibc.a + +# Note, the config-specific postbuild goal is defined in each {config}.mak file, +# which was included above based on the value of the CONFIG variable. +all: postbuild + +.INTERMEDIATE: syscfg +$(SYSCFG_FILES): syscfg + @ echo generation complete + +syscfg: ../../freertos/csmp_example.syscfg + @ echo Generating configuration files... + @ $(SYSCFG_CMD_STUB) --output $(@D) $< + + +# Helpful hint that the user needs to use a standalone SysConfig installation +$(SYSCONFIG_GUI_TOOL): + $(error $(dir $(SYSCONFIG_TOOL)) does not contain the GUI framework \ + necessary to launch the SysConfig GUI. Please set SYSCONFIG_TOOL \ + (in your SDK's imports.mak) to a standalone SysConfig installation \ + rather than one inside CCS) + +syscfg-gui: ../../freertos/csmp_example.syscfg $(SYSCONFIG_GUI_TOOL) + @ echo Opening SysConfig GUI + @ $(SYSCFG_GUI_CMD_STUB) $< + +define C_RULE +$(basename $(notdir $(1))).obj: $(1) $(SYSCFG_H_FILES) + @ echo Building $$@ + @ $(CC) $(CFLAGS) -c $$< -o $$@ +endef + +$(foreach c_file,$(SYSCFG_C_FILES),$(eval $(call C_RULE,$(c_file)))) + +application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_crc.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/crc.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_nvocmp.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/nvocmp.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/sample/tlvs/ti_simplelink_wisun_tlvs.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_osal_osal_ti_simplelink_wisun.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_fhss_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_platform_ns_trace.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform/ns_trace.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/wisun_tasklet.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_cfg.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level/mac_cfg.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_settings.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx/mac_settings.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_radio_configuration_mac_user_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards/mac_user_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_macTask.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/macTask.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/timac_fhss_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port_timers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port_timers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_mac_header_helper_functions.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/mac_header_helper_functions.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_sw_mac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mcps_sap.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mcps_sap.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_security_mib.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_security_mib.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mlme.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mlme.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_queue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_queue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_debug_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/debug_uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_src_ncp_ncp_base_mtd.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp/ncp_base_mtd.cpp $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +$(NAME).out: $(OBJECTS) + @ echo linking $@ + @ $(LNK) -Wl,-u,_c_int00 $(OBJECTS) $(LFLAGS) -o $(NAME).out + +$(NAME).hex: $(NAME).out + @ echo building $@ + @ $(HEX) -O ihex $? $@ + +clean: + @ echo Cleaning... + @ $(RM) *.obj *.out *.hex *.map *.d > $(DEVNULL) 2>&1 + @ $(RM) ti_devices_config.c ti_radio_config.c ti_radio_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_drivers_config.c ti_drivers_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_wisunfan_config.h ti_wisunfan_features.h > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_linker.cmd.genlibs ti_utils_build_linker.cmd.genmap > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_compiler.opt FreeRTOSConfig.h > $(DEVNULL) 2>&1 + @ $(RM) ti_freertos_config.c ti_freertos_portable_config.c syscfg_c.rov.xs > $(DEVNULL) 2>&1 diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg new file mode 100644 index 0000000..90aa47f --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2018, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +// @cliArgs --board /ti/boards/LP_EM_CC1354P10_6 --rtos freertos + +/* + * csmp_example_tirf.syscfg + */ + +/* ======== RF ======== */ +var RF = scripting.addModule("/ti/drivers/RF"); + +/* If an antenna component exists, assign it to the RF instance */ +if (system.deviceData.board && system.deviceData.board.components.RF) { + RF.$hardware = system.deviceData.board.components.RF; +} + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var trng = TRNG.addInstance(); +trng.$name = "NANOSTACK_TRNG"; + + +/* ======== Watchdog ======== */ +var Watchdog = scripting.addModule("/ti/drivers/Watchdog", {}, false); +var Watchdog1 = Watchdog.addInstance(); + +/* ======== UART ======== */ +var UART = scripting.addModule("/ti/drivers/UART2", {}, false); +var UART2 = UART.addInstance(); +UART2.$hardware = system.deviceData.board.components.XDS110UART; +/* set UART Ringbuffer size to 128 bytes */ +UART2.rxRingBufferSize = 128; +UART2.txRingBufferSize = 128; + +/* ======== TRNG ======== */ +var TRNG = scripting.addModule("/ti/drivers/TRNG", {}, false); +var TRNG1 = TRNG.addInstance(); + +/* ======== NVS ======== */ +const deviceName = system.getScript("/ti/ti_wisunfan/ti_wisunfan_common.js").getLaunchPadFromDevice(); +var NVS = scripting.addModule("/ti/drivers/NVS"); // Add a NVS module +var NVS_INT = NVS.addInstance(); // Add an internal NVS module instance + +NVS_INT.$name = "CONFIG_NVSINTERNAL"; // Internal NVS +if (deviceName.includes("R7") || deviceName.includes("P7")) +{ + NVS_INT.internalFlash.regionBase = 0xA8000; +} +else if (deviceName.includes("R10") || deviceName.includes("P10")) +{ + NVS_INT.internalFlash.regionBase = 0xFC000; +} +else +{ + NVS_INT.internalFlash.regionBase = 0x52000; +} +NVS_INT.internalFlash.regionSize = 0x4000; + +/* ======== NVS External Flash (Off-Chip OAD secondary slot) ======== */ +var NVS_EXT = NVS.addInstance(); +NVS_EXT.$name = "CONFIG_NVSEXTERNAL"; +NVS_EXT.nvsType = "External"; +/* Bind to on-board SPI flash (MX25R8035F on LP_CC1352P7_1) — same pattern as coap_oad_offchip */ +if (system.deviceData.board && system.deviceData.board.components.SPI_FLASH) { + NVS_EXT.$hardware = system.deviceData.board.components.SPI_FLASH; + var NVSSPI25XDevice1 = NVS_EXT.externalFlash.spiFlashDevice; + NVSSPI25XDevice1.$name = "CONFIG_NVS_SPI_0"; + NVSSPI25XDevice1.chipSelectPinInstance.mode = "Output"; + NVSSPI25XDevice1.chipSelectPinInstance.$name = "CONFIG_GPIO_SPI_FLASH_CS"; + var SPI = NVSSPI25XDevice1.sharedSpiInstance; + SPI.$name = "Board_SPI_0"; + NVS_EXT.externalFlash.regionBase = 0; + NVS_EXT.externalFlash.verifyBufferSize = 64; + NVS_EXT.externalFlash.regionSize = 0xA8000; // 672 KB = imgtool --slot-size 0xA8000 +} + +/* ======== LED Red ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_R = LED.addInstance(); // Add a LED module instance for LED_R + +/* If a red LED component exists, assign it to the LED_R instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_RED) { + LED_R.$hardware = system.deviceData.board.components.LED_RED; +} +else +{ + LED_R.mode = "Output"; // Set the LED pin to output +} + +LED_R.$name = "CONFIG_LED_RED"; +LED_R.gpioPin.$name = "CONFIG_GPIO_RLED"; // Descriptive name for the LED_R GPIO +LED_R.gpioPin.mode = "Output"; + + +/* ======== LED Green ======== */ +var LED = scripting.addModule("/ti/drivers/apps/LED"); // Add a LED module +var LED_G = LED.addInstance(); // Add a LED module instance for LED_G + +/* If a red LED component exists, assign it to the LED_G instance */ +if (system.deviceData.board && system.deviceData.board.components.LED_GREEN) { + LED_G.$hardware = system.deviceData.board.components.LED_GREEN; +} +else +{ + LED_G.mode = "Output"; // Set the LED pin to output +} + +LED_G.$name = "CONFIG_LED_GREEN"; +LED_G.gpioPin.$name = "CONFIG_GPIO_GLED"; // Descriptive name for the LED_G GPIO +LED_G.gpioPin.mode = "Output"; + +/* ======== Left Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_L = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_L + +/* If a BUTTON0 component exists, assign it to the BUTTON_L instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-1"]) { + BUTTON_L.$hardware = system.deviceData.board.components["BTN-1"]; +} + +BUTTON_L.$name = "CONFIG_BTN_LEFT"; +BUTTON_L.gpioPin.$name = "CONFIG_GPIO_BTN1"; // Descriptive name for the BUTTON_L GPIO +BUTTON_L.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== Right Button ======== */ +var BUTTON = scripting.addModule("/ti/drivers/apps/Button"); // Add a BUTTON module +var BUTTON_R = BUTTON.addInstance(); // Add a BUTTON module instance for BUTTON_R + +/* If a BUTTON0 component exists, assign it to the BUTTON_R instance */ +if (system.deviceData.board && system.deviceData.board.components["BTN-2"]) { + BUTTON_R.$hardware = system.deviceData.board.components["BTN-2"]; +} + +BUTTON_R.$name = "CONFIG_BTN_RIGHT"; +BUTTON_R.gpioPin.$name = "CONFIG_GPIO_BTN2"; // Descriptive name for the BUTTON_R GPIO +BUTTON_R.gpioPin.pull = "Pull Up"; // Use Pull up resistor + +/* ======== RF Design ======== */ +var rfDesign = scripting.addModule("ti/devices/radioconfig/rfdesign"); +const rfDesignSettings = system.getScript("/ti/common/lprf_rf_design_settings.js").rfDesignSettings; +for(var setting in rfDesignSettings) +{ + rfDesign[setting] = rfDesignSettings[setting]; +} + +/* ======== TI-15.4 Stack ======== */ +var TI154Stack = scripting.addModule("/ti/ti_wisunfan/ti_wisunfan"); +if(rfDesignSettings.rfDesign !== undefined) +{ + TI154Stack.rfDesign = rfDesignSettings.rfDesign; +} + +TI154Stack.project = "routernode"; +TI154Stack.lockProject = true; +TI154Stack.rxOnIdle = true; +TI154Stack.secureLevel = "macSecure"; +TI154Stack.rapidJoin = false; + +/* ======== Device ======== */ +var device = scripting.addModule("ti/devices/CCFG"); +const ccfgSettings = system.getScript("/ti/common/lprf_ccfg_settings.js").ccfgSettings; +for(var setting in ccfgSettings) +{ + device[setting] = ccfgSettings[setting]; +} +/* Note: CCFG is retained in the application build. When preparing the MCUBoot- + * compatible OTA image, use: tiarmobjcopy --remove-section=.ccfg to exclude it. + * MCUBoot owns the CCFG (at 0xAC000) — but we strip it at image-prep time, not here. */ + +/* genLibs omitted — SysConfig generates prebuilt library entries in ti_utils_build_linker.cmd.genlibs */ + +/* ======== RTOS ======== */ +const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); +FreeRTOS.heapSize = 0x8000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00000800; + +const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/Release.mak b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/Release.mak new file mode 100644 index 0000000..2e3e1f7 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/Release.mak @@ -0,0 +1,4 @@ + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak new file mode 100644 index 0000000..8d9ee62 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -0,0 +1,8 @@ +LFLAGS += -Wl,--define=SBL_ENABLE + + +# Config-specific post-build commands +.PHONY: postbuild +postbuild: $(NAME).hex + $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin + $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd new file mode 100644 index 0000000..e49cf98 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/cc13x4_cc26x4.cmd @@ -0,0 +1,172 @@ +/****************************************************************************** + + @file cc13x4_cc26x4.cmd + + @brief Linker configuration file + + Group: WCS LPC + Target Device: cc13xx_cc26xx + + ****************************************************************************** + + Copyright (c) 2016-2025, Texas Instruments Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Texas Instruments Incorporated nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ****************************************************************************** + + + *****************************************************************************/ + +/* Retain interrupt vector table variable */ +--retain "*(.resetVecs)" +/* Override default entry point. */ +#ifdef FREERTOS +--entry_point resetISR +--heap_size=0 /* minimize heap since we are using heap_4.c */ +#else +--entry_point ResetISR +#endif +/* Allow main() to take args */ +--args 0x8 +--stack_size=1600 +/* Suppress warnings and errors: */ +/* - 10063: Warning about entry point not being _c_int00 */ +/* - 16011, 16012: 8-byte alignment errors. Observed when linking in object */ +/* files compiled using Keil (ARM compiler) */ +--diag_suppress=10063,16011,16012,10247-D + +/* The following command line options are set as part of the CCS project. */ +/* If you are building using the command line, or for some reason want to */ +/* define them here, you can uncomment and modify these lines as needed. */ +/* If you are using CCS for building, it is probably better to make any such */ +/* modifications in your CCS project and leave this file alone. */ +/* */ +/* --heap_size=0 */ +/* --stack_size=256 */ +/* --library=rtsv7M3_T_le_eabi.lib */ + +/****************************************************************************** + Memory Sizes + *****************************************************************************/ +#ifdef SBL_ENABLE +#define MCUBOOT_HEAD_SIZE 0x80 +#define ENTRY_SIZE 0x100 +#define MCUBOOT_RESERVED_TRAILER_SIZE 0x2000 + +#define PRIMARY_SLOT_BASE 0x6000 +#define FLASH_BASE PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE + ENTRY_SIZE +#define FLASH_SIZE 0xA8000 - MCUBOOT_HEAD_SIZE - ENTRY_SIZE - MCUBOOT_RESERVED_TRAILER_SIZE + +#define ENTRY_START (PRIMARY_SLOT_BASE + MCUBOOT_HEAD_SIZE) +#define ENTRY_END (ENTRY_START + ENTRY_SIZE - 1) +#else +#define FLASH_BASE 0x00000 +#define FLASH_SIZE 0x100000 + +#define CCFG_BASE 0x50000000 +#define CCFG_SIZE 0x800 +#endif + +#define RAM_BASE 0x20000000 +#define RAM_SIZE 0x40000 + +/****************************************************************************** + System memory map + *****************************************************************************/ +MEMORY +{ + /* Application stored in and executes from internal flash */ + FLASH (RX) : origin = FLASH_BASE, length = FLASH_SIZE + +#ifdef SBL_ENABLE + /* MCUBoot requires reset vecs (program entry) be placed at start of image */ + ENTRY (RX) : origin = ENTRY_START, length = ENTRY_SIZE +#else + /* CCFG section */ + CCFG (RX) : origin = CCFG_BASE, length = CCFG_SIZE +#endif + /* Application uses internal RAM for data */ + SRAM (RWX) : origin = RAM_BASE, length = RAM_SIZE +} + +/****************************************************************************** + Section allocation in memory + *****************************************************************************/ +SECTIONS +{ +#ifdef SBL_ENABLE + .resetVecs : > ENTRY + .text : > FLASH +#else + .resetVecs : > FLASH_BASE + .text : >> FLASH +#endif + .const : > FLASH + .constdata : > FLASH + .rodata : > FLASH + .cinit : > FLASH + .pinit : > FLASH + .init_array : > FLASH + .emb_text : > FLASH +#ifndef SBL_ENABLE + .ccfg : > CCFG +#endif + +#ifdef FREERTOS + .ramVecs : > RAM_BASE, type=NOINIT + .data : > SRAM + .bss : > SRAM + .sysmem : > SRAM + .stack : > SRAM (HIGH) + .nonretenvar : > SRAM +#else + GROUP > SRAM + { + .data + .bss + .ramVecs + .sysmem + .nonretenvar + } LOAD_END(heapStart) + + .stack : > SRAM (HIGH) LOAD_START(heapEnd) +#endif +} + +/* Create global constant that points to top of stack */ +/* CCS: Change stack size under Project Properties */ +__STACK_TOP = __stack + __STACK_SIZE; + +#ifdef TIRTOS7 +--symbol_map __TI_STACK_SIZE=__STACK_SIZE +--symbol_map __TI_STACK_BASE=__stack + +-u_c_int00 +#endif diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile new file mode 100644 index 0000000..ca3e93e --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile @@ -0,0 +1,552 @@ +# SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR is passed in by the parent build +# (sample/ti_simplelink_wisun.target) or can be set on the command line: +# make SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR=/path/to/simplelink_cc13xx_cc26xx_sdk_8_32_00_07 +SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= + +-include $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/imports.mak + +CC = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +LNK = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" +HEX = "$(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy" + +SYSCONFIG_GUI_TOOL = $(dir $(SYSCONFIG_TOOL))sysconfig_gui$(suffix $(SYSCONFIG_TOOL)) +SYSCFG_CMD_STUB = $(SYSCONFIG_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_GUI_CMD_STUB = $(SYSCONFIG_GUI_TOOL) --compiler ticlang --product $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/.metadata/product.json +SYSCFG_FILES := $(shell $(SYSCFG_CMD_STUB) --listGeneratedFiles --listReferencedFiles --output . ../../freertos/csmp_example.syscfg) + +SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) +SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) +SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) + +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +NAME = ns_node_csmp + +# Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), +# which will then be appended to below. +CONFIG := RELEASE +ifeq ($(CONFIG), RELEASE) + include Release.mak +else ifeq ($(CONFIG), SECUREBOOT) + include SecureBoot.mak +endif + +CFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X4 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM33/non_secure" \ + -gdwarf-3 \ + -mcpu=cortex-m33 \ + -mfloat-abi=hard \ + -mfpu=fpv5-sp-d16 + +CPPFLAGS += -I../.. \ + -I. \ + $(addprefix @,$(SYSCFG_OPT_FILES)) \ + -Oz \ + -munaligned-access \ + -fshort-enums \ + -fcommon \ + -funsigned-char \ + -mlittle-endian \ + -fdiagnostics-show-option \ + -ffunction-sections \ + -g \ + -fno-strict-aliasing \ + -flto \ + -DxWISUN_NCP_ENABLE \ + -DxFIXED_GTK_KEYS \ + -DWISUN_RCP_ENABLE \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/ti-rf-driver" \ + -I$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/apps/common/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_config/ws_router" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/include" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpagent/tlvs" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmptlv" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/coap" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpservice" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/csmpapi" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/src/lib/protobuf-c" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun" \ + "-I$(CSMP_AGENT_LIB_INSTALL_DIR)/sample" \ + -include mbed_config.h \ + @$(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/defines/router.opts \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/posix/ticlang" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos/mbedtls/mbed-crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-client-randlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-trace" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/frameworks/mbed-coap/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/stack" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/serial" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Core/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/nanostack-event-loop/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/nanostack-hal-mbed-cmsis-rtos" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/coap-service" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/coap-service/source/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL/COMPONENT_NSPE" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/assert" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/appasrt" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/crypto" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/hal/rf" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/util" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/heapmgr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/saddr" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/services/sdata" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/fh" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/rom" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/inc/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/tracer" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/MAC" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/Thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Security/PANA" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/mdns/fnet/fnet_stack/services/mdns" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/fnv_hash" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/hmac" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/load_balance" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libNET/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/ti_wisunfan/mbedtls/platform/COMPONENT_PSA_SRV_IMPL" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/whiteboard" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/6LoWPAN/ws" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/DHCPv6_client" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/libDHCPv6" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Service_Libs/pan_blacklist" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/Common_Protocols" \ + -DEXCLUDE_TRACE \ + -DxSWITCH_NCP_TO_TRACE \ + -DTLS_SEC_PROT_LIB_USE_MBEDTLS_PLATFORM_MEMORY \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/config" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/utils" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/platforms" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/core/thread" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/nv" \ + -DxWISUN_AUTO_START \ + -DTI_WISUN_FAN_DEBUG \ + -DFEATURE_WISUN_MIN_EDFE \ + -DBoard_EXCLUDE_NVS_EXTERNAL_FLASH \ + -DDeviceFamily_CC13X4 \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/inc" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/devices/cc13x4_cc26x4/driverlib" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel/freertos" \ + -DFREERTOS_SUPPORT \ + -DFREERTOS \ + -DNVOCMP_POSIX_MUTEX \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/include" \ + "-I$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/freertos/portable/GCC/ARM_CM33/non_secure" \ + -gdwarf-3 \ + -mcpu=cortex-m33 \ + -mfloat-abi=hard \ + -mfpu=fpv5-sp-d16 + +LFLAGS += "$(CSMP_AGENT_LIB_INSTALL_DIR)/build/debug/csmp_agent_lib_ti_simplelink_wisun.a" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ + "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel" \ + -Wl,--diag_suppress=10063 \ + -Wl,--define=FREERTOS \ + ti_utils_build_linker.cmd.genlibs \ + ../../freertos/ticlang/cc13x4_cc26x4.cmd \ + "-Wl,-m,$(NAME).map" \ + -Wl,--rom_model \ + -Wl,--warn_sections \ + "-L$(TICLANG_ARMCOMPILER)/lib" \ + -llibc.a + +# Note, the config-specific postbuild goal is defined in each {config}.mak file, +# which was included above based on the value of the CONFIG variable. +all: postbuild + +.INTERMEDIATE: syscfg +$(SYSCFG_FILES): syscfg + @ echo generation complete + +syscfg: ../../freertos/csmp_example.syscfg + @ echo Generating configuration files... + @ $(SYSCFG_CMD_STUB) --output $(@D) $< + + +# Helpful hint that the user needs to use a standalone SysConfig installation +$(SYSCONFIG_GUI_TOOL): + $(error $(dir $(SYSCONFIG_TOOL)) does not contain the GUI framework \ + necessary to launch the SysConfig GUI. Please set SYSCONFIG_TOOL \ + (in your SDK's imports.mak) to a standalone SysConfig installation \ + rather than one inside CCS) + +syscfg-gui: ../../freertos/csmp_example.syscfg $(SYSCONFIG_GUI_TOOL) + @ echo Opening SysConfig GUI + @ $(SYSCFG_GUI_CMD_STUB) $< + +define C_RULE +$(basename $(notdir $(1))).obj: $(1) $(SYSCFG_H_FILES) + @ echo Building $$@ + @ $(CC) $(CFLAGS) -c $$< -o $$@ +endef + +$(foreach c_file,$(SYSCFG_C_FILES),$(eval $(call C_RULE,$(c_file)))) + +application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_crc.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/crc.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_ti-nv-driver_nvocmp.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/common/nv/nvocmp.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/sample/tlvs/ti_simplelink_wisun_tlvs.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +csmp_osal_osal_ti_simplelink_wisun.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_interrupt.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_random.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_event_loop_mutex.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/ns_hal_init.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/nanostack/nanostack-hal-mbed-cmsis-rtos/arm_hal_fhss_timer.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_mbednanostack2tirtos_platform_ns_trace.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/mbednanostack2tirtos/platform/ns_trace.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/mbed-mesh-api/source/wisun_tasklet.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_cfg.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/high_level/mac_cfg.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_mac_settings_mac_settings.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/low_level/cc13xx/mac_settings.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_radio_configuration_mac_user_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/boards/mac_user_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_macTask.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/macTask.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/timac_fhss_config.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +software_stack_ti15_4mac_osal_port_osal_port_timers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/wisunfan_mac/common/osal_port/osal_port_tirtos/osal_port_timers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_mac_header_helper_functions.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/mac_header_helper_functions.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +mbed_nanostack_mac_sw_mac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mbed/nanostack/sal-stack-nanostack/source/MAC/IEEE802_15_4/sw_mac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mcps_sap.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mcps_sap.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_security_mib.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_security_mib.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_mlme.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_mlme.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_host_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_host_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_queue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_queue.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +rcp_rcp_lmac_helpers.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/rcp/rcp_lmac_helpers.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_platform_debug_uart.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/examples/ncp_ftd/platform/debug_uart.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +wisun_ncp_src_ncp_ncp_base_mtd.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/ncp_interface/src/ncp/ncp_base_mtd.cpp $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + +$(NAME).out: $(OBJECTS) + @ echo linking $@ + @ $(LNK) -Wl,-u,_c_int00 $(OBJECTS) $(LFLAGS) -o $(NAME).out + +$(NAME).hex: $(NAME).out + @ echo building $@ + @ $(HEX) -O ihex $? $@ + +clean: + @ echo Cleaning... + @ $(RM) *.obj *.out *.hex *.map *.d > $(DEVNULL) 2>&1 + @ $(RM) ti_devices_config.c ti_radio_config.c ti_radio_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_drivers_config.c ti_drivers_config.h > $(DEVNULL) 2>&1 + @ $(RM) ti_wisunfan_config.h ti_wisunfan_features.h > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_linker.cmd.genlibs ti_utils_build_linker.cmd.genmap > $(DEVNULL) 2>&1 + @ $(RM) ti_utils_build_compiler.opt FreeRTOSConfig.h > $(DEVNULL) 2>&1 + @ $(RM) ti_freertos_config.c ti_freertos_portable_config.c syscfg_c.rov.xs > $(DEVNULL) 2>&1 diff --git a/Vendors/TI/README.md b/Vendors/TI/README.md new file mode 100644 index 0000000..c7a2eea --- /dev/null +++ b/Vendors/TI/README.md @@ -0,0 +1,610 @@ +# TI Wi-SUN CSMP Agent - Complete Setup Guide + +This guide walks you through everything needed to run the CSMP example on a TI Wi-SUN device from scratch. It covers building the firmware for all supported boards, setting up the border router, configuring network routing, flashing the device, and verifying that it registers with Cisco FND. + + +## 1. What Is This and How Does It Work? + +**CSMP** (CoAP Simple Management Protocol) is a lightweight protocol that lets IoT devices register with and be managed by a central server. In this setup: + +- A **TI Wi-SUN LaunchPad** (mesh node) runs the CSMP Agent firmware, which periodically sends registration messages to the management server. +- A second TI board acts as the **Border Router**. It is connected to the Linux PC via USB/UART. +- **Linux Host container** — a Docker container that runs the border router software stack and communicates with the border router board over UART. +- **wfantund container** — a Docker container that communicates with the Linux Host container via IPv6 tunneling. It creates a `wfan0` TUN interface that is accessible on the Linux PC (outside Docker). +- The **Linux PC** routes packets between `wfan0` and FND over its physical network interface. +- **Cisco FND** (Field Network Director) is the management server. The CSMP Agent on the mesh node registers with FND over IPv6. + +Both Docker containers run on the same Linux PC. The packet flow looks like this: + +``` +TI Wi-SUN mesh node (CSMP Agent firmware) + | (Wi-SUN RF) + v +TI border router board + | (UART/USB) + v +Linux Host Docker container (border router software stack) + | (IPv6 tunnel between containers) + v +wfantund Docker container (creates wfan0 TUN on Linux PC) + | (wfan0 accessible on Linux PC host) + v +Linux PC (routes packets via physical NIC) + | (IPv6 over LAN) + v +Cisco FND (management server, receives CoAP registration) +``` + +### Supported boards + +The following boards have pre-built CSMP project configurations under `Vendors/TI/`: + +| Board | Architecture | Device family | +|-------|-------------|---------------| +| LP-CC1312R7 | Cortex-M4F | CC13X2X7 | +| LP-CC1352P7-1 | Cortex-M4F | CC13X2X7 | +| LP-EM-CC1314R10 | Cortex-M33 | CC13X4 | +| LP-EM-CC1354P10-1 | Cortex-M33 | CC13X4 | +| LP-EM-CC1354P10-6 | Cortex-M33 | CC13X4 | + +A single command builds firmware for all boards at once. Adding a new board requires only creating a `Vendors/TI//csmp_example_tirf/` directory — the build system discovers it automatically. + +--- + +## 2. What You Need (Hardware and Software) + +### Hardware + +| Item | Purpose | +|------|---------| +| Any supported TI LaunchPad (x1, from the table in Section 1) | Wi-SUN mesh node running CSMP Agent firmware | +| Any TI CC13xx LaunchPad (x1) flashed with `rcp_lmac` border router firmware | Bridges Wi-SUN mesh to the Linux host | +| Linux PC | Hosts both Docker containers, routes packets between wfan0 and FND | +| Cisco FND server or VM | Management server that receives CSMP registration | + +> The mesh node and border router do not need to be the same board type, but both must run compatible Wi-SUN FAN stack versions from the same SDK release. + +### Software (install before you begin) + +On the Linux host: + +```bash +# TI UniFlash (for flashing) - download from: +# https://www.ti.com/tool/UNIFLASH + +# iptables persistence +sudo apt install iptables-persistent +``` + +On the Linux PC, also install: +- **TI SimpleLink CC13xx/CC26xx SDK** - download from [ti.com/tool/SIMPLELINK-CC13XX-CC26XX-SDK](https://www.ti.com/tool/SIMPLELINK-CC13XX-CC26XX-SDK) + +--- + +## 3. Network Architecture + +Before touching any commands, understand what network addresses are involved. This example uses the following layout - **adapt the addresses to match your own setup**. + +``` ++---------------------------+ +-----------------------------------+ +| FND Server | | Linux PC (host) | +| (RedHat VM) | | | +| ens192: fd00::2/64 +-------+ eno2: fd00::1/64 (LAN) | +| | LAN | wfan0: 2020:abcd::/64 | ++---------------------------+ | (TUN exposed by wfantund | + | container, accessible on host) | + +---+---------------------------+---+ + | | + (Docker IPv6 bridge) (Docker IPv6 bridge) + | | + +-------------+-------+ +--------------+------+ + | Linux Host | | wfantund | + | Docker Container | | Docker Container | + | +---+ | + | Runs border router |IPv6| Creates wfan0 TUN | + | software stack |tun | Exposes to host PC | + +----------+----------+ +---------------------+ + | + | (UART/USB) + | + +----------+----------+ + | TI Wi-SUN | + | Border Router Board| + +----------+----------+ + | + | (Wi-SUN RF) + | + +----------+----------+ + | TI Wi-SUN Mesh Node | + | CSMP Agent firmware | + | 2020:abcd::0212:... | + +---------------------+ +``` + +**Address summary for this guide:** + +| Component | Interface | IPv6 Address | Notes | +|-----------|-----------|-------------|-------| +| FND VM | ens192 | `fd00::2/64` | On physical LAN | +| Linux PC | eno2 | `fd00::1/64` | On physical LAN | +| Linux PC | wfan0 | `2020:abcd::/64` | TUN exposed by wfantund container | +| Linux PC | br-xxxx (Docker bridge) | `fddb:a737:317c::1` | Gateway for both containers | +| Linux Host container | eth0 | `fddb:a737:317c::x` | Talks to border router via UART; tunnels to wfantund | +| wfantund container | eth0 | `fddb:a737:317c::2` | Connects to Linux Host via IPv6 tunnel | +| TI Wi-SUN mesh node | Wi-SUN | `2020:abcd::0212:4b00:xxxx` | Address assigned by border router | + +> **Note on addresses:** All addresses above are examples — adapt them to your own setup. `fd00::/64` is the ULA prefix shared between the Linux PC and FND on the physical LAN. `fddb:a737:317c::/64` is the Docker bridge subnet used by both containers. `2020:abcd::/64` is the Wi-SUN mesh prefix assigned by wfantund. + + +--- + +## 4. Part A: Configure the NMS Address + +The CSMP Agent firmware needs to know the IPv6 address of your FND server at **compile time**. This setting applies to all boards from a single shared file. + +### Step A.1 - Open router.opts + +```bash +# Run from the csmp-agent-lib root directory +cd /path/to/csmp-agent-lib +nano Vendors/TI/application/defines/router.opts +``` + +**File location:** `csmp-agent-lib/Vendors/TI/application/defines/router.opts` + +This file is shared by all boards. Changing it once updates the NMS address for every board in the next build. + +### Step A.2 - Set the FND address + +Find this line: + +``` +-DCSMP_AGENT_NMS_ADDRESS=\"fd00::3\" +``` + +Replace `fd00::3` with your FND server's actual IPv6 address: + +``` +-DCSMP_AGENT_NMS_ADDRESS=\"\" +``` + +For example, if FND is at `fd00::2`: + +``` +-DCSMP_AGENT_NMS_ADDRESS=\"fd00::2\" +``` + +Save and close (`Ctrl+X`, `Y`, `Enter` in nano). + +--- + +## 5. Part B: Build the CSMP Firmware + +The build requires only two things: the SimpleLink CC13xx/CC26xx SDK and the TI ARM Clang compiler. There are **three files to edit** before your first build. + +> **Setup checklist — complete these once per machine, then never again:** +> +> | # | File to edit | Variable to set | What it controls | +> |---|-------------|-----------------|-----------------| +> | 1 | `csmp-agent-lib/sample/ti_simplelink_wisun.target` | `SIMPLELINK_SDK_LINUX` | SDK path for board firmware builds | +> | 2 | `csmp-agent-lib/ti_simplelink_wisun.target` | `SIMPLELINK_SDK_LINUX` | SDK path for CSMP library build | +> | 3 | `/imports.mak` | `SYSCONFIG_TOOL` + `TICLANG_ARMCOMPILER` | SysConfig and compiler tool paths | + +--- + +### Step B.1 - Set the SDK path in the two build target files + +There are two build target files that need the SDK path. Open each and update `SIMPLELINK_SDK_LINUX` to your actual SDK directory. + +**File 1:** `csmp-agent-lib/sample/ti_simplelink_wisun.target` + +```bash +nano /path/to/csmp-agent-lib/sample/ti_simplelink_wisun.target +``` + +Find and edit this line: + +```makefile +# EDIT THIS — set to your SDK installation directory +SIMPLELINK_SDK_LINUX = /path/to/simplelink_cc13xx_cc26xx_sdk +``` + +**File 2:** `csmp-agent-lib/ti_simplelink_wisun.target` (the root-level file, one directory up from `sample/`) + +```bash +nano /path/to/csmp-agent-lib/ti_simplelink_wisun.target +``` + +Find and edit the same variable: + +```makefile +# EDIT THIS — same SDK path as above +SIMPLELINK_SDK_LINUX = /path/to/simplelink_cc13xx_cc26xx_sdk +``` + +> Both files must have the same SDK path. File 1 controls the board firmware builds. File 2 controls the CSMP library compilation. + +--- + +### Step B.2 - Run the build + +Once the three files above are configured, build from the csmp-agent-lib root: + +```bash +cd /path/to/csmp-agent-lib + +# Make the build script executable (only needed once) +chmod 777 build.sh + +# Build firmware for all supported boards +./build.sh ti_simplelink_wisun +``` + +The build does three things in sequence: +1. Compiles the CSMP Agent library into `csmp_agent_lib_ti_simplelink_wisun.a` +2. Moves the `.a` file into the `sample/` directory +3. Loops over every board under `Vendors/TI/*/csmp_example_tirf/freertos/ticlang/`, running SysConfig, compiling the board-specific glue/HAL layer from source, and linking against the SDK's prebuilt Wi-SUN libraries — all five boards are built in one pass + +### Step B.3 - Confirm the output + +A successful build ends with output similar to: + +``` +########## start building...########## +... +Archiving build/debug/csmp_agent_lib_ti_simplelink_wisun.a +Done. +... +--- Building: .../Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/ --- +Generating configuration files... generation complete +Building application_main.obj ... linking ns_node_csmp.out ... building ns_node_csmp.hex +--- Building: .../Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ --- +... +--- Building: .../Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/ --- +... +--- Building: .../Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/ --- +... +--- Building: .../Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/ --- +... + +All boards built. Output .hex files: +Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +``` + +The file you will flash to your specific board is: + +``` +Vendors/TI//csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +``` + +For example, for LP-CC1352P7-1: +``` +Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +``` + +### Step B.4 - Clean the build + +To remove all build artifacts (library, objects, and board hex): + +```bash +./build.sh clean +``` + +### Step B.5 - If the build fails + +Common issues: + +| Error | Fix | +|-------|-----| +| `tiarmclang: not found` | `TICLANG_ARMCOMPILER` not set in the SDK's `imports.mak` | +| `tiarmclang: Permission denied` | Run `chmod +x /path/to/ti-cgt-armllvm_X.X.X.LTS/bin/*` — execute bit missing from tarball extraction | +| `sysconfig_cli.sh: not found` | `SYSCONFIG_TOOL` not set in the SDK's `imports.mak` | +| `imports.mak: No such file` | `SIMPLELINK_SDK_LINUX` in `sample/ti_simplelink_wisun.target` or root `ti_simplelink_wisun.target` points to wrong path | +| `product.json: No such file` | SDK path is correct but the SDK is corrupted — re-install it | + +--- + +## 6. Part C: Pre-provision the Device in Cisco FND + +Before the mesh node can register, FND must have the device's identity in its database. + +For full device provisioning steps, refer to the TPD integration guide included in this repository: + +``` +docs/Cisco FND-OpenCSMP TPD Integration Guide.pdf +``` + +When adding the device in FND, register it as device type **CC13XX**. + +--- + +## 7. Part D: Set Up the Border Router (wfantund in Docker) + +This part sets up **two Docker containers** that run on the Linux PC: +Refer to https://github.com/TexasInstruments/ti-wisunfantund for complete setup. + +- **Linux Host container** — connects to the border router board over UART, runs the border router software stack, and communicates with the wfantund container over an IPv6 tunnel. +- **wfantund container** — runs the wfantund daemon, terminates the IPv6 tunnel from the Linux Host container, and creates the `wfan0` TUN interface on the Linux PC host. + +Both containers are started from the `lprf-dallas-wisun-wfantund` repository using `docker-compose`. + +--- + +## 8. Part E: Flash the TI Device (CSMP Agent Mesh Node) + +### Step E.1 - Install TI UniFlash + +Download UniFlash from [https://www.ti.com/tool/UNIFLASH](https://www.ti.com/tool/UNIFLASH) and install it on your machine. Alternatively, use the `dslite` command-line flasher that ships with UniFlash or Code Composer Studio. + +### Step E.2 - Connect the mesh node board + +Plug the LaunchPad that will run the CSMP Agent (your chosen board from the supported list) into your machine via USB. + + +### Step E.3 - Flash using TI UniFlash GUI + +1. Open UniFlash +2. Click **"Start"** and select your device type +3. In the **"Program"** tab, browse to the `.hex` file for your board: + `Vendors/TI//csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex` +4. Click **"Load Image"** +5. Wait for "Program Load completed successfully" + +### Step E.4 - Verify the device is running + +Open a serial terminal to observe the device boot log: + + +You should see the device boot and Wi-SUN stack initializing. Keep this terminal open - you will see registration logs later. + +--- + +## 9. Part F: Configure IPv6 Routing + +This is the most critical part of the setup. The goal is to make packets flow in both directions: + +- **Forward:** mesh node sends CoAP to `fd00::2` (FND) -> Linux host routes it -> FND receives it +- **Return:** FND replies to `2020:abcd::xxxx` -> FND routes to Linux host -> Linux host forwards into mesh via wfan0 + +There are two sub-scenarios depending on whether wfantund runs directly on the Linux host or inside Docker. **This guide covers the Docker case**, which requires more routing configuration. + +### Step F.1 - Assign static IPv6 addresses (Linux host) + +Both the Linux host and FND only have link-local IPv6 by default (`fe80::`). Link-local addresses do not route, so you must assign static ULA addresses. + +On the **Linux host**: + +```bash +# Assign a static ULA address to the physical LAN interface +# Replace "eno2" with your actual interface name (check with: ip link show) +sudo ip -6 addr add fd00::1/64 dev eno2 + +# Verify +ip -6 addr show eno2 +# Expected output includes: +# inet6 fd00::1/64 scope global +``` + +To find your interface name if it is not `eno2`: + +```bash +ip link show +# Look for the interface connected to the LAN (not lo, not docker0) +``` + +### Step F.2 - Assign static IPv6 address (FND VM) + +On the **FND server** : + +```bash +# Assign a static ULA address - same /64 as the Linux host +sudo ip -6 addr add fd00::2/64 dev ens192 + +# Verify +ip -6 addr show ens192 +# Expected output includes: +# inet6 fd00::2/64 scope global +``` + +To find the correct interface on FND: + +```bash +ip link show +# Look for the interface on the same LAN as the Linux host +``` + +### Step F.3 - Enable IPv6 forwarding on the Linux host + +Without this, Linux host receives packets arriving on `eno2` but will not route them to the Docker bridge (`br-xxxx`), and vice versa. + +```bash +sudo sysctl -w net.ipv6.conf.all.forwarding=1 + +# Verify +sysctl net.ipv6.conf.all.forwarding +# Expected: net.ipv6.conf.all.forwarding = 1 +``` + +### Step F.4 - Open Docker firewall rules on the Linux host + +Docker adds firewall rules that block packets from outside the Docker bridge. You need to explicitly allow traffic between the LAN interface and the Docker bridge. + +First, find your Docker bridge interface name: + +```bash +docker network ls +# Find the network used by the wfantund container (e.g., "wisunfan_network") + +docker network inspect wisunfan_network | grep -i "br-" +# Note the bridge interface name, e.g., br-f76e88221080 +``` + +Now add the rules (replace `br-f76e88221080` with your actual bridge name): + +```bash +# Allow traffic from LAN into Docker bridge +sudo ip6tables -I DOCKER-USER -i eno2 -o br-f76e88221080 -j ACCEPT + +# Allow traffic from Docker bridge back to LAN +sudo ip6tables -I DOCKER-USER -i br-f76e88221080 -o eno2 -j ACCEPT +``` + +### Step F.5 - Fix Docker's raw table DROP rule (critical) + +Docker adds a `PREROUTING` rule in the `raw` table that silently drops any packet destined for a container address if the packet did NOT arrive on the Docker bridge. This runs before routing and before the filter table - it is invisible to most debugging tools. You must insert an ACCEPT rule before it. + +Find your container's IPv6 address on the Docker bridge: + +```bash +docker inspect wfantund | grep -i "globalipv6" +# Note the IPv6 address, e.g., fddb:a737:317c::2 +``` + +Add the rule (replace the address with your container's actual IPv6): + +```bash +sudo ip6tables -t raw -I PREROUTING -i eno2 -d fddb:a737:317c::2 -j ACCEPT +``` + +> **Why this matters:** Without this rule, every packet FND sends to the container's Docker bridge address is silently dropped at the kernel level before any other rule even sees it. This was the root cause of the "101 dropped packets" issue seen during development. + +### Step F.6 - Save the ip6tables rules + +Docker rewrites its own chains on every restart but leaves `DOCKER-USER` and the `raw` table alone. Save the rules so they survive reboots: + +```bash +sudo apt install iptables-persistent # if not already installed +sudo netfilter-persistent save +``` + +This writes rules to `/etc/iptables/rules.v6` and restores them at boot before Docker starts. + +### Step F.7 - Add routes on FND + +FND needs to know how to reach the Docker bridge subnet and the Wi-SUN mesh subnet. Both paths go via the Linux host's `fd00::1` address. + +On the **FND server**: + +```bash +# Route to Docker bridge (where the container lives) +sudo ip -6 route add fddb:a737:317c::/64 via fd00::1 + +# Route to Wi-SUN mesh nodes +sudo ip -6 route add 2020:abcd::/64 via fd00::1 + +# Verify routes are added +ip -6 route show | grep -E "fddb|2020" +# Expected: +# fddb:a737:317c::/64 via fd00::1 dev ens192 +# 2020:abcd::/64 via fd00::1 dev ens192 +``` + +### Step F.8 - Configure forwarding inside the container + +Inside the wfantund container, enable IPv6 forwarding so it can forward between the `wfan0` TUN interface and the IPv6 tunnel (`eth0`) toward the Linux Host container. Also add a route back to FND's subnet. + +```bash +docker exec -it wfantund bash + +# Enable forwarding inside the container +sysctl -w net.ipv6.conf.all.forwarding=1 + +# Add route to FND's subnet via the Docker bridge gateway +# Replace fddb:a737:317c::1 with your Docker bridge gateway address +ip -6 route add fd00::/64 via fddb:a737:317c::1 dev eth0 + +# Verify +ip -6 route show +# Expected to include: +# fd00::/64 via fddb:a737:317c::1 dev eth0 +``` + +> **Note:** These container settings are lost when the container restarts. + +--- + +## 10. Part G: Verify End-to-End Connectivity + +Run these checks in order. Each one tests one hop in the chain. + +### Step G.1 - Linux host can reach FND + +```bash +# On Linux host +ping6 fd00::2 +# Expected: 64 bytes from fd00::2 icmp_seq=1 ttl=64 time=X ms +``` + +### Step G.2 - FND can reach Linux host + +```bash +# On FND VM +ping6 fd00::1 +# Expected: 64 bytes from fd00::1 icmp_seq=1 ttl=64 time=X ms +``` + +### Step G.3 - FND can reach the Docker container + +```bash +# On FND VM +ping6 fddb:a737:317c::2 +# Expected: 64 bytes from fddb:a737:317c::2 icmp_seq=1 ttl=63 time=X ms +# (ttl=63 because it hops through the Linux host) +``` + +If this fails, the most likely cause is the raw table DROP rule (Step F.5) was not applied. + +### Step G.4 - Container can reach FND + +```bash +# Inside the wfantund container +docker exec -it wfantund ping6 fd00::2 +# Expected: 64 bytes from fd00::2 icmp_seq=1 ttl=64 time=X ms +``` + +--- + +## 11. What Success Looks Like (Logs) + +### wfantund container logs (border router side) + +After the mesh node powers on and the Wi-SUN network is operational, you should see the mesh node join the network. Inside the wfantund container: + +``` +[wfantund] INFO: Node joined: 2020:abcd::0212:4b00:1234:5678 +[wfantund] INFO: Routing table updated: 2020:abcd::0212:4b00:1234:5678/128 +``` + +### Mesh node serial terminal logs (CSMP Agent) + +On the serial terminal connected to the mesh node board, you should see: + +``` +[Wi-SUN] INFO: Stack initialized +[Wi-SUN] INFO: Joining network "CSMP_WISUN"... +[Wi-SUN] INFO: Network joined. Assigned address: 2020:abcd::0212:4b00:1234:5678 +[CSMP] INFO: Starting CSMP Agent +[CSMP] INFO: NMS address: fd00::2 +[CSMP] INFO: Sending registration to fd00::2 ... +[CSMP] INFO: Registration response received (200 OK) +[CSMP] INFO: Registered successfully. Next registration in 600s +``` + +The key line is `Registration response received (200 OK)`. This means: +1. The mesh node sent a CoAP POST to FND at `fd00::2` +2. The packet traveled: mesh node -> border router -> Linux Host container -> wfantund container -> wfan0 -> Linux PC -> FND +3. FND accepted the registration and replied +4. The reply traveled: FND -> Linux host -> container -> border router -> mesh node +5. The mesh node received the acknowledgment + +### Cisco FND UI + +Log into the FND web interface. Navigate to **Devices > Field Devices**. Your mesh node should appear with: +- Status: **Up** +- IP Address: `2020:abcd::0212:4b00:xxxx` +- Last Registration: recent timestamp + diff --git a/Vendors/TI/application/advanced_config.h b/Vendors/TI/application/advanced_config.h new file mode 100644 index 0000000..5927fc0 --- /dev/null +++ b/Vendors/TI/application/advanced_config.h @@ -0,0 +1,92 @@ +/****************************************************************************** + + @file advanced_config.h + + @brief Advanced Configuration to Modify CSMA Parameters + + Group: WCS LPC + $Target Device: DEVICES $ + + ****************************************************************************** + $License: BSD3 2016 $ + ****************************************************************************** + $Release Name: PACKAGE NAME $ + $Release Date: PACKAGE RELEASE DATE $ + *****************************************************************************/ +#ifndef _ADVANCED_CONFIG_H_ +#define _ADVANCED_CONFIG_H_ + +/****************************************************************************** + Includes + *****************************************************************************/ + +/* Enable or disable EDFE Mode */ +#define ENABLE_WISUN_EDFE_APPL (false) + +/* Number of max data retries */ +#define CONFIG_MAX_RETRIES (5) + +/* Max number of message failure to indicate sync loss */ +#define CONFIG_MAX_DATA_FAILURES (5) + +/*! MAC MAX CSMA Backoffs */ +#define CONFIG_MAC_MAX_CSMA_BACKOFFS (5) + +/* Coordinator short address when operating with FH enabled */ +#define FH_COORD_SHORT_ADDR (0xAABB) + +/*! + Maximum number of attempts for association in FH mode + after reception of a PAN Config frame + */ +#define CONFIG_FH_MAX_ASSOCIATION_ATTEMPTS (3) + +/*! + The number of non sleepy channel hopping end devices to be supported. + The stack will allocate memory proportional to the number of end devices + requested. + */ +#define FH_NUM_NON_SLEEPY_HOPPING_NEIGHBORS MAX_DEVICE_TABLE_ENTRIES + +/*! + The number of non sleepy fixed channel end devices to be supported. + It is to be noted that the total number of non sleepy devices supported + must be less than 50. Stack will allocate memory proportional + to the number of end devices requested. + */ +#define FH_NUM_NON_SLEEPY_FIXED_CHANNEL_NEIGHBORS (2) + +#ifndef WISUN_RCP_ENABLE +#if (FH_NUM_NON_SLEEPY_HOPPING_NEIGHBORS < 2) || (FH_NUM_NON_SLEEPY_FIXED_CHANNEL_NEIGHBORS < 2) +#error "You have an invalid value for FH neighbors. Set the values \ + for FH_NUM_NON_SLEEPY_HOPPING_NEIGHBORS and \ + FH_NUM_NON_SLEEPY_FIXED_CHANNEL_NEIGHBORS to at least 2" +#endif +#endif + +/*! + Dwell time (ms): The duration for which the collector will + stay on a specific channel before hopping to next channel. + */ +#define CONFIG_DWELL_TIME (250) + +/*! FH Poll/Sensor msg start time randomization window */ +#define CONFIG_FH_START_POLL_DATA_RAND_WINDOW (10000) + +#if (((CONFIG_PHY_ID >= APIMAC_MRFSK_STD_PHY_ID_BEGIN) && (CONFIG_PHY_ID <= APIMAC_MRFSK_GENERIC_PHY_ID_BEGIN)) || \ + ((CONFIG_PHY_ID >= APIMAC_GENERIC_US_915_PHY_132) && (CONFIG_PHY_ID <= APIMAC_GENERIC_ETSI_863_PHY_133))) +/*! PAN Advertisement Solicit trickle timer duration in milliseconds */ +#define CONFIG_PAN_ADVERT_SOLICIT_CLK_DURATION (6000) +/*! PAN Config Solicit trickle timer duration in milliseconds */ +#define CONFIG_PAN_CONFIG_SOLICIT_CLK_DURATION (6000) +#else +/*! PAN Advertisement Solicit trickle timer duration in milliseconds */ +#define CONFIG_PAN_ADVERT_SOLICIT_CLK_DURATION (60000) +/*! PAN Config Solicit trickle timer duration in milliseconds */ +#define CONFIG_PAN_CONFIG_SOLICIT_CLK_DURATION (60000) +#endif + +//FIXME +#define CONFIG_ROUTE_COST 0xFF + +#endif /* _ADVANCED_CONFIG_H_ */ diff --git a/Vendors/TI/application/application.c b/Vendors/TI/application/application.c new file mode 100644 index 0000000..d9c689c --- /dev/null +++ b/Vendors/TI/application/application.c @@ -0,0 +1,1809 @@ +/* + * Copyright (c) 2015-2026, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ======== application.c ======== + */ + +#ifndef WISUN_NCP_ENABLE +#undef EXCLUDE_TRACE +#endif +#include "mbed_config_app.h" +#include +#include +#include +#include +#include +#include +#include + +/* Driver Header files */ +#include +#include +#include + +/* Driver configuration */ +#include "ti_drivers_config.h" +#include "ti_wisunfan_config.h" + +#include "nsconfig.h" +#include "mesh_system.h" +#include "socket_api.h" +#include "ip6string.h" +#include "net_interface.h" +#include "wisun_tasklet.h" +#include "ns_trace.h" +#include "fhss_config.h" +#include "randLIB.h" +#include "ws_management_api.h" +#include "eventOS_event_timer.h" + +#include "6LoWPAN/ws/ws_common_defines.h" +#include "Common_Protocols/ipv6_constants.h" +#include "6LoWPAN/ws/ws_common.h" +#include "6LoWPAN/ws/ws_config.h" +#include "Core/include/ns_address_internal.h" +#include "NWK_INTERFACE/Include/protocol_abstract.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/ws/ws_bootstrap.h" +#include "NanostackTiRfPhy.h" + +#include "nsdynmemLIB.h" +#include "api_mac.h" + +#include "net_rpl.h" +#include "RPL/rpl_protocol.h" +#include "RPL/rpl_policy.h" +#include "RPL/rpl_control.h" +#include "RPL/rpl_objective.h" +#include "RPL/rpl_upward.h" +#include "RPL/rpl_downward.h" +#include "RPL/rpl_structures.h" +// #define WISUN_TEST_METRICS /* Commented out to reduce code size */ +#ifdef WISUN_NCP_ENABLE +/* OpenThread Internal/Example Header files */ +#include "otsupport/otrtosapi.h" +#include "openthread/ncp.h" +#include "platform/system.h" +#elif defined(COAP_SERVICE_ENABLE) +#include "coap_service_api.h" +#include "eventOS_event_timer.h" +#endif + +#include "application.h" +#include "ti_wisunfan_features.h" + +#ifdef COAP_OAD_ENABLE +#include "oad.h" +#endif + +#include "fh_map_direct.h" +#include "fh_pib.h" +#include "fh_nt.h" + +/* EUI64 derived from IPv6 link-local address via arm_net_address_get() */ + +/* NVOCMP — for OTA slot header persistence */ +#include "nvocmp.h" +#include "nvintf.h" + +/* CSMP agent library */ +#include "CsmpAgentLib_sample.h" +#include "CsmpAgentLib_sample_tlvs.h" + +/* Defined in sample/tlvs/ti_simplelink_wisun_tlvs.c — TI platform only */ +extern int8_t g_tx_power_dbm; +#include "csmp_service.h" +#include "osal.h" +#include "signature_verify.h" + +/****************************************************************************** +Defines & enums + *****************************************************************************/ +#define TRACE_GROUP ("main") +#define NOT_INITIALIZED -1 + +#ifdef COAP_SERVICE_ENABLE +#define COAP_JOIN_URI "join" +#define COAP_LED_URI "led" +#define COAP_RSSI_URI "rssi" +#define COAP_TEST_METRICS_URI "metrics" +#ifdef COAP_PANID_LIST +#define COAP_PANID_LIST_ALLOW_URI "panid/allow" +#define COAP_PANID_LIST_DENY_URI "panid/deny" +#define COAP_PANID_LIST_BULK_URI "panid/bulk" +#define COAP_PANID_REDISCOVER_URI "panid/rediscover" + +#define PANID_LIST_ACTION_ADD 0 +#define PANID_LIST_ACTION_DEL 1 + +#endif //COAP_PANID_LIST + +#define COAP_RLED_ID 0 +#define COAP_GLED_ID 1 + +#ifdef COAP_PANID_LIST +#define PAN_REDISCOVER_BLINK_TIMER_ID 0 +#define PAN_REDISCOVER_JOIN_RESP_TIMER_ID 1 + +#define PAN_REDISCOVER_JOIN_TIMEOUT_SEC 1800 // 30 min +#define PAN_REDISCOVER_JOIN_REQ_TIMEOUT_SEC 2 // 2 sec + +typedef enum pan_rediscover_evt { + PAN_REDISCOVER_INIT_EVT = 0, + PAN_REDISCOVER_START_EVT = 1, + PAN_REDISCOVER_WAIT_EVT = 2, + PAN_REDISCOVER_JOIN_EVT = 3, + PAN_REDISCOVER_RESTART_EVT = 4, +} pan_rediscover_evt_t; +#endif //COAP_PANID_LIST + +#endif // COAP_SERVICE_ENABLE + +typedef enum connection_status { + CON_STATUS_LOCAL_UP = 0, /*!< local IP address set */ + CON_STATUS_GLOBAL_UP = 1, /*!< global IP address set */ + CON_STATUS_DISCONNECTED = 2, /*!< no connection to network */ + CON_STATUS_CONNECTING = 3, /*!< connecting to network */ + CON_STATUS_ERROR_UNSUPPORTED = 4 +} connection_status_t; + + +/****************************************************************************** + Static & Global Variables + *****************************************************************************/ +static connection_status_t _connect_status; +/*static*/ volatile bool connectedFlg = false; +/*static*/ int8_t interface_id = NOT_INITIALIZED; +static bool _blocking = false; +static bool _configured = false; + +/* pNV is defined and initialized by main.c via NVOCMP_loadApiPtrs(). + * Declare extern here so application.c and osal_ti_simplelink_wisun.c can use it. */ +extern NVINTF_nvFuncts_t *pNV; + +#ifdef NWK_TEST +uint32_t ticks_before_joining = 0; +uint32_t ticks_after_joining = 0; +#endif //NWK_TEST + +#ifdef COAP_SERVICE_ENABLE +int8_t service_id = -1; +static uint8_t led_state[2]; + +#ifdef COAP_PANID_LIST +static int8_t pan_rediscover_tasklet_id = -1; +extern uint16_t panid_list_clear_timeout_sec; +#endif + +#endif + +#ifdef WISUN_NCP_ENABLE +int8_t ncp_tasklet_id = -1; +otInstance *OtStack_instance = NULL; + +otError nanostack_net_if_up(void); +otError nanostack_net_stack_up(void); +#ifdef WISUN_AUTO_START +static inline void auto_start_assert_led(); +static inline void autoStartSignal(); +#endif //WISUN_AUTO_START +#endif //WISUN_NCP_ENABLE + +#ifdef WISUN_TEST_METRICS +static uint32_t num_pkts = 0; +#endif + +#ifdef TI_WISUN_FAN_DEBUG +bool disable_ns_messages = false; +#endif + +/* variables to help fetch rssi of neighbor nodes */ +uint8_t cur_num_nbrs; +uint8_t nbr_idx = 0; +nbr_node_metrics_t nbr_nodes_metrics[SIZE_OF_NEIGH_LIST]; + +uint8_t get_current_net_state(void); + +ti_wisun_config_t ti_wisun_config = +{ + .rapid_join = FEATURE_RAPID_JOIN_ENABLE, + .network_size_config = FEATURE_NETWORK_PROFILE, + .mpl_low_latency = FEATURE_MPL_LOW_LATENCY_ENABLE, + .rapid_disconnect_detect_br = FEATURE_RAPID_DISCONNECT_DETECT_BR_SEC, + .rapid_disconnect_detect_rn = FEATURE_RAPID_DISCONNECT_DETECT_RN_SEC, + .auth_type = NETWORK_AUTH_TYPE, + .use_fixed_gtk_keys = false, + .force_star_topology = FEATURE_FORCE_STAR_TOPOLOGY, + .use_dhcp_solicit_for_renew = true, + .fixed_gtk_keys = { + FIXED_GTK_KEY_1, + FIXED_GTK_KEY_2, + FIXED_GTK_KEY_3, + FIXED_GTK_KEY_4, + } +}; + +// Unused by non-border routers +ti_br_config_t ti_br_config = {0}; + +configurable_props_t cfg_props = +{ + .phyTxPower = CONFIG_TRANSMIT_POWER, + .ccaDefaultdBm = CONFIG_CCA_THRESHOLD, + .uc_channel_function = CONFIG_CHANNEL_FUNCTION, + .uc_fixed_channel = CONFIG_UNICAST_FIXED_CHANNEL_NUM, + .uc_dwell_interval = CONFIG_UNICAST_DWELL_TIME, + .bc_channel_function = 0, + .bc_fixed_channel = 0, + .bc_interval = 0, + .bc_dwell_interval = 0, + .pan_id = CONFIG_PAN_ID, + .network_name = CONFIG_NETNAME, + .bc_channel_list = CONFIG_BROADCAST_CHANNEL_MASK, + .uc_channel_list = CONFIG_UNICAST_CHANNEL_MASK, + .async_channel_list = CONFIG_ASYNC_CHANNEL_MASK, + .wisun_device_type = CONFIG_WISUN_DEVICE_TYPE, + .ch0_center_frequency = CONFIG_CENTER_FREQ * 1000, + .config_channel_spacing = CONFIG_CHANNEL_SPACING, + .config_number_of_channels = CONFIG_TOTAL_CHANNELS, + .config_phy_id = CONFIG_PHY_ID, + .config_reg_domain = CONFIG_REG_DOMAIN, + .operating_class = CONFIG_OP_MODE_CLASS, + .operating_mode = CONFIG_OP_MODE_ID, + .config_chan_plan = 0, + .config_chan_plan_id = 255, //value to be generated by sysconfig if channel plan id is not used + .hwaddr = CONFIG_INVALID_HWADDR, +#ifdef WISUN_FAN_CORE_1_1 + .mdr_enable = 0 , + .num_phy_mode = 1, + .Phy_Mode_Id = {CONFIG_PHY_ID}, +#endif + .channel_page = CONFIG_CHANNEL_PAGE, + .rx_on_when_idle = true, // LFN not currently supported +#ifdef FEATURE_FULL_FUNCTION_DEVICE + .ffd = true, +#else + .ffd = false, +#endif + .regulatory_channel_list = CONFIG_REGULATION_CHANNEL_MASK, +}; + + +/****************************************************************************** +Function declarations Local & Global + *****************************************************************************/ +#ifdef FEATURE_TIMAC_SUPPORT +extern void timacExtaddressRegister(); +#endif + +mesh_error_t nanostack_wisunInterface_bringup(); +mesh_error_t nanostack_wisunInterface_connect(bool blocking); +void nanostack_wait_till_connect(); + +#ifdef WISUN_NCP_ENABLE +extern void platformNcpSendProcess(); +extern void platformNcpSendAsyncProcess(); +#endif + +#ifdef COAP_SERVICE_ENABLE +static void pan_rediscover_tasklet_start(void); +static void pan_rediscover_update(uint8_t event_type); +static void pan_rediscover_tasklet(arm_event_s *event); +static int coap_recv_cb(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr); +static int coap_recv_cb_rssi(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr); +static int coap_panid_list_cb(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr); + +#ifdef WISUN_TEST_METRICS +static int coap_recv_cb_tstmetrics(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr); +#endif +#endif + +#ifdef WISUN_TEST_METRICS +void get_test_metrics(test_metrics_s *test_metrics); +#endif + +/****************************************************************************** +Function definitions + *****************************************************************************/ + +/*! + * Callback for handling any status while a node is joining a network. + */ +void nanostackNetworkHandler(mesh_connection_status_t status) +{ + tr_debug("nanostackNetworkHandler: %x", status); + + if (_blocking) { + if (_connect_status == CON_STATUS_CONNECTING + && (status == MESH_CONNECTED || status == MESH_CONNECTED_LOCAL + || status == MESH_CONNECTED_GLOBAL)) { + connectedFlg = true; + } else if (status == MESH_DISCONNECTED) { + connectedFlg = false; + } + } + + if (status == MESH_CONNECTED) { + uint8_t temp_ipv6_global[16]; + uint8_t temp_ipv6_local[16]; + if (arm_net_address_get(interface_id, ADDR_IPV6_LL, temp_ipv6_local) == 0) { + tr_info("nanostackNetworkHandler: CON_STATUS_LOCAL_UP, IP %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", + temp_ipv6_local[0], temp_ipv6_local[1], + temp_ipv6_local[2], temp_ipv6_local[3], + temp_ipv6_local[4], temp_ipv6_local[5], + temp_ipv6_local[6], temp_ipv6_local[7], + temp_ipv6_local[8], temp_ipv6_local[9], + temp_ipv6_local[10], temp_ipv6_local[11], + temp_ipv6_local[12], temp_ipv6_local[13], + temp_ipv6_local[14], temp_ipv6_local[15]); + _connect_status = CON_STATUS_LOCAL_UP; + } + if (arm_net_address_get(interface_id, ADDR_IPV6_GP, temp_ipv6_global) == 0 + && (memcmp(temp_ipv6_global, temp_ipv6_local, 16) != 0)) { + tr_info("nanostackNetworkHandler: CON_STATUS_GLOBAL_UP, IP %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", + temp_ipv6_global[0], temp_ipv6_global[1], + temp_ipv6_global[2], temp_ipv6_global[3], + temp_ipv6_global[4], temp_ipv6_global[5], + temp_ipv6_global[6], temp_ipv6_global[7], + temp_ipv6_global[8], temp_ipv6_global[9], + temp_ipv6_global[10], temp_ipv6_global[11], + temp_ipv6_global[12], temp_ipv6_global[13], + temp_ipv6_global[14], temp_ipv6_global[15]); + _connect_status = CON_STATUS_GLOBAL_UP; + } + } else if (status == MESH_CONNECTED_LOCAL) { + tr_info("nanostackNetworkHandler: CON_STATUS_LOCAL_UP"); + _connect_status = CON_STATUS_LOCAL_UP; + } else if (status == MESH_CONNECTED_GLOBAL) { + tr_info("nanostackNetworkHandler: CON_STATUS_GLOBAL_UP"); + _connect_status = CON_STATUS_GLOBAL_UP; + } else if (status == MESH_BOOTSTRAP_STARTED || status == MESH_BOOTSTRAP_FAILED) { + tr_info("nanostackNetworkHandler: CON_STATUS_CONNECTING"); + _connect_status = CON_STATUS_CONNECTING; + } else { + _connect_status = CON_STATUS_DISCONNECTED; + tr_info("nanostackNetworkHandler: CON_STATUS_DISCONNECTED"); + } +} + +/*! + * Configure the network settings like network name, + * regulatory domain etc. before starting the network + */ +extern const char *ti154stack_lib_version; +extern const char *ti154stack_lib_date; +extern const char *ti154stack_lib_time; +extern const char *wisun_stack_version; +extern const char *wisun_protocol_version; +mesh_error_t nanostack_wisunInterface_configure(void) +{ + int32_t ret; + + tr_info("Library info | Date: %s, Time: %s, Version: %s", ti154stack_lib_date, ti154stack_lib_time, + ti154stack_lib_version); + tr_info("Wi-SUN stack version: %s, Wi-SUN protocol version: %s", wisun_stack_version, wisun_protocol_version); + + if (_configured) { + // Already configured + return MESH_ERROR_NONE; + } +#ifndef TI_WISUN_FAN_OPT + ret = ws_management_network_name_set(interface_id, cfg_props.network_name); + if (ret < 0) { + return MESH_ERROR_PARAM; + } + + + ret = ws_management_regulatory_domain_set(interface_id, CONFIG_REG_DOMAIN, + CONFIG_OP_MODE_CLASS, + CONFIG_OP_MODE_ID); + if (ret < 0) { + return MESH_ERROR_PARAM; + } + + + ret = ws_management_fhss_unicast_channel_function_configure(interface_id, cfg_props.uc_channel_function, + cfg_props.uc_fixed_channel, + cfg_props.uc_dwell_interval); + if (ret < 0) { + return MESH_ERROR_PARAM; + } + + + ret = ws_management_fhss_broadcast_channel_function_configure(interface_id, cfg_props.bc_channel_function, + cfg_props.bc_fixed_channel, + cfg_props.bc_dwell_interval, + cfg_props.bc_interval); + if (ret < 0) { + return MESH_ERROR_PARAM; + } + + ret = ws_management_channel_mask_set(interface_id, cfg_props.uc_channel_list, NULL); + if (ret < 0) { + return MESH_ERROR_PARAM; + } + + ret = ws_management_network_size_set(interface_id, MBED_CONF_MBED_MESH_APP_WISUN_NETWORK_SIZE); + if (ret < 0) { + return MESH_ERROR_PARAM; + } +#else + ws_cfg_set_intferface_all(); +#endif //TI_WISUN_FAN_OPT + + _configured = true; + return MESH_ERROR_NONE; +} + +/*! + * + */ +mesh_error_t nanostack_wisunInterface_bringup() +{ + int8_t device_id = 0; + +#ifdef WISUN_RCP_ENABLE + device_id = NanostackTiRfPhy_rf_register(); +#else +#ifndef FEATURE_TIMAC_SUPPORT + NanostackTiRfPhy_init(); + device_id = NanostackTiRfPhy_rf_register(); +#else + timacExtaddressRegister(); +#endif +#endif + // After the RF is up, we can seed the random from it. + randLIB_seed_random(); + + wisun_tasklet_init(); + + interface_id = wisun_tasklet_network_init(device_id); + if (interface_id < 0) { + return MESH_ERROR_UNKNOWN; + } + + return MESH_ERROR_NONE; +} + +/*! + * Connect to the Wi-SUN network. Should be called only after calling + * nanostack_wisunInterface_bringup(). This function also submits + * the network handler function for handling different events + * during the connection process, while calling "connect". + * Only blocking mode has been tested. So, it is recommended for + * the input parameter blocking to be set to true. + */ +mesh_error_t nanostack_wisunInterface_connect(bool blocking) +{ + + int8_t tasklet_id; + + _blocking = blocking; + + tasklet_id = wisun_tasklet_connect(nanostackNetworkHandler, interface_id); + + if (tasklet_id < 0) { + return MESH_ERROR_UNKNOWN; + } + + return MESH_ERROR_NONE; +} + +/*! + * Connect to the Wi-SUN network. Should be called only after calling + * nanostack_wisunInterface_bringup(). + * It is recommended to start the node join process in blocking mode + */ +void nanostack_wait_till_connect() +{ + uint8_t _net_state; + if (_blocking) + { +#ifdef NWK_TEST + ticks_before_joining = ClockP_getSystemTicks(); +#endif //NWK_TEST + + // wait till connection goes through + while(connectedFlg == false) + { + /* Toggle red LED at rate of state*100 ms. Slower the blinking, closer it is to joining */ + _net_state = get_current_net_state(); + usleep((_net_state + 1) * 100000); + // max usleep value possible is 1000000 + GPIO_toggle(CONFIG_GPIO_RLED); + } + /* Solid Green to Indicate that node has Joined */ + GPIO_write(CONFIG_GPIO_RLED, CONFIG_GPIO_LED_OFF); + GPIO_write(CONFIG_GPIO_GLED, CONFIG_GPIO_LED_ON); +#ifdef NWK_TEST + ticks_after_joining = ClockP_getSystemTicks(); +#endif //NWK_TEST + } +} + +#if !defined(WISUN_NCP_ENABLE) && !defined(NWK_TEST) + +static void btn_interrupt_handler(uint8_t index) +{ + if(index == CONFIG_GPIO_BTN1) + { + } + else if(index == CONFIG_GPIO_BTN2) + { + /* Button 2: Reserved for future functionality */ + } +} +#endif //WISUN_NCP_ENABLE, NWK_TEST + +#ifdef COAP_SERVICE_ENABLE +#ifdef COAP_PANID_LIST +static void pan_rediscover_tasklet_start(void) +{ + pan_rediscover_tasklet_id = eventOS_event_handler_create( + &pan_rediscover_tasklet, + PAN_REDISCOVER_INIT_EVT); +} + +static void pan_rediscover_update(uint8_t event_type) +{ + arm_event_s event = { + .sender = 0, + .receiver = pan_rediscover_tasklet_id, + .priority = ARM_LIB_LOW_PRIORITY_EVENT, + .event_type = event_type, + .event_id = 0, + .event_data = 0 + }; + eventOS_event_send(&event); +} + +extern void read_mac_addr(uint8_t *mac_addr); +static void pan_rediscover_tasklet(arm_event_s *event) +{ + pan_rediscover_evt_t event_type; + protocol_interface_info_entry_t *cur; + uint8_t net_state = 0; + uint16_t blink_rate; + int32_t ret; + uint8_t hwAddr[8]; + + event_type = (pan_rediscover_evt_t) event->event_type; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + + switch (event_type) { + // Init event called after tasklet creation + case PAN_REDISCOVER_INIT_EVT: + break; + case PAN_REDISCOVER_START_EVT: + GPIO_write(CONFIG_GPIO_RLED, CONFIG_GPIO_LED_OFF); + GPIO_write(CONFIG_GPIO_GLED, CONFIG_GPIO_LED_OFF); + pan_rediscover_update(PAN_REDISCOVER_WAIT_EVT); + break; + case PAN_REDISCOVER_WAIT_EVT: + net_state = get_current_net_state(); + if(net_state != 5) + { + // Toggle red LED at rate of state*100 ms. Slower the blinking, closer it is to joining + blink_rate = (net_state + 1) * 100; + GPIO_toggle(CONFIG_GPIO_RLED); + + // Timer to recheck net_state (toggles LED just as in initial join) + eventOS_event_timer_request(PAN_REDISCOVER_BLINK_TIMER_ID, PAN_REDISCOVER_WAIT_EVT, + pan_rediscover_tasklet_id, blink_rate); + } + else + { + // Solid Green to Indicate that node has joined + GPIO_write(CONFIG_GPIO_RLED, CONFIG_GPIO_LED_OFF); + GPIO_write(CONFIG_GPIO_GLED, CONFIG_GPIO_LED_ON); + // Cancel the timeout timer as we have successfully joined + pan_rediscover_update(PAN_REDISCOVER_JOIN_EVT); + } + break; + case PAN_REDISCOVER_JOIN_EVT: + // Get current HW address and add to payload + read_mac_addr(hwAddr); + // CoAP message to indicate to BR that new device has joined + coap_service_request_send(service_id, 0, cur->border_router_setup->border_router_gp_adr, + COAP_PORT, COAP_MSG_TYPE_NON_CONFIRMABLE, COAP_MSG_CODE_REQUEST_POST, + COAP_JOIN_URI, COAP_CT_TEXT_PLAIN, hwAddr, 8, NULL); + // Timer to initiate panid list clear and restart joining process (in case join is lost) + // Cancelled if bulk panid list set is sent to COAP_PANID_LIST_BULK_URI + eventOS_event_timer_request(PAN_REDISCOVER_JOIN_RESP_TIMER_ID, PAN_REDISCOVER_RESTART_EVT, + pan_rediscover_tasklet_id, 1000*PAN_REDISCOVER_JOIN_REQ_TIMEOUT_SEC); + break; + case PAN_REDISCOVER_RESTART_EVT: + // Cancel lingering wait event if it is still in the event queue + eventOS_event_timer_cancel(PAN_REDISCOVER_BLINK_TIMER_ID, pan_rediscover_tasklet_id); + api_panid_filter_list_remove(PANID_ALLOW_LIST_E, 0, true); + api_panid_filter_list_remove(PANID_DENY_LIST_E, 0, true); + nanostack_net_stack_restart(true); + pan_rediscover_update(PAN_REDISCOVER_START_EVT); + break; + default: + break; + } // switch(event_type) +} +#endif // COAP_PANID_LIST + + +/*! + * Callback for processing received coap message + */ +static int coap_recv_cb(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr) +{ + + if (request_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) + { + // Send LED states as [RLED_STATE, GLED_STATE] in CoAP response payload + led_state[COAP_RLED_ID] = GPIO_read(CONFIG_GPIO_RLED); + led_state[COAP_GLED_ID] = GPIO_read(CONFIG_GPIO_GLED); + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_CONTENT, + COAP_CT_TEXT_PLAIN, (uint8_t *) &led_state, sizeof(led_state)); + } + else if (request_ptr->msg_code == COAP_MSG_CODE_REQUEST_POST || + request_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT) + { + bool success = true; + if (request_ptr->payload_len != 2 || request_ptr->payload_ptr == NULL) + { + // Invalid payload length + success = false; + } + else if ((request_ptr->payload_ptr[0] != 0 && request_ptr->payload_ptr[0] != 1) || + (request_ptr->payload_ptr[1] != 0 && request_ptr->payload_ptr[1] != 1)) + { + // Invalid payload contents + success = false; + } + else + { + // Set LED state from payload: [target LED, LED state] + if (request_ptr->payload_ptr[0] == COAP_RLED_ID) + { + GPIO_write(CONFIG_GPIO_RLED, request_ptr->payload_ptr[1]); + } + else if (request_ptr->payload_ptr[0] == COAP_GLED_ID) + { + GPIO_write(CONFIG_GPIO_GLED, request_ptr->payload_ptr[1]); + } + else + { + success = false; + } + } + + if (success) + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_CHANGED, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + else + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_BAD_REQUEST, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + } + else + { + // Delete resource not supported + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + return 0; +} + +#ifdef WISUN_TEST_METRICS +/*! + * Callback for processing received coap message for Test metrics + */ +static int coap_recv_cb_tstmetrics(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr) +{ + if (request_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) + { + test_metrics_s test_metrics; + // Send test metrics data + get_test_metrics(&test_metrics); + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_CONTENT, + COAP_CT_TEXT_PLAIN, (uint8_t *) &test_metrics, sizeof(test_metrics_s)); + } + else + { + // Post, Put, and Delete resource are not supported for now + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + return 0; +} +#endif + +#ifdef COAP_PANID_LIST +static int coap_panid_list_cb(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr) +{ + uint16_t i, panid_list_len, payload_index; + panid_list_type_e list_type; + sn_coap_msg_code_e resp_code; + uint16_t *panid_list; + uint16_t *payload; + uint16_t panid; + int32_t ret; + + // Determine whether to use allowlist, denylist, do bulk update, or do rediscovery + if (memcmp(request_ptr->uri_path_ptr, COAP_PANID_LIST_ALLOW_URI, request_ptr->uri_path_len) == 0) + { + list_type = PANID_ALLOW_LIST_E; + panid_list = panid_allow_list; + panid_list_len = MAX_PANID_ALLOW_LIST_LEN; + } + else if (memcmp(request_ptr->uri_path_ptr, COAP_PANID_LIST_DENY_URI, request_ptr->uri_path_len) == 0) + { + list_type = PANID_DENY_LIST_E; + panid_list = panid_deny_list; + panid_list_len = MAX_PANID_DENY_LIST_LEN; + } + else if (memcmp(request_ptr->uri_path_ptr, COAP_PANID_REDISCOVER_URI, request_ptr->uri_path_len) == 0) + { + // Start PAN rediscover process + ret = nanostack_net_stack_restart(false); + if (ret == PANID_STACK_RESTART_SUCCESS) + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_CHANGED, + COAP_CT_TEXT_PLAIN, NULL, 0); + pan_rediscover_update(PAN_REDISCOVER_START_EVT); + + } + else if (ret == PANID_STACK_RESTART_NO_RESTART) + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_VALID, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + else + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_INTERNAL_SERVER_ERROR, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + return 0; + } + else if (memcmp(request_ptr->uri_path_ptr, COAP_PANID_LIST_BULK_URI, request_ptr->uri_path_len) == 0) + { + uint8_t err = 0; + uint16_t allowlist_len, denylist_len; + + // Cancel timer set by PAN_REDISCOVER_JOIN_EVT + eventOS_event_timer_cancel(PAN_REDISCOVER_JOIN_RESP_TIMER_ID, pan_rediscover_tasklet_id); + + /* + * Format of CoAP PANID bulk update: + * <2 byte allow/deny list timeout (seconds) + + * <2 byte allowlist len> + <2 byte denylist len> + + * <2 byte allowlist entry>*(allowlist len) + <2 byte denylist entry>*(denylist len) + */ + // Length checking + if (request_ptr->payload_len < 6) // Min length considering 0 entries in both lists + { + err = 1; + } + else + { + uint16_t total_len = 6; + allowlist_len = *((uint16_t *) (request_ptr->payload_ptr + 2)); + denylist_len = *((uint16_t *) (request_ptr->payload_ptr + 4)); + total_len += ((allowlist_len + denylist_len)*2); + if (total_len != request_ptr->payload_len) + { + err = 1; + } + } + if (err == 1) + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_BAD_REQUEST, + COAP_CT_TEXT_PLAIN, NULL, 0); + return 0; + } + + // Populate timeout value (sec) if nonzero + uint16_t payload_timeout = *(uint16_t *)(request_ptr->payload_ptr); + if (payload_timeout != 0) + { + panid_list_clear_timeout_sec = payload_timeout; + } + + // Populate allowlist/denylist + uint16_t panid_list_start; + panid_list_type_e remove_list_type; + // Start counting payload after timeout/size info, and cast to 16 bit array + uint16_t *panid_list_payload = (uint16_t *)(request_ptr->payload_ptr + 6); + for (list_type = PANID_ALLOW_LIST_E; list_type <= PANID_DENY_LIST_E; list_type++) + { + if (list_type == PANID_ALLOW_LIST_E) + { + remove_list_type = PANID_DENY_LIST_E; + panid_list_start = 0; + panid_list_len = allowlist_len; + } + else // PANID_DENY_LIST_E + { + remove_list_type = PANID_ALLOW_LIST_E; + panid_list_start = allowlist_len; + panid_list_len = denylist_len; + } + + for (i = 0; i < panid_list_len; i++) + { + panid = *(panid_list_payload + panid_list_start + i); + // Add to list + ret = api_panid_filter_list_add(list_type, panid); + if (ret != PANID_FLTR_UPDATE_SUCCESS) + { + coap_service_response_send(service_id, 0, request_ptr, + COAP_MSG_CODE_RESPONSE_INTERNAL_SERVER_ERROR, + COAP_CT_TEXT_PLAIN, NULL, 0); + return 0; + } + // Remove from opposite list + ret = api_panid_filter_list_remove(remove_list_type, panid, false); + if (ret != PANID_FLTR_UPDATE_SUCCESS && ret != PANID_FLTR_UPDATE_NO_MATCH) + { + coap_service_response_send(service_id, 0, request_ptr, + COAP_MSG_CODE_RESPONSE_INTERNAL_SERVER_ERROR, + COAP_CT_TEXT_PLAIN, NULL, 0); + return 0; + } + } + } + + // Start PAN redicover process + ret = nanostack_net_stack_restart(false); + if (ret == PANID_STACK_RESTART_SUCCESS) + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_CHANGED, + COAP_CT_TEXT_PLAIN, NULL, 0); + pan_rediscover_update(PAN_REDISCOVER_START_EVT); + + } + else if (ret == PANID_STACK_RESTART_NO_RESTART) + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_VALID, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + else + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_INTERNAL_SERVER_ERROR, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + return 0; + } + else + { + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_BAD_REQUEST, + COAP_CT_TEXT_PLAIN, NULL, 0); + return 0; + } + + // Handle GET request + if (request_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) + { + payload_index = 1; // Reserve index 0 for payload length + payload = (uint16_t *) malloc(panid_list_len * sizeof(uint16_t)); + memset((uint8_t *)payload, 0, sizeof(panid_list_len * sizeof(uint16_t))); + + // Populate payload with all used PAN IDs + for(i = 0; i < panid_list_len; i++) + { + if (panid_list[i] != PANID_UNUSED) + { + payload[payload_index] = panid_list[i]; + payload_index++; + } + } + payload[0] = payload_index - 1; // First element of payload is size of panid list + + // Send used PAN IDs + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_CONTENT, + COAP_CT_TEXT_PLAIN, (uint8_t *)payload, sizeof(uint16_t)*(payload_index)); + } + // Handle POST/PUT request + else if (request_ptr->msg_code == COAP_MSG_CODE_REQUEST_POST || + request_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT) + { + ret = -1; + if (request_ptr->payload_len == 3) + { + panid = *((uint16_t *) (request_ptr->payload_ptr + 1)); + if (request_ptr->payload_ptr[0] == PANID_LIST_ACTION_ADD) + { + ret = api_panid_filter_list_add(list_type, panid); + resp_code = COAP_MSG_CODE_RESPONSE_CREATED; + } + else if (request_ptr->payload_ptr[0] == PANID_LIST_ACTION_DEL) + { + ret = api_panid_filter_list_remove(list_type, panid, false); + resp_code = COAP_MSG_CODE_RESPONSE_DELETED; + } + } + + if (ret == PANID_FLTR_UPDATE_SUCCESS) + { + coap_service_response_send(service_id, 0, request_ptr, resp_code, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + else + { + coap_service_response_send(service_id, 0, request_ptr, + COAP_MSG_CODE_RESPONSE_INTERNAL_SERVER_ERROR, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + } + else + { + // Delete resource not supported + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + return 0; +} +#endif // COAP_PANID_LIST + +void fetch_neighbor_details(); + +static int coap_recv_cb_rssi(int8_t service_id, uint8_t source_address[static 16], + uint16_t source_port, sn_coap_hdr_s *request_ptr) +{ + + if (request_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) + { + fetch_neighbor_details(); + + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_CONTENT, + COAP_CT_TEXT_PLAIN, (uint8_t *) nbr_nodes_metrics, sizeof(nbr_nodes_metrics)); + } + else + { + // Delete resource not supported + coap_service_response_send(service_id, 0, request_ptr, COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED, + COAP_CT_TEXT_PLAIN, NULL, 0); + } + return 0; +} + +#endif // COAP_SERVICE_ENABLE + +#ifndef WISUN_NCP_ENABLE +/* + * ======== mainThread ======== + */ +void *mainThread(void *arg0) +{ + int16_t ret; + + /* Configure the LED pins */ + GPIO_setConfig(CONFIG_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); + GPIO_setConfig(CONFIG_GPIO_RLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); + /* default user LED's */ + GPIO_write(CONFIG_GPIO_GLED, CONFIG_GPIO_LED_OFF); + GPIO_write(CONFIG_GPIO_RLED, CONFIG_GPIO_LED_OFF); + +#ifndef NWK_TEST + /* Configure the button pins */ + GPIO_setConfig(CONFIG_GPIO_BTN1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_BOTH_EDGES); + GPIO_setConfig(CONFIG_GPIO_BTN2, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING); + + /* Setup callback for btn int */ + GPIO_setCallback(CONFIG_GPIO_BTN1, btn_interrupt_handler); + GPIO_enableInt(CONFIG_GPIO_BTN1); + GPIO_setCallback(CONFIG_GPIO_BTN2, btn_interrupt_handler); + GPIO_enableInt(CONFIG_GPIO_BTN2); +#endif //NWK_TEST + + extern const char *ti154stack_lib_version; + extern const char *ti154stack_lib_date; + extern const char *ti154stack_lib_time; + extern const char *wisun_stack_version; + extern const char *wisun_protocol_version; + tr_info("Library info | Date: %s, Time: %s, Version: %s", ti154stack_lib_date, ti154stack_lib_time, + ti154stack_lib_version); + tr_info("Wi-SUN stack version: %s, Wi-SUN protocol version: %s", wisun_stack_version, wisun_protocol_version); + + nanostack_wisunInterface_configure(); + + // Release mutex before blocking + nanostack_lock(); + + if( MESH_ERROR_NONE != nanostack_wisunInterface_bringup()) + { + // release mutex + nanostack_unlock(); + // do not proceed further + while(1); + } + + if(MESH_ERROR_NONE != nanostack_wisunInterface_connect(true)) + { + // release mutex + nanostack_unlock(); + // do not proceed further + while(1); + } + + // if here all good so far: proceed further + // Release mutex before blocking + nanostack_unlock(); + +#ifdef NWK_TEST + + /* this should only be initialized once */ + nwkTest_init(); + + while (1) + { + nwkTest_run(); + usleep(100000); + } +#elif defined(COAP_SERVICE_ENABLE) + service_id = coap_service_initialize(interface_id, COAP_PORT, 0, NULL, NULL); + coap_service_register_uri(service_id, COAP_LED_URI, + COAP_SERVICE_ACCESS_GET_ALLOWED | + COAP_SERVICE_ACCESS_PUT_ALLOWED | + COAP_SERVICE_ACCESS_POST_ALLOWED, + coap_recv_cb); + coap_service_register_uri(service_id, COAP_RSSI_URI, + COAP_SERVICE_ACCESS_GET_ALLOWED, + coap_recv_cb_rssi); +#ifdef WISUN_TEST_METRICS + coap_service_register_uri(service_id, COAP_TEST_METRICS_URI, + COAP_SERVICE_ACCESS_GET_ALLOWED, + coap_recv_cb_tstmetrics); +#endif + +#ifdef COAP_PANID_LIST + coap_service_register_uri(service_id, COAP_PANID_LIST_ALLOW_URI, + COAP_SERVICE_ACCESS_GET_ALLOWED | + COAP_SERVICE_ACCESS_PUT_ALLOWED | + COAP_SERVICE_ACCESS_POST_ALLOWED, + coap_panid_list_cb); + coap_service_register_uri(service_id, COAP_PANID_LIST_DENY_URI, + COAP_SERVICE_ACCESS_GET_ALLOWED | + COAP_SERVICE_ACCESS_PUT_ALLOWED | + COAP_SERVICE_ACCESS_POST_ALLOWED, + coap_panid_list_cb); + coap_service_register_uri(service_id, COAP_PANID_REDISCOVER_URI, + COAP_SERVICE_ACCESS_PUT_ALLOWED | + COAP_SERVICE_ACCESS_POST_ALLOWED, + coap_panid_list_cb); + coap_service_register_uri(service_id, COAP_PANID_LIST_BULK_URI, + COAP_SERVICE_ACCESS_PUT_ALLOWED | + COAP_SERVICE_ACCESS_POST_ALLOWED, + coap_panid_list_cb); + + pan_rediscover_tasklet_start(); +#endif // COAP_PANID_LIST + +#if defined(COAP_OAD_ENABLE) + // Initialize oad tasklet + oad_tasklet_start(); + + /* Initialize CoAP OAD services */ + coap_service_register_uri(service_id, OAD_FWV_REQ_URI, + COAP_SERVICE_ACCESS_GET_ALLOWED | + COAP_SERVICE_ACCESS_PUT_ALLOWED | + COAP_SERVICE_ACCESS_POST_ALLOWED, + coap_oad_cb); + coap_service_register_uri(service_id, OAD_NOTIF_URI, + COAP_SERVICE_ACCESS_GET_ALLOWED | + COAP_SERVICE_ACCESS_PUT_ALLOWED | + COAP_SERVICE_ACCESS_POST_ALLOWED, + coap_oad_cb); +#endif // COAP_OAD_ENABLE + + /* Wait for Wi-SUN network connection before initializing sockets */ + nanostack_wait_till_connect(); +#else /* !COAP_SERVICE_ENABLE */ + /* Wait for Wi-SUN network connection before initializing sockets */ + nanostack_wait_till_connect(); +#endif /* endif for NWK_TEST not defined */ + nanostack_wait_till_connect(); +#if defined(COAP_SERVICE_ENABLE) && defined(COAP_PANID_LIST) + pan_rediscover_update(PAN_REDISCOVER_JOIN_EVT); +#endif + + /* ---------------------------------------------------------------- + * Wi-SUN join is complete. Start CSMP agent. + * ---------------------------------------------------------------- */ + + /* Step 1: Read EUI64 from link-local address (interface_id is valid after join). + * IPv6 link-local IID = EUI64 with U/L bit (bit 6 of byte 0) toggled. */ + { + uint8_t ll[16]; + if (arm_net_address_get(interface_id, ADDR_IPV6_LL, ll) == 0) { + g_eui64[0] = ll[8] ^ 0x02; + g_eui64[1] = ll[9]; + g_eui64[2] = ll[10]; + g_eui64[3] = ll[11]; + g_eui64[4] = ll[12]; + g_eui64[5] = ll[13]; + g_eui64[6] = ll[14]; + g_eui64[7] = ll[15]; + } + } + tr_info("CSMP: EUI64 %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x", + g_eui64[0], g_eui64[1], g_eui64[2], g_eui64[3], + g_eui64[4], g_eui64[5], g_eui64[6], g_eui64[7]); + + /* Step 2: NVOCMP already initialized by main.c via NVOCMP_loadApiPtrs(). */ + + /* Step 3: Init CSMP sample data (slot headers, vendor TLV buffers). + * sample_data_init() resets g_init_time to osal_gettime()=0. + * We override it after with the real join time in seconds. */ + sample_data_init(); + tr_info("CSMP: sample_data_init - done"); + { + uint32_t ticks = ClockP_getSystemTicks(); + uint32_t us_pt = ClockP_getSystemTickPeriod(); + g_init_time = (uint32_t)(((uint64_t)ticks * us_pt) / 1000000ULL); + } + g_tx_power_dbm = (int8_t)CONFIG_TRANSMIT_POWER; + + /* Step 4: Configure CSMP device parameters */ + memset(&g_devconfig, 0, sizeof(g_devconfig)); + tr_info("CSMP: memset - done"); + + /* NMS address — defined by -DCSMP_AGENT_NMS_ADDRESS in router.opts */ + osal_inet_pton(AF_INET6, CSMP_AGENT_NMS_ADDRESS, &g_devconfig.NMSaddr.s6_addr); + tr_info("CSMP: osal_inet_pton - done"); + + memcpy(g_devconfig.ieee_eui64.data, g_eui64, 8u); + tr_info("CSMP: memcpy - done"); + + g_devconfig.reginterval_min = 10u; + g_devconfig.reginterval_max = 120u; +#if defined(CSMP_AGENT_REG_INTERVAL_MIN) + g_devconfig.reginterval_min = CSMP_AGENT_REG_INTERVAL_MIN; +#endif +#if defined(CSMP_AGENT_REG_INTERVAL_MAX) + g_devconfig.reginterval_max = CSMP_AGENT_REG_INTERVAL_MAX; +#endif + + /* Validate intervals */ + if (!g_devconfig.reginterval_min || g_devconfig.reginterval_max < g_devconfig.reginterval_min || g_devconfig.reginterval_max > 36000u) + { + tr_error("CSMP: bad intervals, using defaults"); + g_devconfig.reginterval_min = 10u; + g_devconfig.reginterval_max = 120u; + } + + /* Signature settings — disabled by default. + * Enable with -DCSMP_AGENT_SIGNATURE_SETTINGS=1 in router.opts */ +#if defined(CSMP_AGENT_SIGNATURE_SETTINGS) && CSMP_AGENT_SIGNATURE_SETTINGS + g_devconfig.csmp_sig_settings.reqsignedpost = true; + g_devconfig.csmp_sig_settings.reqvalidcheckpost = true; + g_devconfig.csmp_sig_settings.reqtimesyncpost = true; + g_devconfig.csmp_sig_settings.reqseclocalpost = true; + g_devconfig.csmp_sig_settings.reqsignedresp = true; + g_devconfig.csmp_sig_settings.reqvalidcheckresp = true; + g_devconfig.csmp_sig_settings.reqtimesyncresp = true; + g_devconfig.csmp_sig_settings.reqseclocalresp = true; +#endif + + /* Step 5: Register callbacks and start CSMP service */ + g_csmp_handle.csmptlvs_get = (csmptlvs_get_t)csmptlvs_get; + g_csmp_handle.csmptlvs_post = (csmptlvs_post_t)csmptlvs_post; + g_csmp_handle.signature_verify = (signature_verify_t)signature_verify; + + /* Seed the device clock with an approximate build-time epoch so FND sees + * a sane "last heard" time instead of 1970. The exact value doesn't + * matter — FND corrects it to accurate wall-clock time by pushing + * CURRENT_TIME_TLVID back in its registration response. + * Update CSMP_APPROX_EPOCH whenever the firmware is significantly older + * than 6 months to avoid FND classifying the device as "Unheard". */ +#define CSMP_APPROX_EPOCH 1777334400UL /* 2026-04-27 00:00:00 UTC */ + { + struct timeval tv = { (time_t)CSMP_APPROX_EPOCH, 0 }; + osal_settime(&tv, NULL); + tr_info("CSMP: initial clock seeded to %lu", (unsigned long)tv.tv_sec); + } + + /* Create FreeRTOS timer handles and RX semaphore used by the CSMP OSAL. + * Must be called before csmp_service_start() because osal_trickle_timer_start() + * calls xTimerStart() — which asserts on a NULL handle if this is skipped. */ + osal_kernel_start(); + + int csmp_ret = csmp_service_start(&g_devconfig, &g_csmp_handle); + tr_info("CSMP: csmp_service_start - done"); + if (csmp_ret != 0) + { + tr_error("CSMP: csmp_service_start failed (%d)", csmp_ret); + } + else + { + tr_info("CSMP: service started — NMS=%s min=%us max=%us", + CSMP_AGENT_NMS_ADDRESS, + g_devconfig.reginterval_min, + g_devconfig.reginterval_max); + } + + /* Step 6: Status log loop — log registration state every 10 s */ + tr_info("CSMP: entering_loop_status"); + for (uint32_t tick = 0u;;) + { + if (++tick >= 100u) + { + tick = 0u; + csmp_service_stats_t *s = csmp_service_stats(); + tr_info("CSMP: reg=%d regs=%u metrics=%u", + csmp_service_status() == REGISTRATION_SUCCESS, + s->reg_succeed, + s->metrics_reports); + } + usleep(100000u); /* 100 ms */ + } + + return NULL; +} + +#else //WISUN_NCP_ENABLE + +/*! + * Signal NCP tasklet with the event NCP_SEND_RESPONSE_EVENT, + * so that NCP_tasklet can process the sending of a response + * back to the host, when the host sends a command. + * e.g. Response to a command from host to set/get configuration. + */ +void platformNcpSendRspSignal() +{ + //post an event to ncp_tasklet + arm_event_s event = { + .sender = 0, + .receiver = ncp_tasklet_id, + .priority = ARM_LIB_HIGH_PRIORITY_EVENT, + .event_type = NCP_SEND_RESPONSE_EVENT, + .event_id = 0, + .event_data = 0 + }; + + eventOS_event_send(&event); +} + +/*! + * Signal NCP tasklet with the event NCP_SEND_ASYNC_RSPONSE_EVENT + * so that NCP tasket can process the sending of an async response + * back to the host - e.g. reception of a packet by the NWP + */ +void platformNcpSendAsyncRspSignal() +{ + //post an event to ncp_tasklet + arm_event_s event = { + .sender = 0, + .receiver = ncp_tasklet_id, + .priority = ARM_LIB_HIGH_PRIORITY_EVENT, + .event_type = NCP_SEND_ASYNC_RSPONSE_EVENT, + .event_id = 0, + .event_data = 0 + }; + + eventOS_event_send(&event); +} + +/*! + * Callback from the UART module indicating need for processing. + */ +void platformUartSignal(uintptr_t arg) +{ + //post an event to ncp_tasklet + arm_event_s event = { + .sender = 0, + .receiver = ncp_tasklet_id, + .priority = ARM_LIB_HIGH_PRIORITY_EVENT, + .event_type = NCP_UART_EVENT, + .event_id = 0, + .event_data = arg + }; + + eventOS_event_send(&event); +} + +#ifdef WISUN_AUTO_START +/*! + * Blink Leds continuously when an assert occurs + */ +static inline void auto_start_assert_led() +{ + while(1) + { + sleep(2); + GPIO_toggle(CONFIG_GPIO_GLED); + GPIO_toggle(CONFIG_GPIO_RLED); + } +} + +/*! + * Post event to NCP tasklet to do net interface configuration + * and start wisun stack without having to receive commands on + * the NCP interface + */ +static inline void autoStartSignal() +{ + arm_event_s auto_event = { + .sender = 0, + .receiver = ncp_tasklet_id, + .priority = ARM_LIB_HIGH_PRIORITY_EVENT, + .event_type = NCP_AUTO_START_EVENT, + .event_id = 0, + .event_data = 0 + }; + + eventOS_event_send(&auto_event); +} +#endif //WISUN_AUTO_START + +/*! + * Core logic for NCP tasklet. Helps process incoming, outgoing + * messages on NCP interface based on the received event + */ +void ncp_tasklet(arm_event_s *event) +{ + arm_library_event_type_e event_type; + event_type = (arm_library_event_type_e)event->event_type; + + switch (event_type) + { + case ARM_LIB_TASKLET_INIT_EVENT: + + ncp_tasklet_id = event->receiver; + OtStack_instance = otInstanceInitSingle(); + assert(OtStack_instance); + otNcpInit(OtStack_instance); + + GPIO_write(CONFIG_GPIO_RLED, 1); + + for(int i = 0; i< 3; i++) + { + GPIO_toggle(CONFIG_GPIO_GLED); + usleep(300000); + } + +#ifdef WISUN_AUTO_START + //post an event to ncp_tasklet + autoStartSignal(); +#endif //WISUN_AUTO_START + break; + +#ifdef WISUN_AUTO_START + case NCP_AUTO_START_EVENT: + + GPIO_write(CONFIG_GPIO_RLED, 1); + + /* Automatically bring the interface up & initiate Joining */ + /* Equivalent to running ifconfig up and wisunstack start by default at startup */ + if(nanostack_net_if_up() != OT_ERROR_NONE) + { + //assert here and blink leds in loop + auto_start_assert_led(); + } + if(nanostack_net_stack_up() != OT_ERROR_NONE) + { + //assert here and blink leds in loop + auto_start_assert_led(); + } + break; +#endif //WISUN_AUTO_START + + case NCP_UART_EVENT: + platformUartProcess(event->event_data); + break; + + case NCP_SEND_RESPONSE_EVENT: + platformNcpSendProcess(); + break; + + case NCP_SEND_ASYNC_RSPONSE_EVENT: + platformNcpSendAsyncProcess(); + break; + + default: + break; + + } //end of switch case +} + +/*! + * Create the NCP tasklet whose core logic is defined in ncp_tasklet() + * Also, post the event to initialize it after creating the tasklet + */ +void ncp_tasklet_start(void) +{ + eventOS_event_handler_create( + &ncp_tasklet, + ARM_LIB_TASKLET_INIT_EVENT); +} + + +/* Below functions are invoked on receiving + * the appropriate commands from host */ + +/*! + * Check if bringing up of network interface is done or not + * return value: true if already done, false if not + */ +bool is_net_if_up(void) +{ + if(interface_id < 0) + { + return (false); + } + else + { + return (true); + } +} + +/*! + * Bring up the network interface + */ +otError nanostack_net_if_up(void) +{ + if( MESH_ERROR_NONE != nanostack_wisunInterface_configure()) + { + return (OT_ERROR_FAILED); + } + if (MESH_ERROR_NONE != nanostack_wisunInterface_bringup()) + { + return (OT_ERROR_FAILED); + } + + //everything is ok; return error_none + return(OT_ERROR_NONE); + +} + +/*! + * Check if the node joined the network or not on starting + * the connection to network + * return value: true if connected, false if not or in the + * process of connecting + */ +bool is_net_stack_up(void) +{ + return(connectedFlg); +} + +/*! + * Start the process to connect node to the network + */ +otError nanostack_net_stack_up(void) +{ + GPIO_write(CONFIG_GPIO_RLED, 0); + + if(MESH_ERROR_NONE != nanostack_wisunInterface_connect(true)) + { + return (OT_ERROR_FAILED); + } + //everything is ok; return error_none + return(OT_ERROR_NONE); + + // it is expected that host will keep monitoring + // if connection succeeded or not by giving + // command to check if is_net_stack_up() + // or reading current_net_state() +} + +/*! + * Helper function - returns the first non-zero channel from a list of + * channels that is sent as input. + */ +uint8_t get_first_fixed_channel(uint8_t * channel_list) +{ + uint8_t idx, sizeOfChannelMask; + uint8_t fixedChannelNum = 0; + uint8_t bit_location = 0; + uint8_t byteEntry = 0; + sizeOfChannelMask = CHANNEL_BITMAP_SIZE; + + for(idx = 0; idx < sizeOfChannelMask; idx++) + { + byteEntry = channel_list[idx]; + bit_location = 0; + while (bit_location < 8) + { + if (byteEntry & 0x01) { + return fixedChannelNum; + } + else { + fixedChannelNum++; + } + + bit_location++; + // shift byteEntry 1 to the right to pop off last bit + byteEntry = byteEntry >> 1; + } + } + return fixedChannelNum; +} + +/*! + * Helper function - returns the Link Local address of the node + */ +if_address_entry_t *get_linkLocal_address(void) +{ + protocol_interface_info_entry_t *cur; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + + ns_list_foreach(if_address_entry_t, entry, &cur->ip_addresses ) + { + if (entry->source == ADDR_SOURCE_UNKNOWN) + { + return entry; + } + } + + /* if we are here could not find the address */ + return NULL; + +} + +/*! + * Helper function - returns the global unicast address of the node + */ +if_address_entry_t *get_globalUnicast_address(void) +{ + protocol_interface_info_entry_t *cur; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + + ns_list_foreach(if_address_entry_t, entry, &cur->ip_addresses ) + { + if (entry->source == ADDR_SOURCE_DHCP) + { + return entry; + } + } + + /* if we are here could not find the address */ + return NULL; +} + +#endif //WISUN_NCP_ENABLE + +/*! + * Helper function to get neighbor node metrics like rssi_in, rssi_out + * Metrics are copied over to a global structure instance. + */ +void fetch_neighbor_details() +{ + protocol_interface_info_entry_t *cur; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + if(!cur || !cur->ws_info || !cur->mac_parameters || !cur->mac_parameters->mac_neighbor_table) + { + tr_debug("fetch_neighbor_details: NULL pointer"); + return; + } + + uint8_t max_nbrs, nbr_idx = 0; + + max_nbrs = cur->mac_parameters->mac_neighbor_table->list_total_size; + cur_num_nbrs = (cur->mac_parameters->mac_neighbor_table->neighbour_list_size) - 1; + + for(uint8_t i = 0; i < max_nbrs; i++) + { + if(cur->mac_parameters->mac_neighbor_table->neighbor_entry_buffer[i].trusted_device == 1) + { + //found a valid neighbor + //copy mac address + memcpy(nbr_nodes_metrics[nbr_idx].mac_eui, cur->mac_parameters->mac_neighbor_table->neighbor_entry_buffer[i].mac64, sizeof(sAddrExt_t)); + + //fetch and copy rssi_in rssi_out (Shift back the WS_RSL_SCALING amount) + nbr_nodes_metrics[nbr_idx].rssi_in = cur->ws_info->neighbor_storage.neigh_info_list[i].rsl_in >> WS_RSL_SCALING; + nbr_nodes_metrics[nbr_idx].rssi_out = cur->ws_info->neighbor_storage.neigh_info_list[i].rsl_out >> WS_RSL_SCALING; + + nbr_idx++; + + if(nbr_idx == cur_num_nbrs) + { + // found all entries + break; + }//end of inner if + + } //end of outer if + + }//end of for +} + +/*! + * Returns the current state of the node based on + * at what state is the node during the network joining process + * Return value used to vary the rate of red led blinking + * while the node is joining the network + */ +uint8_t get_current_net_state(void) +{ + protocol_interface_info_entry_t *cur; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + + uint8_t curNetState = 0; + + switch(cur->nwk_bootstrap_state) + { + case ER_IDLE: + curNetState = 0; + break; + case ER_ACTIVE_SCAN: + curNetState = 1; + break; + case ER_PANA_AUTH: + curNetState = 2; + break; + case ER_SCAN: + curNetState = 3; + break; + case ER_RPL_SCAN: + curNetState = 4; + break; + case ER_BOOTSRAP_DONE: + curNetState = 5; + break; + case ER_WAIT_RESTART: + curNetState = 6; + break; + default: + break; + } + + return(curNetState); +} + +/*! + * Helper function - get current multicast groups a node is subscribed to + */ +if_group_list_t *get_multicast_ip_groups() +{ + protocol_interface_info_entry_t *cur; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + + return &cur->ip_groups; +} + +/*! + * Helper function - add multicast address + * return 0 if successful or -1 when an error occurs + */ +int8_t add_multicast_addr(const uint8_t *address) +{ + protocol_interface_info_entry_t *cur; + + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + if (!addr_is_ipv6_multicast(address) || + addr_ipv6_multicast_scope(address) <= IPV6_SCOPE_REALM_LOCAL) + { + return -1; // Non-multicast or realm/link/interface local scope address + } + + if (addr_add_group(cur, address) == NULL) + { + return -1; // Address group add failed + } + return 0; +} + +/*! + * Helper function - remove multicast address + * return 0 if successful or -1 when an error occurs + */ +int8_t remove_multicast_addr(const uint8_t *address) +{ + protocol_interface_info_entry_t *cur; + + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + if (!addr_is_ipv6_multicast(address) || + addr_ipv6_multicast_scope(address) <= IPV6_SCOPE_REALM_LOCAL) + { + return -1; // Non-multicast or realm/link/interface local scope address + } + + addr_remove_group(cur, address); + return 0; +} + +rpl_instance_t *get_rpl_instance() +{ + protocol_interface_info_entry_t *cur; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + if (!cur || !cur->rpl_domain) { + return NULL; + } + + rpl_instance_t *instance = ns_list_get_first(&cur->rpl_domain->instances); + + return instance; +} + +rpl_dao_target_t *get_dao_target_from_addr(rpl_instance_t *instance, const uint8_t *addr) +{ + // Always return NULL, only valid for BR devices + return NULL; +} + +uint16_t get_network_panid(void) +{ + protocol_interface_info_entry_t *cur; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + if (!cur || !cur->ws_info) { + return 0xFFFF; + } + return cur->ws_info->network_pan_id; +} + + +#ifdef WISUN_TEST_METRICS +extern JOIN_TIME_s node_join_time; + +/* + * Get latest test metrics + */ +void get_test_metrics(test_metrics_s *test_metrics) +{ + rpl_instance_t *rpl_inst; + + test_metrics->revision = 4; + // Populate join time + memcpy(&test_metrics->join_time, &node_join_time, sizeof(JOIN_TIME_s)); + + // Populate MAC debug + timac_getMACDebugCounts(&test_metrics->mac_debug); + + // Populate heap debug + const mem_stat_t *heap_stats = ns_dyn_mem_get_mem_stat(); + + test_metrics->heap_debug.heap_sector_size = heap_stats->heap_sector_size; + test_metrics->heap_debug.heap_sector_allocated_bytes = + heap_stats->heap_sector_allocated_bytes; + test_metrics->heap_debug.heap_sector_allocated_bytes_max = + heap_stats->heap_sector_allocated_bytes_max; + + timac_getMACPerfData(&test_metrics->mac_perf_data); + test_metrics->udpPktCnt = num_pkts; + // Reset UDP packet count to 0 for next test + num_pkts = 0; + + // Get current rank + rpl_inst = get_rpl_instance(); + test_metrics->current_rank = rpl_inst->current_rank; + + // Populate length + test_metrics->length = (uint16_t) sizeof(test_metrics_s); +} +#endif diff --git a/Vendors/TI/application/defines/router.opts b/Vendors/TI/application/defines/router.opts new file mode 100644 index 0000000..b7acf55 --- /dev/null +++ b/Vendors/TI/application/defines/router.opts @@ -0,0 +1,50 @@ +-DOSAL_TI_SIMPLELINK_WISUN +-DCSMP_AGENT_NMS_ADDRESS=\"fd00::3\" +-DCSMP_USE_MBED_TRACE +-DCSMP_APP_VERSION=\"1.0.0\" +-DCSMP_MODEL_NAME=\"CC13xx\" +-DDEVICE_TYPE=OPENCSMP +-DNV_RESTORE +-DTIMAC_ROM_PATCH +-DxTIMAC_ROM_IMAGE_BUILD +-DTI154STACK +-DSTACK_LIBRARY +-DFEATURE_ENHANCED_ACK +-DFHIEPATCH +-DFEATURE_WISUN_SUPPORT +-DFEATURE_TIMAC_SUPPORT=1 +-DxFEATURE_WISUN_EDFE_SUPPORT +-DFEATURE_WISUN_MIN_EDFE +-DxENABLE_EAPOL_ALLOWLIST +-DFEATURE_FHNT_CONTROL +-DxFEATURE_BASE_BACKOFF=0 +-DFEATURE_MPL_SKIP_DUPLICATE_TX +-DxFEATURE_DISABLE_FRAME_COUNT +-DxFEATURE_DISABLE_PA_PC_AFTER_JOIN +-DOSAL_PORT2TIRTOS +-DMAX_DEVICE_TABLE_ENTRIES=1 +-DNANOSTACK_DEVICE_TABLE_ENTRIES_BR=50 +-DNANOSTACK_DEVICE_TABLE_ENTRIES_RN=32 +-DMAC_MAX_FRAME_SIZE=2047 +-DMAC_MAX_TX_MTU_SIZE=1576 +-DNV_RESTORE +-DFAN1_1_INTEROP +-DWISUN_FAN_CORE_1_1 +-DPHY_SPEC_2V03 +-DCSMP_TI_RUN_SLOT_ADDR=0x00000000UL +-DCSMP_TI_UPLOAD_SLOT_ADDR=0x00000000UL +-DCSMP_TI_SLOT_MAX_SIZE=0x000A8000UL +-DCSMP_TI_BACKUP_SLOT_ADDR=0x00000000UL +-DSBL_ENABLE + +-DxWISUN_TEST_JM_IE +-DxWISUN_TEST_IE_PASS_THROUGH +-DxWISUN_TEST_METRICS +-DxWISUN_TEST_MPL_UDP +-DxWISUN_TEST_MPL_EMBEDDED +-DxWISUN_RCP_SPINEL_DEBUG +-DxWRITABLE_HWADDR +-DxFEATURE_EDFE_TEST_MODE +-DxRN_IOP_CERTIFICATE +-DNO_TCP +-DxUSE_NPI_HDLC \ No newline at end of file diff --git a/Vendors/TI/application/main.c b/Vendors/TI/application/main.c new file mode 100644 index 0000000..254b8af --- /dev/null +++ b/Vendors/TI/application/main.c @@ -0,0 +1,343 @@ +/* + * Copyright (c) 2016-2026, Texas Instruments Incorporated + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * ======== main_tirtos.c ======== + */ +#include +#include + +/* RTOS header files */ +#ifndef FREERTOS_SUPPORT +#include +#else +#include +#include +#endif + +/* POSIX Header files */ +#include + +/* Driver configuration */ +#include "ti_drivers_config.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include DeviceFamily_constructPath(inc/hw_cpu_scs.h) + +/* nanostack header files */ +#include "ns_trace.h" +#include "mesh_system.h" +#include "mbedtls_wisun_config.h" + +#ifdef NV_RESTORE +#include "macconfig.h" +#include "nvocmp.h" +#else +#include "nvintf.h" +#endif + +#ifdef WISUN_RCP_ENABLE +#include "rcp_host.h" +#endif + +/****************************************************************************** + Extern functions + *****************************************************************************/ +extern void ncp_tasklet_start(); + +#ifdef FREERTOS_SUPPORT +extern void startRfCbThread(void); +#endif + +/****************************************************************************** + Global Variables + *****************************************************************************/ +#ifdef NV_RESTORE +/*! MAC Configuration Parameters */ +mac_Config_t Main_user1Cfg = { 0 }; +#endif +/* NV Function Pointers */ +NVINTF_nvFuncts_t *pNV = NULL; +#ifdef FEATURE_TIMAC_SUPPORT + +#ifdef OSAL_PORT2TIRTOS +#include "macTask.h" +#include "rom_jt_154.h" +#else +#include "api_mac.h" +#include "icall.h" +#endif /* OSAL_PORT2TIRTOS */ + +/* Assert Reasons */ +#define MAIN_ASSERT_MAC 3 +#define MAIN_ASSERT_HWI_TIRTOS 4 + +#ifndef USE_DEFAULT_USER_CFG +#include "mac_user_config.h" +/* MAC user defined configuration */ +macUserCfg_t macUser0Cfg[] = MAC_USER_CFG; +#endif /* USE_DEFAULT_USER_CFG */ + +uint8_t timacTaskId; +#endif /*FEATURE_TIMAC_SUPPORT */ + +bool ncp_enabled = true; + +#ifndef WISUN_NCP_ENABLE +extern void *mainThread(void *arg0); + +/* Stack size in bytes */ +#define WISUNTHREADSTACKSIZE 4096 +#endif + +#ifdef WISUN_RCP_HOST +extern bool extAddrFlag; +#endif + +/* + To prevent the LTO to throw away these variables, adding the used attribute for the variables +*/ +__attribute__((used)) uint32_t exc_lr; +__attribute__((used)) uint32_t exc_sp; + +//__attribute__((naked)) void MacAssert_get_SP_LR(void) + void MacAssert_get_SP_LR(void) +{ + __asm volatile + ( + // Get current state, add more as needed + + "ldr r8, =exc_sp \n" + "str sp,[r8] \n" + "ldr r8, =exc_lr \n" + "str lr,[r8] \n" + ); +} + +#ifdef FEATURE_TIMAC_SUPPORT +void Main_assertHandler(uint8_t assertReason) +{ +#if defined(RESET_ASSERT) + //Ssf_assertInd(assertReason); + + /* Pull the plug and start over */ + SysCtrlSystemReset(); +#else + HwiP_disable(); + + while(1) + { + /* Put you code here to do something if in assert */ + } +#endif + +} + +/*! + * @brief TIRTOS HWI Handler. The name of this function is set to + * M3Hwi.excHandlerFunc in app.cfg, you can disable this by + * setting it to null. + * + * @param excStack - TIROS variable + * @param lr - TIROS variable + */ +void Main_excHandler(uint32_t *excStack, uint32_t lr) +{ + /* User defined function */ + Main_assertHandler(MAIN_ASSERT_HWI_TIRTOS); +} + + +/*! + * @brief HAL assert handler required by OSAL memory module. + */ +void assertHandler(void) +{ + // save LP and SP for later debugging + MacAssert_get_SP_LR(); + /* User defined function */ + Main_assertHandler(MAIN_ASSERT_MAC); +} + +/*! + * @brief HAL assert handler required by OSAL memory module. + */ +void halAssertHandler(void) +{ + // save LP and SP for later debugging + MacAssert_get_SP_LR(); + /* User defined function */ + Main_assertHandler(0); +} + +/*! + * @brief MAC HAL assert handler. + */ +void macHalAssertHandler(void) +{ + // save LP and SP for later debugging + MacAssert_get_SP_LR(); + /* User defined function */ + Main_assertHandler(MAIN_ASSERT_MAC); +} + +#endif /* FEATURE_TIMAC_SUPPORT */ + +/* + * ======== main ======== + */ +int main(void) +{ +#if !defined(WISUN_NCP_ENABLE) || !defined(EXCLUDE_TRACE) || defined(COAP_SERVICE_ENABLE) + /* Disable power idle mode to prevent known issue with ITM + output garbage. */ + Power_setConstraint(PowerCC26XX_IDLE_PD_DISALLOW); + Power_setConstraint(PowerCC26XX_SB_DISALLOW); +#endif + + // Disable write-buffering. Note that this negatively affect performance. + // HWREG(CPU_SCS_BASE + CPU_SCS_O_ACTLR) = CPU_SCS_ACTLR_DISDEFWBUF; + + /* Call driver init functions */ + Board_init(); + GPIO_init(); + Button_init(); + LED_init(); + +#if defined(MBEDTLS_AES_ALT) + AESECB_init(); + AESCBC_init(); +#endif + +#ifdef FEATURE_TIMAC_SUPPORT +#ifndef USE_DEFAULT_USER_CFG + macUser0Cfg[0].pAssertFP = assertHandler; +#endif //USE_DEFAULT_USER_CFG + timacTaskId = macTaskInit(macUser0Cfg); +#endif //FEATURE_TIMAC_SUPPORT + +#ifdef WISUN_RCP_ENABLE + rcp_init(); +#ifdef WISUN_RCP_HOST + // Wait until RCP_INIT_CNF sets deviceExtAddr (only needed in 2-chip solution) + while (extAddrFlag == false) { + usleep(100000); // 100ms sleep + } +#endif +#endif + +#ifndef WISUN_NCP_ENABLE + pthread_t thread; + pthread_attr_t attrs; + struct sched_param priParam; + int retc; + + /* Initialize the attributes structure with default values */ + pthread_attr_init(&attrs); + ncp_enabled = false; + + /* Set priority, detach state, and stack size attributes */ + priParam.sched_priority = 1; + retc = pthread_attr_setschedparam(&attrs, &priParam); + retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED); + retc |= pthread_attr_setstacksize(&attrs, WISUNTHREADSTACKSIZE); + if (retc != 0) { + /* failed to set attributes */ + while (1) {} + } + + retc = pthread_create(&thread, &attrs, mainThread, NULL); + if (retc != 0) { + /* pthread_create() failed */ + while (1) {} + } + // Initalize trace + ns_trace_init(); + + // Initialize mesh system and start the event loop thread + mesh_system_init(); + +#else // WISUN_NCP_ENABLE + ncp_enabled = true; + + // Configure the LEDs + GPIO_setConfig(CONFIG_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | + GPIO_CFG_OUT_LOW); + GPIO_setConfig(CONFIG_GPIO_RLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | + GPIO_CFG_OUT_LOW); + + // Initialize trace + ns_trace_init(); + + // Initialize mesh system and start the ns event loop thread + mesh_system_init(); + + // Create ncp tasklet + ncp_tasklet_start(); +#endif // WISUN_NCP_ENABLE + +#ifdef NV_RESTORE + // Setup the NV driver + NVOCMP_loadApiPtrs(&Main_user1Cfg.nvFps); + + //do NV init + if(Main_user1Cfg.nvFps.initNV) + { + Main_user1Cfg.nvFps.initNV( NULL); + } + + // Save off the NV Function Pointers + pNV = &Main_user1Cfg.nvFps; +#endif + +#ifdef FREERTOS_SUPPORT + startRfCbThread(); + /* Start the FreeRTOS scheduler */ + vTaskStartScheduler(); +#else + BIOS_start(); /* enable interrupts and start SYS/BIOS */ +#endif + return (0); +} + diff --git a/Vendors/TI/application/mbed_config-868mhz-fixed-chan.h b/Vendors/TI/application/mbed_config-868mhz-fixed-chan.h new file mode 100644 index 0000000..a4ceaab --- /dev/null +++ b/Vendors/TI/application/mbed_config-868mhz-fixed-chan.h @@ -0,0 +1,314 @@ +/* + * mbed SDK + * Copyright (c) 2017 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Automatically generated configuration file. +// DO NOT EDIT, content will be overwritten. + +#ifndef __MBED_CONFIG_DATA__ +#define __MBED_CONFIG_DATA__ + +// Configuration parameters +#define MBED_CONF_APP_BUTTON SW2 // set by application[K64F] +#define MBED_CONF_APP_BUTTON_MODE PullUp // set by application +#define MBED_CONF_APP_ENABLE_LED_CONTROL_EXAMPLE 1 // set by application +#define MBED_CONF_APP_LED LED_RED // set by application[K64F] +#define MBED_CONF_APP_RELAY_CONTROL NC // set by application +#define MBED_CONF_APP_WISUN_BC_CHANNEL_FUNCTION 0 // set by application +#define MBED_CONF_APP_WISUN_BC_DWELL_INTERVAL 255 // set by application +#define MBED_CONF_APP_WISUN_BC_FIXED_CHANNEL 11 // set by application +#define MBED_CONF_APP_WISUN_BC_INTERVAL 1020 // set by application +#define MBED_CONF_APP_WISUN_UC_CHANNEL_FUNCTION 0 // set by application +#define MBED_CONF_APP_WISUN_UC_FIXED_CHANNEL 11 // set by application +#define MBED_CONF_ATMEL_RF_ASSUME_SPACED_SPI 0 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED 7500000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED_BYTE_SPACING 250 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_IRQ_THREAD_STACK_SIZE 1024 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_LOW_SPI_SPEED 3750000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_PROVIDE_DEFAULT 0 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_USE_SPI_SPACING_API 0 // set by library:atmel-rf +#define MBED_CONF_CELLULAR_CONTROL_PLANE_OPT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_DEBUG_AT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY 0 // set by library:cellular +#define MBED_CONF_CELLULAR_USE_APN_LOOKUP 1 // set by library:cellular +#define MBED_CONF_DRIVERS_UART_SERIAL_RXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_DRIVERS_UART_SERIAL_TXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_ESP8266_DEBUG 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_OFF_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_POLARITY 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_PROVIDE_DEFAULT 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_SERIAL_BAUDRATE 115200 // set by library:esp8266 +#define MBED_CONF_ESP8266_SOCKET_BUFSIZE 8192 // set by library:esp8266 +#define MBED_CONF_EVENTS_PRESENT 1 // set by library:events +#define MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION 0 // set by library:events +#define MBED_CONF_EVENTS_SHARED_EVENTSIZE 768 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_EVENTSIZE 256 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_STACKSIZE 1024 // set by library:events +#define MBED_CONF_EVENTS_SHARED_STACKSIZE 2048 // set by library:events +#define MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER 0 // set by library:events +#define MBED_CONF_FILESYSTEM_PRESENT 1 // set by library:filesystem +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS 0xFFFFFFFF // set by library:flashiap-block-device +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE 0 // set by library:flashiap-block-device +#define MBED_CONF_GEMALTO_CINTERION_BAUDRATE 115200 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GEMALTO_CINTERION_PROVIDE_DEFAULT 0 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GENERIC_AT3GPP_BAUDRATE 115200 // set by library:GENERIC_AT3GPP +#define MBED_CONF_GENERIC_AT3GPP_PROVIDE_DEFAULT 0 // set by library:GENERIC_AT3GPP +#define MBED_CONF_KINETIS_EMAC_RX_RING_LEN 2 // set by library:kinetis-emac +#define MBED_CONF_KINETIS_EMAC_TX_RING_LEN 1 // set by library:kinetis-emac +#define MBED_CONF_LORA_ADR_ON 1 // set by library:lora +#define MBED_CONF_LORA_APPLICATION_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPLICATION_KEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APP_PORT 15 // set by library:lora +#define MBED_CONF_LORA_AUTOMATIC_UPLINK_MESSAGE 1 // set by library:lora +#define MBED_CONF_LORA_DEVICE_ADDRESS 0x00000000 // set by library:lora +#define MBED_CONF_LORA_DEVICE_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_DOWNLINK_PREAMBLE_LENGTH 5 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON 1 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON_JOIN 1 // set by library:lora +#define MBED_CONF_LORA_FSB_MASK {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF} // set by library:lora +#define MBED_CONF_LORA_FSB_MASK_CHINA {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF} // set by library:lora +#define MBED_CONF_LORA_LBT_ON 0 // set by library:lora +#define MBED_CONF_LORA_MAX_SYS_RX_ERROR 5 // set by library:lora +#define MBED_CONF_LORA_NB_TRIALS 12 // set by library:lora +#define MBED_CONF_LORA_NWKSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_OVER_THE_AIR_ACTIVATION 1 // set by library:lora +#define MBED_CONF_LORA_PHY EU868 // set by library:lora +#define MBED_CONF_LORA_PUBLIC_NETWORK 1 // set by library:lora +#define MBED_CONF_LORA_TX_MAX_SIZE 64 // set by library:lora +#define MBED_CONF_LORA_UPLINK_PREAMBLE_LENGTH 8 // set by library:lora +#define MBED_CONF_LORA_WAKEUP_TIME 5 // set by library:lora +#define MBED_CONF_LWIP_ADDR_TIMEOUT 5 // set by library:lwip +#define MBED_CONF_LWIP_ADDR_TIMEOUT_MODE 1 // set by library:lwip +#define MBED_CONF_LWIP_DEBUG_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_DEFAULT_TCP_RECVMBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_DEFAULT_THREAD_STACKSIZE 512 // set by library:lwip +#define MBED_CONF_LWIP_ENABLE_PPP_TRACE 0 // set by library:lwip +#define MBED_CONF_LWIP_ETHERNET_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV4_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_IP_VER_PREF 4 // set by library:lwip +#define MBED_CONF_LWIP_L3IP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_MBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_MEMP_NUM_TCPIP_MSG_INPKT 8 // set by library:lwip +#define MBED_CONF_LWIP_MEM_SIZE 33270 // set by library:lwip[Freescale] +#define MBED_CONF_LWIP_PPP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV4_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip +#define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_MBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip +#define MBED_CONF_LWIP_TCP_CLOSE_TIMEOUT 1000 // set by library:lwip +#define MBED_CONF_LWIP_TCP_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_TCP_MAXRTX 6 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SERVER_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_UDP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_USE_MBED_TRACE 0 // set by library:lwip +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_MASK 0x7fff800 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_PAGE 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_DEVICE_TYPE NET_6LOWPAN_ROUTER // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PANID_FILTER 0xffff // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY_ID 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SECURITY_MODE NONE // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SEC_LEVEL 5 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_CERTIFICATE_HEADER "wisun_certificates.h" // set by application[*] +#define MBED_CONF_MBED_MESH_API_HEAP_SIZE 55000 //52000 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_HEAP_STAT_INFO NULL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE WISUN_CLIENT_CERTIFICATE // set by application[*] +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE_KEY WISUN_CLIENT_KEY // set by application[*] +#define MBED_CONF_MBED_MESH_API_ROOT_CERTIFICATE WISUN_ROOT_CERTIFICATE // set by application[*] +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL 22 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_MASK 0x7fff800 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_PAGE 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_COMMISSIONING_DATASET_TIMESTAMP 0x10000 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_EXTENDED_PANID {0xf1, 0xb5, 0xa1, 0xb2,0xc4, 0xd5, 0xa1, 0xbd } // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_ML_PREFIX {0xfd, 0x0, 0x0d, 0xb8, 0x0, 0x0, 0x0, 0x0} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_NETWORK_NAME "Thread Network" // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PANID 0x0700 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PSKC {0xc8, 0xa6, 0x2e, 0xae, 0xf3, 0x68, 0xf3, 0x46, 0xa9, 0x9e, 0x57, 0x85, 0x98, 0x9d, 0x1c, 0xd0} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_DEVICE_TYPE MESH_DEVICE_TYPE_THREAD_ROUTER // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_MASTER_KEY {0x10, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_PSKD "ABCDEFGH" // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_SECURITY_POLICY 255 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_USE_STATIC_LINK_CONFIG 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_USE_MALLOC_FOR_HEAP 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_CHANNEL_FUNCTION MBED_CONF_APP_WISUN_BC_CHANNEL_FUNCTION // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_DWELL_INTERVAL MBED_CONF_APP_WISUN_BC_DWELL_INTERVAL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_FIXED_CHANNEL MBED_CONF_APP_WISUN_BC_FIXED_CHANNEL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_INTERVAL MBED_CONF_APP_WISUN_BC_INTERVAL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_NETWORK_NAME "Wi-SUN Network" // set by application[*] +#define MBED_CONF_MBED_MESH_API_WISUN_OPERATING_CLASS 255 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_OPERATING_MODE OPERATING_MODE_1b // set by application[*] +#define MBED_CONF_MBED_MESH_API_WISUN_REGULATORY_DOMAIN 3 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_CHANNEL_FUNCTION MBED_CONF_APP_WISUN_UC_CHANNEL_FUNCTION // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_DWELL_INTERVAL 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_FIXED_CHANNEL MBED_CONF_APP_WISUN_UC_FIXED_CHANNEL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_TRACE_ENABLE 1 // set by application[*] +#define MBED_CONF_MCR20A_PROVIDE_DEFAULT 0 // set by library:mcr20a +#define MBED_CONF_NANOSTACK_CONFIGURATION ws_router // set by application[*] +#define MBED_CONF_NANOSTACK_HAL_CRITICAL_SECTION_USABLE_FROM_INTERRUPT 0 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_DISPATCH_FROM_APPLICATION 0 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_THREAD_STACK_SIZE 6144 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_USE_MBED_EVENTS 0 // set by library:nanostack-hal +#define MBED_CONF_NSAPI_DEFAULT_MESH_TYPE WISUN // set by application[*] +#define MBED_CONF_NSAPI_DEFAULT_STACK LWIP // set by library:nsapi +#define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi +#define MBED_CONF_PLATFORM_CRASH_CAPTURE_ENABLED 1 // set by library:platform[K64F] +#define MBED_CONF_PLATFORM_CTHUNK_COUNT_MAX 8 // set by library:platform +#define MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE 9600 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_ALL_THREADS_INFO 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 4 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_REBOOT_MAX 1 // set by library:platform +#define MBED_CONF_PLATFORM_FATAL_ERROR_AUTO_REBOOT_ENABLED 1 // set by library:platform[K64F] +#define MBED_CONF_PLATFORM_FORCE_NON_COPYABLE_ERROR 0 // set by library:platform +#define MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 16 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_64_BIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_FLOATING_POINT 0 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_SET_FLOATING_POINT_MAX_DECIMALS 6 // set by library:platform +#define MBED_CONF_PLATFORM_POLL_USE_LOWPOWER_TIMER 0 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_BAUD_RATE 115200 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL 1 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_CONVERT_NEWLINES 1 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_CONVERT_TTY_NEWLINES 0 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_FLUSH_AT_EXIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_USE_MPU 1 // set by library:platform +#define MBED_CONF_PPP_CELL_IFACE_APN_LOOKUP 1 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_AT_PARSER_BUFFER_SIZE 256 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_AT_PARSER_TIMEOUT 8000 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_BAUD_RATE 115200 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_ENABLE_TRACE 0 // set by library:ppp +#define MBED_CONF_PPP_IPV4_ENABLED 1 // set by library:ppp +#define MBED_CONF_PPP_IPV6_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_MBED_EVENT_QUEUE 0 // set by library:ppp +#define MBED_CONF_PPP_THREAD_STACKSIZE 816 // set by library:ppp +#define MBED_CONF_QUECTEL_BC95_BAUDRATE 9600 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BC95_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BG96_BAUDRATE 115200 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_BG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_EC2X_BAUDRATE 115200 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_EC2X_PROVIDE_DEFAULT 0 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_M26_BAUDRATE 115200 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_M26_PROVIDE_DEFAULT 0 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_UG96_BAUDRATE 115200 // set by library:QUECTEL_UG96 +#define MBED_CONF_QUECTEL_UG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_UG96 +#define MBED_CONF_RM1000_AT_BAUDRATE 230400 // set by library:RM1000_AT +#define MBED_CONF_RM1000_AT_PROVIDE_DEFAULT 0 // set by library:RM1000_AT +#define MBED_CONF_RTOS_API_PRESENT 1 // set by library:rtos-api +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE 512 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_DEBUG_EXTRA 0 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_TICKLESS_EXTRA 256 // set by library:rtos +#define MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE 4096 // set by library:rtos +#define MBED_CONF_RTOS_PRESENT 1 // set by library:rtos +#define MBED_CONF_RTOS_THREAD_STACK_SIZE 4096 // set by library:rtos +#define MBED_CONF_RTOS_TIMER_THREAD_STACK_SIZE 768 // set by library:rtos +#define MBED_CONF_S2LP_PROVIDE_DEFAULT 1 // set by application[*] +#define MBED_CONF_SARA4_PPP_BAUDRATE 115200 // set by library:SARA4_PPP +#define MBED_CONF_SARA4_PPP_PROVIDE_DEFAULT 0 // set by library:SARA4_PPP +#define MBED_CONF_SD_CMD0_IDLE_STATE_RETRIES 5 // set by library:sd +#define MBED_CONF_SD_CMD_TIMEOUT 10000 // set by library:sd +#define MBED_CONF_SD_CRC_ENABLED 1 // set by library:sd +#define MBED_CONF_SD_FSFAT_SDCARD_INSTALLED 1 // set by library:sd +#define MBED_CONF_SD_INIT_FREQUENCY 100000 // set by library:sd +#define MBED_CONF_SD_SPI_CLK SPI_SCK // set by library:sd +#define MBED_CONF_SD_SPI_CS SPI_CS // set by library:sd +#define MBED_CONF_SD_SPI_MISO SPI_MISO // set by library:sd +#define MBED_CONF_SD_SPI_MOSI SPI_MOSI // set by library:sd +#define MBED_CONF_SD_TEST_BUFFER 8192 // set by library:sd +#define MBED_CONF_STORAGE_DEFAULT_KV kv // set by library:storage +#define MBED_CONF_STORAGE_FILESYSTEM_BLOCKDEVICE default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FILESYSTEM default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FOLDER_PATH kvstore // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_INTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_MOUNT_POINT kv // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_BLOCKDEVICE default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FILESYSTEM default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FOLDER_PATH kvstore // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_MOUNT_POINT kv // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_RBP_INTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_STORAGE_TYPE default // set by library:storage +#define MBED_CONF_STORAGE_TDB_EXTERNAL_BLOCKDEVICE default // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_BLOCKDEVICE default // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_RBP_INTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_internal +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_SIZE 0 // set by library:storage_tdb_internal +#define MBED_CONF_TARGET_BOOT_STACK_SIZE 0x400 // set by library:rtos[*] +#define MBED_CONF_TARGET_CONSOLE_UART 1 // set by target:Target +#define MBED_CONF_TARGET_DEEP_SLEEP_LATENCY 0 // set by target:Target +#define MBED_CONF_TARGET_INIT_US_TICKER_AT_BOOT 0 // set by target:Target +#define MBED_CONF_TARGET_MPU_ROM_END 0x0fffffff // set by target:Target +#define MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE ETHERNET // set by target:K64F +#define MBED_CONF_TARGET_TICKLESS_FROM_US_TICKER 0 // set by target:Target +#define MBED_CONF_TELIT_HE910_BAUDRATE 115200 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_HE910_PROVIDE_DEFAULT 0 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_ME910_BAUDRATE 115200 // set by library:TELIT_ME910 +#define MBED_CONF_TELIT_ME910_PROVIDE_DEFAULT 0 // set by library:TELIT_ME910 +#define MBED_CONF_UBLOX_AT_BAUDRATE 115200 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_AT_PROVIDE_DEFAULT 0 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_N2XX_BAUDRATE 9600 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_N2XX_PROVIDE_DEFAULT 0 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_PPP_BAUDRATE 115200 // set by library:UBLOX_PPP +#define MBED_CONF_UBLOX_PPP_PROVIDE_DEFAULT 0 // set by library:UBLOX_PPP +#define MBED_LFS_BLOCK_SIZE 512 // set by library:littlefs +#define MBED_LFS_ENABLE_INFO 0 // set by library:littlefs +#define MBED_LFS_INTRINSICS 1 // set by library:littlefs +#define MBED_LFS_LOOKAHEAD 512 // set by library:littlefs +#define MBED_LFS_PROG_SIZE 64 // set by library:littlefs +#define MBED_LFS_READ_SIZE 64 // set by library:littlefs +#define MEM_ALLOC malloc // set by library:mbed-trace +#define MEM_FREE free // set by library:mbed-trace +#define NVSTORE_ENABLED 1 // set by library:nvstore +#define NVSTORE_MAX_KEYS 16 // set by library:nvstore +#define PPP_DEBUG 0 // set by library:ppp +// Macros +#define MBEDTLS_CIPHER_MODE_CTR // defined by library:SecureStore +#define MBEDTLS_CMAC_C // defined by library:SecureStore +#define MBEDTLS_PSA_HAS_ITS_IO // defined by library:mbed-crypto +#define MBEDTLS_USER_CONFIG_FILE "mbedtls_wisun_config.h" // defined by application +#define DEVICE_TRNG 1 +#define NSAPI_PPP_AVAILABLE (MBED_CONF_PPP_ENABLED || MBED_CONF_LWIP_PPP_ENABLED) // defined by library:ppp +//#define NS_USE_EXTERNAL_MBED_TLS // defined by library:nanostack +#define UNITY_INCLUDE_CONFIG_H // defined by library:utest +#define _RTE_ // defined by library:rtos + +#define MBEDTLS_PLATFORM_C +#define MBEDTLS_PLATFORM_MEMORY +#define EQUEUE_PLATFORM_POSIX 0 +#endif diff --git a/Vendors/TI/application/mbed_config-916mhz-fixed-chan.h b/Vendors/TI/application/mbed_config-916mhz-fixed-chan.h new file mode 100644 index 0000000..f987e99 --- /dev/null +++ b/Vendors/TI/application/mbed_config-916mhz-fixed-chan.h @@ -0,0 +1,314 @@ +/* + * mbed SDK + * Copyright (c) 2017 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Automatically generated configuration file. +// DO NOT EDIT, content will be overwritten. + +#ifndef __MBED_CONFIG_DATA__ +#define __MBED_CONFIG_DATA__ + +// Configuration parameters +#define MBED_CONF_APP_BUTTON SW2 // set by application[K64F] +#define MBED_CONF_APP_BUTTON_MODE PullUp // set by application +#define MBED_CONF_APP_ENABLE_LED_CONTROL_EXAMPLE 1 // set by application +#define MBED_CONF_APP_LED LED_RED // set by application[K64F] +#define MBED_CONF_APP_RELAY_CONTROL NC // set by application +#define MBED_CONF_APP_WISUN_BC_CHANNEL_FUNCTION 0 // set by application +#define MBED_CONF_APP_WISUN_BC_DWELL_INTERVAL 255 // set by application +#define MBED_CONF_APP_WISUN_BC_FIXED_CHANNEL 11 // set by application +#define MBED_CONF_APP_WISUN_BC_INTERVAL 1020 // set by application +#define MBED_CONF_APP_WISUN_UC_CHANNEL_FUNCTION 0 // set by application +#define MBED_CONF_APP_WISUN_UC_FIXED_CHANNEL 11 // set by application +#define MBED_CONF_ATMEL_RF_ASSUME_SPACED_SPI 0 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED 7500000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED_BYTE_SPACING 250 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_IRQ_THREAD_STACK_SIZE 1024 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_LOW_SPI_SPEED 3750000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_PROVIDE_DEFAULT 0 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_USE_SPI_SPACING_API 0 // set by library:atmel-rf +#define MBED_CONF_CELLULAR_CONTROL_PLANE_OPT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_DEBUG_AT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY 0 // set by library:cellular +#define MBED_CONF_CELLULAR_USE_APN_LOOKUP 1 // set by library:cellular +#define MBED_CONF_DRIVERS_UART_SERIAL_RXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_DRIVERS_UART_SERIAL_TXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_ESP8266_DEBUG 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_OFF_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_POLARITY 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_PROVIDE_DEFAULT 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_SERIAL_BAUDRATE 115200 // set by library:esp8266 +#define MBED_CONF_ESP8266_SOCKET_BUFSIZE 8192 // set by library:esp8266 +#define MBED_CONF_EVENTS_PRESENT 1 // set by library:events +#define MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION 0 // set by library:events +#define MBED_CONF_EVENTS_SHARED_EVENTSIZE 768 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_EVENTSIZE 256 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_STACKSIZE 1024 // set by library:events +#define MBED_CONF_EVENTS_SHARED_STACKSIZE 2048 // set by library:events +#define MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER 0 // set by library:events +#define MBED_CONF_FILESYSTEM_PRESENT 1 // set by library:filesystem +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS 0xFFFFFFFF // set by library:flashiap-block-device +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE 0 // set by library:flashiap-block-device +#define MBED_CONF_GEMALTO_CINTERION_BAUDRATE 115200 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GEMALTO_CINTERION_PROVIDE_DEFAULT 0 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GENERIC_AT3GPP_BAUDRATE 115200 // set by library:GENERIC_AT3GPP +#define MBED_CONF_GENERIC_AT3GPP_PROVIDE_DEFAULT 0 // set by library:GENERIC_AT3GPP +#define MBED_CONF_KINETIS_EMAC_RX_RING_LEN 2 // set by library:kinetis-emac +#define MBED_CONF_KINETIS_EMAC_TX_RING_LEN 1 // set by library:kinetis-emac +#define MBED_CONF_LORA_ADR_ON 1 // set by library:lora +#define MBED_CONF_LORA_APPLICATION_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPLICATION_KEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APP_PORT 15 // set by library:lora +#define MBED_CONF_LORA_AUTOMATIC_UPLINK_MESSAGE 1 // set by library:lora +#define MBED_CONF_LORA_DEVICE_ADDRESS 0x00000000 // set by library:lora +#define MBED_CONF_LORA_DEVICE_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_DOWNLINK_PREAMBLE_LENGTH 5 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON 1 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON_JOIN 1 // set by library:lora +#define MBED_CONF_LORA_FSB_MASK {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF} // set by library:lora +#define MBED_CONF_LORA_FSB_MASK_CHINA {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF} // set by library:lora +#define MBED_CONF_LORA_LBT_ON 0 // set by library:lora +#define MBED_CONF_LORA_MAX_SYS_RX_ERROR 5 // set by library:lora +#define MBED_CONF_LORA_NB_TRIALS 12 // set by library:lora +#define MBED_CONF_LORA_NWKSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_OVER_THE_AIR_ACTIVATION 1 // set by library:lora +#define MBED_CONF_LORA_PHY EU868 // set by library:lora +#define MBED_CONF_LORA_PUBLIC_NETWORK 1 // set by library:lora +#define MBED_CONF_LORA_TX_MAX_SIZE 64 // set by library:lora +#define MBED_CONF_LORA_UPLINK_PREAMBLE_LENGTH 8 // set by library:lora +#define MBED_CONF_LORA_WAKEUP_TIME 5 // set by library:lora +#define MBED_CONF_LWIP_ADDR_TIMEOUT 5 // set by library:lwip +#define MBED_CONF_LWIP_ADDR_TIMEOUT_MODE 1 // set by library:lwip +#define MBED_CONF_LWIP_DEBUG_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_DEFAULT_TCP_RECVMBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_DEFAULT_THREAD_STACKSIZE 512 // set by library:lwip +#define MBED_CONF_LWIP_ENABLE_PPP_TRACE 0 // set by library:lwip +#define MBED_CONF_LWIP_ETHERNET_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV4_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_IP_VER_PREF 4 // set by library:lwip +#define MBED_CONF_LWIP_L3IP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_MBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_MEMP_NUM_TCPIP_MSG_INPKT 8 // set by library:lwip +#define MBED_CONF_LWIP_MEM_SIZE 33270 // set by library:lwip[Freescale] +#define MBED_CONF_LWIP_PPP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV4_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip +#define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_MBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip +#define MBED_CONF_LWIP_TCP_CLOSE_TIMEOUT 1000 // set by library:lwip +#define MBED_CONF_LWIP_TCP_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_TCP_MAXRTX 6 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SERVER_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_UDP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_USE_MBED_TRACE 0 // set by library:lwip +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_MASK 0x7fff800 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_PAGE 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_DEVICE_TYPE NET_6LOWPAN_ROUTER // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PANID_FILTER 0xffff // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY_ID 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SECURITY_MODE NONE // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SEC_LEVEL 5 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_CERTIFICATE_HEADER "wisun_certificates.h" // set by application[*] +#define MBED_CONF_MBED_MESH_API_HEAP_SIZE 55000 //52000 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_HEAP_STAT_INFO NULL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE WISUN_CLIENT_CERTIFICATE // set by application[*] +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE_KEY WISUN_CLIENT_KEY // set by application[*] +#define MBED_CONF_MBED_MESH_API_ROOT_CERTIFICATE WISUN_ROOT_CERTIFICATE // set by application[*] +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL 22 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_MASK 0x7fff800 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_PAGE 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_COMMISSIONING_DATASET_TIMESTAMP 0x10000 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_EXTENDED_PANID {0xf1, 0xb5, 0xa1, 0xb2,0xc4, 0xd5, 0xa1, 0xbd } // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_ML_PREFIX {0xfd, 0x0, 0x0d, 0xb8, 0x0, 0x0, 0x0, 0x0} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_NETWORK_NAME "Thread Network" // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PANID 0x0700 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PSKC {0xc8, 0xa6, 0x2e, 0xae, 0xf3, 0x68, 0xf3, 0x46, 0xa9, 0x9e, 0x57, 0x85, 0x98, 0x9d, 0x1c, 0xd0} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_DEVICE_TYPE MESH_DEVICE_TYPE_THREAD_ROUTER // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_MASTER_KEY {0x10, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_PSKD "ABCDEFGH" // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_SECURITY_POLICY 255 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_USE_STATIC_LINK_CONFIG 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_USE_MALLOC_FOR_HEAP 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_CHANNEL_FUNCTION MBED_CONF_APP_WISUN_BC_CHANNEL_FUNCTION // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_DWELL_INTERVAL MBED_CONF_APP_WISUN_BC_DWELL_INTERVAL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_FIXED_CHANNEL MBED_CONF_APP_WISUN_BC_FIXED_CHANNEL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_INTERVAL MBED_CONF_APP_WISUN_BC_INTERVAL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_NETWORK_NAME "Wi-SUN Network" // set by application[*] +#define MBED_CONF_MBED_MESH_API_WISUN_OPERATING_CLASS 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_OPERATING_MODE OPERATING_MODE_1b // set by application[*] +#define MBED_CONF_MBED_MESH_API_WISUN_REGULATORY_DOMAIN 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_CHANNEL_FUNCTION MBED_CONF_APP_WISUN_UC_CHANNEL_FUNCTION // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_DWELL_INTERVAL 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_FIXED_CHANNEL MBED_CONF_APP_WISUN_UC_FIXED_CHANNEL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_TRACE_ENABLE 1 // set by application[*] +#define MBED_CONF_MCR20A_PROVIDE_DEFAULT 0 // set by library:mcr20a +#define MBED_CONF_NANOSTACK_CONFIGURATION ws_router // set by application[*] +#define MBED_CONF_NANOSTACK_HAL_CRITICAL_SECTION_USABLE_FROM_INTERRUPT 0 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_DISPATCH_FROM_APPLICATION 0 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_THREAD_STACK_SIZE 6144 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_USE_MBED_EVENTS 0 // set by library:nanostack-hal +#define MBED_CONF_NSAPI_DEFAULT_MESH_TYPE WISUN // set by application[*] +#define MBED_CONF_NSAPI_DEFAULT_STACK LWIP // set by library:nsapi +#define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi +#define MBED_CONF_PLATFORM_CRASH_CAPTURE_ENABLED 1 // set by library:platform[K64F] +#define MBED_CONF_PLATFORM_CTHUNK_COUNT_MAX 8 // set by library:platform +#define MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE 9600 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_ALL_THREADS_INFO 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 4 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_REBOOT_MAX 1 // set by library:platform +#define MBED_CONF_PLATFORM_FATAL_ERROR_AUTO_REBOOT_ENABLED 1 // set by library:platform[K64F] +#define MBED_CONF_PLATFORM_FORCE_NON_COPYABLE_ERROR 0 // set by library:platform +#define MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 16 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_64_BIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_FLOATING_POINT 0 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_SET_FLOATING_POINT_MAX_DECIMALS 6 // set by library:platform +#define MBED_CONF_PLATFORM_POLL_USE_LOWPOWER_TIMER 0 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_BAUD_RATE 115200 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL 1 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_CONVERT_NEWLINES 1 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_CONVERT_TTY_NEWLINES 0 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_FLUSH_AT_EXIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_USE_MPU 1 // set by library:platform +#define MBED_CONF_PPP_CELL_IFACE_APN_LOOKUP 1 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_AT_PARSER_BUFFER_SIZE 256 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_AT_PARSER_TIMEOUT 8000 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_BAUD_RATE 115200 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_ENABLE_TRACE 0 // set by library:ppp +#define MBED_CONF_PPP_IPV4_ENABLED 1 // set by library:ppp +#define MBED_CONF_PPP_IPV6_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_MBED_EVENT_QUEUE 0 // set by library:ppp +#define MBED_CONF_PPP_THREAD_STACKSIZE 816 // set by library:ppp +#define MBED_CONF_QUECTEL_BC95_BAUDRATE 9600 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BC95_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BG96_BAUDRATE 115200 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_BG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_EC2X_BAUDRATE 115200 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_EC2X_PROVIDE_DEFAULT 0 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_M26_BAUDRATE 115200 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_M26_PROVIDE_DEFAULT 0 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_UG96_BAUDRATE 115200 // set by library:QUECTEL_UG96 +#define MBED_CONF_QUECTEL_UG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_UG96 +#define MBED_CONF_RM1000_AT_BAUDRATE 230400 // set by library:RM1000_AT +#define MBED_CONF_RM1000_AT_PROVIDE_DEFAULT 0 // set by library:RM1000_AT +#define MBED_CONF_RTOS_API_PRESENT 1 // set by library:rtos-api +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE 512 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_DEBUG_EXTRA 0 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_TICKLESS_EXTRA 256 // set by library:rtos +#define MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE 4096 // set by library:rtos +#define MBED_CONF_RTOS_PRESENT 1 // set by library:rtos +#define MBED_CONF_RTOS_THREAD_STACK_SIZE 4096 // set by library:rtos +#define MBED_CONF_RTOS_TIMER_THREAD_STACK_SIZE 768 // set by library:rtos +#define MBED_CONF_S2LP_PROVIDE_DEFAULT 1 // set by application[*] +#define MBED_CONF_SARA4_PPP_BAUDRATE 115200 // set by library:SARA4_PPP +#define MBED_CONF_SARA4_PPP_PROVIDE_DEFAULT 0 // set by library:SARA4_PPP +#define MBED_CONF_SD_CMD0_IDLE_STATE_RETRIES 5 // set by library:sd +#define MBED_CONF_SD_CMD_TIMEOUT 10000 // set by library:sd +#define MBED_CONF_SD_CRC_ENABLED 1 // set by library:sd +#define MBED_CONF_SD_FSFAT_SDCARD_INSTALLED 1 // set by library:sd +#define MBED_CONF_SD_INIT_FREQUENCY 100000 // set by library:sd +#define MBED_CONF_SD_SPI_CLK SPI_SCK // set by library:sd +#define MBED_CONF_SD_SPI_CS SPI_CS // set by library:sd +#define MBED_CONF_SD_SPI_MISO SPI_MISO // set by library:sd +#define MBED_CONF_SD_SPI_MOSI SPI_MOSI // set by library:sd +#define MBED_CONF_SD_TEST_BUFFER 8192 // set by library:sd +#define MBED_CONF_STORAGE_DEFAULT_KV kv // set by library:storage +#define MBED_CONF_STORAGE_FILESYSTEM_BLOCKDEVICE default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FILESYSTEM default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FOLDER_PATH kvstore // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_INTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_MOUNT_POINT kv // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_BLOCKDEVICE default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FILESYSTEM default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FOLDER_PATH kvstore // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_MOUNT_POINT kv // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_RBP_INTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_STORAGE_TYPE default // set by library:storage +#define MBED_CONF_STORAGE_TDB_EXTERNAL_BLOCKDEVICE default // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_BLOCKDEVICE default // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_RBP_INTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_internal +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_SIZE 0 // set by library:storage_tdb_internal +#define MBED_CONF_TARGET_BOOT_STACK_SIZE 0x400 // set by library:rtos[*] +#define MBED_CONF_TARGET_CONSOLE_UART 1 // set by target:Target +#define MBED_CONF_TARGET_DEEP_SLEEP_LATENCY 0 // set by target:Target +#define MBED_CONF_TARGET_INIT_US_TICKER_AT_BOOT 0 // set by target:Target +#define MBED_CONF_TARGET_MPU_ROM_END 0x0fffffff // set by target:Target +#define MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE ETHERNET // set by target:K64F +#define MBED_CONF_TARGET_TICKLESS_FROM_US_TICKER 0 // set by target:Target +#define MBED_CONF_TELIT_HE910_BAUDRATE 115200 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_HE910_PROVIDE_DEFAULT 0 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_ME910_BAUDRATE 115200 // set by library:TELIT_ME910 +#define MBED_CONF_TELIT_ME910_PROVIDE_DEFAULT 0 // set by library:TELIT_ME910 +#define MBED_CONF_UBLOX_AT_BAUDRATE 115200 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_AT_PROVIDE_DEFAULT 0 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_N2XX_BAUDRATE 9600 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_N2XX_PROVIDE_DEFAULT 0 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_PPP_BAUDRATE 115200 // set by library:UBLOX_PPP +#define MBED_CONF_UBLOX_PPP_PROVIDE_DEFAULT 0 // set by library:UBLOX_PPP +#define MBED_LFS_BLOCK_SIZE 512 // set by library:littlefs +#define MBED_LFS_ENABLE_INFO 0 // set by library:littlefs +#define MBED_LFS_INTRINSICS 1 // set by library:littlefs +#define MBED_LFS_LOOKAHEAD 512 // set by library:littlefs +#define MBED_LFS_PROG_SIZE 64 // set by library:littlefs +#define MBED_LFS_READ_SIZE 64 // set by library:littlefs +#define MEM_ALLOC malloc // set by library:mbed-trace +#define MEM_FREE free // set by library:mbed-trace +#define NVSTORE_ENABLED 1 // set by library:nvstore +#define NVSTORE_MAX_KEYS 16 // set by library:nvstore +#define PPP_DEBUG 0 // set by library:ppp +// Macros +#define MBEDTLS_CIPHER_MODE_CTR // defined by library:SecureStore +#define MBEDTLS_CMAC_C // defined by library:SecureStore +#define MBEDTLS_PSA_HAS_ITS_IO // defined by library:mbed-crypto +#define MBEDTLS_USER_CONFIG_FILE "mbedtls_wisun_config.h" // defined by application +#define DEVICE_TRNG 1 +#define NSAPI_PPP_AVAILABLE (MBED_CONF_PPP_ENABLED || MBED_CONF_LWIP_PPP_ENABLED) // defined by library:ppp +//#define NS_USE_EXTERNAL_MBED_TLS // defined by library:nanostack +#define UNITY_INCLUDE_CONFIG_H // defined by library:utest +#define _RTE_ // defined by library:rtos + +#define MBEDTLS_PLATFORM_C +#define MBEDTLS_PLATFORM_MEMORY +#define EQUEUE_PLATFORM_POSIX 0 +#endif diff --git a/Vendors/TI/application/mbed_config-916mhz.h b/Vendors/TI/application/mbed_config-916mhz.h new file mode 100644 index 0000000..d2b3a2c --- /dev/null +++ b/Vendors/TI/application/mbed_config-916mhz.h @@ -0,0 +1,314 @@ +/* + * mbed SDK + * Copyright (c) 2017 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Automatically generated configuration file. +// DO NOT EDIT, content will be overwritten. + +#ifndef __MBED_CONFIG_DATA__ +#define __MBED_CONFIG_DATA__ + +// Configuration parameters +#define MBED_CONF_APP_BUTTON SW2 // set by application[K64F] +#define MBED_CONF_APP_BUTTON_MODE PullUp // set by application +#define MBED_CONF_APP_ENABLE_LED_CONTROL_EXAMPLE 1 // set by application +#define MBED_CONF_APP_LED LED_RED // set by application[K64F] +#define MBED_CONF_APP_RELAY_CONTROL NC // set by application +#define MBED_CONF_APP_WISUN_BC_CHANNEL_FUNCTION 255 // set by application +#define MBED_CONF_APP_WISUN_BC_DWELL_INTERVAL 0 // set by application +#define MBED_CONF_APP_WISUN_BC_FIXED_CHANNEL 0xFFFF // set by application +#define MBED_CONF_APP_WISUN_BC_INTERVAL 0 // set by application +#define MBED_CONF_APP_WISUN_UC_CHANNEL_FUNCTION 255 // set by application +#define MBED_CONF_APP_WISUN_UC_FIXED_CHANNEL 0xFFFF // set by application +#define MBED_CONF_ATMEL_RF_ASSUME_SPACED_SPI 0 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED 7500000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED_BYTE_SPACING 250 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_IRQ_THREAD_STACK_SIZE 1024 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_LOW_SPI_SPEED 3750000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_PROVIDE_DEFAULT 0 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_USE_SPI_SPACING_API 0 // set by library:atmel-rf +#define MBED_CONF_CELLULAR_CONTROL_PLANE_OPT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_DEBUG_AT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY 0 // set by library:cellular +#define MBED_CONF_CELLULAR_USE_APN_LOOKUP 1 // set by library:cellular +#define MBED_CONF_DRIVERS_UART_SERIAL_RXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_DRIVERS_UART_SERIAL_TXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_ESP8266_DEBUG 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_OFF_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_POLARITY 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_PROVIDE_DEFAULT 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_SERIAL_BAUDRATE 115200 // set by library:esp8266 +#define MBED_CONF_ESP8266_SOCKET_BUFSIZE 8192 // set by library:esp8266 +#define MBED_CONF_EVENTS_PRESENT 1 // set by library:events +#define MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION 0 // set by library:events +#define MBED_CONF_EVENTS_SHARED_EVENTSIZE 768 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_EVENTSIZE 256 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_STACKSIZE 1024 // set by library:events +#define MBED_CONF_EVENTS_SHARED_STACKSIZE 2048 // set by library:events +#define MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER 0 // set by library:events +#define MBED_CONF_FILESYSTEM_PRESENT 1 // set by library:filesystem +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS 0xFFFFFFFF // set by library:flashiap-block-device +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE 0 // set by library:flashiap-block-device +#define MBED_CONF_GEMALTO_CINTERION_BAUDRATE 115200 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GEMALTO_CINTERION_PROVIDE_DEFAULT 0 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GENERIC_AT3GPP_BAUDRATE 115200 // set by library:GENERIC_AT3GPP +#define MBED_CONF_GENERIC_AT3GPP_PROVIDE_DEFAULT 0 // set by library:GENERIC_AT3GPP +#define MBED_CONF_KINETIS_EMAC_RX_RING_LEN 2 // set by library:kinetis-emac +#define MBED_CONF_KINETIS_EMAC_TX_RING_LEN 1 // set by library:kinetis-emac +#define MBED_CONF_LORA_ADR_ON 1 // set by library:lora +#define MBED_CONF_LORA_APPLICATION_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPLICATION_KEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APP_PORT 15 // set by library:lora +#define MBED_CONF_LORA_AUTOMATIC_UPLINK_MESSAGE 1 // set by library:lora +#define MBED_CONF_LORA_DEVICE_ADDRESS 0x00000000 // set by library:lora +#define MBED_CONF_LORA_DEVICE_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_DOWNLINK_PREAMBLE_LENGTH 5 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON 1 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON_JOIN 1 // set by library:lora +#define MBED_CONF_LORA_FSB_MASK {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF} // set by library:lora +#define MBED_CONF_LORA_FSB_MASK_CHINA {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF} // set by library:lora +#define MBED_CONF_LORA_LBT_ON 0 // set by library:lora +#define MBED_CONF_LORA_MAX_SYS_RX_ERROR 5 // set by library:lora +#define MBED_CONF_LORA_NB_TRIALS 12 // set by library:lora +#define MBED_CONF_LORA_NWKSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_OVER_THE_AIR_ACTIVATION 1 // set by library:lora +#define MBED_CONF_LORA_PHY EU868 // set by library:lora +#define MBED_CONF_LORA_PUBLIC_NETWORK 1 // set by library:lora +#define MBED_CONF_LORA_TX_MAX_SIZE 64 // set by library:lora +#define MBED_CONF_LORA_UPLINK_PREAMBLE_LENGTH 8 // set by library:lora +#define MBED_CONF_LORA_WAKEUP_TIME 5 // set by library:lora +#define MBED_CONF_LWIP_ADDR_TIMEOUT 5 // set by library:lwip +#define MBED_CONF_LWIP_ADDR_TIMEOUT_MODE 1 // set by library:lwip +#define MBED_CONF_LWIP_DEBUG_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_DEFAULT_TCP_RECVMBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_DEFAULT_THREAD_STACKSIZE 512 // set by library:lwip +#define MBED_CONF_LWIP_ENABLE_PPP_TRACE 0 // set by library:lwip +#define MBED_CONF_LWIP_ETHERNET_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV4_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_IP_VER_PREF 4 // set by library:lwip +#define MBED_CONF_LWIP_L3IP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_MBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_MEMP_NUM_TCPIP_MSG_INPKT 8 // set by library:lwip +#define MBED_CONF_LWIP_MEM_SIZE 33270 // set by library:lwip[Freescale] +#define MBED_CONF_LWIP_PPP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV4_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip +#define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_MBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip +#define MBED_CONF_LWIP_TCP_CLOSE_TIMEOUT 1000 // set by library:lwip +#define MBED_CONF_LWIP_TCP_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_TCP_MAXRTX 6 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SERVER_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_UDP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_USE_MBED_TRACE 0 // set by library:lwip +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_MASK 0x7fff800 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_PAGE 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_DEVICE_TYPE NET_6LOWPAN_ROUTER // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PANID_FILTER 0xffff // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY_ID 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SECURITY_MODE NONE // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SEC_LEVEL 5 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_CERTIFICATE_HEADER "wisun_certificates.h" // set by application[*] +#define MBED_CONF_MBED_MESH_API_HEAP_SIZE 55000 //52000 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_HEAP_STAT_INFO NULL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE WISUN_CLIENT_CERTIFICATE // set by application[*] +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE_KEY WISUN_CLIENT_KEY // set by application[*] +#define MBED_CONF_MBED_MESH_API_ROOT_CERTIFICATE WISUN_ROOT_CERTIFICATE // set by application[*] +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL 22 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_MASK 0x7fff800 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_PAGE 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_COMMISSIONING_DATASET_TIMESTAMP 0x10000 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_EXTENDED_PANID {0xf1, 0xb5, 0xa1, 0xb2,0xc4, 0xd5, 0xa1, 0xbd } // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_ML_PREFIX {0xfd, 0x0, 0x0d, 0xb8, 0x0, 0x0, 0x0, 0x0} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_NETWORK_NAME "Thread Network" // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PANID 0x0700 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PSKC {0xc8, 0xa6, 0x2e, 0xae, 0xf3, 0x68, 0xf3, 0x46, 0xa9, 0x9e, 0x57, 0x85, 0x98, 0x9d, 0x1c, 0xd0} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_DEVICE_TYPE MESH_DEVICE_TYPE_THREAD_ROUTER // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_MASTER_KEY {0x10, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff} // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_PSKD "ABCDEFGH" // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_SECURITY_POLICY 255 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_THREAD_USE_STATIC_LINK_CONFIG 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_USE_MALLOC_FOR_HEAP 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_CHANNEL_FUNCTION MBED_CONF_APP_WISUN_BC_CHANNEL_FUNCTION // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_DWELL_INTERVAL MBED_CONF_APP_WISUN_BC_DWELL_INTERVAL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_FIXED_CHANNEL MBED_CONF_APP_WISUN_BC_FIXED_CHANNEL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_BC_INTERVAL MBED_CONF_APP_WISUN_BC_INTERVAL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_NETWORK_NAME "Wi-SUN Network" // set by application[*] +#define MBED_CONF_MBED_MESH_API_WISUN_OPERATING_CLASS 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_OPERATING_MODE OPERATING_MODE_1b // set by application[*] +#define MBED_CONF_MBED_MESH_API_WISUN_REGULATORY_DOMAIN 1 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_CHANNEL_FUNCTION MBED_CONF_APP_WISUN_UC_CHANNEL_FUNCTION // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_DWELL_INTERVAL 0 // set by library:mbed-mesh-api +#define MBED_CONF_MBED_MESH_API_WISUN_UC_FIXED_CHANNEL MBED_CONF_APP_WISUN_UC_FIXED_CHANNEL // set by library:mbed-mesh-api +#define MBED_CONF_MBED_TRACE_ENABLE 1 // set by application[*] +#define MBED_CONF_MCR20A_PROVIDE_DEFAULT 0 // set by library:mcr20a +#define MBED_CONF_NANOSTACK_CONFIGURATION ws_router // set by application[*] +#define MBED_CONF_NANOSTACK_HAL_CRITICAL_SECTION_USABLE_FROM_INTERRUPT 0 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_DISPATCH_FROM_APPLICATION 0 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_THREAD_STACK_SIZE 6144 // set by library:nanostack-hal +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_USE_MBED_EVENTS 0 // set by library:nanostack-hal +#define MBED_CONF_NSAPI_DEFAULT_MESH_TYPE WISUN // set by application[*] +#define MBED_CONF_NSAPI_DEFAULT_STACK LWIP // set by library:nsapi +#define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi +#define MBED_CONF_PLATFORM_CRASH_CAPTURE_ENABLED 1 // set by library:platform[K64F] +#define MBED_CONF_PLATFORM_CTHUNK_COUNT_MAX 8 // set by library:platform +#define MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE 9600 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_ALL_THREADS_INFO 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 4 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_REBOOT_MAX 1 // set by library:platform +#define MBED_CONF_PLATFORM_FATAL_ERROR_AUTO_REBOOT_ENABLED 1 // set by library:platform[K64F] +#define MBED_CONF_PLATFORM_FORCE_NON_COPYABLE_ERROR 0 // set by library:platform +#define MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 16 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_64_BIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_FLOATING_POINT 0 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_SET_FLOATING_POINT_MAX_DECIMALS 6 // set by library:platform +#define MBED_CONF_PLATFORM_POLL_USE_LOWPOWER_TIMER 0 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_BAUD_RATE 115200 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL 1 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_CONVERT_NEWLINES 1 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_CONVERT_TTY_NEWLINES 0 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_FLUSH_AT_EXIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_USE_MPU 1 // set by library:platform +#define MBED_CONF_PPP_CELL_IFACE_APN_LOOKUP 1 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_AT_PARSER_BUFFER_SIZE 256 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_AT_PARSER_TIMEOUT 8000 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_CELL_IFACE_BAUD_RATE 115200 // set by library:ppp-cell-iface +#define MBED_CONF_PPP_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_ENABLE_TRACE 0 // set by library:ppp +#define MBED_CONF_PPP_IPV4_ENABLED 1 // set by library:ppp +#define MBED_CONF_PPP_IPV6_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_MBED_EVENT_QUEUE 0 // set by library:ppp +#define MBED_CONF_PPP_THREAD_STACKSIZE 816 // set by library:ppp +#define MBED_CONF_QUECTEL_BC95_BAUDRATE 9600 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BC95_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BG96_BAUDRATE 115200 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_BG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_EC2X_BAUDRATE 115200 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_EC2X_PROVIDE_DEFAULT 0 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_M26_BAUDRATE 115200 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_M26_PROVIDE_DEFAULT 0 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_UG96_BAUDRATE 115200 // set by library:QUECTEL_UG96 +#define MBED_CONF_QUECTEL_UG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_UG96 +#define MBED_CONF_RM1000_AT_BAUDRATE 230400 // set by library:RM1000_AT +#define MBED_CONF_RM1000_AT_PROVIDE_DEFAULT 0 // set by library:RM1000_AT +#define MBED_CONF_RTOS_API_PRESENT 1 // set by library:rtos-api +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE 512 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_DEBUG_EXTRA 0 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_TICKLESS_EXTRA 256 // set by library:rtos +#define MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE 4096 // set by library:rtos +#define MBED_CONF_RTOS_PRESENT 1 // set by library:rtos +#define MBED_CONF_RTOS_THREAD_STACK_SIZE 4096 // set by library:rtos +#define MBED_CONF_RTOS_TIMER_THREAD_STACK_SIZE 768 // set by library:rtos +#define MBED_CONF_S2LP_PROVIDE_DEFAULT 1 // set by application[*] +#define MBED_CONF_SARA4_PPP_BAUDRATE 115200 // set by library:SARA4_PPP +#define MBED_CONF_SARA4_PPP_PROVIDE_DEFAULT 0 // set by library:SARA4_PPP +#define MBED_CONF_SD_CMD0_IDLE_STATE_RETRIES 5 // set by library:sd +#define MBED_CONF_SD_CMD_TIMEOUT 10000 // set by library:sd +#define MBED_CONF_SD_CRC_ENABLED 1 // set by library:sd +#define MBED_CONF_SD_FSFAT_SDCARD_INSTALLED 1 // set by library:sd +#define MBED_CONF_SD_INIT_FREQUENCY 100000 // set by library:sd +#define MBED_CONF_SD_SPI_CLK SPI_SCK // set by library:sd +#define MBED_CONF_SD_SPI_CS SPI_CS // set by library:sd +#define MBED_CONF_SD_SPI_MISO SPI_MISO // set by library:sd +#define MBED_CONF_SD_SPI_MOSI SPI_MOSI // set by library:sd +#define MBED_CONF_SD_TEST_BUFFER 8192 // set by library:sd +#define MBED_CONF_STORAGE_DEFAULT_KV kv // set by library:storage +#define MBED_CONF_STORAGE_FILESYSTEM_BLOCKDEVICE default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FILESYSTEM default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FOLDER_PATH kvstore // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_INTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_MOUNT_POINT kv // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_BLOCKDEVICE default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FILESYSTEM default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FOLDER_PATH kvstore // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_MOUNT_POINT kv // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_RBP_INTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_STORAGE_TYPE default // set by library:storage +#define MBED_CONF_STORAGE_TDB_EXTERNAL_BLOCKDEVICE default // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_BLOCKDEVICE default // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_RBP_INTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_internal +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_SIZE 0 // set by library:storage_tdb_internal +#define MBED_CONF_TARGET_BOOT_STACK_SIZE 0x400 // set by library:rtos[*] +#define MBED_CONF_TARGET_CONSOLE_UART 1 // set by target:Target +#define MBED_CONF_TARGET_DEEP_SLEEP_LATENCY 0 // set by target:Target +#define MBED_CONF_TARGET_INIT_US_TICKER_AT_BOOT 0 // set by target:Target +#define MBED_CONF_TARGET_MPU_ROM_END 0x0fffffff // set by target:Target +#define MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE ETHERNET // set by target:K64F +#define MBED_CONF_TARGET_TICKLESS_FROM_US_TICKER 0 // set by target:Target +#define MBED_CONF_TELIT_HE910_BAUDRATE 115200 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_HE910_PROVIDE_DEFAULT 0 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_ME910_BAUDRATE 115200 // set by library:TELIT_ME910 +#define MBED_CONF_TELIT_ME910_PROVIDE_DEFAULT 0 // set by library:TELIT_ME910 +#define MBED_CONF_UBLOX_AT_BAUDRATE 115200 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_AT_PROVIDE_DEFAULT 0 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_N2XX_BAUDRATE 9600 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_N2XX_PROVIDE_DEFAULT 0 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_PPP_BAUDRATE 115200 // set by library:UBLOX_PPP +#define MBED_CONF_UBLOX_PPP_PROVIDE_DEFAULT 0 // set by library:UBLOX_PPP +#define MBED_LFS_BLOCK_SIZE 512 // set by library:littlefs +#define MBED_LFS_ENABLE_INFO 0 // set by library:littlefs +#define MBED_LFS_INTRINSICS 1 // set by library:littlefs +#define MBED_LFS_LOOKAHEAD 512 // set by library:littlefs +#define MBED_LFS_PROG_SIZE 64 // set by library:littlefs +#define MBED_LFS_READ_SIZE 64 // set by library:littlefs +#define MEM_ALLOC malloc // set by library:mbed-trace +#define MEM_FREE free // set by library:mbed-trace +#define NVSTORE_ENABLED 1 // set by library:nvstore +#define NVSTORE_MAX_KEYS 16 // set by library:nvstore +#define PPP_DEBUG 0 // set by library:ppp +// Macros +#define MBEDTLS_CIPHER_MODE_CTR // defined by library:SecureStore +#define MBEDTLS_CMAC_C // defined by library:SecureStore +#define MBEDTLS_PSA_HAS_ITS_IO // defined by library:mbed-crypto +#define MBEDTLS_USER_CONFIG_FILE "mbedtls_wisun_config.h" // defined by application +#define DEVICE_TRNG 1 +#define NSAPI_PPP_AVAILABLE (MBED_CONF_PPP_ENABLED || MBED_CONF_LWIP_PPP_ENABLED) // defined by library:ppp +//#define NS_USE_EXTERNAL_MBED_TLS // defined by library:nanostack +#define UNITY_INCLUDE_CONFIG_H // defined by library:utest +#define _RTE_ // defined by library:rtos + +#define MBEDTLS_PLATFORM_C +#define MBEDTLS_PLATFORM_MEMORY +#define EQUEUE_PLATFORM_POSIX 0 +#endif diff --git a/Vendors/TI/application/mbed_config_app.h b/Vendors/TI/application/mbed_config_app.h new file mode 100644 index 0000000..970cec6 --- /dev/null +++ b/Vendors/TI/application/mbed_config_app.h @@ -0,0 +1,28 @@ +/* + * mbed SDK + * Copyright (c) 2017 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MBED_CONFIG_APP_DATA__ +#define __MBED_CONFIG_APP_DATA__ + +#define MBED_CONF_MBED_MESH_APP_WISUN_NETWORK_SIZE 1 +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_THREAD_STACK_SIZE 3800 +#define MBED_CONF_MBED_MESH_API_CERTIFICATE_HEADER "wisun_certificates.h" +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE WISUN_CLIENT_CERTIFICATE +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE_KEY WISUN_CLIENT_KEY +#define MBED_CONF_MBED_MESH_API_ROOT_CERTIFICATE WISUN_ROOT_CERTIFICATE + +#endif //__MBED_CONFIG_DATA__ diff --git a/Vendors/TI/application/mbed_config_app_cert.h b/Vendors/TI/application/mbed_config_app_cert.h new file mode 100644 index 0000000..73f29d4 --- /dev/null +++ b/Vendors/TI/application/mbed_config_app_cert.h @@ -0,0 +1,28 @@ +/* + * mbed SDK + * Copyright (c) 2017 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MBED_CONFIG_APP_DATA__ +#define __MBED_CONFIG_APP_DATA__ + +#define MBED_CONF_MBED_MESH_APP_WISUN_NETWORK_SIZE 1 +#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_THREAD_STACK_SIZE 3800 +#define MBED_CONF_MBED_MESH_API_CERTIFICATE_HEADER "ws_router_fan_cert_certificates.h" +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE WISUN_CLIENT_GS_CERTIFICATE +#define MBED_CONF_MBED_MESH_API_OWN_CERTIFICATE_KEY WISUN_CLIENT_GS_KEY +#define MBED_CONF_MBED_MESH_API_ROOT_CERTIFICATE WISUN_ROOT_CERTIFICATE + +#endif //__MBED_CONFIG_DATA__ diff --git a/Vendors/TI/application/mbedtls_wisun_config.h b/Vendors/TI/application/mbedtls_wisun_config.h new file mode 100644 index 0000000..69a1cef --- /dev/null +++ b/Vendors/TI/application/mbedtls_wisun_config.h @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2019, Arm Limited and affiliates. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBEDTLS_WISUN_CONFIG_H_ +#define MBEDTLS_WISUN_CONFIG_H_ + +#define MBEDTLS_ENTROPY_MAX_SOURCES 4 // save 320 bytes of RAM (default is 20 entropy source) +#define MBEDTLS_SSL_MAX_CONTENT_LEN 4096 // Use 4kB buffers for input and output instead of 16kB + +//#define MBEDTLS_DEBUG_C +#undef MBEDTLS_DEBUG_C +#undef MBEDTLS_SSL_SRV_C + +/* mbed TLS feature support */ +#define MBEDTLS_ECP_NIST_OPTIM +#define MBEDTLS_ECP_DP_SECP256R1_ENABLED +#undef MBEDTLS_ECP_DP_SECP192R1_ENABLED +#undef MBEDTLS_ECP_DP_SECP224R1_ENABLED +#undef MBEDTLS_ECP_DP_SECP384R1_ENABLED +#undef MBEDTLS_ECP_DP_SECP521R1_ENABLED +#undef MBEDTLS_ECP_DP_SECP192K1_ENABLED +#undef MBEDTLS_ECP_DP_SECP224K1_ENABLED +#undef MBEDTLS_ECP_DP_SECP256K1_ENABLED +#undef MBEDTLS_ECP_DP_BP256R1_ENABLED +#undef MBEDTLS_ECP_DP_BP384R1_ENABLED +#undef MBEDTLS_ECP_DP_BP512R1_ENABLED +#undef MBEDTLS_ECP_DP_CURVE25519_ENABLED + +#ifdef MBEDTLS_SSL_TLS_C +//KV Code coming here +#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH +#define MBEDTLS_SSL_PROTO_TLS1_2 +#define MBEDTLS_SSL_EXPORT_KEYS +#define MBEDTLS_SSL_ALL_ALERT_MESSAGES +#endif + +/* mbed TLS modules */ +#define MBEDTLS_BIGNUM_C +#define MBEDTLS_CIPHER_C +#define MBEDTLS_AES_C +#define MBEDTLS_CCM_C +#define MBEDTLS_CTR_DRBG_C +#define MBEDTLS_ECP_C +#define MBEDTLS_MD_C +#define MBEDTLS_PK_C +#define MBEDTLS_SHA256_C +#ifdef MBEDTLS_SSL_TLS_C +#define MBEDTLS_SSL_COOKIE_C +#define MBEDTLS_SSL_CLI_C +#define MBEDTLS_SSL_SRV_C +#endif +#define MBEDTLS_NIST_KW_C +#define MBEDTLS_PEM_PARSE_C +#define MBEDTLS_BASE64_C +#define MBEDTLS_SHA1_C + +/* Save RAM at the expense of ROM */ +#define MBEDTLS_AES_ROM_TABLES +#define MBEDTLS_AES_FEWER_TABLES + +/* Save RAM by adjusting to our exact needs */ +#define MBEDTLS_ECP_MAX_BITS 256 +#undef MBEDTLS_MPI_MAX_SIZE +#define MBEDTLS_MPI_MAX_SIZE 128 // 256 bits is 32 bytes + +/* Save ROM and a few bytes of RAM by specifying our own ciphersuite list */ +#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 + +/* Optimization. Remove all not needed stuff */ +#define MBEDTLS_X509_USE_C +#define MBEDTLS_X509_CRT_PARSE_C +#undef MBEDTLS_SSL_SERVER_NAME_INDICATION +#undef MBEDTLS_SELF_TEST +#undef MBEDTLS_SSL_ENCRYPT_THEN_MAC +#undef MBEDTLS_SSL_EXTENDED_MASTER_SECRET +#define MBEDTLS_ASN1_PARSE_C +#define MBEDTLS_ASN1_WRITE_C +#define MBEDTLS_ECDH_C +#define MBEDTLS_ECDSA_C +#undef MBEDTLS_ERROR_C +#define MBEDTLS_GCM_C +#define MBEDTLS_OID_C +#define MBEDTLS_PK_PARSE_C +#define MBEDTLS_PK_WRITE_C +#undef MBEDTLS_RSA_C +#undef MBEDTLS_VERSION_C +#undef MBEDTLS_CERTS_C +#undef MBEDTLS_HMAC_DRBG_C +#define MBEDTLS_CIPHER_MODE_CBC +#undef MBEDTLS_CIPHER_PADDING_PKCS7 +#undef MBEDTLS_ECDSA_DETERMINISTIC +#undef MBEDTLS_SSL_SESSION_TICKETS +#undef MBEDTLS_VERSION_FEATURES +#undef MBEDTLS_X509_CHECK_KEY_USAGE +#undef MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE +#undef MBEDTLS_ERROR_STRERROR_DUMMY +#undef MBEDTLS_SSL_ALPN +#undef MBEDTLS_SSL_TICKET_C +#undef MBEDTLS_HAVE_SSE2 +//#undef MBEDTLS_PLATFORM_MEMORY +#undef MBEDTLS_PLATFORM_NO_STD_FUNCTIONS +#undef MBEDTLS_DEPRECATED_WARNING +#undef MBEDTLS_DEPRECATED_REMOVED +#undef MBEDTLS_CAMELLIA_SMALL_MEMORY +#undef MBEDTLS_CIPHER_MODE_CFB +#undef MBEDTLS_CIPHER_MODE_CTR +#undef MBEDTLS_CIPHER_NULL_CIPHER +#undef MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS +#undef MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN +#undef MBEDTLS_CIPHER_PADDING_ZEROS +#undef MBEDTLS_ENABLE_WEAK_CIPHERSUITES +#define MBEDTLS_REMOVE_ARC4_CIPHERSUITES +#undef MBEDTLS_ECP_DP_CURVE25519_ENABLED +#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED +#undef MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED +#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED +#undef MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED +#undef MBEDTLS_KEY_EXCHANGE_RSA_ENABLED +#undef MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED +#undef MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED +#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED +#undef MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED +#undef MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED +#undef MBEDTLS_PK_PARSE_EC_EXTENDED +#undef MBEDTLS_GENPRIME +#undef MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES +#undef MBEDTLS_MEMORY_DEBUG +#undef MBEDTLS_MEMORY_BACKTRACE +#undef MBEDTLS_PK_RSA_ALT_SUPPORT +#undef MBEDTLS_PKCS1_V15 +#undef MBEDTLS_PKCS1_V21 +#undef MBEDTLS_RSA_NO_CRT +#undef MBEDTLS_SSL_AEAD_RANDOM_IV +#undef MBEDTLS_RSA_NO_CRT +#undef MBEDTLS_SSL_DEBUG_ALL +#undef MBEDTLS_SSL_FALLBACK_SCSV +#undef MBEDTLS_SSL_HW_RECORD_ACCEL +#undef MBEDTLS_SSL_CBC_RECORD_SPLITTING +#undef MBEDTLS_SSL_RENEGOTIATION +#undef MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO +#undef MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE +#undef MBEDTLS_SSL_PROTO_TLS1 +#undef MBEDTLS_SSL_PROTO_TLS1_1 +#undef MBEDTLS_SSL_DTLS_BADMAC_LIMIT +#undef MBEDTLS_SSL_TRUNCATED_HMAC +#undef MBEDTLS_THREADING_ALT +#undef MBEDTLS_THREADING_PTHREAD +#undef MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 +#undef MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION +#undef MBEDTLS_X509_RSASSA_PSS_SUPPORT +#undef MBEDTLS_ZLIB_SUPPORT +#undef MBEDTLS_AESNI_C +#undef MBEDTLS_ARC4_C +#undef MBEDTLS_BLOWFISH_C +#undef MBEDTLS_CAMELLIA_C +#undef MBEDTLS_DES_C +#undef MBEDTLS_DHM_C +#undef MBEDTLS_HAVEGE_C +#undef MBEDTLS_MD2_C +#undef MBEDTLS_MD4_C +#undef MBEDTLS_MD5_C +#undef MBEDTLS_MEMORY_BUFFER_ALLOC_C +#undef MBEDTLS_PADLOCK_C +#undef MBEDTLS_PEM_WRITE_C +#undef MBEDTLS_PKCS5_C +#undef MBEDTLS_PKCS11_C +#undef MBEDTLS_PKCS12_C +//#undef MBEDTLS_PLATFORM_C +#undef MBEDTLS_RIPEMD160_C +#undef MBEDTLS_SHA512_C +#undef MBEDTLS_SSL_CACHE_C +#undef MBEDTLS_THREADING_C +#define MBEDTLS_X509_CREATE_C +#define MBEDTLS_X509_CRT_WRITE_C +#undef MBEDTLS_XTEA_C + +//TI Platform Specific Configurations +#undef MBEDTLS_SSL_PROTO_DTLS +#undef MBEDTLS_SSL_DTLS_HELLO_VERIFY +#undef MBEDTLS_SSL_DTLS_ANTI_REPLAY +#undef MBEDTLS_SSL_DTLS_CONNECTION_ID +#undef MBEDTLS_SSL_DTLS_BADMAC_LIMIT +#undef MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE +#define MBEDTLS_AES_ALT +//#define MBEDTLS_SHA256_ALT +#include "mbedtls/check_config.h" + +#endif /* MBEDTLS_WISUN_CONFIG_H */ + diff --git a/Vendors/TI/application/wisun_certificates.h b/Vendors/TI/application/wisun_certificates.h new file mode 100644 index 0000000..7852e4b --- /dev/null +++ b/Vendors/TI/application/wisun_certificates.h @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2019, Arm Limited and affiliates. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef WISUN_TEST_CERTIFICATES_H_ +#define WISUN_TEST_CERTIFICATES_H_ + +#ifndef RN_IOP_CERTIFICATE +const uint8_t WISUN_ROOT_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBLzCB1qADAgECAhQooDtB2DFWFsDlkVyeKLkkFq27vTAKBggqhkjOPQQDAjAN\r\n" + "MQswCQYDVQQDEwJDQTAiGA8wMDAwMDEwMTAwMDAwMFoYDzk5OTkxMjMxMjM1OTU5\r\n" + "WjANMQswCQYDVQQDEwJDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABG0ZABD+\r\n" + "g8Nvc9KBpw/aHhoim9KrqzOYP5qTmZgS8uxM/eqeAJ6vrSivWFT2fxHuzXG+yfvs\r\n" + "oPNgBJhv/YNhM9KjEDAOMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIg\r\n" + "CK00/WNqrLzSt7QtustgbL+kibXBuWFeYBjU5yPbaHECIQD8aFwPt2/oXLOSa7gB\r\n" + "9nwpA1rsmzCJLvb8ouxQ3uhXbg==\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_SERVER_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBbzCCARUCFHsX/aO/8skZ/3NAQrzQ957H/aNYMAoGCCqGSM49BAMCMA0xCzAJ\r\n" + "BgNVBAMTAkNBMCIYDzAwMDAwMTAxMDAwMDAwWhgPOTk5OTEyMzEyMzU5NTlaMGMx\r\n" + "CzAJBgNVBAYTAkZJMQ0wCwYDVQQIDARPdWx1MQ0wCwYDVQQHDARPdWx1MQ0wCwYD\r\n" + "VQQKDAR0ZXN0MQ0wCwYDVQQDDAR0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ZXN0QHRl\r\n" + "c3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQtbrqK+Z2gWz9rgvS4fgkWn1kb\r\n" + "wERr15kFr7CmNM63gAmMyS08m5/sBYps5XUdIwF+Pz8uYmk4LpSl+o0OLkmaMAoG\r\n" + "CCqGSM49BAMCA0gAMEUCIDknuOd/stYYgK3oztxspnKBHoOO8UcUB3PH2AfIq24e\r\n" + "AiEA8OMJ44i3TKToinV1IATm81mqu+5pBqYu4RtX0E/xP88=\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_SERVER_KEY[] = { + "-----BEGIN EC PRIVATE KEY-----\r\n" + "MHcCAQEEIEvbJ9SG/qeud6z3oRb+sROxk6/HWHQWtcucDFq3grzooAoGCCqGSM49\r\n" + "AwEHoUQDQgAELW66ivmdoFs/a4L0uH4JFp9ZG8BEa9eZBa+wpjTOt4AJjMktPJuf\r\n" + "7AWKbOV1HSMBfj8/LmJpOC6UpfqNDi5Jmg==\r\n" + "-----END EC PRIVATE KEY-----" +}; + +const uint8_t WISUN_CLIENT_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBbzCCARUCFHsX/aO/8skZ/3NAQrzQ957H/aNZMAoGCCqGSM49BAMCMA0xCzAJ\r\n" + "BgNVBAMTAkNBMCIYDzAwMDAwMTAxMDAwMDAwWhgPOTk5OTEyMzEyMzU5NTlaMGMx\r\n" + "CzAJBgNVBAYTAkZJMQ0wCwYDVQQIDARPdWx1MQ0wCwYDVQQHDARPdWx1MQ0wCwYD\r\n" + "VQQKDAR0ZXN0MQ0wCwYDVQQDDAR0ZXN0MRgwFgYJKoZIhvcNAQkBFgl0ZXN0QHRl\r\n" + "c3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARIJ0hVdYmPsTFmY3glVAzE6dRE\r\n" + "6Vp3rEUwqKqfMaJWvxd8EszaMP6PUwn4bprMkUPRmISTe8T17K8ZSRi8gun7MAoG\r\n" + "CCqGSM49BAMCA0gAMEUCIQCtQwnVemwlIUoXeMZ1WE3JHj9XAIbxg2lweRJ91XaV\r\n" + "VgIgDyft6+GF3u31VmTljTMAZZcCNRXDP0eNha+gB0TlGhY=\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_CLIENT_KEY[] = { + "-----BEGIN EC PRIVATE KEY-----\r\n" + "MHcCAQEEIOxOq1xL+Hv5hg6Zg41pVXpkjLTkZxXrBHJcExTUMAftoAoGCCqGSM49\r\n" + "AwEHoUQDQgAESCdIVXWJj7ExZmN4JVQMxOnUROlad6xFMKiqnzGiVr8XfBLM2jD+\r\n" + "j1MJ+G6azJFD0ZiEk3vE9eyvGUkYvILp+w==\r\n" + "-----END EC PRIVATE KEY-----" +}; +#else + +const uint8_t WISUN_ROOT_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBojCCAUmgAwIBAgIUSOJfgI08JDWdAjuqvH3REMyjjFswCgYIKoZIzj0EAwIw\r\n" + "HjEcMBoGA1UEAwwTV2ktU1VOIERlbW8gUm9vdCBDQTAgFw0yMTAyMjIwOTU5NDFa\r\n" + "GA85OTk5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTV2ktU1VOIERlbW8gUm9vdCBD\r\n" + "QTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABG1Mn4dd9+IVJZSEcjpFKehvvRyQ\r\n" + "t9QcIBCN2ysf+BJUlFfU8TvC3w2waFrLuC+JHM+1TBEm1GLNDF7piCgqltWjYzBh\r\n" + "MBIGA1UdEwEB/wQIMAYBAf8CAQIwCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBSTZNQO\r\n" + "92ii7l3wrPpyvMUfTU86JDAfBgNVHSMEGDAWgBSTZNQO92ii7l3wrPpyvMUfTU86\r\n" + "JDAKBggqhkjOPQQDAgNHADBEAiAdlM3ENdd7GHHbTsTiZMc7T5DDFQ2abeUI1be+\r\n" + "ytGaAAIgZREIYV4yhjoluqT4+snj/zQkqEqcYh/DMbx2gLKDgZ4=\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_SERVER_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBzzCCAXWgAwIBAgIUV9rWcXwDqRGrLVU/JRipf/q5ARUwCgYIKoZIzj0EAwIw\r\n" + "HjEcMBoGA1UEAwwTV2ktU1VOIERlbW8gUm9vdCBDQTAgFw0yMTAzMDEwNzQyMTha\r\n" + "GA85OTk5MTIzMTIzNTk1OVowJDEiMCAGA1UEAwwZV2ktU1VOIERlbW8gQm9yZGVy\r\n" + "IFJvdXRlcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGqBAsB47GbEpZbO3iDN\r\n" + "aXeN9S2AEjMFUGyzoYvoVg/XUNhH5Z46eoVFIt8/+tfeI9Uha2xj0KKi9Cr3Q0Em\r\n" + "P6qjgYgwgYUwDgYDVR0PAQH/BAQDAgOIMCEGA1UdJQEB/wQXMBUGCSsGAQQBguQl\r\n" + "AQYIKwYBBQUHAwEwLwYDVR0RAQH/BCUwI6AhBggrBgEFBQcIBKAVMBMGCSsGAQQB\r\n" + "grdBAQQGMTIzNDU2MB8GA1UdIwQYMBaAFJNk1A73aKLuXfCs+nK8xR9NTzokMAoG\r\n" + "CCqGSM49BAMCA0gAMEUCIACT5SnUC+IRXrGNhX2XOursPvoGbKbpLyjtai3PwayX\r\n" + "AiEAqxtUaEijpWJUby/RsX/yXLgD9/aATj9YFTR+ZdZ1VLo=\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_SERVER_KEY[] = { + "-----BEGIN PRIVATE KEY-----\r\n" + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgN0Zj70BWw1o/ZQWK\r\n" + "fzslLkjUW4eUEMWZK5YII0aA0PahRANCAARqgQLAeOxmxKWWzt4gzWl3jfUtgBIz\r\n" + "BVBss6GL6FYP11DYR+WeOnqFRSLfP/rX3iPVIWtsY9CiovQq90NBJj+q\r\n" + "-----END PRIVATE KEY-----" +}; + +const uint8_t WISUN_CLIENT_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIByDCCAW6gAwIBAgIUPRtrFcA6dw03sTpD1dArHpFi65gwCgYIKoZIzj0EAwIw\r\n" + "HjEcMBoGA1UEAwwTV2ktU1VOIERlbW8gUm9vdCBDQTAgFw0yMTAzMDEwNzQyNDBa\r\n" + "GA85OTk5MTIzMTIzNTk1OVowHTEbMBkGA1UEAwwSV2ktU1VOIERlbW8gRGV2aWNl\r\n" + "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqOqrunh3+gAr83a6wtpB+QhRvM4o\r\n" + "9dTdVeNCo0amXhzbUsFylw7OgbgqtoCKQguYTsbicpeLMWv4TV7JxX6Ij6OBiDCB\r\n" + "hTAOBgNVHQ8BAf8EBAMCA4gwIQYDVR0lAQH/BBcwFQYJKwYBBAGC5CUBBggrBgEF\r\n" + "BQcDAjAvBgNVHREBAf8EJTAjoCEGCCsGAQUFBwgEoBUwEwYJKwYBBAGCt0ECBAYx\r\n" + "MjM0NTYwHwYDVR0jBBgwFoAUk2TUDvdoou5d8Kz6crzFH01POiQwCgYIKoZIzj0E\r\n" + "AwIDSAAwRQIhANBxFWMzNMKyA+nMK0sbCUpqK1gVMyeoKqh0zvS3COyLAiAx8nCN\r\n" + "B7RkW8RmZ0UMWY26g7P6TbqJiAI3zoKkSxpJPg==\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_CLIENT_KEY[] = { + "-----BEGIN PRIVATE KEY-----\r\n" + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQguF1oBuIMzOtpsOMH\r\n" + "df97vr2GppQfXOKDJ4RogFMk7QChRANCAASo6qu6eHf6ACvzdrrC2kH5CFG8zij1\r\n" + "1N1V40KjRqZeHNtSwXKXDs6BuCq2gIpCC5hOxuJyl4sxa/hNXsnFfoiP\r\n" + "-----END PRIVATE KEY-----\r\n" +}; + +#endif /* RN_IOP_CERTIFICATE */ + +#endif /* WISUN_TEST_CERTIFICATES_H_ */ diff --git a/Vendors/TI/application/ws_router_fan_cert_certificates.h b/Vendors/TI/application/ws_router_fan_cert_certificates.h new file mode 100644 index 0000000..c2f14a6 --- /dev/null +++ b/Vendors/TI/application/ws_router_fan_cert_certificates.h @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2019, Arm Limited and affiliates. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef WISUN_TEST_CERTIFICATES_H_ +#define WISUN_TEST_CERTIFICATES_H_ + +const uint8_t WISUN_ROOT_CERTIFICATE[] = { +#if 0 +/* Global Sign Root CA */ + "-----BEGIN CERTIFICATE-----\r\n" + "MIICIDCCAcagAwIBAgIBATAKBggqhkjOPQQDAjB1MQswCQYDVQQGEwJCRTEZMBcG\r\n" + "A1UEChMQR2xvYmFsU2lnbiBudi1zYTEaMBgGA1UECxMRRm9yIFRlc3QgVXNlIE9u\r\n" + "bHkxLzAtBgNVBAMTJkdsb2JhbFNpZ24gV2ktU1VOIEZBTiBFQ0MgVGVzdCBSb290\r\n" + "IENBMCAXDTE4MDcxODAwMDAwMFoYDzk5OTkxMjMxMjM1OTU5WjB1MQswCQYDVQQG\r\n" + "EwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEaMBgGA1UECxMRRm9yIFRl\r\n" + "c3QgVXNlIE9ubHkxLzAtBgNVBAMTJkdsb2JhbFNpZ24gV2ktU1VOIEZBTiBFQ0Mg\r\n" + "VGVzdCBSb290IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp5HbQNUb1bW4\r\n" + "LnUfs77YXysSp+fXXomez+pnzXIb4FJP94knwauyoMd99BsmW/fK/yHzk6Rs4Fma\r\n" + "T5m7eRpll6NFMEMwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQIw\r\n" + "HQYDVR0OBBYEFD0qd4ApGSsRSUwEnFv9fIyYnH+SMAoGCCqGSM49BAMCA0gAMEUC\r\n" + "IQDjD8vQ8PbGY+MCP5e4PW0O0ValmtnVg4DXoGYRz+tioQIgGpHT7NmOHtEg4HRG\r\n" + "BJe60OcyxFjpDsp/R2pGArN9iuE=\r\n" + "-----END CERTIFICATE-----" +#else +/* Wi-SUN test root CA */ + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBojCCAUmgAwIBAgIFAPf29t8wCgYIKoZIzj0EAwIwMTEOMAwGA1UECgwFV2lT\r\n" + "VU4xEzARBgNVBAMMCldpU1VOIFJvb3QxCjAIBgNVBAUTATEwIBcNMTcwNzA0MjEw\r\n" + "NDAyWhgPOTk5OTEyMzEyMzU5NTlaMDExDjAMBgNVBAoMBVdpU1VOMRMwEQYDVQQD\r\n" + "DApXaVNVTiBSb290MQowCAYDVQQFEwExMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\r\n" + "QgAEVrJidrjt1nWFVA/VOA/1XKARMBv9t+9XbnErRKJhwudMEUguImA6Ns5TS6o6\r\n" + "wDDGjYF6JzO1htL1+MTNFkId+KNMMEowDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4E\r\n" + "CgQIQP089aoIBgswDgYDVR0PAQH/BAQDAgEGMBQGA1UdIAEB/wQKMAgwBgYEVR0g\r\n" + "ADAKBggqhkjOPQQDAgNHADBEAiBYqSiYL0Tu8D/zzU8TajVkzKMw6qkku+UIezPn\r\n" + "2Tv6rAIgP5+YwqTLC9QTfuz2/XN6Ta5Hd4zgyLSvc1BXm94r06k=\r\n" + "-----END CERTIFICATE-----" +#endif +}; + +const uint8_t WISUN_MCA_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIByzCCAXCgAwIBAgIFAInnL70wCgYIKoZIzj0EAwIwMTEOMAwGA1UECgwFV2lT\r\n" + "VU4xEzARBgNVBAMMCldpU1VOIFJvb3QxCjAIBgNVBAUTATEwIBcNMjEwNTI5MjAx\r\n" + "OTI0WhgPOTk5OTEyMzEyMzU5NTlaMDoxCzAJBgNVBAYTAlVTMQswCQYDVQQKDAJU\r\n" + "STESMBAGA1UEAwwJV2lTVU4gTUNBMQowCAYDVQQFEwEyMFkwEwYHKoZIzj0CAQYI\r\n" + "KoZIzj0DAQcDQgAEff6D5/8TiDCHY/C66gZTnQ8eQiDpSrZqheOm8LeRUT9wtD7f\r\n" + "tk8cS9iHURvNJzokoiyAaMQNHg1G4IkXpq/PTqNqMGgwEgYDVR0TAQH/BAgwBgEB\r\n" + "/wIBATARBgNVHQ4ECgQIT3tWlvumf2cwEwYDVR0jBAwwCoAIQP089aoIBgswDgYD\r\n" + "VR0PAQH/BAQDAgIEMBoGA1UdIAEB/wQQMA4wDAYKKwYBBAGC5CUBATAKBggqhkjO\r\n" + "PQQDAgNJADBGAiEAkb/mSulx8xW7cbl1b7CkrxiOFq6n7xy3o4sxaj2APeoCIQCs\r\n" + "EkFFa5ROJP0iIRsWII/x45Rb1rbUX+lta8uCNz14JQ==\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_MICA_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIB1DCCAXqgAwIBAgIFAL6ICq4wCgYIKoZIzj0EAwIwOjELMAkGA1UEBhMCVVMx\r\n" + "CzAJBgNVBAoMAlRJMRIwEAYDVQQDDAlXaVNVTiBNQ0ExCjAIBgNVBAUTATIwIBcN\r\n" + "MjEwNTI5MjAyMDUwWhgPOTk5OTEyMzEyMzU5NTlaMDsxCzAJBgNVBAYTAlVTMQsw\r\n" + "CQYDVQQKDAJUSTETMBEGA1UEAwwKV2lTVU4gTUlDQTEKMAgGA1UEBRMBMzBZMBMG\r\n" + "ByqGSM49AgEGCCqGSM49AwEHA0IABIoDqK7Dh2aNPS1KgR3dL0lwVR8JEddemMrx\r\n" + "S5J3ok7qyrYcSrfW4xwm+xpOfcTiUredc+UyAkG+HJlyZ0BQVbijajBoMBIGA1Ud\r\n" + "EwEB/wQIMAYBAf8CAQAwEQYDVR0OBAoECEHbJKKDpOHaMBMGA1UdIwQMMAqACE97\r\n" + "Vpb7pn9nMA4GA1UdDwEB/wQEAwICBDAaBgNVHSABAf8EEDAOMAwGCisGAQQBguQl\r\n" + "AQEwCgYIKoZIzj0EAwIDSAAwRQIgPNu16+1bz+sicscEi0cckXgmTp8MdrN7cJiG\r\n" + "jpn/wd8CIQCujzg6ami/lXsLQULWKD1fDEZZYrGNL9Q583/MdnYN1Q==\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_CLIENT_CERTIFICATE_FROM_MICA[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBpDCCAUqgAwIBAgIFAKMNuFswCgYIKoZIzj0EAwIwOzELMAkGA1UEBhMCVVMx\r\n" + "CzAJBgNVBAoMAlRJMRMwEQYDVQQDDApXaVNVTiBNSUNBMQowCAYDVQQFEwEzMCAX\r\n" + "DTIxMDUyOTIwMjEzM1oYDzk5OTkxMjMxMjM1OTU5WjAAMFkwEwYHKoZIzj0CAQYI\r\n" + "KoZIzj0DAQcDQgAElomHreAky/YrhmmV7609tJcElvGz06oVyIvr3Fr8qnW8bG8t\r\n" + "1DYERozKAbqkz2j/7avxluJLpfc+Hj1U9bXj3KN0MHIwEwYDVR0jBAwwCoAIQdsk\r\n" + "ooOk4dowDgYDVR0PAQH/BAQDAgOIMCgGA1UdEQEB/wQeMBygGgYIKwYBBQUHCASg\r\n" + "DjAMBgUrBgEEAQQDq8EjMCEGA1UdJQEB/wQXMBUGCSsGAQQBguQlAQYIKwYBBQUH\r\n" + "AwIwCgYIKoZIzj0EAwIDSAAwRQIhAPmENkMqPJxLURPTkyxlSvoskKSHyak45X8i\r\n" + "EKXVv7BJAiAMq54B1KhVCzi2KIwqWpbdMrCFGUQj93rKpeGzzaedVA==\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_CLIENT_CERTIFICATE_FROM_MICA_KEY[] = { + "-----BEGIN PRIVATE KEY-----\r\n" + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXULl7wRN5pt39ZQE\r\n" + "lTaj511QCUagH5iLhirG4qTr93ahRANCAASWiYet4CTL9iuGaZXvrT20lwSW8bPT\r\n" + "qhXIi+vcWvyqdbxsby3UNgRGjMoBuqTPaP/tq/GW4kul9z4ePVT1tePc\r\n" + "-----END PRIVATE KEY-----" +}; + +const uint8_t WISUN_CLIENT_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIIBmTCCAUCgAwIBAgIFAO3CI8YwCgYIKoZIzj0EAwIwMTEOMAwGA1UECgwFV2lT\r\n" + "VU4xEzARBgNVBAMMCldpU1VOIFJvb3QxCjAIBgNVBAUTATEwIBcNMjEwNTI5MDQx\r\n" + "NDAwWhgPOTk5OTEyMzEyMzU5NTlaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC\r\n" + "AASn32VuKHiaszuKDBgo5TeQXuh6yWXZ6mQDYJk7GQeorVBI6x1olS0UKLg7ICMZ\r\n" + "woZhiMiod58RYEPEXZU6g8D8o3QwcjATBgNVHSMEDDAKgAhA/Tz1qggGCzAOBgNV\r\n" + "HQ8BAf8EBAMCA4gwKAYDVR0RAQH/BB4wHKAaBggrBgEFBQcIBKAOMAwGBSsGAQQB\r\n" + "BAOrwSMwIQYDVR0lAQH/BBcwFQYJKwYBBAGC5CUBBggrBgEFBQcDAjAKBggqhkjO\r\n" + "PQQDAgNHADBEAiA++iYNejxsZW+sFEG8+SzPlUoYc53tBFiPPBgAerBV2QIgPvOG\r\n" + "EqhbKhdp7fX7afNnvTd4Ba10PEWQEcsMhmVT+XQ=\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_CLIENT_GS_CERTIFICATE[] = { + "-----BEGIN CERTIFICATE-----\r\n" + "MIICMDCCAdagAwIBAgIQASMTIpy6Qc1PEaj7BWgI+zAKBggqhkjOPQQDAjCBgzEL\r\n" + "MAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGjAYBgNVBAsT\r\n" + "EUZvciBUZXN0IFVzZSBPbmx5MT0wOwYDVQQDEzRHbG9iYWxTaWduIFdpLVNVTiBG\r\n" + "QU4gRUNDIFRlc3QgU3ViLU1hbnVmYWN0dXJlciBDQSAxMB4XDTIyMTIxNTE2Mzkx\r\n" + "NloXDTIzMDMxNTE2MzkxNlowADBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABC80\r\n" + "USJEt/otMLraxEPhe+tCYilJBFaKAEjmaViPC1fZh4wMsQJW5zDNL91YLoU20h8v\r\n" + "juTioITabdUrsatDmOCjga0wgaowKgYDVR0RAQH/BCAwHqAcBggrBgEFBQcIBKAQ\r\n" + "MA4GAykBAQQHMTIzNDU2NzAOBgNVHQ8BAf8EBAMCB4AwHgYDVR0lBBcwFQYJKwYB\r\n" + "BAGC5CUBBggrBgEFBQcDAjAdBgNVHQ4EFgQUxzbKKF8Sg6DH/AL0Lty8VnrPfxAw\r\n" + "DAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQ3ttkOUJkFBUV3L09XhhFkvRu9vDAK\r\n" + "BggqhkjOPQQDAgNIADBFAiEA18M/fCmdtD9Vvfb4B8ryXhgbS1iNHOjQCMRD7Ox/\r\n" + "9kICIDVV3KXMHnlkUCjRiIaZGTX0qeTjFbadYnSh8Ad99xKR\r\n" + "-----END CERTIFICATE-----" +}; + +const uint8_t WISUN_CLIENT_KEY[] = { + "-----BEGIN PRIVATE KEY-----\r\n" + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxFocOSC2agqrJGYC\r\n" + "R8Q0VfTaNBQSsQXxvMgr3byWtvyhRANCAASn32VuKHiaszuKDBgo5TeQXuh6yWXZ\r\n" + "6mQDYJk7GQeorVBI6x1olS0UKLg7ICMZwoZhiMiod58RYEPEXZU6g8D8\r\n" + "-----END PRIVATE KEY-----" +}; + +const uint8_t WISUN_CLIENT_GS_KEY[] = { + "-----BEGIN EC PRIVATE KEY-----\r\n" + "MHcCAQEEIKntZLN+RQbjNtxiwwvNKr0ZRL5tbj+4rYvSlkfTMauKoAoGCCqGSM49\r\n" + "AwEHoUQDQgAELzRRIkS3+i0wutrEQ+F760JiKUkEVooASOZpWI8LV9mHjAyxAlbn\r\n" + "MM0v3VguhTbSHy+O5OKghNpt1Suxq0OY4A==\r\n" + "-----END EC PRIVATE KEY-----" +}; + +#endif /* WISUN_TEST_CERTIFICATES_H_ */ diff --git a/build.sh b/build.sh index 135b617..ab8d757 100755 --- a/build.sh +++ b/build.sh @@ -28,6 +28,7 @@ build_lib() [ ! -f csmp_agent_lib.a ] || mv csmp_agent_lib.a sample/ [ ! -f csmp_agent_lib_freertos.a ] || mv csmp_agent_lib_freertos.a sample/ [ ! -f csmp_agent_lib_efr32_wisun.a ] || mv csmp_agent_lib_efr32_wisun.a sample/ + [ ! -f csmp_agent_lib_ti_simplelink_wisun.a ] || mv csmp_agent_lib_ti_simplelink_wisun.a sample/ } clean_all() diff --git a/osal/osal.h b/osal/osal.h index 15f35cc..3c7c423 100644 --- a/osal/osal.h +++ b/osal/osal.h @@ -39,6 +39,8 @@ #define CSMP_FWMGMT_ACTIVE_SLOTS 3 // 0-RUN, 1-UPLOAD, 2-BACKUP #if defined(OSAL_EFR32_WISUN) #define CSMP_FWMGMT_SLOTIMG_SIZE (512*1024) // 512 Kb +#elif defined(OSAL_TI_SIMPLELINK_WISUN) +#define CSMP_FWMGMT_SLOTIMG_SIZE 0x000A8000UL #else #define CSMP_FWMGMT_SLOTIMG_SIZE (30*1024) // 30 Kb #endif @@ -675,4 +677,5 @@ osal_basetype_t osal_write_slothdr(uint8_t slotid, Csmp_Slothdr* slot); * @return returns 0 on success and -1 on error *****************************************************************************/ osal_basetype_t osal_copy_firmware(uint8_t source_slotid, uint8_t dest_slotid, Csmp_Slothdr *slots); + #endif diff --git a/osal/ti_simplelink_wisun/osal_platform_types.h b/osal/ti_simplelink_wisun/osal_platform_types.h new file mode 100644 index 0000000..3724a92 --- /dev/null +++ b/osal/ti_simplelink_wisun/osal_platform_types.h @@ -0,0 +1,150 @@ +#ifndef __OSAL_PLATFORM_TYPES_H +#define __OSAL_PLATFORM_TYPES_H + +#include +#include +#include +#include + +/* struct timeval — from TI POSIX shim */ +#include + +/* ----------------------------------------------------------------------- + * FreeRTOS — from TI SimpleLink SDK. + * --------------------------------------------------------------------- */ +#include "FreeRTOS.h" +#include "task.h" +#include "semphr.h" +#include "timers.h" + +/* Include debug.h first so its DPRINTF definition comes before any override */ +#include "../../src/lib/debug.h" + +#if defined(CSMP_USE_MBED_TRACE) +#ifndef TRACE_LEVEL_DEBUG +#define TRACE_LEVEL_DEBUG 4 +#endif +void ns_trace_printf(uint8_t dlevel, const char *grp, const char *fmt, ...); +#undef DPRINTF +#define DPRINTF(...) ns_trace_printf(TRACE_LEVEL_DEBUG, "csmp", __VA_ARGS__) +#endif + +/* ----------------------------------------------------------------------- + * TI POSIX shim only provides __socklen_t; define directly. + * --------------------------------------------------------------------- */ +typedef uint32_t socklen_t; +typedef int32_t ssize_t; + +/* ----------------------------------------------------------------------- + * Socket constants and macros + * --------------------------------------------------------------------- */ +#ifndef AF_INET6 +#define AF_INET6 28 +#endif +#define OSAL_AF_INET6 AF_INET6 +#define OSAL_SOCK_DGRAM 2 + +#define htons(x) ((uint16_t)(__builtin_bswap16((uint16_t)(x)))) +#define ntohs(x) ((uint16_t)(__builtin_bswap16((uint16_t)(x)))) + +/* ----------------------------------------------------------------------- + * POSIX socket structs — not provided by TI SDK, defined here. + * Nanostack uses ns_address_t internally; these exist only at the + * OSAL boundary that csmp-agent-lib sees. + * --------------------------------------------------------------------- */ +struct iovec { + void *iov_base; + size_t iov_len; +}; + +struct msghdr { + void *msg_name; + socklen_t msg_namelen; + struct iovec *msg_iov; + int msg_iovlen; + void *msg_control; + socklen_t msg_controllen; + int msg_flags; +}; + +struct in6_addr { + uint8_t s6_addr[16]; +}; + +struct sockaddr_in6 { + uint16_t sin6_family; + uint16_t sin6_port; + uint32_t sin6_flowinfo; + struct in6_addr sin6_addr; + uint32_t sin6_scope_id; +}; + +/* struct timezone — not provided by TI POSIX shim */ +#ifndef _STRUCT_TIMEZONE +#define _STRUCT_TIMEZONE +struct timezone { + int tz_minuteswest; + int tz_dsttime; +}; +#endif + +/* ----------------------------------------------------------------------- + * OSAL type definitions + * --------------------------------------------------------------------- */ +typedef void (*osal_sighandler_t)(int); +typedef struct sockaddr_in6 osal_sockaddr_t; +typedef SemaphoreHandle_t osal_sem_t; +typedef int osal_sigset_t; +typedef socklen_t osal_socklen_t; +typedef TaskHandle_t osal_task_t; +typedef TaskFunction_t osal_task_fnc_t; +typedef ssize_t osal_ssize_t; +typedef uint64_t osal_time_t; +typedef BaseType_t osal_basetype_t; +typedef int osal_socket_handle_t; +typedef struct { int _u; } osal_sd_set_t; + +/* ----------------------------------------------------------------------- + * TI CC13xx flash layout for CSMP OTA firmware management. + * These are shared by osal_ti_simplelink_wisun.c and ti_simplelink_wisun_tlvs.c. + * Defaults can be overridden at compile time with -D flags. + * ----------------------------------------------------------------------- */ +#ifndef CSMP_TI_RUN_SLOT_ADDR +#define CSMP_TI_RUN_SLOT_ADDR 0x00000000UL +#endif +#ifndef CSMP_TI_UPLOAD_SLOT_ADDR +#define CSMP_TI_UPLOAD_SLOT_ADDR 0x0005E000UL +#endif +#ifndef CSMP_TI_BACKUP_SLOT_ADDR +#define CSMP_TI_BACKUP_SLOT_ADDR 0x00088000UL +#endif +#ifndef CSMP_TI_SLOT_MAX_SIZE +#define CSMP_TI_SLOT_MAX_SIZE (328UL * 1024UL) +#endif +#ifndef CSMP_TI_FLASH_SECTOR_SIZE +#define CSMP_TI_FLASH_SECTOR_SIZE 0x1000UL +#endif +#ifndef CSMP_TI_NV_SYSID +#define CSMP_TI_NV_SYSID 7u +#endif +#ifndef CSMP_TI_NV_SLOTHDR_ITEM +#define CSMP_TI_NV_SLOTHDR_ITEM 0x01u +#endif + +/* ----------------------------------------------------------------------- + * External SPI flash (Off-Chip OAD secondary slot). + * + * TI's MCUBoot uses VERSION COMPARISON (ih_ver field) to decide whether to + * install the secondary slot — no trailer magic bytes are needed or written. + * Simply reboot after the download is complete; MCUBoot checks the version + * on every boot and installs if secondary.ih_ver > primary.ih_ver. + * + * The secondary slot lives entirely in external SPI flash (e.g. W25Q32FV). + * CSMP_TI_EXT_FLASH_SECTOR_SIZE: minimum erase granularity for W25Q32 = 4 KB. + * ----------------------------------------------------------------------- */ +#define CSMP_TI_EXT_FLASH_SECTOR_SIZE 0x1000UL /* 4 KB erase unit on MX25R8035F */ + +/* Forward declaration — defined in osal_ti_simplelink_wisun.c, called from ti_simplelink_wisun_tlvs.c */ +osal_basetype_t ti_flash_erase_slot(uint8_t slotid); + +#endif /* __OSAL_PLATFORM_TYPES_H */ diff --git a/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c b/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c new file mode 100644 index 0000000..4eec146 --- /dev/null +++ b/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c @@ -0,0 +1,621 @@ + +#include "osal.h" +#include +#include +#include "csmpservice.h" + +#include "FreeRTOS.h" +#include "task.h" +#include "semphr.h" +#include "timers.h" + +#include +#include +#include DeviceFamily_constructPath(driverlib/sys_ctrl.h) +#include /* CONFIG_NVSEXTERNAL */ +#include /* Off-Chip OAD secondary slot via NVSSPI25X */ +#include "socket_api.h" +#include "ns_address.h" +#include "ip6string.h" +#include "mesh_system.h" +#include "net_interface.h" + +#include "nvocmp.h" +#include "nvintf.h" + +/* ------------------------------------------------------------------ + * Trickle timer — identical to osal_freertos.c, works on any FreeRTOS + * ------------------------------------------------------------------ */ +struct trickle_timer +{ + uint32_t t0, tfire, icur, imin, imax; + uint8_t is_running : 1; + TimerHandle_t timer; +}; + +#define __ret_freertos2posix(r) ((r) == pdPASS ? OSAL_SUCCESS : OSAL_FAILURE) + +extern uint8_t g_csmplib_eui64[8]; +extern NVINTF_nvFuncts_t *pNV; + +static struct trickle_timer timers[timer_num]; +static trickle_timer_fired_t timer_fired[timer_num]; +static int32_t m_remaining = ((1UL << 31) - 1) / 1000; +static bool m_timert_isrunning = false; + +static void osal_update_timer(void); +static void osal_alarm_fired(TimerHandle_t xTimer); +static void osal_alarm_fired_pend_fnc(void *p1, uint32_t p2); + +/* Time offset (int64_t to survive past 2038) */ +int64_t g_ti_csmp_time_offset_sec = 0; + +/* CoAP socket state*/ +#define CSMP_TI_RX_BUF_LEN 1280u +static SemaphoreHandle_t g_rx_sem = NULL; +static int8_t g_ns_sock = -1; +static uint8_t g_rx_buf[CSMP_TI_RX_BUF_LEN]; +static osal_sockaddr_t g_rx_src; +static int32_t g_rx_len = 0; + +/* Flash / NV constants are now in osal_platform_types.h */ + +/* ------------------------------------------------------------------ */ +void osal_kernel_start(void) +{ + for (BaseType_t i = 0; i < (BaseType_t)timer_num; i++) + { + timers[i].is_running = false; + timers[i].timer = xTimerCreate("csmp_tri", + pdMS_TO_TICKS(m_remaining * 1000), + pdTRUE, (void *)(uintptr_t)i, + osal_alarm_fired); + assert(timers[i].timer != NULL); + xTimerStop(timers[i].timer, 0); + } + g_rx_sem = xSemaphoreCreateCounting(8u, 0u); + assert(g_rx_sem != NULL); +} + +osal_basetype_t osal_task_create(osal_task_t *thread, const char *name, + uint32_t priority, size_t stacksize, + osal_task_fnc_t entry, void *arg) +{ + uint16_t words = (uint16_t)(1536u + stacksize / sizeof(StackType_t)); + osal_basetype_t r = xTaskCreate(entry, name, words, arg, + (UBaseType_t)(tskIDLE_PRIORITY + 1u + priority), + (TaskHandle_t *)thread); + DPRINTF("task '%s' %s\n", name, r == pdPASS ? "ok" : "failed"); + return __ret_freertos2posix(r); +} + +osal_basetype_t osal_task_cancel(osal_task_t t) +{ + vTaskDelete((TaskHandle_t)t); + return OSAL_SUCCESS; +} +osal_basetype_t osal_task_setcanceltype(void) +{ + return OSAL_SUCCESS; +} + +osal_basetype_t osal_task_sigmask(osal_basetype_t h, const osal_sigset_t *s, + osal_sigset_t *o) +{ + (void)h; + (void)s; + (void)o; + return OSAL_FAILURE; +} + +osal_basetype_t osal_sem_create(osal_sem_t *s, uint16_t v) +{ + if (!s) + { + return OSAL_FAILURE; + } + *s = xSemaphoreCreateCounting(0xFFFFu, (UBaseType_t)v); + return *s ? OSAL_SUCCESS : OSAL_FAILURE; +} +osal_basetype_t osal_sem_post(osal_sem_t *s) +{ + return s ? __ret_freertos2posix(xSemaphoreGive(*s)) : OSAL_FAILURE; +} +osal_basetype_t osal_sem_wait(osal_sem_t *s, osal_time_t t) +{ + return s ? __ret_freertos2posix(xSemaphoreTake(*s, (TickType_t)t)) : OSAL_FAILURE; +} +osal_basetype_t osal_sem_destroy(osal_sem_t *s) +{ + if (s) + { + vSemaphoreDelete(*s); + } + return OSAL_SUCCESS; +} + +/* + * csmp_ns_socket_cb — Nanostack SOCKET_DATA callback. + * Runs in Nanostack event-loop task. That task holds its internal lock, + * so socket_recvfrom() must NOT re-acquire it here. + */ +static void csmp_ns_socket_cb(void *cb_ptr) +{ + socket_callback_t *cb = (socket_callback_t *)cb_ptr; + ns_address_t src = {0}; + if (cb->event_type != SOCKET_DATA) + { + /* Log MAC-level TX feedback to diagnose frame size issues */ + switch (cb->event_type) { + case SOCKET_TX_DONE: + DPRINTF("csmp_sock: TX_DONE %u bytes OK\n", (unsigned)cb->d_len); + break; + case SOCKET_TX_FAIL: + DPRINTF("csmp_sock: TX_FAIL - MAC dropped the packet!\n"); + break; + case SOCKET_NO_ROUTE: + DPRINTF("csmp_sock: NO_ROUTE - no route to destination\n"); + break; + case SOCKET_NO_RAM: + DPRINTF("csmp_sock: NO_RAM - insufficient memory\n"); + break; + default: + DPRINTF("csmp_sock: event=0x%x\n", (unsigned)cb->event_type); + break; + } + return; + } + g_rx_len = socket_recvfrom(cb->socket_id, g_rx_buf, CSMP_TI_RX_BUF_LEN, 0, &src); + if (g_rx_len <= 0) + { + return; + } + g_rx_src.sin6_family = AF_INET6; + g_rx_src.sin6_port = htons(src.identifier); + memcpy(g_rx_src.sin6_addr.s6_addr, src.address, 16u); + BaseType_t w = pdFALSE; + xSemaphoreGiveFromISR(g_rx_sem, &w); + portYIELD_FROM_ISR(w); +} + +osal_socket_handle_t osal_socket(osal_basetype_t d, osal_basetype_t t, osal_basetype_t p) +{ + (void)d; + (void)t; + (void)p; + nanostack_lock(); + g_ns_sock = socket_open(SOCKET_UDP, 0, csmp_ns_socket_cb); + nanostack_unlock(); + DPRINTF("osal_socket: sock=%d (%s)\n", (int)g_ns_sock, g_ns_sock >= 0 ? "OK" : "FAIL"); + return (osal_socket_handle_t)g_ns_sock; +} + +osal_basetype_t osal_bind(osal_socket_handle_t sockd, osal_sockaddr_t *addr, osal_socklen_t addrlen) +{ + (void)addrlen; + ns_address_t a = {0}; + a.type = ADDRESS_IPV6; + a.identifier = ntohs(addr->sin6_port); + nanostack_lock(); + int8_t r = socket_bind((int8_t)sockd, &a); + nanostack_unlock(); + DPRINTF("osal_bind: sock=%d port=%u rv=%d (%s)\n", + (int)sockd, (unsigned)ntohs(addr->sin6_port), (int)r, r == 0 ? "OK" : "FAIL"); + return r == 0 ? OSAL_SUCCESS : OSAL_FAILURE; +} + +osal_ssize_t osal_recvfrom(osal_socket_handle_t sockd, void *buf, size_t len, + osal_basetype_t flags, osal_sockaddr_t *src_addr, + osal_socklen_t *addrlen) +{ + (void)sockd; + (void)flags; + xSemaphoreTake(g_rx_sem, portMAX_DELAY); + int32_t n = (g_rx_len < (int32_t)len) ? g_rx_len : (int32_t)len; + memcpy(buf, g_rx_buf, (size_t)n); + if (src_addr) + { + memcpy(src_addr, &g_rx_src, sizeof(g_rx_src)); + if (addrlen) + { + *addrlen = (osal_socklen_t)sizeof(g_rx_src); + } + } + return (osal_ssize_t)n; +} + +osal_ssize_t osal_sendto(osal_socket_handle_t sockd, const void *buf, size_t len, + osal_basetype_t flags, const osal_sockaddr_t *dest, + osal_socklen_t addrlen) +{ + (void)flags; + (void)addrlen; + ns_address_t d = {0}; + d.type = ADDRESS_IPV6; + d.identifier = ntohs(dest->sin6_port); + memcpy(d.address, dest->sin6_addr.s6_addr, 16u); + + DPRINTF("osal_sendto: PRE-DELAY sock=%d len=%u dst_port=%u\n", + (int)sockd, (unsigned)len, (unsigned)d.identifier); + vTaskDelay(pdMS_TO_TICKS(50)); + DPRINTF("osal_sendto: POST-DELAY calling socket_sendto\n"); + + int16_t r = socket_sendto((int8_t)sockd, &d, (void *)buf, (uint16_t)len); + DPRINTF("osal_sendto: socket_sendto returned r=%d\n", (int)r); + + DPRINTF("osal_sendto: sock=%d len=%u rv=%d\n", (int)sockd, (unsigned)len, (int)r); + return (osal_ssize_t)r; +} + +osal_ssize_t osal_sendmsg(osal_socket_handle_t sockd, const struct msghdr msg, + osal_basetype_t flags) +{ + if (!msg.msg_name || msg.msg_iovlen == 0) + { + return -1; + } + return osal_sendto(sockd, msg.msg_iov[0].iov_base, msg.msg_iov[0].iov_len, + flags, (const osal_sockaddr_t *)msg.msg_name, + (osal_socklen_t)msg.msg_namelen); +} + +osal_basetype_t osal_inet_pton(osal_basetype_t af, const char *src, void *dst) +{ + (void)af; + return stoip6(src, strlen(src), dst) ? 1 : 0; +} + +osal_basetype_t osal_select(osal_basetype_t n, osal_sd_set_t *r, + osal_sd_set_t *w, osal_sd_set_t *e, + struct timeval *t) +{ + (void)n; + (void)r; + (void)w; + (void)e; + (void)t; + return 1; +} + +void osal_update_sockaddr(osal_sockaddr_t *a, uint16_t p) +{ + memset(a, 0, sizeof(*a)); + a->sin6_family = AF_INET6; + memset(&a->sin6_addr, 0, sizeof(a->sin6_addr)); + a->sin6_port = htons(p); +} + +void osal_print_formatted_ip(const osal_sockaddr_t *s) +{ + DPRINTF("[%x:%x:%x:%x:%x:%x:%x:%x]:%hu\n", + ((uint16_t)s->sin6_addr.s6_addr[0] << 8) | s->sin6_addr.s6_addr[1], + ((uint16_t)s->sin6_addr.s6_addr[2] << 8) | s->sin6_addr.s6_addr[3], + ((uint16_t)s->sin6_addr.s6_addr[4] << 8) | s->sin6_addr.s6_addr[5], + ((uint16_t)s->sin6_addr.s6_addr[6] << 8) | s->sin6_addr.s6_addr[7], + ((uint16_t)s->sin6_addr.s6_addr[8] << 8) | s->sin6_addr.s6_addr[9], + ((uint16_t)s->sin6_addr.s6_addr[10] << 8) | s->sin6_addr.s6_addr[11], + ((uint16_t)s->sin6_addr.s6_addr[12] << 8) | s->sin6_addr.s6_addr[13], + ((uint16_t)s->sin6_addr.s6_addr[14] << 8) | s->sin6_addr.s6_addr[15], + ntohs(s->sin6_port)); +} + +osal_basetype_t osal_gettime(struct timeval *tv, struct timezone *tz) +{ + (void)tz; + if (!tv) return OSAL_FAILURE; + uint32_t ticks = ClockP_getSystemTicks(); + uint32_t us_pt = ClockP_getSystemTickPeriod(); + int64_t uptime = (int64_t)(((uint64_t)ticks * us_pt) / 1000000ULL); + tv->tv_sec = (time_t)(uptime + g_ti_csmp_time_offset_sec); + tv->tv_usec = 0; + return OSAL_SUCCESS; +} + +osal_basetype_t osal_settime(struct timeval *tv, struct timezone *tz) +{ + (void)tz; + if (!tv) return OSAL_FAILURE; + uint32_t ticks = ClockP_getSystemTicks(); + uint32_t us_pt = ClockP_getSystemTickPeriod(); + int64_t uptime = (int64_t)(((uint64_t)ticks * us_pt) / 1000000ULL); + g_ti_csmp_time_offset_sec = (int64_t)tv->tv_sec - uptime; + DPRINTF("osal_settime: epoch=%lld offset=%lld\n", + (long long)tv->tv_sec, (long long)g_ti_csmp_time_offset_sec); + return OSAL_SUCCESS; +} + +/* Signals — no-op on embedded */ +osal_sighandler_t osal_signal(osal_basetype_t n, osal_sighandler_t h) +{ + (void)n; + (void)h; + return NULL; +} +osal_basetype_t osal_sigprocmask(osal_basetype_t h, const osal_sigset_t *s, osal_sigset_t *o) +{ + (void)h; + (void)s; + (void)o; + return OSAL_FAILURE; +} +osal_basetype_t osal_sigemptyset(osal_sigset_t *s) +{ + (void)s; + return OSAL_FAILURE; +} +osal_basetype_t osal_sigaddset(osal_sigset_t *s, osal_basetype_t n) +{ + (void)s; + (void)n; + return OSAL_FAILURE; +} + +/* Trickle timers — copied verbatim from osal_freertos.c */ +void osal_trickle_timer_start(osal_timerid_t timerid, uint32_t imin, uint32_t imax, + trickle_timer_fired_t cb) +{ + uint32_t min; + struct timeval tv = {0}; + if (!m_timert_isrunning) + { + m_timert_isrunning = true; + } + osal_gettime(&tv, NULL); + srand((((uint16_t)g_csmplib_eui64[6] << 8) | g_csmplib_eui64[7])); + timers[timerid].t0 = (uint32_t)tv.tv_sec + (uint32_t)(rand() % imin); + timers[timerid].icur = imin; + timers[timerid].imin = imin; + timers[timerid].imax = imax; + timers[timerid].is_running = true; + timer_fired[timerid] = cb; + min = timers[timerid].icur >> 1; + timers[timerid].tfire = timers[timerid].t0 + min + (uint32_t)(rand() % (timers[timerid].icur - min)); + xTimerStart(timers[timerid].timer, 0); + osal_update_timer(); +} + +void osal_trickle_timer_stop(osal_timerid_t timerid) +{ + timers[timerid].is_running = false; + for (uint8_t i = 0; i < (uint8_t)timer_num; i++) + if (timers[i].is_running) + return; + m_timert_isrunning = false; + xTimerStop(timers[timerid].timer, 0); +} + +void *osal_malloc(size_t n) { return pvPortMalloc(n); } +void osal_free(void *p) { vPortFree(p); } +void osal_sleep_ms(uint64_t ms) { vTaskDelay(pdMS_TO_TICKS((uint32_t)ms)); } + +void vApplicationStackOverflowHook(TaskHandle_t t, char *n) +{ + (void)t; + DPRINTF("stack overflow: %s\n", n); + for (;;) + { + } +} + +osal_basetype_t osal_system_reboot(struct in6_addr *NMSaddr) +{ + (void)NMSaddr; + DPRINTF("osal_system_reboot\n"); + SysCtrlSystemReset(); + return OSAL_SUCCESS; /* unreachable */ +} + +/* ------------------------------------------------------------------ + * OTA OSAL functions — internal flash and NVOCMP slot headers. + * ------------------------------------------------------------------ */ + +osal_basetype_t osal_read_slothdr(uint8_t slotid, Csmp_Slothdr *slot) +{ + if (!pNV || !pNV->readItem || !slot) + { + return OSAL_FAILURE; + } + + NVINTF_itemID_t id = { + .systemID = CSMP_TI_NV_SYSID, + .itemID = CSMP_TI_NV_SLOTHDR_ITEM, + .subID = slotid}; + + uint8_t r = pNV->readItem(id, 0u, (uint16_t)sizeof(Csmp_Slothdr), slot); + if (r != NVINTF_SUCCESS) + { + DPRINTF("osal_read_slothdr: slot %u err %u\n", (unsigned)slotid, (unsigned)r); + return OSAL_FAILURE; + } + DPRINTF("osal_read_slothdr: slot %u ok\n", (unsigned)slotid); + return OSAL_SUCCESS; +} + +osal_basetype_t osal_write_slothdr(uint8_t slotid, Csmp_Slothdr *slot) +{ + if (!pNV || !slot) + { + return OSAL_FAILURE; + } + + NVINTF_itemID_t id = { + .systemID = CSMP_TI_NV_SYSID, + .itemID = CSMP_TI_NV_SLOTHDR_ITEM, + .subID = slotid}; + + uint8_t r = NVINTF_FAILURE; + if (pNV->writeItem) + { + r = pNV->writeItem(id, (uint16_t)sizeof(Csmp_Slothdr), slot); + } + /* Item may not exist on first write — create it */ + if (r == NVINTF_NOTFOUND && pNV->createItem) + { + r = pNV->createItem(id, (uint16_t)sizeof(Csmp_Slothdr), slot); + } + + if (r != NVINTF_SUCCESS) + { + DPRINTF("osal_write_slothdr: slot %u err %u\n", (unsigned)slotid, (unsigned)r); + return OSAL_FAILURE; + } + DPRINTF("osal_write_slothdr: slot %u ok\n", (unsigned)slotid); + return OSAL_SUCCESS; +} + +/* ------------------------------------------------------------------ + * Off-Chip OAD flash helpers — external SPI flash (MX25R8035F) via NVS driver (NVSSPI25X). + * + * UPLOAD_IMAGE slot lives entirely in external flash at offset 0x0. + * RUN_IMAGE is memory-mapped internal flash — read via memcpy, never erased here. + * BACKUP_IMAGE: not used — MCUBoot handles rollback natively via version comparison. + * ------------------------------------------------------------------ */ + +/** Erase the external flash secondary slot (UPLOAD_IMAGE only). */ +osal_basetype_t ti_flash_erase_slot(uint8_t slotid) +{ + if (slotid != UPLOAD_IMAGE) + { + DPRINTF("ti_flash_erase_slot: only UPLOAD_IMAGE is in ext flash (slotid=%u)\n", + (unsigned)slotid); + return OSAL_FAILURE; + } + + DPRINTF("OTA: erasing ext flash secondary slot (%lu bytes)...\n", + (unsigned long)CSMP_TI_SLOT_MAX_SIZE); + + NVS_Handle h = NVS_open(CONFIG_NVSEXTERNAL, NULL); + if (h == NULL) + { + DPRINTF("ti_flash_erase_slot: NVS_open failed\n"); + return OSAL_FAILURE; + } + int_fast16_t r = NVS_erase(h, 0, CSMP_TI_SLOT_MAX_SIZE); + NVS_close(h); + + if (r != NVS_STATUS_SUCCESS) + { + DPRINTF("ti_flash_erase_slot: NVS_erase failed (%d)\n", (int)r); + return OSAL_FAILURE; + } + DPRINTF("ti_flash_erase_slot: ext flash erased OK\n"); + return OSAL_SUCCESS; +} + +osal_basetype_t osal_read_firmware(uint8_t slotid, uint8_t *data, uint32_t size) +{ + if (data == NULL || size > CSMP_TI_SLOT_MAX_SIZE) + return OSAL_FAILURE; + + if (slotid == RUN_IMAGE) + { + /* Running application is memory-mapped in internal flash */ + memcpy(data, (const void *)CSMP_TI_RUN_SLOT_ADDR, (size_t)size); + return OSAL_SUCCESS; + } + if (slotid == UPLOAD_IMAGE) + { + NVS_Handle h = NVS_open(CONFIG_NVSEXTERNAL, NULL); + if (h == NULL) + { + DPRINTF("osal_read_firmware: NVS_open failed\n"); + return OSAL_FAILURE; + } + int_fast16_t r = NVS_read(h, 0, data, (size_t)size); + NVS_close(h); + return (r == NVS_STATUS_SUCCESS) ? OSAL_SUCCESS : OSAL_FAILURE; + } + return OSAL_FAILURE; +} + +osal_basetype_t osal_write_firmware(uint8_t slotid, uint8_t *data, uint32_t size) +{ + if (slotid != UPLOAD_IMAGE || data == NULL || size > CSMP_TI_SLOT_MAX_SIZE) + return OSAL_FAILURE; + + NVS_Handle h = NVS_open(CONFIG_NVSEXTERNAL, NULL); + if (h == NULL) + { + DPRINTF("osal_write_firmware: NVS_open failed\n"); + return OSAL_FAILURE; + } + int_fast16_t r = NVS_write(h, 0, data, (size_t)size, NVS_WRITE_POST_VERIFY); + NVS_close(h); + return (r == NVS_STATUS_SUCCESS) ? OSAL_SUCCESS : OSAL_FAILURE; +} + +osal_basetype_t osal_copy_firmware(uint8_t src_slotid, uint8_t dst_slotid, + Csmp_Slothdr *slots) +{ + /* With MCUBoot, rollback is handled by the bootloader automatically. + * SetBackupRequest (TLV 70) from FND is accepted but is a no-op here. */ + (void)src_slotid; (void)dst_slotid; (void)slots; + DPRINTF("osal_copy_firmware: no-op — MCUBoot handles rollback natively\n"); + return OSAL_SUCCESS; +} + +/* Internal trickle helpers — identical to osal_freertos.c */ +static void osal_update_timer(void) +{ + struct timeval tv = {0}; + m_remaining = (int32_t)(((1UL << 31) - 1)); + osal_gettime(&tv, NULL); + uint32_t now = (uint32_t)tv.tv_sec; + for (uint8_t i = 0; i < (uint8_t)timer_num; i++) + { + if (!timers[i].is_running) + { + continue; + } + int32_t rem = (int32_t)(timers[i].tfire - now); + if (rem < m_remaining) + { + m_remaining = rem; + if (m_remaining <= 0) + { + xTimerPendFunctionCall(osal_alarm_fired_pend_fnc, NULL, 0, pdFALSE); + } + else + { + xTimerChangePeriod(timers[i].timer, + pdMS_TO_TICKS((uint32_t)(m_remaining * 1000)), 0); + } + } + } +} + +static void osal_alarm_fired(TimerHandle_t t) +{ + (void)t; + struct timeval tv = {0}; + osal_gettime(&tv, NULL); + uint32_t now = (uint32_t)tv.tv_sec; + for (uint8_t i = 0; i < (uint8_t)timer_num; i++) + { + if (!timers[i].is_running) + { + continue; + } + if ((int32_t)(timers[i].tfire - now) > 0) + { + continue; + } + timers[i].t0 += timers[i].icur; + timers[i].icur <<= 1; + if (timers[i].icur > timers[i].imax) + { + timers[i].icur = timers[i].imax; + } + timer_fired[i](); + uint32_t min = timers[i].icur >> 1; + timers[i].tfire = timers[i].t0 + min + (uint32_t)(rand() % (timers[i].icur - min)); + } + osal_update_timer(); +} + +static void osal_alarm_fired_pend_fnc(void *p1, uint32_t p2) +{ + (void)p1; + (void)p2; + osal_alarm_fired(NULL); +} \ No newline at end of file diff --git a/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak b/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak new file mode 100644 index 0000000..778201c --- /dev/null +++ b/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak @@ -0,0 +1,71 @@ +#################################################################### +# TI SimpleLink SDK include paths. +# +# subst converts Windows backslashes to forward slashes automatically. +#################################################################### + +SDK := $(subst \,/,$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)) + +# ----------------------------------------------------------------------- +# Target device family — change to match your chip. +# Supported values: +# CC13X4 — CC1352P7, CC1314R10 (Cortex-M33) [default] +# CC13X2X7 — CC1352P7 x7 variant (Cortex-M4F) +# CC13X2 — CC1352P, CC1352R (Cortex-M4F) +# CC13X1 — CC1311P3, CC1311R3 (Cortex-M4F) +# ----------------------------------------------------------------------- +DEVICE_FAMILY ?= CC13X4 + +ifeq ($(DEVICE_FAMILY),CC13X4) + C_DEFS += -DDeviceFamily_CC13X4 + DEVICE_DIR = cc13x4_cc26x4 + FREERTOS_PORT = ARM_CM33/non_secure + FREERTOS_CFG = cc13x4_cc26x4 +else ifeq ($(DEVICE_FAMILY),CC13X2X7) + C_DEFS += -DDeviceFamily_CC13X2X7 + DEVICE_DIR = cc13x2x7_cc26x2x7 + FREERTOS_PORT = ARM_CM4F + FREERTOS_CFG = cc13x2x7_cc26x2x7 +else ifeq ($(DEVICE_FAMILY),CC13X2) + C_DEFS += -DDeviceFamily_CC13X2 + DEVICE_DIR = cc13x2_cc26x2 + FREERTOS_PORT = ARM_CM4F + FREERTOS_CFG = cc13x2_cc26x2 +else ifeq ($(DEVICE_FAMILY),CC13X1) + C_DEFS += -DDeviceFamily_CC13X1 + DEVICE_DIR = cc13x1_cc26x1 + FREERTOS_PORT = ARM_CM4F + FREERTOS_CFG = cc13x1_cc26x1 +else + $(error Unsupported DEVICE_FAMILY: $(DEVICE_FAMILY). Use CC13X4, CC13X2X7, CC13X2, or CC13X1) +endif + +# driverlib device-specific headers (resolved per DEVICE_FAMILY above) +INCLUDES += -I$(SDK)/source/ti/devices/$(DEVICE_DIR) +INCLUDES += -I$(SDK)/source/ti/devices/$(DEVICE_DIR)/driverlib + +INCLUDES += -I$(SDK)/source/ti/posix/ticlang + +# FreeRTOS kernel, portable layer and config (resolved per DEVICE_FAMILY above) +INCLUDES += -I$(SDK)/source/third_party/freertos/include +INCLUDES += -I$(SDK)/source/third_party/freertos/portable/GCC/$(FREERTOS_PORT) +INCLUDES += -I$(SDK)/kernel/freertos/builds/.meta/$(FREERTOS_CFG)/release/pregenerated_configuration + +# SDK source root — for +INCLUDES += -I$(SDK)/source + +# Nanostack public API — socket_api.h, ns_address.h, net_interface.h, ip6string.h +INCLUDES += \ + -I$(SDK)/source/third_party/mbed/nanostack/sal-stack-nanostack/nanostack \ + -I$(SDK)/source/third_party/mbed/frameworks/nanostack-libservice/mbed-client-libservice \ + -I$(SDK)/source/third_party/mbed/nanostack/sal-stack-nanostack-eventloop \ + -I$(SDK)/source/third_party/mbed/nanostack/mbed-mesh-api/source/include + +# mbedTLS — sha256.h, ecdsa.h used in OTA and signature verify +INCLUDES += \ + -I$(SDK)/source/third_party/ti_wisunfan/mbedtls/inc \ + -I$(SDK)/source/third_party/ti_wisunfan/mbedtls/platform/inc \ + -I$(SDK)/source/ti/ti_wisunfan/mbed_port/mbedtls2tirtos + +# NVOCMP NV driver — nvocmp.h and nvintf.h +INCLUDES += -I$(SDK)/source/ti/common/nv \ No newline at end of file diff --git a/sample/CsmpAgentLib_sample.c b/sample/CsmpAgentLib_sample.c index 1bd0db5..1c44763 100644 --- a/sample/CsmpAgentLib_sample.c +++ b/sample/CsmpAgentLib_sample.c @@ -478,6 +478,7 @@ static void csmp_sample_app_thr_fnc(void *arg) [-max reginterval_max] [-eid ieee_eui64] ***************************************************************/ +#ifndef OSAL_TI_SIMPLELINK_WISUN int main(int argc, char **argv) { static osal_task_t app_task = { 0 }; @@ -560,3 +561,4 @@ int str2addr(char *str, uint8_t *addr) { return 0; } +#endif /* OSAL_TI_SIMPLELINK_WISUN */ diff --git a/sample/Makefile b/sample/Makefile old mode 100755 new mode 100644 index ba197cd..11f0e8b --- a/sample/Makefile +++ b/sample/Makefile @@ -6,6 +6,7 @@ # linux - POSIX Linux application # freertos - FreeRTOS application # efr32_wisun - EFR32 WISUN application +# ti_simplelink_wisun - TI CC13xx Wi-SUN application # clean - Clean binaries # @@ -18,6 +19,9 @@ freertos: efr32_wisun: make -f efr32_wisun.target +ti_simplelink_wisun: + make -f ti_simplelink_wisun.target + clean: -rm -rf *.o CsmpAgentLib_sample -rm -f *.a @@ -25,3 +29,4 @@ clean: -rm -f *.s37 -rm -f *.out -rm -rf ../build + -make -f ti_simplelink_wisun.target clean diff --git a/sample/tlvs/ti_simplelink_wisun_tlvs.c b/sample/tlvs/ti_simplelink_wisun_tlvs.c new file mode 100644 index 0000000..a85af5d --- /dev/null +++ b/sample/tlvs/ti_simplelink_wisun_tlvs.c @@ -0,0 +1,1226 @@ +#include +#include +#include +#include +#include "CsmpAgentLib_sample_tlvs.h" +#include "CsmpAgentLib_sample.h" +#include "csmp_service.h" +#include "csmp_info.h" +#include "osal.h" +#include +#include "net_interface.h" +#include "net_rpl.h" +#include "nwk_stats_api.h" +#include "mesh_system.h" +#include "mbed_config.h" +#include "nsconfig.h" +#include "NWK_INTERFACE/Include/protocol.h" +#include "6LoWPAN/ws/ws_common.h" +#include "6LoWPAN/ws/ws_cfg_settings.h" +#include "6LoWPAN/ws/ws_bootstrap.h" +#include "ws_management_api.h" +/* DeviceFamily.h must precede any DeviceFamily_constructPath() usage */ +#include +#include DeviceFamily_constructPath(driverlib/sys_ctrl.h) +#include /* CONFIG_NVSEXTERNAL */ +#include /* Off-Chip OAD secondary slot via NVSSPI25X */ + +/* ---- Global TLV structs ---- */ +Hardware_Desc g_hardwareDesc = HARDWARE_DESC_INIT; +Interface_Desc g_interfaceDesc[interface_max_num] = {INTERFACE_DESC_INIT}; +IP_Address g_ipAddress[ipaddress_max_num] = {IPADDRESS_INIT}; +IP_Route g_ipRoute = IPROUTE_INIT; +Current_Time g_currentTime = CURRENT_TIME_INIT; +Up_Time g_upTime = UPTIME_INIT; +Interface_Metrics g_interfaceMetrics[interface_max_num] = {INTERFACE_METRICS_INIT}; +IPRoute_RPLMetrics g_iprouteRplmetrics = IPROUTE_RPLMETRICS_INIT; +WPAN_Status g_wpanStatus = WPANSTATUS_INIT; +RPL_Instance g_rplInstance = RPLINSTANCE_INIT; +Transfer_Request g_transferRequest = TRANSFER_REQUEST_INIT; +Image_Block g_imageBlock = IMAGE_BLOCK_INIT; +Load_Request g_loadRequest = LOAD_REQUEST_INIT; +Cancel_Load_Request g_cancelLoadRequest = CANCEL_LOAD_REQUEST_INIT; +Set_Backup_Request g_setBackupRequest = SET_BACKUP_REQUEST_INIT; +Firmware_Image_Info g_firmwareImageInfo[CSMP_FWMGMT_ACTIVE_SLOTS] = {FIRMWARE_IMAGE_INFO_INIT}; +Signature_Settings g_SignatureSettings = SIGNATURE_SETTINGS_INIT; +Vendor_Tlv g_vendorTlv[VENDOR_MAX_SUBTYPES] = {VENDOR_TLV_INIT}; +Csmp_Slothdr g_slothdr[CSMP_FWMGMT_ACTIVE_SLOTS] = {0}; + +/* EUI64 — filled in application.c before sample_data_init() */ +uint8_t g_eui64[8] = {0}; +uint32_t g_init_time = 0; /* seconds since boot at Wi-SUN join — set in application.c */ +int8_t g_tx_power_dbm = 0; /* configured TX power in dBm — set in application.c */ +bool g_reboot_request = false; + +/* OTA state */ +bool g_downloadbusy = false; +bool g_initxfer = false; +bool g_initload = false; +uint32_t g_curloadtime = 0; +uint32_t g_curloadslot = 0xFFu; +uint32_t g_curbackupslot = 0xFFu; + +dev_config_t g_devconfig; +csmp_handle_t g_csmp_handle; + +/* Forward declaration — OTA load timer callback */ +static void loadreq_timer_fired(void); +static void ti_ota_activate(void); + +extern int8_t interface_id; /* set by application.c after Wi-SUN join */ +extern volatile bool connectedFlg; +extern int64_t g_ti_csmp_time_offset_sec; + +/* ---- pubkey_get — binary key, no null terminator ---- */ +#define PUBLIC_KEY_LEN 65 +static const char pubkey[PUBLIC_KEY_LEN] = { + 0x04, 0x23, 0xD2, 0x83, 0x45, 0xE8, 0xD5, 0xDF, 0x86, 0x9D, 0x6E, 0xE7, 0x58, + 0x0D, 0xC1, 0x8F, 0x35, 0x9D, 0x57, 0xB1, 0x3D, 0x50, 0x4A, 0x16, 0x01, 0x15, + 0xC4, 0x81, 0x19, 0xB0, 0xE6, 0x60, 0xB8, 0x64, 0x14, 0x01, 0x5D, 0x56, 0x83, + 0xBE, 0xE1, 0x85, 0x98, 0xCB, 0x90, 0xE1, 0xF7, 0x9B, 0xF4, 0x33, 0x5A, 0x4B, + 0x29, 0xAD, 0x35, 0x69, 0x9B, 0x4F, 0xDC, 0x42, 0x7F, 0xEB, 0xC2, 0x99, 0xA5}; +void pubkey_get(char *key) +{ + memcpy(key, pubkey, PUBLIC_KEY_LEN); +} + +void *hardware_desc_get(uint32_t *num) +{ + *num = 1; + g_hardwareDesc.has_entphysicalindex = true; + g_hardwareDesc.entphysicalindex = 1; + g_hardwareDesc.has_entphysicaldescr = true; + + snprintf(g_hardwareDesc.entphysicaldescr, sizeof(g_hardwareDesc.entphysicaldescr), "TI CC13xx Wi-SUN FAN Router Node"); + + g_hardwareDesc.has_entphysicalclass = true; + g_hardwareDesc.entphysicalclass = CLASS_MODULE; + g_hardwareDesc.has_entphysicalname = true; + + snprintf(g_hardwareDesc.entphysicalname, sizeof(g_hardwareDesc.entphysicalname), "wisun0"); + + g_hardwareDesc.has_entphysicalhardwarerev = true; + + snprintf(g_hardwareDesc.entphysicalhardwarerev, sizeof(g_hardwareDesc.entphysicalhardwarerev), "1.0"); + + g_hardwareDesc.has_entphysicalfirmwarerev = true; + + memcpy(g_hardwareDesc.entphysicalfirmwarerev, g_slothdr[RUN_IMAGE].version, sizeof(g_hardwareDesc.entphysicalfirmwarerev)); + + g_hardwareDesc.has_entphysicalserialnum = true; + + snprintf(g_hardwareDesc.entphysicalserialnum, sizeof(g_hardwareDesc.entphysicalserialnum), "%02X%02X%02X%02X%02X%02X%02X%02X", + g_eui64[0], g_eui64[1], g_eui64[2], g_eui64[3], + g_eui64[4], g_eui64[5], g_eui64[6], g_eui64[7]); + + g_hardwareDesc.has_entphysicalmfgname = true; + + snprintf(g_hardwareDesc.entphysicalmfgname, sizeof(g_hardwareDesc.entphysicalmfgname), "Texas Instruments"); + + g_hardwareDesc.has_entphysicalmodelname = true; + + snprintf(g_hardwareDesc.entphysicalmodelname, sizeof(g_hardwareDesc.entphysicalmodelname), "CC13xx"); + + g_hardwareDesc.has_entphysicalfunction = true; + g_hardwareDesc.entphysicalfunction = FUNCTION_RE; + + return &g_hardwareDesc; +} + +void *interface_desc_get(uint32_t *num) +{ + *num = 1; + memset(g_interfaceDesc, 0, sizeof(g_interfaceDesc)); + /* Wi-SUN only — FND NPEs when an interface has no matching IPAddress entry */ + g_interfaceDesc[0].has_ifindex = true; + g_interfaceDesc[0].ifindex = 2; + g_interfaceDesc[0].has_ifname = true; + snprintf(g_interfaceDesc[0].ifname, sizeof(g_interfaceDesc[0].ifname), "wisun0"); + g_interfaceDesc[0].has_ifdescr = true; + snprintf(g_interfaceDesc[0].ifdescr, sizeof(g_interfaceDesc[0].ifdescr), "IEEE 802.15.4 Wi-SUN FAN"); + g_interfaceDesc[0].has_iftype = true; + g_interfaceDesc[0].iftype = 259; + g_interfaceDesc[0].has_ifphysaddress = true; + g_interfaceDesc[0].ifphysaddress.len = 8u; + memcpy(g_interfaceDesc[0].ifphysaddress.data, g_eui64, 8u); + return g_interfaceDesc; +} + +void *ipaddress_get(uint32_t *num) +{ + uint8_t addr[16]; + uint32_t cnt = 0; + memset(g_ipAddress, 0, sizeof(g_ipAddress)); + nanostack_lock(); + /* Report GUA only — Cisco FND NPEs when processing link-local (fe80) because + * FND has no managed network context for link-local space. Cisco guidance + * explicitly requires "the same GUA" in TLV16. */ + if (interface_id >= 0 && arm_net_address_get(interface_id, ADDR_IPV6_GP, addr) == 0) + { + g_ipAddress[cnt].has_ipaddressindex = true; + g_ipAddress[cnt].ipaddressindex = 2; + g_ipAddress[cnt].has_ipaddressaddrtype = true; + g_ipAddress[cnt].ipaddressaddrtype = IPV6; + g_ipAddress[cnt].has_ipaddressaddr = true; + g_ipAddress[cnt].ipaddressaddr.len = 16u; + memcpy(g_ipAddress[cnt].ipaddressaddr.data, addr, 16u); + g_ipAddress[cnt].has_ipaddressifindex = true; + g_ipAddress[cnt].ipaddressifindex = 2; + g_ipAddress[cnt].has_ipaddresstype = true; + g_ipAddress[cnt].ipaddresstype = UNICAST; + /* ip_origin_t has a gap (no value 3): DHCP=4, LINKLAYER=5. + * RFC 4293 maps: dhcp=3, linklayer=4, random=5. + * FND follows RFC 4293: our LINKLAYER(5) looks like "random" to FND. + * Send DHCP(4) which equals RFC 4293 linklayer(4) for an EUI-64 GUA. */ + g_ipAddress[cnt].has_ipaddressorigin = true; + g_ipAddress[cnt].ipaddressorigin = DHCP; + g_ipAddress[cnt].has_ipaddressstatus = true; + g_ipAddress[cnt].ipaddressstatus = 1; + g_ipAddress[cnt].has_ipaddresspfxlen = true; + g_ipAddress[cnt].ipaddresspfxlen = 64u; + cnt++; + } + nanostack_unlock(); + *num = cnt; + return (cnt > 0) ? g_ipAddress : NULL; +} + +/* Discover the first active RPL instance and read its DODAG info. + * Must be called while holding the nanostack lock. + * Returns 1 on success, 0 on failure — same semantics as rpl_read_dodag_info. */ +static uint8_t rpl_read_dodag_info_auto(rpl_dodag_info_t *dodag_ptr) +{ + uint8_t buf[8]; + uint8_t cnt = rpl_instance_list_read(buf, sizeof(buf)); + if (cnt == 0) + return 0u; + return rpl_read_dodag_info(dodag_ptr, buf[0]); +} + +void *iproute_get(uint32_t *num) +{ + *num = 1; + memset(&g_ipRoute, 0, sizeof(g_ipRoute)); + g_ipRoute.has_inetcidrrouteindex = true; + g_ipRoute.inetcidrrouteindex = 1; + g_ipRoute.has_inetcidrroutedesttype = true; + g_ipRoute.inetcidrroutedesttype = IPV6; + g_ipRoute.has_inetcidrroutedest = true; + g_ipRoute.inetcidrroutedest.len = 16u; + g_ipRoute.has_inetcidrroutepfxlen = true; + g_ipRoute.inetcidrroutepfxlen = 0u; + g_ipRoute.has_inetcidrrouteifindex = true; + g_ipRoute.inetcidrrouteifindex = 2; + g_ipRoute.has_inetcidrroutenexthoptype = true; + g_ipRoute.has_inetcidrroutenexthop = true; + g_ipRoute.inetcidrroutenexthop.len = 16u; + rpl_dodag_info_t info = {0}; + nanostack_lock(); + int rpl_ret = rpl_read_dodag_info_auto(&info); + nanostack_unlock(); + /* parent_flags is an enum value: RPL_ROOT_PARENT=0, RPL_PRIMARY_PARENT_SET=1, + * RPL_SECONDARY_PARENT_SET=2. Any non-zero value means primary_parent is valid. */ + if (rpl_ret != 0 && info.parent_flags != RPL_ROOT_PARENT) + { + g_ipRoute.inetcidrroutenexthoptype = IPV6; + memcpy(g_ipRoute.inetcidrroutenexthop.data, info.primary_parent, 16u); + } + else + { + g_ipRoute.inetcidrroutenexthoptype = IPV6; + memset(g_ipRoute.inetcidrroutenexthop.data, 0, 16u); + } + return &g_ipRoute; +} + +void *currenttime_get(uint32_t *num) +{ + struct timeval tv = {0}; + *num = 1; + osal_gettime(&tv, NULL); + memset(&g_currentTime, 0, sizeof(g_currentTime)); + g_currentTime.has_posix = true; + g_currentTime.posix = (uint32_t)tv.tv_sec; + return &g_currentTime; +} + +void currenttime_post(Current_Time *tlv) +{ + struct timeval tv = {0}; + if (tlv && tlv->has_posix) + { + tv.tv_sec = (time_t)tlv->posix; + osal_settime(&tv, NULL); + } +} + +void *uptime_get(uint32_t *num) +{ + *num = 1; + memset(&g_upTime, 0, sizeof(g_upTime)); + uint32_t ticks = ClockP_getSystemTicks(); + uint32_t us_pt = ClockP_getSystemTickPeriod(); + uint32_t now_s = (uint32_t)(((uint64_t)ticks * us_pt) / 1000000ULL); + g_upTime.has_sysuptime = true; + g_upTime.sysuptime = now_s - g_init_time; /* g_init_time in seconds */ + return &g_upTime; +} + +void *interface_metrics_get(uint32_t *num) +{ + *num = 1; + memset(g_interfaceMetrics, 0, sizeof(g_interfaceMetrics)); + nwk_stats_t s = {0}; + nanostack_lock(); + protocol_stats_start(&s); + nanostack_unlock(); + g_interfaceMetrics[0].has_ifindex = true; + g_interfaceMetrics[0].ifindex = 2; /* fixed: must match interfaceDesc[1].ifindex = 2 */ + g_interfaceMetrics[0].has_ifadminstatus = true; + g_interfaceMetrics[0].ifadminstatus = IF_ADMIN_STATUS_UP; + g_interfaceMetrics[0].has_ifoperstatus = true; + g_interfaceMetrics[0].ifoperstatus = connectedFlg ? IF_OPER_STATUS_UP : IF_OPER_STATUS_DOWN; + g_interfaceMetrics[0].has_ifinoctets = true; + g_interfaceMetrics[0].ifinoctets = s.ip_rx_bytes; + g_interfaceMetrics[0].has_ifoutoctets = true; + g_interfaceMetrics[0].ifoutoctets = s.ip_tx_bytes; + g_interfaceMetrics[0].has_ifindiscards = true; + g_interfaceMetrics[0].ifindiscards = s.ip_rx_drop + s.frag_rx_errors; + g_interfaceMetrics[0].has_ifouterrors = true; + g_interfaceMetrics[0].ifouterrors = s.ip_no_route + s.adapt_layer_tx_congestion_drop + s.frag_tx_errors; + return g_interfaceMetrics; +} + +/* Cache last valid RPL metrics so FND sees stable values during RPL re-convergence + * (Poison count events briefly set rank=0xFFFF, which would send empty/wrong data). */ +static IPRoute_RPLMetrics g_iprouteRplmetrics_cache = IPROUTE_RPLMETRICS_INIT; +static bool g_iprouteRplmetrics_valid = false; + +void *iproute_rplmetrics_get(uint32_t *num) +{ + *num = 1; + memset(&g_iprouteRplmetrics, 0, sizeof(g_iprouteRplmetrics)); + rpl_dodag_info_t info = {0}; + ws_stack_info_t ws_info = {0}; + ws_neighbour_info_t nbr_buf[8] = {0}; + int nbr_cnt = 0; + + nanostack_lock(); + int rpl_ret2 = rpl_read_dodag_info_auto(&info); + if (interface_id >= 0) + { + ws_stack_info_get(interface_id, &ws_info); + int total = ws_neighbor_info_get(interface_id, NULL, 0); + if (total > 0) + { + int fill = (total > 8) ? 8 : total; + ws_neighbor_info_get(interface_id, nbr_buf, (uint16_t)fill); + nbr_cnt = fill; + } + } + nanostack_unlock(); + + if (rpl_ret2 == 0) + { + return g_iprouteRplmetrics_valid ? &g_iprouteRplmetrics_cache : &g_iprouteRplmetrics; + } + if (info.curent_rank == 0xFFFF || info.curent_rank == 0) + { + return g_iprouteRplmetrics_valid ? &g_iprouteRplmetrics_cache : &g_iprouteRplmetrics; + } + + /* Count direct neighbors for dagSize */ + uint32_t parent_cnt = 0u, child_cnt = 0u; + uint16_t primary_etx = 0xFFFFu; + for (int i = 0; i < nbr_cnt; i++) + { + if (nbr_buf[i].type == WS_PRIMARY_PARENT || nbr_buf[i].type == WS_SECONDARY_PARENT) + { + parent_cnt++; + if (nbr_buf[i].type == WS_PRIMARY_PARENT && nbr_buf[i].etx != 0xFFFFu) + primary_etx = nbr_buf[i].etx; + } + else if (nbr_buf[i].type == WS_CHILD) + child_cnt++; + } + + g_iprouteRplmetrics.has_inetcidrrouteindex = true; + g_iprouteRplmetrics.inetcidrrouteindex = 1; + g_iprouteRplmetrics.has_instanceindex = true; + g_iprouteRplmetrics.instanceindex = info.instance_id; + g_iprouteRplmetrics.has_rank = true; + g_iprouteRplmetrics.rank = info.curent_rank; + g_iprouteRplmetrics.has_dagsize = true; + g_iprouteRplmetrics.dagsize = parent_cnt + child_cnt + 1u; + + /* dag_min_hop_rank_inc = MinHopRankIncrease (128 in Wi-SUN). Root rank equals this + * value, so hops from root = (rank / mhri) - 1. */ + { + uint16_t mhri = (info.dag_min_hop_rank_inc > 0u) ? info.dag_min_hop_rank_inc : 128u; + uint32_t rank_steps = (uint32_t)(info.curent_rank / mhri); + g_iprouteRplmetrics.has_hops = true; + g_iprouteRplmetrics.hops = (rank_steps > 1u) ? (rank_steps - 1u) : 0u; + + /* pathetx: use actual measured routing cost (ETX to border router) from ws_stack_info + * when available — more accurate than rank-based approximation. */ + g_iprouteRplmetrics.has_pathetx = true; + if (ws_info.routing_cost > 0u && ws_info.routing_cost != 0xFFFFu) + g_iprouteRplmetrics.pathetx = ws_info.routing_cost; + else + g_iprouteRplmetrics.pathetx = (info.curent_rank > mhri) ? + (uint16_t)(info.curent_rank - mhri) : 0u; + + /* linketx: use primary parent's measured ETX from neighbor table when available. */ + g_iprouteRplmetrics.has_linketx = true; + if (primary_etx != 0xFFFFu) + g_iprouteRplmetrics.linketx = primary_etx; + else + g_iprouteRplmetrics.linketx = (info.curent_rank > info.primary_parent_rank) ? + (uint16_t)(info.curent_rank - info.primary_parent_rank) : 0u; + } + + /* RSSI: Wi-SUN RSL encoding is 0–254 where dBm = rsl - 174. + * rsl_in = RSSI of parent's signal as received at this node (forward path). + * rsl_out = estimated RSSI of our signal as received at parent (reverse path). */ + /* Wi-SUN RSL: 0 = -174 dBm, 254 = +80 dBm. Value 255 (0xFF) is nanostack's + * sentinel for "not yet measured" — must be excluded from both bounds checks. */ + if (ws_info.rsl_in > 0u && ws_info.rsl_in < 255u) + { + g_iprouteRplmetrics.has_rssiforward = true; + g_iprouteRplmetrics.rssiforward = (int32_t)ws_info.rsl_in - 174; + } + if (ws_info.rsl_out > 0u && ws_info.rsl_out < 255u) + { + g_iprouteRplmetrics.has_rssireverse = true; + g_iprouteRplmetrics.rssireverse = (int32_t)ws_info.rsl_out - 174; + } + + g_iprouteRplmetrics_cache = g_iprouteRplmetrics; + g_iprouteRplmetrics_valid = true; + return &g_iprouteRplmetrics; +} + +void *wpanstatus_get(uint32_t *num) +{ + *num = 1; + memset(&g_wpanStatus, 0, sizeof(g_wpanStatus)); + nanostack_lock(); + protocol_interface_info_entry_t *cur = protocol_stack_interface_info_get(IF_6LoWPAN); + if (!cur || !cur->ws_info) + { + nanostack_unlock(); + return &g_wpanStatus; + } + ws_info_t *ws = cur->ws_info; + g_wpanStatus.has_ifindex = true; + g_wpanStatus.ifindex = 2; /* fixed: must match interfaceDesc[1].ifindex = 2 */ + g_wpanStatus.has_panid = true; + g_wpanStatus.panid = ws->network_pan_id; + if (ws->cfg) + { + size_t nlen = strlen(ws->cfg->gen.network_name); + if (nlen > 0) + { + g_wpanStatus.has_ssid = true; + g_wpanStatus.ssid.len = (uint32_t)nlen; + memcpy(g_wpanStatus.ssid.data, ws->cfg->gen.network_name, nlen); + } + } + g_wpanStatus.has_txpower = true; + g_wpanStatus.txpower = (int32_t)g_tx_power_dbm; + { + ws_neighbour_info_t nbr_buf[8] = {0}; + int total = ws_neighbor_info_get(interface_id, NULL, 0); + uint32_t nbr_cnt = 0u; + if (total > 0) + { + int fill = (total > 8) ? 8 : total; + ws_neighbor_info_get(interface_id, nbr_buf, (uint16_t)fill); + for (int i = 0; i < fill; i++) + { + if (nbr_buf[i].type == WS_PRIMARY_PARENT || + nbr_buf[i].type == WS_SECONDARY_PARENT || + nbr_buf[i].type == WS_CHILD) + nbr_cnt++; + } + } + g_wpanStatus.has_dagsize = true; + g_wpanStatus.dagsize = nbr_cnt + 1u; + } + g_wpanStatus.has_master = true; + g_wpanStatus.master = false; + g_wpanStatus.has_dot1xenabled = true; + g_wpanStatus.dot1xenabled = false; + g_wpanStatus.has_securitylevel = true; + g_wpanStatus.securitylevel = IEEE154_SEC_MIC_32; + rpl_dodag_info_t wpan_info = {0}; + int wpan_rpl_ret = rpl_read_dodag_info_auto(&wpan_info); + nanostack_unlock(); + if (wpan_rpl_ret != 0) + { + g_wpanStatus.has_rank = true; + g_wpanStatus.rank = wpan_info.curent_rank; + g_wpanStatus.has_beaconvalid = true; + g_wpanStatus.beaconvalid = true; + g_wpanStatus.has_beaconversion = true; + g_wpanStatus.beaconversion = wpan_info.version_num; + g_wpanStatus.has_metric = true; + g_wpanStatus.metric = wpan_info.curent_rank / 256u; + } + return &g_wpanStatus; +} + +void *rplinstance_get(uint32_t *num) +{ + *num = 1; + memset(&g_rplInstance, 0, sizeof(g_rplInstance)); + rpl_dodag_info_t rpl_info = {0}; + ws_neighbour_info_t nbr_buf[8] = {0}; + int nbr_cnt = 0; + + nanostack_lock(); + int rpl_ret3 = rpl_read_dodag_info_auto(&rpl_info); + if (interface_id >= 0) + { + int total = ws_neighbor_info_get(interface_id, NULL, 0); + if (total > 0) + { + int fill = (total > 8) ? 8 : total; + ws_neighbor_info_get(interface_id, nbr_buf, (uint16_t)fill); + nbr_cnt = fill; + } + } + nanostack_unlock(); + + if (rpl_ret3 == 0) + return &g_rplInstance; + + uint32_t parent_cnt = 0u, child_cnt = 0u; + for (int i = 0; i < nbr_cnt; i++) + { + if (nbr_buf[i].type == WS_PRIMARY_PARENT || nbr_buf[i].type == WS_SECONDARY_PARENT) + parent_cnt++; + else if (nbr_buf[i].type == WS_CHILD) + child_cnt++; + } + + g_rplInstance.has_instanceindex = true; + g_rplInstance.instanceindex = 1; + g_rplInstance.has_instanceid = true; + g_rplInstance.instanceid = rpl_info.instance_id; + g_rplInstance.has_dodagid = true; + g_rplInstance.dodagid.len = 16u; + memcpy(g_rplInstance.dodagid.data, rpl_info.dodag_id, 16u); + g_rplInstance.has_dodagversionnumber = true; + g_rplInstance.dodagversionnumber = rpl_info.version_num; + g_rplInstance.has_rank = true; + g_rplInstance.rank = rpl_info.curent_rank; + g_rplInstance.has_parentcount = true; + g_rplInstance.parentcount = (int32_t)parent_cnt; + g_rplInstance.has_dagsize = true; + g_rplInstance.dagsize = parent_cnt + child_cnt + 1u; + return &g_rplInstance; +} + +void *transferRequest_get(tlvid_t id, uint32_t *n) +{ + (void)id; + + /* Return transfer request only if a download is in progress */ + if (g_slothdr[UPLOAD_IMAGE].status != FWHDR_STATUS_DOWNLOAD) + { + g_transferRequest.status = g_slothdr[UPLOAD_IMAGE].status; + *n = 1; + return &g_transferRequest; + } + + memcpy(g_transferRequest.filehash.data, g_slothdr[UPLOAD_IMAGE].filehash, SHA256_HASH_SIZE); + g_transferRequest.filehash.len = SHA256_HASH_SIZE; + strncpy(g_transferRequest.filename, g_slothdr[UPLOAD_IMAGE].filename, FILE_NAME_SIZE); + strncpy(g_transferRequest.version, g_slothdr[UPLOAD_IMAGE].version, VERSION_SIZE); + strncpy(g_transferRequest.hwinfo.hwid, g_slothdr[UPLOAD_IMAGE].hwid, HWID_SIZE); + g_transferRequest.filesize = g_slothdr[UPLOAD_IMAGE].filesize; + g_transferRequest.blocksize = g_slothdr[UPLOAD_IMAGE].blocksize; + g_transferRequest.report_int_min = g_slothdr[UPLOAD_IMAGE].reportintervalmin; + g_transferRequest.report_int_max = g_slothdr[UPLOAD_IMAGE].reportintervalmax; + g_transferRequest.status = g_slothdr[UPLOAD_IMAGE].status; + *n = 1; + return &g_transferRequest; +} + +void transferRequest_post(tlvid_t id, Transfer_Request *tlv) +{ + (void)id; + DPRINTF("OTA: TransferRequest POST\n"); + + if (!tlv) + return; + + /* --- Validation --- */ + if (!tlv->hwinfo.has_hwid) + { + tlv->response = RESPONSE_INCOMPATIBLE_HW; + DPRINTF("OTA: no hwid\n"); + return; + } + if (tlv->filehash.len != SHA256_HASH_SIZE) + { + tlv->response = RESPONSE_INVALID_REQ; + DPRINTF("OTA: bad hash len %u\n", (unsigned)tlv->filehash.len); + return; + } + if (tlv->filesize == 0 || tlv->filesize > CSMP_FWMGMT_SLOTIMG_SIZE) + { + tlv->response = RESPONSE_FILE_SIZE_TOO_BIG; + DPRINTF("OTA: bad filesize %lu\n", (unsigned long)tlv->filesize); + return; + } + /* blocksize <= CSMP max (1024) and large enough to fit in 1024-block bitmap */ + if (tlv->blocksize == 0 || + tlv->blocksize > BLOCK_SIZE || + tlv->blocksize < tlv->filesize / (CSMP_FWMGMT_BLKMAP_CNT * 32U)) + { + tlv->response = RESPONSE_INVALID_BLOCK_SIZE; + DPRINTF("OTA: bad blocksize %lu\n", (unsigned long)tlv->blocksize); + return; + } + /* Reject if a load request is already pending for the upload slot */ + if (g_initload && g_curloadslot == UPLOAD_IMAGE) + { + tlv->response = RESPONSE_PENDING_REBOOT; + DPRINTF("OTA: pending reboot\n"); + return; + } + /* Reject duplicate transfers */ + if (memcmp(tlv->filehash.data, g_slothdr[UPLOAD_IMAGE].filehash, SHA256_HASH_SIZE) == 0) + { + tlv->response = RESPONSE_DUP_XFER; + DPRINTF("OTA: duplicate (matches upload slot)\n"); + return; + } + if (memcmp(tlv->filehash.data, g_slothdr[RUN_IMAGE].filehash, SHA256_HASH_SIZE) == 0) + { + tlv->response = RESPONSE_MATCH_RUN_XFER; + DPRINTF("OTA: matches running image\n"); + return; + } + if (memcmp(tlv->filehash.data, g_slothdr[BACKUP_IMAGE].filehash, SHA256_HASH_SIZE) == 0) + { + tlv->response = RESPONSE_MATCH_BAK_XFER; + DPRINTF("OTA: matches backup image\n"); + return; + } + + /* --- Initialise upload slot --- */ + tlv->has_response = true; + tlv->response = RESPONSE_OK; + memcpy(&g_transferRequest, tlv, sizeof(g_transferRequest)); + g_initxfer = true; + + /* Clamp report intervals */ + uint32_t tmin = tlv->report_int_min * 1000U; + uint32_t tmax = tlv->report_int_max * 1000U; + tmin = (tmin >= (uint32_t)MIN_REPORT_MIN) ? tmin : (uint32_t)MIN_REPORT_MIN; + tmax = (tmax >= (uint32_t)MAX_REPORT_MIN) ? tmax : (uint32_t)MAX_REPORT_MIN; + tmax = (tmax < tmin) ? tmin : tmax; + + /* Clear upload slot header in RAM */ + memset(&g_slothdr[UPLOAD_IMAGE], 0xFF, sizeof(Csmp_Slothdr)); + + /* Populate upload slot header */ + memcpy(g_slothdr[UPLOAD_IMAGE].filehash, tlv->filehash.data, SHA256_HASH_SIZE); + strncpy(g_slothdr[UPLOAD_IMAGE].filename, tlv->filename, FILE_NAME_SIZE); + strncpy(g_slothdr[UPLOAD_IMAGE].version, tlv->version, VERSION_SIZE); + strncpy(g_slothdr[UPLOAD_IMAGE].hwid, tlv->hwinfo.hwid, HWID_SIZE); + g_slothdr[UPLOAD_IMAGE].filesize = tlv->filesize; + g_slothdr[UPLOAD_IMAGE].blocksize = tlv->blocksize; + g_slothdr[UPLOAD_IMAGE].blockcnt = (tlv->filesize + tlv->blocksize - 1U) / tlv->blocksize; + g_slothdr[UPLOAD_IMAGE].filesizelastblk = tlv->filesize % tlv->blocksize; + if (g_slothdr[UPLOAD_IMAGE].filesizelastblk == 0) + g_slothdr[UPLOAD_IMAGE].filesizelastblk = tlv->blocksize; + g_slothdr[UPLOAD_IMAGE].reportintervalmin = tmin; + g_slothdr[UPLOAD_IMAGE].reportintervalmax = tmax; + g_slothdr[UPLOAD_IMAGE].status = FWHDR_STATUS_DOWNLOAD; + + /* Erase the external flash secondary slot. + * ti_flash_erase_slot calls NVS_erase — safe because the secondary + * slot is in external SPI flash, not in the internal flash where the + * application code currently runs. */ + if (ti_flash_erase_slot(UPLOAD_IMAGE) != OSAL_SUCCESS) + { + tlv->response = RESPONSE_INVALID_REQ; + g_initxfer = false; + DPRINTF("OTA: external flash erase failed\n"); + return; + } + + g_initxfer = false; + DPRINTF("OTA: upload slot ready, %lu blocks of %lu bytes\n", + (unsigned long)g_slothdr[UPLOAD_IMAGE].blockcnt, + (unsigned long)g_slothdr[UPLOAD_IMAGE].blocksize); +} + +void imageBlock_post(tlvid_t id, Image_Block *tlv) +{ + (void)id; + + if (!tlv) + return; + + /* Validate: filehash must match upload slot */ + if (tlv->filehash.len < (uint32_t)MIN_HASH_COMPARE_LEN || tlv->filehash.len > SHA256_HASH_SIZE || + memcmp(tlv->filehash.data, g_slothdr[UPLOAD_IMAGE].filehash, tlv->filehash.len) != 0 || + tlv->blockdata.len > g_slothdr[UPLOAD_IMAGE].blocksize) + { + tlv->retval = false; + DPRINTF("OTA: ImageBlock validation failed (blocknum=%lu)\n", + (unsigned long)tlv->blocknum); + g_downloadbusy = false; + return; + } + + memcpy(&g_imageBlock, tlv, sizeof(g_imageBlock)); + + uint32_t blocknum = g_imageBlock.blocknum; + uint32_t word = blocknum >> 5; + uint32_t bit = 31U - (blocknum & 31U); + + /* Guard: bitmap overflow */ + if (word >= CSMP_FWMGMT_BLKMAP_CNT) + { + DPRINTF("OTA: blocknum %lu exceeds bitmap\n", (unsigned long)blocknum); + g_downloadbusy = false; + return; + } + + if (g_initxfer) + { + DPRINTF("OTA: transfer still initialising (block %lu)\n", (unsigned long)blocknum); + g_downloadbusy = false; + return; + } + + /* ----- Block already received? Check for download completion ----- */ + uint32_t mapval = g_slothdr[UPLOAD_IMAGE].nblkmap[word]; + if ((mapval & (1UL << bit)) == 0) + { + /* Bit already clear = block already written */ + if (g_slothdr[UPLOAD_IMAGE].status == FWHDR_STATUS_COMPLETE) + { + DPRINTF("OTA: redundant block %lu after completion\n", (unsigned long)blocknum); + g_downloadbusy = false; + return; + } + /* Check if all blocks are done */ + bool all_done = true; + uint32_t full_words = g_slothdr[UPLOAD_IMAGE].blockcnt / 32U; + for (uint32_t w = 0; w < full_words && all_done; w++) + { + if (g_slothdr[UPLOAD_IMAGE].nblkmap[w] != 0) + all_done = false; + } + uint32_t partial_bits = g_slothdr[UPLOAD_IMAGE].blockcnt % 32U; + if (partial_bits && all_done) + { + uint32_t partial_mask = ~((1UL << (32U - partial_bits)) - 1U); + if (g_slothdr[UPLOAD_IMAGE].nblkmap[full_words] & partial_mask) + all_done = false; + } + if (all_done) + { + DPRINTF("OTA: download complete!\n"); + g_slothdr[UPLOAD_IMAGE].status = FWHDR_STATUS_COMPLETE; + osal_write_slothdr(UPLOAD_IMAGE, &g_slothdr[UPLOAD_IMAGE]); + } + g_downloadbusy = false; + return; + } + + /* ----- Write this block to flash ----- */ + uint32_t offset = blocknum * g_slothdr[UPLOAD_IMAGE].blocksize; + uint32_t flash_addr; + uint8_t *data_ptr; + uint32_t data_len; + + if (blocknum == 0) + { + /* + * Block 0: strip the 256-byte CSMP image header. + * CSMP prepends metadata (filename, version, hwid, hash) to the image. + * This header must NOT be written to flash — Gecko Bootloader uses a GBL + * file format; TI expects a raw binary starting with the vector table. + */ + if (g_imageBlock.blockdata.len <= CSMP_IMAGE_HDR_SIZE) + { + DPRINTF("OTA: block 0 too small to strip header\n"); + g_downloadbusy = false; + return; + } + flash_addr = CSMP_TI_UPLOAD_SLOT_ADDR; + data_ptr = g_imageBlock.blockdata.data + CSMP_IMAGE_HDR_SIZE; + data_len = g_imageBlock.blockdata.len - CSMP_IMAGE_HDR_SIZE; + } + else + { + /* All subsequent blocks are offset by -CSMP_IMAGE_HDR_SIZE to account for stripped header */ + flash_addr = CSMP_TI_UPLOAD_SLOT_ADDR + offset - CSMP_IMAGE_HDR_SIZE; + data_ptr = g_imageBlock.blockdata.data; + data_len = g_imageBlock.blockdata.len; + } + + /* Write block to external SPI flash via NVS driver (NVSSPI25X). + * flash_addr is a byte offset within the NVS region (0-based). */ + NVS_Handle h = NVS_open(CONFIG_NVSEXTERNAL, NULL); + if (h == NULL) + { + DPRINTF("OTA: NVS_open failed block %lu\n", (unsigned long)blocknum); + tlv->retval = false; + g_downloadbusy = false; + return; + } + int_fast16_t nvsResult = NVS_write(h, flash_addr, data_ptr, data_len, + NVS_WRITE_POST_VERIFY); + NVS_close(h); + + if (nvsResult != NVS_STATUS_SUCCESS) + { + DPRINTF("OTA: NVS_write failed block %lu offset 0x%08lx err=%d\n", + (unsigned long)blocknum, (unsigned long)flash_addr, (int)nvsResult); + tlv->retval = false; + g_downloadbusy = false; + return; + } + + tlv->retval = true; + + /* Mark block as received (clear bit in inverted bitmap) */ + mapval ^= (1UL << bit); + g_slothdr[UPLOAD_IMAGE].nblkmap[word] = mapval; + + DPRINTF("OTA: block %lu written @ 0x%08lx len=%lu map[%lu]=0x%08lx\n", + (unsigned long)blocknum, (unsigned long)flash_addr, + (unsigned long)data_len, (unsigned long)word, (unsigned long)mapval); + + /* Persist slot header to NVM every 10 blocks (power-fail resume) */ + if (blocknum && !(blocknum % 10U)) + { + osal_write_slothdr(UPLOAD_IMAGE, &g_slothdr[UPLOAD_IMAGE]); + DPRINTF("OTA: slot header persisted at block %lu\n", (unsigned long)blocknum); + } + + g_downloadbusy = false; +} + +void *loadRequest_get(tlvid_t id, uint32_t *n) +{ + (void)id; + + if (!g_initload) + { + *n = 0; + return NULL; + } + + switch (g_curloadslot) + { + case UPLOAD_IMAGE: + memcpy(g_loadRequest.filehash.data, g_slothdr[UPLOAD_IMAGE].filehash, SHA256_HASH_SIZE); + break; + case BACKUP_IMAGE: + memcpy(g_loadRequest.filehash.data, g_slothdr[BACKUP_IMAGE].filehash, SHA256_HASH_SIZE); + break; + default: + *n = 0; + return NULL; + } + g_loadRequest.filehash.len = SHA256_HASH_SIZE; + g_loadRequest.loadtime = g_curloadtime; + *n = 1; + return &g_loadRequest; +} + +void loadRequest_post(tlvid_t id, Load_Request *tlv) +{ + (void)id; + DPRINTF("OTA: LoadRequest POST\n"); + + if (!tlv) + return; + + uint32_t newloadslot; + + /* Match filehash to a slot */ + if (memcmp(tlv->filehash.data, g_slothdr[UPLOAD_IMAGE].filehash, tlv->filehash.len) == 0) + { + if (g_slothdr[UPLOAD_IMAGE].status != FWHDR_STATUS_COMPLETE) + { + tlv->response = RESPONSE_INCOMPLETE; + DPRINTF("OTA: LoadRequest upload image not complete\n"); + return; + } + newloadslot = UPLOAD_IMAGE; + } + else if (memcmp(tlv->filehash.data, g_slothdr[RUN_IMAGE].filehash, tlv->filehash.len) == 0) + { + tlv->response = RESPONSE_IMAGE_RUNNING; + DPRINTF("OTA: LoadRequest matches running image\n"); + return; + } + else if (memcmp(tlv->filehash.data, g_slothdr[BACKUP_IMAGE].filehash, tlv->filehash.len) == 0) + { + newloadslot = BACKUP_IMAGE; + } + else + { + tlv->response = RESPONSE_UNKNOWN_HASH; + DPRINTF("OTA: LoadRequest unknown hash\n"); + return; + } + + /* Redundant load request? */ + if (g_initload && newloadslot == g_curloadslot && tlv->loadtime == g_curloadtime) + { + DPRINTF("OTA: redundant LoadRequest\n"); + return; + } + + /* Cancel any previous pending load timer */ + osal_trickle_timer_stop(lrq_timer); + g_curloadslot = newloadslot; + g_curloadtime = 0; + g_initload = true; + + /* Calculate timer delay from loadtime */ + uint32_t delay = MIN_LOAD_DELAY; + if (tlv->loadtime != 0) + { + struct timeval tv = {0}; + osal_gettime(&tv, NULL); + if (tlv->loadtime > (uint32_t)tv.tv_sec) + { + delay = tlv->loadtime - (uint32_t)tv.tv_sec; + } + else + { + DPRINTF("OTA: LoadRequest loadtime in the past, using min delay\n"); + } + } + + memcpy(&g_loadRequest, tlv, sizeof(g_loadRequest)); + g_curloadtime = g_loadRequest.loadtime; + + osal_trickle_timer_start(lrq_timer, delay, delay, (trickle_timer_fired_t)loadreq_timer_fired); + DPRINTF("OTA: LoadRequest timer started, delay=%lu s, slot=%lu\n", (unsigned long)delay, (unsigned long)g_curloadslot); +} + +void cancelLoadRequest_post(tlvid_t id, Cancel_Load_Request *tlv) +{ + (void)id; + DPRINTF("OTA: CancelLoadRequest POST\n"); + + if (!tlv) + return; + + const uint8_t *filehash = NULL; + switch (g_curloadslot) + { + case RUN_IMAGE: + filehash = g_slothdr[RUN_IMAGE].filehash; + break; + case UPLOAD_IMAGE: + filehash = g_slothdr[UPLOAD_IMAGE].filehash; + break; + case BACKUP_IMAGE: + filehash = g_slothdr[BACKUP_IMAGE].filehash; + break; + default: + if (g_curloadslot != 0xFFu) + { + tlv->response = RESPONSE_INVALID_REQ; + } + return; + } + + if (filehash && memcmp(tlv->filehash.data, filehash, SHA256_HASH_SIZE) == 0) + { + DPRINTF("OTA: cancel load request valid\n"); + osal_trickle_timer_stop(lrq_timer); + g_initload = false; + g_curloadtime = 0; + g_curloadslot = 0xFFu; + } +} + +void setBackupRequest_post(tlvid_t id, Set_Backup_Request *tlv) +{ + (void)id; + DPRINTF("OTA: SetBackupRequest POST\n"); + + if (!tlv) + return; + + /* Identify the source image */ + if (memcmp(tlv->filehash.data, g_slothdr[UPLOAD_IMAGE].filehash, tlv->filehash.len) == 0) + { + if (g_slothdr[UPLOAD_IMAGE].status != FWHDR_STATUS_COMPLETE) + { + tlv->response = RESPONSE_INCOMPLETE; + DPRINTF("OTA: SetBackup upload not complete\n"); + return; + } + g_curbackupslot = UPLOAD_IMAGE; + } + else if (memcmp(tlv->filehash.data, g_slothdr[RUN_IMAGE].filehash, tlv->filehash.len) == 0) + { + g_curbackupslot = RUN_IMAGE; + } + else + { + tlv->response = RESPONSE_UNKNOWN_HASH; + DPRINTF("OTA: SetBackup unknown hash\n"); + return; + } + + /* Don't overwrite backup while a load is pending from it */ + if (g_initload && g_curloadslot == BACKUP_IMAGE) + { + tlv->response = RESPONSE_PENDING_REBOOT; + DPRINTF("OTA: SetBackup pending reboot on backup\n"); + return; + } + + /* Copy source → backup slot using osal_copy_firmware() */ + DPRINTF("OTA: copying slot %lu → backup\n", (unsigned long)g_curbackupslot); + if (osal_copy_firmware(g_curbackupslot, BACKUP_IMAGE, g_slothdr) != OSAL_SUCCESS) + { + tlv->response = RESPONSE_INVALID_REQ; + DPRINTF("OTA: SetBackup copy failed\n"); + g_curbackupslot = 0xFFu; + return; + } + + g_slothdr[BACKUP_IMAGE].status = FWHDR_STATUS_COMPLETE; + osal_write_slothdr(BACKUP_IMAGE, &g_slothdr[BACKUP_IMAGE]); + g_curbackupslot = 0xFFu; + DPRINTF("OTA: SetBackup complete\n"); +} + +void* firmwareImageInfo_get(tlvid_t tlvid, uint32_t *num) +{ + (void)tlvid; + *num = 0; + for (uint32_t i = 0; i < CSMP_FWMGMT_ACTIVE_SLOTS; i++) + { + memset(&g_firmwareImageInfo[i], 0, sizeof(g_firmwareImageInfo[i])); + (*num)++; + g_firmwareImageInfo[i].has_index = true; + g_firmwareImageInfo[i].index = i + 1u; + g_firmwareImageInfo[i].has_filehash = true; + g_firmwareImageInfo[i].filehash.len = SHA256_HASH_SIZE; + memcpy(g_firmwareImageInfo[i].filehash.data, g_slothdr[i].filehash, SHA256_HASH_SIZE); + g_firmwareImageInfo[i].has_filename = true; + strncpy(g_firmwareImageInfo[i].filename, g_slothdr[i].filename, FILE_NAME_SIZE); + g_firmwareImageInfo[i].has_version = true; + strncpy(g_firmwareImageInfo[i].version, g_slothdr[i].version, VERSION_SIZE); + g_firmwareImageInfo[i].has_filesize = true; + g_firmwareImageInfo[i].filesize = g_slothdr[i].filesize; + g_firmwareImageInfo[i].has_blocksize = true; + g_firmwareImageInfo[i].blocksize = g_slothdr[i].blocksize; + g_firmwareImageInfo[i].blockcnt = g_slothdr[i].blockcnt; + if (g_slothdr[i].status == FWHDR_STATUS_DOWNLOAD) + { + uint32_t blks = (g_slothdr[i].blockcnt + 31u) / 32u; + if (blks > CSMP_FWMGMT_BLKMAP_CNT) + { + blks = CSMP_FWMGMT_BLKMAP_CNT; + } + g_firmwareImageInfo[i].has_bitmap = true; + uint32_t j = 0u; + for (uint32_t k = 0; k < blks && j < sizeof(g_firmwareImageInfo[i].bitmap.data); k++, j += 4u) + { + uint32_t v = ~g_slothdr[i].nblkmap[k]; + g_firmwareImageInfo[i].bitmap.data[j] = (v >> 24u) & 0xFFu; + g_firmwareImageInfo[i].bitmap.data[j + 1u] = (v >> 16u) & 0xFFu; + g_firmwareImageInfo[i].bitmap.data[j + 2u] = (v >> 8u) & 0xFFu; + g_firmwareImageInfo[i].bitmap.data[j + 3u] = v & 0xFFu; + } + if (j > ((g_slothdr[i].blockcnt + 7u) / 8u)) + { + j = (g_slothdr[i].blockcnt + 7u) / 8u; + } + g_firmwareImageInfo[i].bitmap.len = j; + } + g_firmwareImageInfo[i].has_isdefault = (i == BACKUP_IMAGE); + g_firmwareImageInfo[i].isdefault = (i == BACKUP_IMAGE); + g_firmwareImageInfo[i].has_isrunning = (i == RUN_IMAGE); + g_firmwareImageInfo[i].isrunning = (i == RUN_IMAGE); + if (g_curloadtime != 0u && g_curloadslot == i) + { + g_firmwareImageInfo[i].has_loadtime = true; + g_firmwareImageInfo[i].loadtime = g_curloadtime; + } + g_firmwareImageInfo[i].has_hwinfo = true; + g_firmwareImageInfo[i].hwinfo.has_hwid = true; + strncpy(g_firmwareImageInfo[i].hwinfo.hwid, g_slothdr[i].hwid, HWID_SIZE); + g_firmwareImageInfo[i].status = g_slothdr[i].status; + } + return g_firmwareImageInfo; +} + +void *signature_settings_get(uint32_t *num) +{ + *num = 1; + return &g_SignatureSettings; +} + +void signature_settings_post(Signature_Settings *tlv) +{ + if (!tlv) + return; +#define CP(f) \ + g_SignatureSettings.has_##f = true; \ + g_SignatureSettings.f = tlv->f + CP(reqsignedpost); + CP(reqvalidcheckpost); + CP(reqtimesyncpost); + CP(reqseclocalpost); + CP(reqsignedresp); + CP(reqvalidcheckresp); + CP(reqtimesyncresp); + CP(reqseclocalresp); +#undef CP + if (tlv->has_cert && tlv->cert.len <= MAX_SIGNATURE_CERT_LENGTH) + { + g_SignatureSettings.has_cert = true; + g_SignatureSettings.cert.len = tlv->cert.len; + memcpy(g_SignatureSettings.cert.data, tlv->cert.data, tlv->cert.len); + } +} + +static void rebootreq_timer_fired(void) +{ + osal_trickle_timer_stop(async_timer); + osal_system_reboot(&g_devconfig.NMSaddr); + g_reboot_request = false; +} + +void rebootRequest_post(tlvid_t tlvid, Reboot_Request *tlv) +{ + (void)tlvid; + if (!tlv) + { + return; + } + if (tlv->flag == REBOOT) + { + osal_trickle_timer_start(async_timer, REBOOT_DELAY, REBOOT_DELAY, (trickle_timer_fired_t)rebootreq_timer_fired); + g_reboot_request = true; + } +} + + +void *vendorTlv_get(tlvid_t tlvid, uint32_t *num) +{ + if (tlvid.vendor != VENDOR_ID) + { + *num = 0; + return NULL; + } + *num = VENDOR_MAX_SUBTYPES; + /* Subtype 1: MAC diagnostics — stub (requires api_mac.c, not yet linked) */ + g_vendorTlv[0].has_subtype = true; + g_vendorTlv[0].subtype = 1u; + /* Subtype 2: FHSS config — stub (requires fh_pib.h, not yet linked) */ + g_vendorTlv[1].has_subtype = true; + g_vendorTlv[1].subtype = 2u; + /* Subtype 3: RPL health (16 bytes) */ + { + nwk_stats_t s = {0}; + nanostack_lock(); + protocol_stats_start(&s); + nanostack_unlock(); + uint32_t v[4] = {s.rpl_local_repair, s.rpl_global_repair, + s.rpl_total_memory, s.buf_headroom_fail}; + g_vendorTlv[2].has_subtype = true; + g_vendorTlv[2].subtype = 3u; + g_vendorTlv[2].has_value = true; + g_vendorTlv[2].value.len = sizeof(v); + memcpy(g_vendorTlv[2].value.data, v, sizeof(v)); + } + /* Subtype 4: join time in seconds (4 bytes) */ + { + uint32_t j = g_init_time; /* seconds since boot at join */ + g_vendorTlv[3].has_subtype = true; + g_vendorTlv[3].subtype = 4u; + g_vendorTlv[3].has_value = true; + g_vendorTlv[3].value.len = 4u; + memcpy(g_vendorTlv[3].value.data, &j, 4u); + } + return g_vendorTlv; +} + +void vendorTlv_post(tlvid_t tlvid, Vendor_Tlv *tlv) +{ + if (tlvid.vendor != VENDOR_ID || !tlv) + return; + for (int i = 0; i < VENDOR_MAX_SUBTYPES; i++) + { + if (tlv->subtype == g_vendorTlv[i].subtype) + { + g_vendorTlv[i].value.len = tlv->value.len; + memcpy(g_vendorTlv[i].value.data, tlv->value.data, tlv->value.len); + return; + } + } + g_vendorTlv[0].subtype = tlv->subtype; + g_vendorTlv[0].value.len = tlv->value.len; + memcpy(g_vendorTlv[0].value.data, tlv->value.data, tlv->value.len); +} + +/* + * ti_ota_activate — MCUBoot upgrade activation. + * + * Writes the 16-byte MCUBoot "upgrade pending" magic into the upload + * slot trailer, then performs a normal software reset. MCUBoot runs at + * next boot, finds the magic, copies the upload slot → run slot, and + * boots the new firmware. + * + * Unlike the old ti_ota_copy_and_reboot(): + * - Does NOT run from SRAM (.ramcode removed) + * - Does NOT call IntMasterDisable() + * - Does NOT directly erase or program the run slot + * - MCUBoot handles the flash copy safely before the application starts + * + * Requires MCUBoot binary flashed at 0x0 and -DSBL_ENABLE in build flags. + * Without MCUBoot present the magic bytes are written to flash but nothing + * acts on them — the device reboots normally into the unchanged firmware. + */ +static void ti_ota_activate(void) +{ + /* TI MCUBoot uses VERSION COMPARISON — no magic bytes, no pending flag. + * On every reset MCUBoot reads ih_ver from primary (internal flash) and + * secondary (external flash) slots. If secondary.ih_ver > primary.ih_ver + * AND the ECDSA-P256 signature is valid, MCUBoot copies ext flash → internal + * flash and boots the new image. Simply rebooting is all that is needed. */ + DPRINTF("OTA: rebooting — MCUBoot will install ext flash image if version is higher\n"); + osal_sleep_ms(100); /* let trace output flush through ITM */ + SysCtrlSystemReset(); + + for (;;) {} /* unreachable */ +} + +/* Called by lrq_timer when loadtime arrives */ +static void loadreq_timer_fired(void) +{ + DPRINTF("OTA: loadreq_timer_fired — activating slot %lu\n", + (unsigned long)g_curloadslot); + + osal_trickle_timer_stop(lrq_timer); + + /* Persist run slot header so the new version is visible after reboot */ + memcpy(&g_slothdr[RUN_IMAGE], &g_slothdr[g_curloadslot], sizeof(Csmp_Slothdr)); + osal_write_slothdr(RUN_IMAGE, &g_slothdr[RUN_IMAGE]); + + /* Signal MCUBoot and reboot — MCUBoot copies upload → run at next boot */ + ti_ota_activate(); +} \ No newline at end of file diff --git a/src/coap/coapclient.c b/src/coap/coapclient.c index a4c8238..5ba348b 100755 --- a/src/coap/coapclient.c +++ b/src/coap/coapclient.c @@ -88,12 +88,13 @@ int coapclient_request (const osal_sockaddr_t *to, const void *body, uint16_t body_len ) { coap_header_t coap_hdr; - uint8_t opt_buf[MAX_OPTION_LEN], payload_marker = COAP_PAYLOAD_MARKER; + static uint8_t opt_buf[MAX_OPTION_LEN]; + uint8_t payload_marker = COAP_PAYLOAD_MARKER; uint8_t* opt_cur = opt_buf; uint32_t opt_buf_used = 0; uint32_t version = 1; uint32_t option_count = 0; - uint8_t outbuf[OUTBUF_SIZE]; + static uint8_t outbuf[OUTBUF_SIZE]; uint8_t *outbufp = outbuf; int outbuf_len = 0; int rv; diff --git a/ti_simplelink_wisun.target b/ti_simplelink_wisun.target new file mode 100644 index 0000000..21ca565 --- /dev/null +++ b/ti_simplelink_wisun.target @@ -0,0 +1,97 @@ +#################################################################### +# TI Wi-SUN FAN — root library build target # +# Builds csmp_agent_lib_ti_simplelink_wisun.a # +# # +# SETUP (two steps): # +# 1. Set SIMPLELINK_SDK_LINUX below to your SDK path. # +# 2. Edit $(SDK)/imports.mak to set TICLANG_ARMCOMPILER. # +# Default: /home/username/ti/ccs1270/ccs/tools/compiler/... # +# Environment variables take precedence if already set. # +#################################################################### +.SUFFIXES: +.PHONY: all debug release clean + +all: debug + +PROJECTNAME = csmp_agent_lib_ti_simplelink_wisun + +# ----------------------------------------------------------------------- +# TI SimpleLink CC13xx/CC26xx SDK — set the path for your OS. +# TICLANG_ARMCOMPILER is read from the SDK's imports.mak below. +# ----------------------------------------------------------------------- +SIMPLELINK_SDK_WIN = +SIMPLELINK_SDK_OSX = +SIMPLELINK_SDK_LINUX = /home/labuser/ti/simplelink_cc13xx_cc26xx_sdk_8_32_00_07 + +ifeq ($(OS),Windows_NT) + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= $(SIMPLELINK_SDK_WIN) +else + UNAME_S := $(shell uname -s) + ifeq ($(UNAME_S),Darwin) + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= $(SIMPLELINK_SDK_OSX) + else + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= $(SIMPLELINK_SDK_LINUX) + endif +endif + +# Pull TICLANG_ARMCOMPILER from the SDK's imports.mak (edit that file once). +-include $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/imports.mak + +ifeq ($(VERBOSE),) + ECHO = @ +endif + +BUILD_DIR = build +OUTPUT_DIR = $(BUILD_DIR)/debug + +CSMP_AGENT_DIRs += $(shell find ./src -maxdepth 3 -type d) + +C_DEFS = -DOSAL_TI_SIMPLELINK_WISUN +C_DEFS += -DCSMP_USE_MBED_TRACE +INCLUDES += $(foreach dir, $(CSMP_AGENT_DIRs), -I $(dir)) +INCLUDES += -Iinclude -Iosal -Iosal/ti_simplelink_wisun -Isample +# mbed_tracef is forward-declared in osal_platform_types.h — no header needed +C_FLAGS += -Wno-missing-braces +C_FLAGS += -Oz +C_FLAGS += -flto + +C_SOURCE_FILES = $(foreach dir, $(CSMP_AGENT_DIRs), $(wildcard $(dir)/*.c)) +# Sample files — platform-independent, compile into library +# main() in CsmpAgentLib_sample.c is guarded by #ifndef OSAL_TI_SIMPLELINK_WISUN +C_SOURCE_FILES += sample/CsmpAgentLib_sample.c +C_SOURCE_FILES += sample/CsmpAgentLib_sample_tlvs.c +C_SOURCE_FILES += sample/signature_verify.c +# osal_ti_simplelink_wisun.c requires full SDK context — compiled in app build +#C_SOURCE_FILES += osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c + +-include osal/ti_simplelink_wisun/ti_simplelink_wisun.mak + +AR = "$(TICLANG_ARMCOMPILER)/bin/tiarmar" +CC = "$(TICLANG_ARMCOMPILER)/bin/tiarmclang" + +DEPFLAGS = -MMD -MP -MF $(@:.o=.d) +CSOURCES = $(notdir $(C_SOURCE_FILES)) +COBJS = $(addprefix $(OUTPUT_DIR)/,$(CSOURCES:.c=.o)) +CDEPS += $(addprefix $(OUTPUT_DIR)/,$(CSOURCES:.c=.d)) +C_PATHS = $(subst \,/,$(sort $(dir $(C_SOURCE_FILES)))) + +vpath %.c $(C_PATHS) +override CFLAGS = $(C_FLAGS) $(C_DEFS) $(INCLUDES) $(DEPFLAGS) + +debug: | $(OUTPUT_DIR)/$(PROJECTNAME).a + +ifneq (clean,$(findstring clean, $(MAKECMDGOALS))) +-include $(CDEPS) +endif + +$(OUTPUT_DIR)/$(PROJECTNAME).a: $(COBJS) + @echo 'Archiving $@' + $(ECHO)$(AR) rc $@ $^ + @echo 'Done.' + +$(OUTPUT_DIR)/%.o: %.c + @echo 'Building $<' + @mkdir -p $(@D) + $(ECHO)$(CC) $(CFLAGS) -c -o $@ $< + +clean: ; $(RM) -rf $(BUILD_DIR) \ No newline at end of file From e372f42e63c19fa3d848334eab683701d5be803c Mon Sep 17 00:00:00 2001 From: a1257330 Date: Tue, 9 Jun 2026 14:44:30 +0530 Subject: [PATCH 2/3] ti: add SNTP sync, OTA firmware update workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extend the TI SimpleLink Wi-SUN example with clock synchronisation, over-the-air firmware upgrade support Changes: - application/sntp_sync.c, sntp_sync.h: new SNTP client (RFC 4330) that queries the IPv6 NTP server (default fd00::1) immediately after Wi-SUN join; falls back to CSMP_BUILD_EPOCH if the server is unreachable, keeping FND OTA schedule timers accurate - application/application.c: replace fixed CSMP_APPROX_EPOCH seed with sntp_sync() call; patch default_run_slot_image with TI-specific hwid/filename/version before sample_data_init() writes NV on first boot; add ti_ota_check_pending_activation() after osal_kernel_start() - all board makefiles: add application_sntp_sync.obj to object lists; - all board csmp_example.syscfg: increase FreeRTOS heapSize from 0x8000 to 0xC000 and timerStackSize from 0x800 to 0x1000 to accommodate the additional SNTP and OTA stack usage - all board SecureBoot.mak: fix SDK env var (SCCM_ → SIMPLELINK_); embed build-date version stamp via $(shell date +%Y%m%d) - Makefile: default ti_simplelink_wisun target to CONFIG=SECUREBOOT so the signed MCUBoot binary is always produced alongside the hex - tools/tpd_config_cc13xx.json: new TPD header config used by add_tpdheader.py to wrap the signed .bin before FND upload; hwid="CC13XX" must match hw_info in the FND cc13xx device meta file - Vendors/TI/README.md: add Part C FND device type provisioning steps (addGenericEndpoints.sh, cc13xxMeta.json, CSV import); add Step B.2 IANA PEN change (CISCO → TI); add Step F.5 Linux host mesh route; add Step F.10 ntpd server setup; add Part H OTA firmware update walkthrough (Steps H.1–H.13 covering build, flash, wrap, upload, and verify) Signed-off-by: Aryan Arora --- Makefile | 2 +- .../freertos/csmp_example.syscfg | 4 +- .../freertos/ticlang/SecureBoot.mak | 2 +- .../freertos/ticlang/makefile | 7 +- .../freertos/csmp_example.syscfg | 4 +- .../freertos/ticlang/SecureBoot.mak | 2 +- .../freertos/ticlang/makefile | 7 +- .../freertos/csmp_example.syscfg | 4 +- .../freertos/ticlang/SecureBoot.mak | 2 +- .../freertos/ticlang/makefile | 6 +- .../freertos/csmp_example.syscfg | 4 +- .../freertos/ticlang/SecureBoot.mak | 2 +- .../freertos/ticlang/makefile | 6 +- .../freertos/csmp_example.syscfg | 4 +- .../freertos/ticlang/SecureBoot.mak | 2 +- .../freertos/ticlang/makefile | 6 +- Vendors/TI/README.md | 558 +++++++++++++++++- Vendors/TI/application/application.c | 232 +++----- Vendors/TI/application/sntp_sync.c | 151 +++++ Vendors/TI/application/sntp_sync.h | 18 + build.sh | 9 +- include/iana_pen.h | 1 + osal/osal.h | 4 + .../ti_simplelink_wisun/osal_platform_types.h | 44 +- .../osal_ti_simplelink_wisun.c | 204 +++++-- .../ti_simplelink_wisun.mak | 4 + sample/ti_simplelink_wisun.target | 97 +++ sample/tlvs/ti_simplelink_wisun_tlvs.c | 330 ++++++----- tools/tpd_config_cc13xx.json | 12 + 29 files changed, 1283 insertions(+), 445 deletions(-) create mode 100644 Vendors/TI/application/sntp_sync.c create mode 100644 Vendors/TI/application/sntp_sync.h create mode 100644 sample/ti_simplelink_wisun.target create mode 100644 tools/tpd_config_cc13xx.json diff --git a/Makefile b/Makefile index b487bf1..c84981b 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ efr32_wisun: make -f efr32_wisun.target ti_simplelink_wisun: - make -f ti_simplelink_wisun.target + make clean && make CONFIG=SECUREBOOT -f ti_simplelink_wisun.target clean: -rm -rf build/ diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg index 74ebe49..c6eb219 100644 --- a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/csmp_example.syscfg @@ -200,9 +200,9 @@ for(var setting in ccfgSettings) /* ======== RTOS ======== */ const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); -FreeRTOS.heapSize = 0x8000; +FreeRTOS.heapSize = 0xC000; FreeRTOS.posixThreadStackSize = 0x00000200; FreeRTOS.idleStackSize = 0x00000180; -FreeRTOS.timerStackSize = 0x00000800; +FreeRTOS.timerStackSize = 0x00001000; const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak index 8d9ee62..8244ad8 100644 --- a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -5,4 +5,4 @@ LFLAGS += -Wl,--define=SBL_ENABLE .PHONY: postbuild postbuild: $(NAME).hex $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin - $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; + $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0+$(shell date +%Y%m%d) --pad-header --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile index 8b8d824..588845b 100644 --- a/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile @@ -18,7 +18,7 @@ SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) -OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj application_sntp_sync.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) NAME = ns_node_csmp # Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), @@ -352,6 +352,7 @@ LFLAGS += "$(CSMP_AGENT_LIB_INSTALL_DIR)/build/debug/csmp_agent_lib_ti_simplelin "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel" \ -Wl,--diag_suppress=10063 \ + -Wl,--diag_suppress=10247 \ -Wl,--define=FREERTOS \ ti_utils_build_linker.cmd.genlibs \ ../../freertos/ticlang/cc13x2x7_cc26x2x7.cmd \ @@ -400,6 +401,10 @@ application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main. application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) @ echo Building $@ @ $(CC) $(CFLAGS) -c $< -o $@ +application_sntp_sync.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/sntp_sync.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) @ echo Building $@ diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg index 9f63e95..7b00734 100644 --- a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/csmp_example.syscfg @@ -200,9 +200,9 @@ for(var setting in ccfgSettings) /* ======== RTOS ======== */ const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); -FreeRTOS.heapSize = 0x8000; +FreeRTOS.heapSize = 0xC000; FreeRTOS.posixThreadStackSize = 0x00000200; FreeRTOS.idleStackSize = 0x00000180; -FreeRTOS.timerStackSize = 0x00000800; +FreeRTOS.timerStackSize = 0x00001000; const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak index 8d9ee62..ac46b63 100644 --- a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -5,4 +5,4 @@ LFLAGS += -Wl,--define=SBL_ENABLE .PHONY: postbuild postbuild: $(NAME).hex $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin - $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; + $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 2.0.0 --pad-header --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile index 8b8d824..588845b 100644 --- a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile @@ -18,7 +18,7 @@ SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) -OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj application_sntp_sync.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) NAME = ns_node_csmp # Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), @@ -352,6 +352,7 @@ LFLAGS += "$(CSMP_AGENT_LIB_INSTALL_DIR)/build/debug/csmp_agent_lib_ti_simplelin "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source" \ "-L$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/kernel" \ -Wl,--diag_suppress=10063 \ + -Wl,--diag_suppress=10247 \ -Wl,--define=FREERTOS \ ti_utils_build_linker.cmd.genlibs \ ../../freertos/ticlang/cc13x2x7_cc26x2x7.cmd \ @@ -400,6 +401,10 @@ application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main. application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) @ echo Building $@ @ $(CC) $(CFLAGS) -c $< -o $@ +application_sntp_sync.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/sntp_sync.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) @ echo Building $@ diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg index da04b5b..bc71828 100644 --- a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/csmp_example.syscfg @@ -200,9 +200,9 @@ for(var setting in ccfgSettings) /* ======== RTOS ======== */ const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); -FreeRTOS.heapSize = 0x8000; +FreeRTOS.heapSize = 0xC000; FreeRTOS.posixThreadStackSize = 0x00000200; FreeRTOS.idleStackSize = 0x00000180; -FreeRTOS.timerStackSize = 0x00000800; +FreeRTOS.timerStackSize = 0x00001000; const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak index 8d9ee62..8244ad8 100644 --- a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -5,4 +5,4 @@ LFLAGS += -Wl,--define=SBL_ENABLE .PHONY: postbuild postbuild: $(NAME).hex $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin - $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; + $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0+$(shell date +%Y%m%d) --pad-header --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile index ca3e93e..cb3ded6 100644 --- a/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile +++ b/Vendors/TI/LP_EM_CC1314R10/csmp_example_tirf/freertos/ticlang/makefile @@ -18,7 +18,7 @@ SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) -OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj application_sntp_sync.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) NAME = ns_node_csmp # Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), @@ -396,6 +396,10 @@ application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main. application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) @ echo Building $@ @ $(CC) $(CFLAGS) -c $< -o $@ +application_sntp_sync.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/sntp_sync.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) @ echo Building $@ diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg index 2d73316..2ddafc1 100644 --- a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/csmp_example.syscfg @@ -200,9 +200,9 @@ for(var setting in ccfgSettings) /* ======== RTOS ======== */ const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); -FreeRTOS.heapSize = 0x8000; +FreeRTOS.heapSize = 0xC000; FreeRTOS.posixThreadStackSize = 0x00000200; FreeRTOS.idleStackSize = 0x00000180; -FreeRTOS.timerStackSize = 0x00000800; +FreeRTOS.timerStackSize = 0x00001000; const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak index 8d9ee62..8244ad8 100644 --- a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -5,4 +5,4 @@ LFLAGS += -Wl,--define=SBL_ENABLE .PHONY: postbuild postbuild: $(NAME).hex $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin - $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; + $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0+$(shell date +%Y%m%d) --pad-header --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile index ca3e93e..cb3ded6 100644 --- a/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile +++ b/Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/makefile @@ -18,7 +18,7 @@ SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) -OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj application_sntp_sync.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) NAME = ns_node_csmp # Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), @@ -396,6 +396,10 @@ application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main. application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) @ echo Building $@ @ $(CC) $(CFLAGS) -c $< -o $@ +application_sntp_sync.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/sntp_sync.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) @ echo Building $@ diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg index 90aa47f..62286f9 100644 --- a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/csmp_example.syscfg @@ -200,9 +200,9 @@ for(var setting in ccfgSettings) /* ======== RTOS ======== */ const FreeRTOS = scripting.addModule("/freertos/FreeRTOS"); -FreeRTOS.heapSize = 0x8000; +FreeRTOS.heapSize = 0xC000; FreeRTOS.posixThreadStackSize = 0x00000200; FreeRTOS.idleStackSize = 0x00000180; -FreeRTOS.timerStackSize = 0x00000800; +FreeRTOS.timerStackSize = 0x00001000; const POSIX = scripting.addModule("/ti/posix/freertos/Settings"); diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak index 8d9ee62..8244ad8 100644 --- a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -5,4 +5,4 @@ LFLAGS += -Wl,--define=SBL_ENABLE .PHONY: postbuild postbuild: $(NAME).hex $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin - $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0 --pad-header --key $(SCCM_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; + $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0+$(shell date +%Y%m%d) --pad-header --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile index ca3e93e..cb3ded6 100644 --- a/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile +++ b/Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/makefile @@ -18,7 +18,7 @@ SYSCFG_C_FILES = $(filter %.c,$(SYSCFG_FILES)) SYSCFG_H_FILES = $(filter %.h,$(SYSCFG_FILES)) SYSCFG_OPT_FILES = $(filter %.opt,$(SYSCFG_FILES)) -OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) +OBJECTS = rcp_rcp_mlme.obj csmp_sample_tlvs_ti_simplelink_wisun_tlvs.obj mbed_ti-nv-driver_nvocmp.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_interrupt.obj rcp_rcp_queue.obj rcp_rcp_host.obj software_stack_ti15_4mac_osal_port_osal_port.obj application_main.obj software_stack_ti15_4mac_radio_configuration_mac_user_config.obj mbed_mbednanostack2tirtos_platform_ns_trace.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop_mutex.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_timer.obj mbed_nanostack_mac_sw_mac.obj rcp_rcp_host_helpers.obj software_stack_ti15_4mac_stack_user_api_api_mac_timac_fhss_config.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_hal_init.obj rcp_rcp_mcps_sap.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_random.obj software_stack_ti15_4mac_macTask.obj mbed_nanostack_mbed-mesh-api_source_wisun_tasklet.obj software_stack_ti15_4mac_mac_settings_mac_settings.obj rcp_rcp_lmac.obj mbed_ti-nv-driver_crc.obj mbed_ti-rf-driver_source_RFQueue.obj csmp_osal_osal_ti_simplelink_wisun.obj software_stack_ti15_4mac_mac_settings_mac_cfg.obj software_stack_ti15_4mac_osal_port_osal_port_timers.obj mbed_nanostack_mac_mac_header_helper_functions.obj rcp_rcp_security_mib.obj application_application.obj application_sntp_sync.obj rcp_rcp_lmac_helpers.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_ns_event_loop.obj mbed_mbednanostack2tirtos_nanostack_nanostack-hal-mbed-cmsis-rtos_arm_hal_fhss_timer.obj wisun_ncp_platform_uart.obj wisun_ncp_platform_debug_uart.obj wisun_ncp_src_ncp_ncp_base_mtd.obj $(patsubst %.c,%.obj,$(notdir $(SYSCFG_C_FILES))) NAME = ns_node_csmp # Each config-specific .mak file will initialize appropriate options (AFLAGS, CFLAGS, LFLAGS), @@ -396,6 +396,10 @@ application_main.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/main. application_application.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/application.c $(SYSCFG_H_FILES) @ echo Building $@ @ $(CC) $(CFLAGS) -c $< -o $@ +application_sntp_sync.obj: $(CSMP_AGENT_LIB_INSTALL_DIR)/Vendors/TI/application/sntp_sync.c $(SYSCFG_H_FILES) + @ echo Building $@ + @ $(CC) $(CFLAGS) -c $< -o $@ + mbed_ti-rf-driver_source_RFQueue.obj: $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/ti/ti_wisunfan/mbed_port/ti-rf-driver/source/RFQueue.c $(SYSCFG_H_FILES) @ echo Building $@ diff --git a/Vendors/TI/README.md b/Vendors/TI/README.md index c7a2eea..43de113 100644 --- a/Vendors/TI/README.md +++ b/Vendors/TI/README.md @@ -140,22 +140,21 @@ Before touching any commands, understand what network addresses are involved. Th ## 4. Part A: Configure the NMS Address -The CSMP Agent firmware needs to know the IPv6 address of your FND server at **compile time**. This setting applies to all boards from a single shared file. +The CSMP Agent firmware needs to know the IPv6 address of your FND server at **compile time**. The address is defined in **two places** — both must match your FND address before building. -### Step A.1 - Open router.opts +| File | Used by | What it controls | +|------|---------|-----------------| +| `Vendors/TI/application/defines/router.opts` | TI board builds (`CONFIG=SECUREBOOT`) | Passed as `-D` compiler flag, overrides the header at build time | +| `sample/CsmpAgentLib_sample.h` | Linux / FreeRTOS builds; also the fallback default | `#define CSMP_AGENT_NMS_ADDRESS` used if the `-D` flag is not present | + +Update both files so the address is consistent regardless of which build target is used. + +### Step A.1 - Update `router.opts` (TI board builds) ```bash -# Run from the csmp-agent-lib root directory -cd /path/to/csmp-agent-lib nano Vendors/TI/application/defines/router.opts ``` -**File location:** `csmp-agent-lib/Vendors/TI/application/defines/router.opts` - -This file is shared by all boards. Changing it once updates the NMS address for every board in the next build. - -### Step A.2 - Set the FND address - Find this line: ``` @@ -165,16 +164,34 @@ Find this line: Replace `fd00::3` with your FND server's actual IPv6 address: ``` --DCSMP_AGENT_NMS_ADDRESS=\"\" +-DCSMP_AGENT_NMS_ADDRESS=\"fd00::2\" ``` -For example, if FND is at `fd00::2`: +Save and close (`Ctrl+X`, `Y`, `Enter` in nano). +This file is shared by all TI boards — changing it once updates every board in the next build. + +### Step A.2 - Update `CsmpAgentLib_sample.h` (all build targets) + +```bash +nano sample/CsmpAgentLib_sample.h ``` --DCSMP_AGENT_NMS_ADDRESS=\"fd00::2\" + +Find this line near the top of the configuration block (around line 123): + +```c +#define CSMP_AGENT_NMS_ADDRESS "fd00::3" ``` -Save and close (`Ctrl+X`, `Y`, `Enter` in nano). +Replace the address to match what you set in Step A.1: + +```c +#define CSMP_AGENT_NMS_ADDRESS "fd00::2" +``` + +Save and close. + +> Both files must have the same FND address. For TI board builds the `router.opts` `-D` flag takes precedence at compile time, but keeping the header in sync ensures Linux and FreeRTOS builds work correctly without a separate change. --- @@ -226,7 +243,25 @@ SIMPLELINK_SDK_LINUX = /path/to/simplelink_cc13xx_cc26xx_sdk --- -### Step B.2 - Run the build +### Step B.2 - Set the IANA Vendor ID to TI + +The file `include/iana_pen.h` controls which IANA Private Enterprise Number (PEN) the device reports to FND in the VendorTLV. The default value is `CISCO`; change it to `TI` so the firmware identifies itself as a Texas Instruments device (PEN 294). + +Open `include/iana_pen.h` and change line 32: + +```c +/* Before */ +#define VENDOR_ID CISCO + +/* After */ +#define VENDOR_ID TI +``` + +The `TI = 294` enum value is already defined in the same file. This single-line change ensures the `vendorId` field in every VendorTLV report matches the `"294"` value in the `cc13xx` FND device metadata file. + +--- + +### Step B.3 - Run the build Once the three files above are configured, build from the csmp-agent-lib root: @@ -236,16 +271,18 @@ cd /path/to/csmp-agent-lib # Make the build script executable (only needed once) chmod 777 build.sh -# Build firmware for all supported boards -./build.sh ti_simplelink_wisun +# Build firmware for all supported boards with MCUBoot secure boot support +./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT ``` +The `CONFIG=SECUREBOOT` flag enables MCUBoot bootloader support, which is required for OTA firmware updates. Without it the build produces a standard `.hex` only; with it the post-build step also invokes `imgtool` to produce a signed `.bin` file that MCUBoot can validate and apply. + The build does three things in sequence: 1. Compiles the CSMP Agent library into `csmp_agent_lib_ti_simplelink_wisun.a` 2. Moves the `.a` file into the `sample/` directory 3. Loops over every board under `Vendors/TI/*/csmp_example_tirf/freertos/ticlang/`, running SysConfig, compiling the board-specific glue/HAL layer from source, and linking against the SDK's prebuilt Wi-SUN libraries — all five boards are built in one pass -### Step B.3 - Confirm the output +### Step B.4 - Confirm the output A successful build ends with output similar to: @@ -275,18 +312,21 @@ Vendors/TI/LP_EM_CC1354P10_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex Vendors/TI/LP_EM_CC1354P10_6/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex ``` -The file you will flash to your specific board is: +The files you will use for your specific board are: -``` -Vendors/TI//csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex -``` +| File | Purpose | +|------|---------| +| `Vendors/TI//csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex` | Full flash image — use with UniFlash for initial flashing | +| `Vendors/TI//csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin` | MCUBoot-signed binary — used as input to `add_tpdheader.py` for OTA | +| `Vendors/TI//csmp_example_tirf/freertos/ticlang/ns_node_csmp-noheader.bin` | Intermediate file only — do not use directly | For example, for LP-CC1352P7-1: ``` -Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex +Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex ← flash this initially +Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin ← use this for OTA ``` -### Step B.4 - Clean the build +### Step B.5 - Clean the build To remove all build artifacts (library, objects, and board hex): @@ -294,7 +334,7 @@ To remove all build artifacts (library, objects, and board hex): ./build.sh clean ``` -### Step B.5 - If the build fails +### Step B.6 - If the build fails Common issues: @@ -310,15 +350,95 @@ Common issues: ## 6. Part C: Pre-provision the Device in Cisco FND -Before the mesh node can register, FND must have the device's identity in its database. +Before the mesh node can register, FND must have two things: the device type definition (created once per FND installation) and the device's EUI-64 identity (added once per physical device). -For full device provisioning steps, refer to the TPD integration guide included in this repository: +For the complete provisioning walkthrough with screenshots, refer to the TPD integration guide included in this repository: ``` docs/Cisco FND-OpenCSMP TPD Integration Guide.pdf ``` -When adding the device in FND, register it as device type **CC13XX**. +### Step C.1 - Create the CC13XX device type on the FND server + +This step is done **once per FND installation**. It registers the CC13XX device type so FND knows how to categorize, display, and manage TI Wi-SUN devices. + +SSH into the FND server and run: + +```bash +cd /opt/cgms/bin +./addGenericEndpoints.sh +# When prompted for device type name, enter: cc13xx +``` + +The script creates the directory: +``` +/opt/cgms/server/cgms/conf/endpoint-meta/cc13xx/ +``` + +### Step C.2 - Deploy the CC13XX metadata file + +Replace the generated template with the correct metadata for TI Wi-SUN devices. On the FND server, open the generated file for editing: + +```bash +nano /opt/cgms/server/cgms/conf/endpoint-meta/cc13xx/cc13xxMeta.json +``` + +Replace the contents with exactly the following: + +```json +{ + "device_info": { + "device_type": "cc13xx", + "device_function": "extender", + "device_description": "TI CC13xx Wi-SUN FAN Router Node", + "display_string": "CC13XX", + "pids": ["OPENCSMP"], + "vendorId": "294", + "vendorName": "Texas Instruments", + "configure_vendortlv": "true", + "device_actions": [ + "reboot", + "ping", + "traceroute", + "inventory" + ], + "hw_info": "CC13XX" + } +} +``` + +**Why each field matters:** + +| Field | Value | Why | +|-------|-------|-----| +| `device_type` | `"cc13xx"` | Must match the directory name and the type used when importing devices via CSV | +| `device_function` | `"extender"` | Matches `FUNCTION_RE = 2` reported in TLV 11 by the firmware — determines which category devices appear under in FND | +| `vendorId` | `"294"` | TI's IANA PEN — matches `VENDOR_ID = TI = 294` in `include/iana_pen.h`; FND displays this in the VendorTLV Info tab | +| `vendorName` | `"Texas Instruments"` | Shown alongside the vendor ID in FND | +| `configure_vendortlv` | `"true"` | Enables FND to push Vendor TLV 127 config to the device | +| `hw_info` | `"CC13XX"` | **Must match `hwid` in `tools/tpd_config_cc13xx.json` and the TPD binary header** — FND uses this to validate firmware images before assigning them to this device group | + +> **Important:** `hw_info` and `hwid` must always be in sync. If you upload a firmware binary whose TPD header contains a different `hwid`, FND will refuse to assign it to the `cc13xx` group. + +### Step C.3 - Restart FND to load the new device type + +```bash +service cgms restart +``` + +FND reads the `endpoint-meta` directory at startup and creates the necessary database tables for the new device type. Any errors are logged to `/opt/cgms/logs/server.log`. + +### Step C.4 - Import your device EUI-64s into FND + +Create a CSV file with your device EUI-64s: + +``` +eid,devicetype +001234567890ABCD,cc13xx +001234567890ABCE,cc13xx +``` + +In the FND web UI: **Devices → Field Devices → Import** — upload the CSV. Each device now appears under the **Endpoints → CC13XX** category in the left panel, waiting for its first registration. --- @@ -453,7 +573,34 @@ sudo ip6tables -I DOCKER-USER -i eno2 -o br-f76e88221080 -j ACCEPT sudo ip6tables -I DOCKER-USER -i br-f76e88221080 -o eno2 -j ACCEPT ``` -### Step F.5 - Fix Docker's raw table DROP rule (critical) +### Step F.5 - Add Linux host route for Wi-SUN mesh subnet + +The Linux host must know to forward packets destined for the Wi-SUN mesh (`2020:abcd::/64`) into the Docker bridge, where the wfantund container will deliver them via the `wfan0` TUN interface. Without this route, the Linux host drops packets that FND sends toward mesh nodes. + +First, find the wfantund container's IPv6 address on the Docker bridge: + +```bash +docker inspect wfantund | grep -i "globalipv6" +# e.g., fddb:a737:317c::4 +``` + +Add the route (replace the container address and bridge name with your actual values from Step F.4): + +```bash +sudo ip -6 route add 2020:abcd::/64 via fddb:a737:317c::4 dev br-9510734a7037 +``` + +Verify: + +```bash +ip -6 route show | grep 2020 +# Expected: +# 2020:abcd::/64 via fddb:a737:317c::4 dev br-9510734a7037 +``` + +> **Note:** This route is lost on reboot. To make it persistent, add it to `/etc/rc.local` or create a systemd network route unit. + +### Step F.6 - Fix Docker's raw table DROP rule (critical) Docker adds a `PREROUTING` rule in the `raw` table that silently drops any packet destined for a container address if the packet did NOT arrive on the Docker bridge. This runs before routing and before the filter table - it is invisible to most debugging tools. You must insert an ACCEPT rule before it. @@ -472,7 +619,7 @@ sudo ip6tables -t raw -I PREROUTING -i eno2 -d fddb:a737:317c::2 -j ACCEPT > **Why this matters:** Without this rule, every packet FND sends to the container's Docker bridge address is silently dropped at the kernel level before any other rule even sees it. This was the root cause of the "101 dropped packets" issue seen during development. -### Step F.6 - Save the ip6tables rules +### Step F.7 - Save the ip6tables rules Docker rewrites its own chains on every restart but leaves `DOCKER-USER` and the `raw` table alone. Save the rules so they survive reboots: @@ -483,7 +630,7 @@ sudo netfilter-persistent save This writes rules to `/etc/iptables/rules.v6` and restores them at boot before Docker starts. -### Step F.7 - Add routes on FND +### Step F.8 - Add routes on FND FND needs to know how to reach the Docker bridge subnet and the Wi-SUN mesh subnet. Both paths go via the Linux host's `fd00::1` address. @@ -503,7 +650,7 @@ ip -6 route show | grep -E "fddb|2020" # 2020:abcd::/64 via fd00::1 dev ens192 ``` -### Step F.8 - Configure forwarding inside the container +### Step F.9 - Configure forwarding inside the container Inside the wfantund container, enable IPv6 forwarding so it can forward between the `wfan0` TUN interface and the IPv6 tunnel (`eth0`) toward the Linux Host container. Also add a route back to FND's subnet. @@ -527,6 +674,91 @@ ip -6 route show --- +### Step F.10 - Set up NTP server on the Linux host (required for OTA scheduling) + +The TI mesh node synchronises its clock via SNTP (RFC 4330) over the Wi-SUN network immediately after joining, before CSMP starts. This is the same approach used by Silicon Labs EFR32 devices (`sl_wisun_ntp_timesync()`). Without an accurate clock, the device may activate scheduled firmware updates several minutes late. + +The Linux host (`fd00::1`) must run an NTP **server** — Ubuntu's default `systemd-timesyncd` is a client only and does not respond to queries. + +#### Install and configure ntpd + +```bash +sudo apt update +sudo apt install ntp -y +``` + +Edit `/etc/ntp.conf` and add the following lines in the `restrict` section: + +``` +# Allow Wi-SUN mesh nodes and the management network to query this server +restrict fd00:: mask ffff:: nomodify notrap +restrict 2020:abcd:: mask ffff:ffff:: nomodify notrap +``` + +The full restrict block should look like this: + +``` +restrict default kod nomodify notrap nopeer noquery +restrict 127.0.0.1 +restrict ::1 +restrict fd00:: mask ffff:: nomodify notrap +restrict 2020:abcd:: mask ffff:ffff:: nomodify notrap +``` + +#### Start and enable the service + +```bash +sudo systemctl enable ntp +sudo systemctl start ntp +sudo systemctl status ntp +``` + +#### Allow UDP port 123 through any local firewall + +```bash +# UFW (if enabled) +sudo ufw allow 123/udp + +# Or directly via ip6tables +sudo ip6tables -I INPUT -p udp --dport 123 -j ACCEPT +``` + +#### Verify ntpd is listening on IPv6 + +```bash +ss -ulnp | grep 123 +# Expected output includes a line with :::123 (IPv6 wildcard) +``` + +#### Verify ntpd has synchronised with upstream + +```bash +ntpq -p +# Look for a server with * (selected) or + (candidate) in the first column. +# ntpd takes 5-10 minutes on first start to reach synchronisation. +``` + +#### Test that the NTP server responds + +From the Linux host itself: + +```bash +ntpdate -q fd00::1 +# Expected: server fd00::1, stratum N, offset X.XXXX, delay Y.YYYY +``` + +Once ntpd is running, the TI mesh node will print the following at boot (visible on the serial terminal): + +``` +[INFO][sntp]: sntp: request sent to [fd00::1]:123 +[INFO][sntp]: sntp: clock set to Unix=1780466595 (NTP=3989455395) +[INFO][main]: CSMP: clock synchronised via SNTP — epoch=1780466595 +``` + +If the NTP server is not reachable, the device falls back to `CSMP_BUILD_EPOCH` (the Unix timestamp injected at compile time), which is accurate to within seconds of the actual build date. + +--- + ## 10. Part G: Verify End-to-End Connectivity Run these checks in order. Each one tests one hop in the chain. @@ -608,3 +840,265 @@ Log into the FND web interface. Navigate to **Devices > Field Devices**. Your me - IP Address: `2020:abcd::0212:4b00:xxxx` - Last Registration: recent timestamp +--- + +## 12. Part H: OTA Firmware Update + +This section covers upgrading the firmware on a running mesh node over the air using Cisco FND. OTA requires MCUBoot to be present on the device, which is why the `CONFIG=SECUREBOOT` flag is used in the build. + +The process has three phases: build and flash the initial image, build the upgrade image, and trigger the update through FND. + +--- + +### Phase 1: Build and Flash the Initial Image + +This is the baseline firmware that the device runs before any OTA. It must be flashed physically via UniFlash. + +#### Step H.1 - Build the initial image + +From the csmp-agent-lib root directory: + +```bash +./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT +``` + +The build produces two files per board. For LP-CC1352P7-1: +- `Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex` — full flash image for UniFlash +- `Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin` — MCUBoot-signed binary used for OTA + +The version embedded in the initial image defaults to `1.0.0` as set in the board makefile's `imgtool` post-build step. + +#### Step H.2 - Flash MCUBoot and the initial image + +MCUBoot must be flashed to the device before the application. Flash in this order using UniFlash: + +1. Open UniFlash and connect your board. +2. **First — add the MCUBoot image:** + - Click **Add file** and select the MCUBoot binary from the SimpleLink SDK: + ``` + /examples/nortos//mcuboot_app/mcuboot/freertos/ticlang/mcuboot.hex + ``` + - Leave the address at the default (MCUBoot's linker script sets its own load address at the top of flash). + +3. **Second — add the CSMP application image:** + - Click **Add file** and select: + ``` + Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex + ``` + +4. Click **Load Images** to flash both files to the device. + +5. The device boots. MCUBoot runs first, validates the application, then hands control to the CSMP firmware. You should see the Wi-SUN stack initialize on the serial terminal and the device register with FND as described in Section 11. + +--- + +### Phase 2: Build the Upgrade Image + +The upgrade image must have a **strictly higher version** than the currently running image. MCUBoot rejects any image with a version equal to or lower than what is already running. + +#### Step H.3 - Update the version string in `CsmpAgentLib_sample.c` + +Open `sample/CsmpAgentLib_sample.c` and find the `default_run_slot_image` line (around line 49): + +```c +Csmp_Slothdr default_run_slot_image = {{0x61,0xe7,...}, +"opencsmp-node-1.0.00","1.0.00", "CC13XX", 27904, 0, 0, 0, 0, 0, 0, {0},0, 0}; +``` + +Update the filename and version strings to match what you are about to build. For example, if the upgrade version will be `2.0.0`: + +```c +Csmp_Slothdr default_run_slot_image = {{0x61,0xe7,...}, +"opencsmp-node-2.0.00","2.0.00", "CC13XX", 27904, 0, 0, 0, 0, 0, 0, {0},0, 0}; +``` + +> This controls what version FND reads from **TLV 75 FirmwareImageInfo** after the OTA completes and the device reboots. It must match the `--version` argument in the next step. + +#### Step H.4 - Update the imgtool version in the board makefile + +Open the makefile for your board. For LP-CC1352P7-1: + +```bash +nano Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile +``` + +Find the `imgtool sign` line in the `postbuild` section: + +```makefile +$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign \ + --header-size 0x80 --align 4 --slot-size 0xA8000 --pad \ + --version 1.0.0 \ + --pad-header \ + --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem \ + $(NAME)-noheader.bin $(NAME).bin; +``` + +Change `--version 1.0.0` to a version **higher** than what is currently running on the device: + +```makefile + --version 2.0.0 \ +``` + +> The version here must be strictly greater than the running version. `2.0.0 > 1.0.0` ✓. MCUBoot compares major → minor → revision in order. The build number is ignored. + +#### Step H.5 - Build the upgrade image + +```bash +./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT +``` + +The output `.bin` is now signed with version `2.0.0`: +``` +Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin +``` + +#### Step H.6 - Update `tpd_config_cc13xx.json` to match the upgrade version + +Before wrapping the binary, update `tools/tpd_config_cc13xx.json` so the metadata embedded in the TPD header matches the version you just built. FND reads this header to display the image name and version in its firmware list. + +```bash +nano tools/tpd_config_cc13xx.json +``` + +The file looks like this — edit `major`, `minor`, `build`, and `name` to match the version set in Step H.4: + +```json +{ + "major": "2", + "minor": "0", + "build": "0", + "name": "opencsmp-node-2.0.00", + "hwid": "CC13XX", + "sub_hwid": "0", + "branch": "main", + "commit": "0000000", + "date": "Jun 02 2026", + "kernelrev": "WISUN_2.0" +} +``` + +Fields to update every time you build a new upgrade image: + +| Field | What to set | Example | +|-------|-------------|---------| +| `major` | Major version number (string) | `"2"` | +| `minor` | Minor version number (string) | `"0"` | +| `build` | Build/patch number (string) | `"0"` | +| `name` | Human-readable image name shown in FND | `"opencsmp-node-2.0.00"` | +| `date` | Build date (cosmetic only) | `"Jun 02 2026"` | + +> **Keep `hwid`, `sub_hwid`, `branch`, and `kernelrev` unchanged.** `hwid` must always stay `"CC13XX"` to match the `hw_info` field in `cc13xxMeta.json` on the FND server. Changing it will cause FND to reject the image when you try to assign it to the `cc13xx` device group. + +Save and close the file before running `add_tpdheader.py`. + +#### Step H.7 - Wrap the image with the CSMP TPD header + +FND requires the firmware binary to have a 256-byte CSMP metadata header prepended before it can be uploaded. Use the `add_tpdheader.py` tool for this. + +Run from the csmp-agent-lib root directory: + +```bash +python3 tools/add_tpdheader.py \ + Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin \ + ota_upgrade_v2.bin \ + tools/tpd_config_cc13xx.json +``` + +Replace the arguments with your actual paths and preferred output filename: +- **Argument 1** — path to the `.bin` built in Step H.5 +- **Argument 2** — name for the output file that you will upload to FND (any name ending in `.bin`) +- **Argument 3** — TPD config file (`tools/tpd_config_cc13xx.json` contains the `hwid: "CC13XX"` and version metadata) + +This creates `ota_upgrade_v2.bin` in the current directory. + +#### Step H.8 - Transfer the image to the FND server + +Copy the wrapped binary to the machine where you access FND (or to any machine with a browser that can reach the FND web UI): + +```bash +scp ota_upgrade_v2.bin user@fnd-server:/tmp/ +``` + +--- + +### Phase 3: Trigger the OTA from FND + +#### Step H.9 - Upload the firmware image to FND + +1. Log in to the Cisco FND web interface. +2. Navigate to **CONFIG → Firmware Update**. +3. In the left panel, click **Images**, then select **PLC-RF** from the firmware image categories. +4. Click the **+** button next to the "FIRMWARE IMAGES" heading. +5. In the dialog that appears, click **Browse**, select `ota_upgrade_v2.bin` from your machine. +6. Click **Add File**. FND reads the 256-byte header and registers the image name and version. + +#### Step H.10 - Assign the image to a device group and start upload + +1. In the left panel, click **Groups**. +2. Select the device group that contains your mesh node (e.g., `default-cc13xx`). +3. In the right panel, click **Upload Image**. +4. In the dialog: + - **Select Type:** choose `PLC-RF` + - **Select an Image:** choose the image you uploaded in Step H.8 (`ota_upgrade_v2.bin`) +5. Click **Upload Image** to start sending blocks to the device. + +#### Step H.11 - Monitor the OTA progress + +On the same firmware group page, click the **Logs** tab. You will see progress similar to: + +``` +Sent block 1/1060 +Sent block 2/1060 +... +Sent block 1060/1060 +Upload Finished +``` + +The **Status** column on the Firmware Management page also updates as the transfer progresses. Click **Refresh** periodically to get the latest status. The current status values are: + +| Status | Meaning | +|--------|---------| +| `Upload Finished` | All blocks sent to the device; device has confirmed receipt | +| `Reload Scheduled` | FND has sent a LoadRequest; device activation timer is running | +| `Reload Scheduling Finished` | Device acknowledged the load request | + +> You can also monitor block reception on the device's serial terminal. Look for `OTA: block N written` and `OTA: download complete!` log lines. + +#### Step H.12 - Reboot the device to apply the new firmware + +After the upload is complete, schedule a reboot via FND so MCUBoot can apply the image from external flash. + +1. Navigate to **Config → Firmware Update**. +2. Scroll down to the **Image List** table. +3. Scroll horizontally to the last column — the **Actions** column. +4. Click the **calendar icon** next to your device to schedule a reboot. +5. In the scheduler dialog, note the FND server's time zone and set the reboot time accordingly. + +The device reboots at the scheduled time. MCUBoot runs, finds the new image in external flash, verifies the ECDSA-P256 signature, copies it to internal flash, and boots it. + +#### Step H.13 - Verify the upgrade + +After the device rejoins the Wi-SUN network and re-registers with FND (allow 60–90 seconds): + +1. In **Devices → Field Devices**, open the device detail page. +2. Check the **Firmware** tab — the running firmware version should now show `2.0.0` (or whatever version you set in Steps H.3–H.4). +3. Alternatively, run `getoadfwver` from the border router if using pySpinel, or check the TLV 75 FirmwareImageInfo response in FND's Troubleshooting tab. + +--- + +### OTA Quick Reference + +| Step | Action | Where | +|------|--------|-------| +| H.3 | Update version in `default_run_slot_image` | `sample/CsmpAgentLib_sample.c` line ~49 | +| H.4 | Update `--version` in imgtool command | `Vendors/TI//.../makefile` postbuild section | +| H.5 | Build | `./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT` | +| H.6 | Update `tpd_config_cc13xx.json` version fields | `tools/tpd_config_cc13xx.json` — match major/minor/build/name to H.4 version | +| H.7 | Wrap with TPD header | `python3 tools/add_tpdheader.py tools/tpd_config_cc13xx.json` | +| H.8 | Copy to FND host | `scp user@fnd-server:/tmp/` | +| H.9 | Upload image to FND | CONFIG → Firmware Update → Images → PLC-RF → + | +| H.10 | Assign to group | CONFIG → Firmware Update → Groups → Upload Image | +| H.11 | Monitor | Logs tab on the group firmware page | +| H.12 | Reboot device | Config → Firmware Update → Image List → Actions column → calendar icon | +| H.13 | Verify | Device detail → Firmware tab shows new version | + diff --git a/Vendors/TI/application/application.c b/Vendors/TI/application/application.c index d9c689c..983118b 100644 --- a/Vendors/TI/application/application.c +++ b/Vendors/TI/application/application.c @@ -30,10 +30,6 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * ======== application.c ======== - */ - #ifndef WISUN_NCP_ENABLE #undef EXCLUDE_TRACE #endif @@ -65,7 +61,7 @@ #include "fhss_config.h" #include "randLIB.h" #include "ws_management_api.h" -#include "eventOS_event_timer.h" +#include "eventOS_event_timer.h" #include "6LoWPAN/ws/ws_common_defines.h" #include "Common_Protocols/ipv6_constants.h" @@ -88,7 +84,6 @@ #include "RPL/rpl_upward.h" #include "RPL/rpl_downward.h" #include "RPL/rpl_structures.h" -// #define WISUN_TEST_METRICS /* Commented out to reduce code size */ #ifdef WISUN_NCP_ENABLE /* OpenThread Internal/Example Header files */ #include "otsupport/otrtosapi.h" @@ -125,6 +120,25 @@ extern int8_t g_tx_power_dbm; #include "csmp_service.h" #include "osal.h" #include "signature_verify.h" +#include "sntp_sync.h" + +/* NTP server reachable from mesh nodes — the Ubuntu host (border router side) + * is NTP-synchronised and accessible at fd00::1 once Wi-SUN join completes. */ +#ifndef CSMP_NTP_SERVER +#define CSMP_NTP_SERVER "fd00::1" +#endif + +/* TI Wi-SUN firmware metadata reported to FND via TLV75 (FirmwareImageInfo). + * hwid must match hw_info in the FND cc13xx device meta file. + * filename/version are the display strings shown in FND firmware management. */ +#define TI_FW_HWID "CC13XX" +#define TI_FW_FILENAME "ti-node-1.0.00" +#define TI_FW_VERSION "1.0.00" + +/* default_run_slot_image is defined in CsmpAgentLib_sample.c (shared library). + * We patch it here before sample_data_init() reads it so that NV is + * initialised with TI-specific values on first boot (empty NV). */ +extern Csmp_Slothdr default_run_slot_image; /****************************************************************************** Defines & enums @@ -177,7 +191,6 @@ typedef enum connection_status { CON_STATUS_ERROR_UNSUPPORTED = 4 } connection_status_t; - /****************************************************************************** Static & Global Variables *****************************************************************************/ @@ -298,7 +311,6 @@ configurable_props_t cfg_props = .regulatory_channel_list = CONFIG_REGULATION_CHANNEL_MASK, }; - /****************************************************************************** Function declarations Local & Global *****************************************************************************/ @@ -340,9 +352,7 @@ void get_test_metrics(test_metrics_s *test_metrics); Function definitions *****************************************************************************/ -/*! - * Callback for handling any status while a node is joining a network. - */ +/* Handle mesh network connection status changes and update connectedFlg/connect state. */ void nanostackNetworkHandler(mesh_connection_status_t status) { tr_debug("nanostackNetworkHandler: %x", status); @@ -400,15 +410,12 @@ void nanostackNetworkHandler(mesh_connection_status_t status) } } -/*! - * Configure the network settings like network name, - * regulatory domain etc. before starting the network - */ extern const char *ti154stack_lib_version; extern const char *ti154stack_lib_date; extern const char *ti154stack_lib_time; extern const char *wisun_stack_version; extern const char *wisun_protocol_version; +/* Configure Wi-SUN interface parameters (network name, regulatory domain, channel plan) before bringup. */ mesh_error_t nanostack_wisunInterface_configure(void) { int32_t ret; @@ -427,7 +434,6 @@ mesh_error_t nanostack_wisunInterface_configure(void) return MESH_ERROR_PARAM; } - ret = ws_management_regulatory_domain_set(interface_id, CONFIG_REG_DOMAIN, CONFIG_OP_MODE_CLASS, CONFIG_OP_MODE_ID); @@ -435,7 +441,6 @@ mesh_error_t nanostack_wisunInterface_configure(void) return MESH_ERROR_PARAM; } - ret = ws_management_fhss_unicast_channel_function_configure(interface_id, cfg_props.uc_channel_function, cfg_props.uc_fixed_channel, cfg_props.uc_dwell_interval); @@ -443,7 +448,6 @@ mesh_error_t nanostack_wisunInterface_configure(void) return MESH_ERROR_PARAM; } - ret = ws_management_fhss_broadcast_channel_function_configure(interface_id, cfg_props.bc_channel_function, cfg_props.bc_fixed_channel, cfg_props.bc_dwell_interval, @@ -469,9 +473,7 @@ mesh_error_t nanostack_wisunInterface_configure(void) return MESH_ERROR_NONE; } -/*! - * - */ +/* Register the RF PHY, seed the RNG, and initialise the Wi-SUN tasklet/interface. */ mesh_error_t nanostack_wisunInterface_bringup() { int8_t device_id = 0; @@ -499,14 +501,7 @@ mesh_error_t nanostack_wisunInterface_bringup() return MESH_ERROR_NONE; } -/*! - * Connect to the Wi-SUN network. Should be called only after calling - * nanostack_wisunInterface_bringup(). This function also submits - * the network handler function for handling different events - * during the connection process, while calling "connect". - * Only blocking mode has been tested. So, it is recommended for - * the input parameter blocking to be set to true. - */ +/* Start the Wi-SUN network connection process and register the status callback. */ mesh_error_t nanostack_wisunInterface_connect(bool blocking) { @@ -523,11 +518,7 @@ mesh_error_t nanostack_wisunInterface_connect(bool blocking) return MESH_ERROR_NONE; } -/*! - * Connect to the Wi-SUN network. Should be called only after calling - * nanostack_wisunInterface_bringup(). - * It is recommended to start the node join process in blocking mode - */ +/* Block until the node has joined the Wi-SUN network, blinking the red LED to indicate join progress. */ void nanostack_wait_till_connect() { uint8_t _net_state; @@ -557,6 +548,7 @@ void nanostack_wait_till_connect() #if !defined(WISUN_NCP_ENABLE) && !defined(NWK_TEST) +/* GPIO interrupt handler for board buttons (BTN1/BTN2). */ static void btn_interrupt_handler(uint8_t index) { if(index == CONFIG_GPIO_BTN1) @@ -571,6 +563,7 @@ static void btn_interrupt_handler(uint8_t index) #ifdef COAP_SERVICE_ENABLE #ifdef COAP_PANID_LIST +/* Create the pan_rediscover tasklet and trigger its init event. */ static void pan_rediscover_tasklet_start(void) { pan_rediscover_tasklet_id = eventOS_event_handler_create( @@ -578,6 +571,7 @@ static void pan_rediscover_tasklet_start(void) PAN_REDISCOVER_INIT_EVT); } +/* Post an event to the pan_rediscover tasklet. */ static void pan_rediscover_update(uint8_t event_type) { arm_event_s event = { @@ -592,6 +586,7 @@ static void pan_rediscover_update(uint8_t event_type) } extern void read_mac_addr(uint8_t *mac_addr); +/* State machine tasklet handling PAN ID rediscovery: LED feedback, join CoAP notification, and stack restart. */ static void pan_rediscover_tasklet(arm_event_s *event) { pan_rediscover_evt_t event_type; @@ -660,10 +655,7 @@ static void pan_rediscover_tasklet(arm_event_s *event) } #endif // COAP_PANID_LIST - -/*! - * Callback for processing received coap message - */ +/* CoAP callback for LED GET/POST/PUT requests; reads or sets board LED state. */ static int coap_recv_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) { @@ -729,9 +721,7 @@ static int coap_recv_cb(int8_t service_id, uint8_t source_address[static 16], } #ifdef WISUN_TEST_METRICS -/*! - * Callback for processing received coap message for Test metrics - */ +/* CoAP callback for test metrics GET requests; returns collected test_metrics_s data. */ static int coap_recv_cb_tstmetrics(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) { @@ -754,6 +744,7 @@ static int coap_recv_cb_tstmetrics(int8_t service_id, uint8_t source_address[sta #endif #ifdef COAP_PANID_LIST +/* CoAP callback for PAN ID allow/deny list management and PAN rediscovery trigger. */ static int coap_panid_list_cb(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) { @@ -809,12 +800,6 @@ static int coap_panid_list_cb(int8_t service_id, uint8_t source_address[static 1 // Cancel timer set by PAN_REDISCOVER_JOIN_EVT eventOS_event_timer_cancel(PAN_REDISCOVER_JOIN_RESP_TIMER_ID, pan_rediscover_tasklet_id); - /* - * Format of CoAP PANID bulk update: - * <2 byte allow/deny list timeout (seconds) + - * <2 byte allowlist len> + <2 byte denylist len> + - * <2 byte allowlist entry>*(allowlist len) + <2 byte denylist entry>*(denylist len) - */ // Length checking if (request_ptr->payload_len < 6) // Min length considering 0 entries in both lists { @@ -983,6 +968,7 @@ static int coap_panid_list_cb(int8_t service_id, uint8_t source_address[static 1 void fetch_neighbor_details(); +/* CoAP callback for RSSI GET requests; fetches neighbor metrics and returns them as payload. */ static int coap_recv_cb_rssi(int8_t service_id, uint8_t source_address[static 16], uint16_t source_port, sn_coap_hdr_s *request_ptr) { @@ -1006,9 +992,7 @@ static int coap_recv_cb_rssi(int8_t service_id, uint8_t source_address[static 16 #endif // COAP_SERVICE_ENABLE #ifndef WISUN_NCP_ENABLE -/* - * ======== mainThread ======== - */ +/* Application main thread: configures GPIO, joins Wi-SUN, then starts the CSMP agent. */ void *mainThread(void *arg0) { int16_t ret; @@ -1168,7 +1152,13 @@ void *mainThread(void *arg0) /* Step 2: NVOCMP already initialized by main.c via NVOCMP_loadApiPtrs(). */ - /* Step 3: Init CSMP sample data (slot headers, vendor TLV buffers). + /* Step 3: Patch default slot image with TI-specific firmware metadata + * before sample_data_init() writes it to NV on first boot. */ + strncpy(default_run_slot_image.hwid, TI_FW_HWID, HWID_SIZE - 1); + strncpy(default_run_slot_image.filename, TI_FW_FILENAME, FILE_NAME_SIZE - 1); + strncpy(default_run_slot_image.version, TI_FW_VERSION, VERSION_SIZE - 1); + + /* Step 4: Init CSMP sample data (slot headers, vendor TLV buffers). * sample_data_init() resets g_init_time to osal_gettime()=0. * We override it after with the real join time in seconds. */ sample_data_init(); @@ -1226,17 +1216,24 @@ void *mainThread(void *arg0) g_csmp_handle.csmptlvs_post = (csmptlvs_post_t)csmptlvs_post; g_csmp_handle.signature_verify = (signature_verify_t)signature_verify; - /* Seed the device clock with an approximate build-time epoch so FND sees - * a sane "last heard" time instead of 1970. The exact value doesn't - * matter — FND corrects it to accurate wall-clock time by pushing - * CURRENT_TIME_TLVID back in its registration response. - * Update CSMP_APPROX_EPOCH whenever the firmware is significantly older - * than 6 months to avoid FND classifying the device as "Unheard". */ -#define CSMP_APPROX_EPOCH 1777334400UL /* 2026-04-27 00:00:00 UTC */ +#ifndef CSMP_BUILD_EPOCH +# define CSMP_BUILD_EPOCH 1780000000UL /* 2026-05-25 — fallback only */ +#endif { - struct timeval tv = { (time_t)CSMP_APPROX_EPOCH, 0 }; - osal_settime(&tv, NULL); - tr_info("CSMP: initial clock seeded to %lu", (unsigned long)tv.tv_sec); + struct timeval tv_seed = { (time_t)CSMP_BUILD_EPOCH, 0 }; + osal_settime(&tv_seed, NULL); + + if (sntp_sync(CSMP_NTP_SERVER) == 0) + { + struct timeval tv_now = {0}; + osal_gettime(&tv_now, NULL); + tr_info("CSMP: clock synchronised via SNTP — epoch=%lu", (unsigned long)tv_now.tv_sec); + } + else + { + tr_warn("CSMP: SNTP failed — using build-epoch %lu (LoadRequest timers may lag)", + (unsigned long)CSMP_BUILD_EPOCH); + } } /* Create FreeRTOS timer handles and RX semaphore used by the CSMP OSAL. @@ -1244,6 +1241,9 @@ void *mainThread(void *arg0) * calls xTimerStart() — which asserts on a NULL handle if this is skipped. */ osal_kernel_start(); + extern void ti_ota_check_pending_activation(void); + ti_ota_check_pending_activation(); + int csmp_ret = csmp_service_start(&g_devconfig, &g_csmp_handle); tr_info("CSMP: csmp_service_start - done"); if (csmp_ret != 0) @@ -1258,7 +1258,7 @@ void *mainThread(void *arg0) g_devconfig.reginterval_max); } - /* Step 6: Status log loop — log registration state every 10 s */ + /* Step 6: Status log loop */ tr_info("CSMP: entering_loop_status"); for (uint32_t tick = 0u;;) { @@ -1279,12 +1279,7 @@ void *mainThread(void *arg0) #else //WISUN_NCP_ENABLE -/*! - * Signal NCP tasklet with the event NCP_SEND_RESPONSE_EVENT, - * so that NCP_tasklet can process the sending of a response - * back to the host, when the host sends a command. - * e.g. Response to a command from host to set/get configuration. - */ +/* Post NCP_SEND_RESPONSE_EVENT to the NCP tasklet to trigger response transmission to the host. */ void platformNcpSendRspSignal() { //post an event to ncp_tasklet @@ -1300,11 +1295,7 @@ void platformNcpSendRspSignal() eventOS_event_send(&event); } -/*! - * Signal NCP tasklet with the event NCP_SEND_ASYNC_RSPONSE_EVENT - * so that NCP tasket can process the sending of an async response - * back to the host - e.g. reception of a packet by the NWP - */ +/* Post NCP_SEND_ASYNC_RSPONSE_EVENT to the NCP tasklet to trigger async response transmission. */ void platformNcpSendAsyncRspSignal() { //post an event to ncp_tasklet @@ -1320,9 +1311,7 @@ void platformNcpSendAsyncRspSignal() eventOS_event_send(&event); } -/*! - * Callback from the UART module indicating need for processing. - */ +/* Forward a UART event to the NCP tasklet for processing. */ void platformUartSignal(uintptr_t arg) { //post an event to ncp_tasklet @@ -1339,9 +1328,7 @@ void platformUartSignal(uintptr_t arg) } #ifdef WISUN_AUTO_START -/*! - * Blink Leds continuously when an assert occurs - */ +/* Blink both LEDs indefinitely to signal an unrecoverable assert condition. */ static inline void auto_start_assert_led() { while(1) @@ -1352,11 +1339,7 @@ static inline void auto_start_assert_led() } } -/*! - * Post event to NCP tasklet to do net interface configuration - * and start wisun stack without having to receive commands on - * the NCP interface - */ +/* Post NCP_AUTO_START_EVENT to the NCP tasklet to bring up the interface without host commands. */ static inline void autoStartSignal() { arm_event_s auto_event = { @@ -1372,10 +1355,7 @@ static inline void autoStartSignal() } #endif //WISUN_AUTO_START -/*! - * Core logic for NCP tasklet. Helps process incoming, outgoing - * messages on NCP interface based on the received event - */ +/* NCP tasklet event handler: initialises OpenThread NCP, processes UART and NCP send events. */ void ncp_tasklet(arm_event_s *event) { arm_library_event_type_e event_type; @@ -1442,10 +1422,7 @@ void ncp_tasklet(arm_event_s *event) } //end of switch case } -/*! - * Create the NCP tasklet whose core logic is defined in ncp_tasklet() - * Also, post the event to initialize it after creating the tasklet - */ +/* Register the NCP tasklet with the event OS and trigger ARM_LIB_TASKLET_INIT_EVENT. */ void ncp_tasklet_start(void) { eventOS_event_handler_create( @@ -1453,14 +1430,7 @@ void ncp_tasklet_start(void) ARM_LIB_TASKLET_INIT_EVENT); } - -/* Below functions are invoked on receiving - * the appropriate commands from host */ - -/*! - * Check if bringing up of network interface is done or not - * return value: true if already done, false if not - */ +/* Return true if the Wi-SUN network interface has been brought up. */ bool is_net_if_up(void) { if(interface_id < 0) @@ -1473,9 +1443,7 @@ bool is_net_if_up(void) } } -/*! - * Bring up the network interface - */ +/* Configure and bring up the Wi-SUN network interface; return OT_ERROR_FAILED on any error. */ otError nanostack_net_if_up(void) { if( MESH_ERROR_NONE != nanostack_wisunInterface_configure()) @@ -1492,20 +1460,13 @@ otError nanostack_net_if_up(void) } -/*! - * Check if the node joined the network or not on starting - * the connection to network - * return value: true if connected, false if not or in the - * process of connecting - */ +/* Return true if the node has completed Wi-SUN network join (connectedFlg is set). */ bool is_net_stack_up(void) { return(connectedFlg); } -/*! - * Start the process to connect node to the network - */ +/* Initiate Wi-SUN network join in blocking mode; return OT_ERROR_FAILED on connect error. */ otError nanostack_net_stack_up(void) { GPIO_write(CONFIG_GPIO_RLED, 0); @@ -1523,10 +1484,7 @@ otError nanostack_net_stack_up(void) // or reading current_net_state() } -/*! - * Helper function - returns the first non-zero channel from a list of - * channels that is sent as input. - */ +/* Scan a channel bitmap and return the number of the first set (active) channel. */ uint8_t get_first_fixed_channel(uint8_t * channel_list) { uint8_t idx, sizeOfChannelMask; @@ -1556,9 +1514,7 @@ uint8_t get_first_fixed_channel(uint8_t * channel_list) return fixedChannelNum; } -/*! - * Helper function - returns the Link Local address of the node - */ +/* Return the IPv6 link-local address entry for the 6LoWPAN interface. */ if_address_entry_t *get_linkLocal_address(void) { protocol_interface_info_entry_t *cur; @@ -1577,9 +1533,7 @@ if_address_entry_t *get_linkLocal_address(void) } -/*! - * Helper function - returns the global unicast address of the node - */ +/* Return the DHCP-assigned global unicast address entry for the 6LoWPAN interface. */ if_address_entry_t *get_globalUnicast_address(void) { protocol_interface_info_entry_t *cur; @@ -1599,10 +1553,7 @@ if_address_entry_t *get_globalUnicast_address(void) #endif //WISUN_NCP_ENABLE -/*! - * Helper function to get neighbor node metrics like rssi_in, rssi_out - * Metrics are copied over to a global structure instance. - */ +/* Populate nbr_nodes_metrics with MAC address and RSL in/out for each trusted neighbor. */ void fetch_neighbor_details() { protocol_interface_info_entry_t *cur; @@ -1643,12 +1594,7 @@ void fetch_neighbor_details() }//end of for } -/*! - * Returns the current state of the node based on - * at what state is the node during the network joining process - * Return value used to vary the rate of red led blinking - * while the node is joining the network - */ +/* Map the current nanostack bootstrap state to a numeric level used to set LED blink rate. */ uint8_t get_current_net_state(void) { protocol_interface_info_entry_t *cur; @@ -1686,9 +1632,7 @@ uint8_t get_current_net_state(void) return(curNetState); } -/*! - * Helper function - get current multicast groups a node is subscribed to - */ +/* Return a pointer to the multicast group list for the 6LoWPAN interface. */ if_group_list_t *get_multicast_ip_groups() { protocol_interface_info_entry_t *cur; @@ -1697,10 +1641,7 @@ if_group_list_t *get_multicast_ip_groups() return &cur->ip_groups; } -/*! - * Helper function - add multicast address - * return 0 if successful or -1 when an error occurs - */ +/* Add an IPv6 multicast address to the 6LoWPAN interface; returns 0 on success, -1 on error. */ int8_t add_multicast_addr(const uint8_t *address) { protocol_interface_info_entry_t *cur; @@ -1719,10 +1660,7 @@ int8_t add_multicast_addr(const uint8_t *address) return 0; } -/*! - * Helper function - remove multicast address - * return 0 if successful or -1 when an error occurs - */ +/* Remove an IPv6 multicast address from the 6LoWPAN interface; returns 0 on success, -1 on error. */ int8_t remove_multicast_addr(const uint8_t *address) { protocol_interface_info_entry_t *cur; @@ -1738,6 +1676,7 @@ int8_t remove_multicast_addr(const uint8_t *address) return 0; } +/* Return the first RPL instance from the 6LoWPAN interface's RPL domain, or NULL if none. */ rpl_instance_t *get_rpl_instance() { protocol_interface_info_entry_t *cur; @@ -1751,12 +1690,14 @@ rpl_instance_t *get_rpl_instance() return instance; } +/* Stub for border-router-only function; always returns NULL on non-BR devices. */ rpl_dao_target_t *get_dao_target_from_addr(rpl_instance_t *instance, const uint8_t *addr) { // Always return NULL, only valid for BR devices return NULL; } +/* Return the PAN ID of the connected Wi-SUN network, or 0xFFFF if not available. */ uint16_t get_network_panid(void) { protocol_interface_info_entry_t *cur; @@ -1767,13 +1708,10 @@ uint16_t get_network_panid(void) return cur->ws_info->network_pan_id; } - #ifdef WISUN_TEST_METRICS extern JOIN_TIME_s node_join_time; -/* - * Get latest test metrics - */ +/* Collect join time, MAC debug counters, heap stats, RPL rank, and UDP packet count into test_metrics. */ void get_test_metrics(test_metrics_s *test_metrics) { rpl_instance_t *rpl_inst; diff --git a/Vendors/TI/application/sntp_sync.c b/Vendors/TI/application/sntp_sync.c new file mode 100644 index 0000000..1205c90 --- /dev/null +++ b/Vendors/TI/application/sntp_sync.c @@ -0,0 +1,151 @@ +/* + * sntp_sync.c — Minimal SNTP client for TI Wi-SUN + * + * Uses nanostack's callback-based UDP socket API (the same layer as the CSMP + * agent). A FreeRTOS binary semaphore synchronises the callback with the + * calling application task so the function blocks cleanly for up to + * SNTP_TIMEOUT_MS without polling. + * + * SNTP protocol (RFC 4330): + * Request: 48 bytes UDP to port 123 — byte 0 = 0x1B, rest zeros. + * Response: bytes 40-43 = transmit timestamp (big-endian, seconds since + * 1900-01-01). Subtract NTP_UNIX_DELTA (70 years) for Unix epoch. + */ + +#include "sntp_sync.h" + +#include +#include /* usleep */ + +/* nanostack socket layer — same API used by CSMP agent */ +#include "socket_api.h" +#include "net_interface.h" /* SOCKET_DATA and other socket event defines */ +#include "ns_address.h" +#include "ip6string.h" + +/* FreeRTOS — binary semaphore for blocking wait */ +#include "FreeRTOS.h" +#include "semphr.h" + +#include "ns_trace.h" +#include "osal.h" + +#define TRACE_GROUP "sntp" +#define NTP_PORT 123u +#define SNTP_PKT_SIZE 48u +/* 70 years of seconds between 1900-01-01 (NTP epoch) and 1970-01-01 (Unix) */ +#define NTP_UNIX_DELTA 2208988800UL +#define SNTP_TIMEOUT_MS 5000u + +/* ---------- module-level state (safe: only one sntp_sync() call at a time) */ +static SemaphoreHandle_t s_sem = NULL; +static uint8_t s_resp[SNTP_PKT_SIZE]; +static volatile int s_resp_len = 0; + +/* Nanostack UDP socket callback: receives SNTP response and signals the waiting task */ +static void sntp_socket_cb(void *cb_arg) +{ + socket_callback_t *cb = (socket_callback_t *)cb_arg; + if (cb->event_type != SOCKET_DATA || cb->d_len < SNTP_PKT_SIZE) + return; + + ns_address_t from; + int32_t len = socket_recvfrom(cb->socket_id, + s_resp, sizeof(s_resp), 0, &from); + if (len == (int32_t)SNTP_PKT_SIZE) + { + s_resp_len = (int)len; + xSemaphoreGive(s_sem); + } +} + +/* Sends an SNTP request to the given IPv6 server and sets the system clock on success */ +int sntp_sync(const char *ntp_server_ipv6) +{ + int rc = -1; + + if (!ntp_server_ipv6) + { + tr_error("sntp: NULL server"); + return -1; + } + + /* Create one-shot binary semaphore for response notification */ + s_sem = xSemaphoreCreateBinary(); + if (!s_sem) + { + tr_error("sntp: semaphore alloc failed"); + return -1; + } + s_resp_len = 0; + + /* Open ephemeral UDP socket with our callback */ + int8_t sock = socket_open(SOCKET_UDP, 0, sntp_socket_cb); + if (sock < 0) + { + tr_error("sntp: socket_open failed %d", sock); + goto cleanup; + } + + /* Build 48-byte NTP client request — byte 0 = LI=0, VN=3, Mode=3 */ + uint8_t pkt[SNTP_PKT_SIZE]; + memset(pkt, 0, sizeof(pkt)); + pkt[0] = 0x1Bu; + + /* Target: NTP server port 123 */ + ns_address_t server; + memset(&server, 0, sizeof(server)); + server.type = ADDRESS_IPV6; + server.identifier = NTP_PORT; + stoip6(ntp_server_ipv6, strlen(ntp_server_ipv6), server.address); + + int32_t sent = socket_sendto(sock, &server, pkt, SNTP_PKT_SIZE); + if (sent < 0) + { + tr_error("sntp: sendto failed (err=%ld)", (long)sent); + goto close; + } + tr_info("sntp: request sent to [%s]:123", ntp_server_ipv6); + + /* Wait up to SNTP_TIMEOUT_MS for the callback to signal the semaphore */ + if (xSemaphoreTake(s_sem, pdMS_TO_TICKS(SNTP_TIMEOUT_MS)) != pdTRUE) + { + tr_error("sntp: timeout (%u ms) — no response from [%s]:123", + SNTP_TIMEOUT_MS, ntp_server_ipv6); + goto close; + } + + if (s_resp_len != (int)SNTP_PKT_SIZE) + { + tr_error("sntp: short response %d bytes", s_resp_len); + goto close; + } + + /* Extract transmit timestamp: bytes 40-43, big-endian, seconds since 1900 */ + uint32_t ntp_sec = ((uint32_t)s_resp[40] << 24u) | + ((uint32_t)s_resp[41] << 16u) | + ((uint32_t)s_resp[42] << 8u) | + ((uint32_t)s_resp[43]); + + if (ntp_sec < NTP_UNIX_DELTA) + { + tr_error("sntp: implausible timestamp %lu", (unsigned long)ntp_sec); + goto close; + } + + uint32_t unix_sec = ntp_sec - (uint32_t)NTP_UNIX_DELTA; + + struct timeval tv = { (time_t)unix_sec, 0 }; + osal_settime(&tv, NULL); + + tr_info("sntp: clock set to Unix=%lu (NTP=%lu)", (unsigned long)unix_sec, + (unsigned long)ntp_sec); + rc = 0; + +close: + socket_close(sock); +cleanup: + vSemaphoreDelete(s_sem); + s_sem = NULL; + return rc; +} diff --git a/Vendors/TI/application/sntp_sync.h b/Vendors/TI/application/sntp_sync.h new file mode 100644 index 0000000..3b5b373 --- /dev/null +++ b/Vendors/TI/application/sntp_sync.h @@ -0,0 +1,18 @@ +/* + * sntp_sync.h — Minimal SNTP client (RFC 4330) for TI Wi-SUN devices. + * + * Queries an NTP server over the Wi-SUN IPv6 network immediately after + * joining, matching the same approach Silicon Labs uses with + * sl_wisun_ntp_timesync() on EFR32 platforms. This eliminates the + * compile-time clock lag that causes LoadRequest timer calculations to + * fire minutes late. + */ +#ifndef SNTP_SYNC_H +#define SNTP_SYNC_H + +#include + +/* Query NTP server and sync the device clock; call after join, before csmp_service_start(). */ +int sntp_sync(const char *ntp_server_ipv6); + +#endif /* SNTP_SYNC_H */ diff --git a/build.sh b/build.sh index ab8d757..c85d356 100755 --- a/build.sh +++ b/build.sh @@ -9,21 +9,24 @@ SAMPLEDIR=$TOPDIR/sample TLVPROTODIR=$TOPDIR/src/csmpagent/tlvs export OS=$1 +# Extra make variables forwarded to all sub-makes +shift +EXTRA_ARGS="$@" build_header() { echo "########## generating protobuf header files...##########" - make $OS -C $TLVPROTODIR + make $OS -C $TLVPROTODIR $EXTRA_ARGS } build_sample() { - make $OS -C $SAMPLEDIR + make $OS -C $SAMPLEDIR $EXTRA_ARGS } build_lib() { - make $OS -C $DESTDIR + make $OS -C $DESTDIR $EXTRA_ARGS rm -f *.o [ ! -f csmp_agent_lib.a ] || mv csmp_agent_lib.a sample/ [ ! -f csmp_agent_lib_freertos.a ] || mv csmp_agent_lib_freertos.a sample/ diff --git a/include/iana_pen.h b/include/iana_pen.h index 11642eb..0094555 100644 --- a/include/iana_pen.h +++ b/include/iana_pen.h @@ -35,6 +35,7 @@ enum { RESERVED = 0, CISCO = 5771, + TI = 294, SILABS = 39873, ITRON = 1233, DUKE_ENERGY = 2981, diff --git a/osal/osal.h b/osal/osal.h index 3c7c423..8eb4e27 100644 --- a/osal/osal.h +++ b/osal/osal.h @@ -44,7 +44,11 @@ #else #define CSMP_FWMGMT_SLOTIMG_SIZE (30*1024) // 30 Kb #endif +#if defined(OSAL_TI_SIMPLELINK_WISUN) +#define CSMP_FWMGMT_BLKMAP_CNT (34) +#else #define CSMP_FWMGMT_BLKMAP_CNT (32) +#endif #define CSMP_IMAGE_HDR_SIZE 256 diff --git a/osal/ti_simplelink_wisun/osal_platform_types.h b/osal/ti_simplelink_wisun/osal_platform_types.h index 3724a92..a41c491 100644 --- a/osal/ti_simplelink_wisun/osal_platform_types.h +++ b/osal/ti_simplelink_wisun/osal_platform_types.h @@ -9,9 +9,6 @@ /* struct timeval — from TI POSIX shim */ #include -/* ----------------------------------------------------------------------- - * FreeRTOS — from TI SimpleLink SDK. - * --------------------------------------------------------------------- */ #include "FreeRTOS.h" #include "task.h" #include "semphr.h" @@ -26,32 +23,26 @@ #endif void ns_trace_printf(uint8_t dlevel, const char *grp, const char *fmt, ...); #undef DPRINTF +/* Route CSMP debug output through mbed-trace when CSMP_USE_MBED_TRACE is set */ #define DPRINTF(...) ns_trace_printf(TRACE_LEVEL_DEBUG, "csmp", __VA_ARGS__) #endif -/* ----------------------------------------------------------------------- - * TI POSIX shim only provides __socklen_t; define directly. - * --------------------------------------------------------------------- */ +extern int close(int fd); + typedef uint32_t socklen_t; typedef int32_t ssize_t; -/* ----------------------------------------------------------------------- - * Socket constants and macros - * --------------------------------------------------------------------- */ #ifndef AF_INET6 #define AF_INET6 28 #endif #define OSAL_AF_INET6 AF_INET6 #define OSAL_SOCK_DGRAM 2 +/* Convert 16-bit value from host to network byte order */ #define htons(x) ((uint16_t)(__builtin_bswap16((uint16_t)(x)))) +/* Convert 16-bit value from network to host byte order */ #define ntohs(x) ((uint16_t)(__builtin_bswap16((uint16_t)(x)))) -/* ----------------------------------------------------------------------- - * POSIX socket structs — not provided by TI SDK, defined here. - * Nanostack uses ns_address_t internally; these exist only at the - * OSAL boundary that csmp-agent-lib sees. - * --------------------------------------------------------------------- */ struct iovec { void *iov_base; size_t iov_len; @@ -88,9 +79,6 @@ struct timezone { }; #endif -/* ----------------------------------------------------------------------- - * OSAL type definitions - * --------------------------------------------------------------------- */ typedef void (*osal_sighandler_t)(int); typedef struct sockaddr_in6 osal_sockaddr_t; typedef SemaphoreHandle_t osal_sem_t; @@ -104,22 +92,17 @@ typedef BaseType_t osal_basetype_t; typedef int osal_socket_handle_t; typedef struct { int _u; } osal_sd_set_t; -/* ----------------------------------------------------------------------- - * TI CC13xx flash layout for CSMP OTA firmware management. - * These are shared by osal_ti_simplelink_wisun.c and ti_simplelink_wisun_tlvs.c. - * Defaults can be overridden at compile time with -D flags. - * ----------------------------------------------------------------------- */ #ifndef CSMP_TI_RUN_SLOT_ADDR #define CSMP_TI_RUN_SLOT_ADDR 0x00000000UL #endif #ifndef CSMP_TI_UPLOAD_SLOT_ADDR -#define CSMP_TI_UPLOAD_SLOT_ADDR 0x0005E000UL +#define CSMP_TI_UPLOAD_SLOT_ADDR 0x00000000UL #endif #ifndef CSMP_TI_BACKUP_SLOT_ADDR -#define CSMP_TI_BACKUP_SLOT_ADDR 0x00088000UL +#define CSMP_TI_BACKUP_SLOT_ADDR 0x00000000UL #endif #ifndef CSMP_TI_SLOT_MAX_SIZE -#define CSMP_TI_SLOT_MAX_SIZE (328UL * 1024UL) +#define CSMP_TI_SLOT_MAX_SIZE 0x000A8000UL #endif #ifndef CSMP_TI_FLASH_SECTOR_SIZE #define CSMP_TI_FLASH_SECTOR_SIZE 0x1000UL @@ -131,17 +114,6 @@ typedef struct { int _u; } osal_sd_set_t; #define CSMP_TI_NV_SLOTHDR_ITEM 0x01u #endif -/* ----------------------------------------------------------------------- - * External SPI flash (Off-Chip OAD secondary slot). - * - * TI's MCUBoot uses VERSION COMPARISON (ih_ver field) to decide whether to - * install the secondary slot — no trailer magic bytes are needed or written. - * Simply reboot after the download is complete; MCUBoot checks the version - * on every boot and installs if secondary.ih_ver > primary.ih_ver. - * - * The secondary slot lives entirely in external SPI flash (e.g. W25Q32FV). - * CSMP_TI_EXT_FLASH_SECTOR_SIZE: minimum erase granularity for W25Q32 = 4 KB. - * ----------------------------------------------------------------------- */ #define CSMP_TI_EXT_FLASH_SECTOR_SIZE 0x1000UL /* 4 KB erase unit on MX25R8035F */ /* Forward declaration — defined in osal_ti_simplelink_wisun.c, called from ti_simplelink_wisun_tlvs.c */ diff --git a/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c b/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c index 4eec146..6050eea 100644 --- a/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c +++ b/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c @@ -20,12 +20,9 @@ #include "mesh_system.h" #include "net_interface.h" -#include "nvocmp.h" +#include "nvocmp.h" #include "nvintf.h" -/* ------------------------------------------------------------------ - * Trickle timer — identical to osal_freertos.c, works on any FreeRTOS - * ------------------------------------------------------------------ */ struct trickle_timer { uint32_t t0, tfire, icur, imin, imax; @@ -36,7 +33,7 @@ struct trickle_timer #define __ret_freertos2posix(r) ((r) == pdPASS ? OSAL_SUCCESS : OSAL_FAILURE) extern uint8_t g_csmplib_eui64[8]; -extern NVINTF_nvFuncts_t *pNV; +extern NVINTF_nvFuncts_t *pNV; static struct trickle_timer timers[timer_num]; static trickle_timer_fired_t timer_fired[timer_num]; @@ -50,17 +47,26 @@ static void osal_alarm_fired_pend_fnc(void *p1, uint32_t p2); /* Time offset (int64_t to survive past 2038) */ int64_t g_ti_csmp_time_offset_sec = 0; -/* CoAP socket state*/ -#define CSMP_TI_RX_BUF_LEN 1280u -static SemaphoreHandle_t g_rx_sem = NULL; -static int8_t g_ns_sock = -1; -static uint8_t g_rx_buf[CSMP_TI_RX_BUF_LEN]; -static osal_sockaddr_t g_rx_src; -static int32_t g_rx_len = 0; +#define CSMP_TI_RX_BUF_LEN 1280u +#define CSMP_TI_CH_SERVER 0 /* CON/NON — server requests */ +#define CSMP_TI_CH_CLIENT 1 /* ACK/RST — client responses */ +#define CSMP_TI_CH_COUNT 2 +/* Socket handles: server uses the real nanostack fd; client uses fd+64 as a + * synthetic handle so osal_recvfrom can distinguish them via sockd>=64. */ +#define CSMP_TI_CLIENT_FD_OFFSET 64 + +static SemaphoreHandle_t g_rx_sem[CSMP_TI_CH_COUNT]; +static int8_t g_ns_sock = -1; +static uint8_t g_rx_buf[CSMP_TI_CH_COUNT][CSMP_TI_RX_BUF_LEN]; +static osal_sockaddr_t g_rx_src[CSMP_TI_CH_COUNT]; +static int32_t g_rx_len[CSMP_TI_CH_COUNT]; +/* Track how many times osal_socket() has been called to assign channels */ +static int g_sock_alloc_count = 0; /* Flash / NV constants are now in osal_platform_types.h */ /* ------------------------------------------------------------------ */ +/* Initialize trickle timers and per-channel receive semaphores before the RTOS scheduler runs */ void osal_kernel_start(void) { for (BaseType_t i = 0; i < (BaseType_t)timer_num; i++) @@ -73,14 +79,19 @@ void osal_kernel_start(void) assert(timers[i].timer != NULL); xTimerStop(timers[i].timer, 0); } - g_rx_sem = xSemaphoreCreateCounting(8u, 0u); - assert(g_rx_sem != NULL); + for (int ch = 0; ch < CSMP_TI_CH_COUNT; ch++) + { + g_rx_sem[ch] = xSemaphoreCreateCounting(8u, 0u); + assert(g_rx_sem[ch] != NULL); + } } +/* Create a FreeRTOS task wrapping the CSMP service thread entry point */ osal_basetype_t osal_task_create(osal_task_t *thread, const char *name, uint32_t priority, size_t stacksize, osal_task_fnc_t entry, void *arg) { + /* 1536 words (6KB) base stack. */ uint16_t words = (uint16_t)(1536u + stacksize / sizeof(StackType_t)); osal_basetype_t r = xTaskCreate(entry, name, words, arg, (UBaseType_t)(tskIDLE_PRIORITY + 1u + priority), @@ -89,16 +100,20 @@ osal_basetype_t osal_task_create(osal_task_t *thread, const char *name, return __ret_freertos2posix(r); } +/* Delete a running CSMP task by handle */ osal_basetype_t osal_task_cancel(osal_task_t t) { vTaskDelete((TaskHandle_t)t); return OSAL_SUCCESS; } -osal_basetype_t osal_task_setcanceltype(void) -{ - return OSAL_SUCCESS; + +/* No-op stub: FreeRTOS tasks do not support POSIX cancel types */ +osal_basetype_t osal_task_setcanceltype(void) +{ + return OSAL_SUCCESS; } +/* No-op stub: signal masks are not supported on this embedded target */ osal_basetype_t osal_task_sigmask(osal_basetype_t h, const osal_sigset_t *s, osal_sigset_t *o) { @@ -108,6 +123,7 @@ osal_basetype_t osal_task_sigmask(osal_basetype_t h, const osal_sigset_t *s, return OSAL_FAILURE; } +/* Create a FreeRTOS counting semaphore with an initial value */ osal_basetype_t osal_sem_create(osal_sem_t *s, uint16_t v) { if (!s) @@ -117,14 +133,20 @@ osal_basetype_t osal_sem_create(osal_sem_t *s, uint16_t v) *s = xSemaphoreCreateCounting(0xFFFFu, (UBaseType_t)v); return *s ? OSAL_SUCCESS : OSAL_FAILURE; } + +/* Signal a semaphore from task context */ osal_basetype_t osal_sem_post(osal_sem_t *s) { return s ? __ret_freertos2posix(xSemaphoreGive(*s)) : OSAL_FAILURE; } + +/* Block on a semaphore with a FreeRTOS tick timeout */ osal_basetype_t osal_sem_wait(osal_sem_t *s, osal_time_t t) { return s ? __ret_freertos2posix(xSemaphoreTake(*s, (TickType_t)t)) : OSAL_FAILURE; } + +/* Delete a semaphore and release its memory */ osal_basetype_t osal_sem_destroy(osal_sem_t *s) { if (s) @@ -134,11 +156,7 @@ osal_basetype_t osal_sem_destroy(osal_sem_t *s) return OSAL_SUCCESS; } -/* - * csmp_ns_socket_cb — Nanostack SOCKET_DATA callback. - * Runs in Nanostack event-loop task. That task holds its internal lock, - * so socket_recvfrom() must NOT re-acquire it here. - */ +/* Nanostack SOCKET_DATA callback: demux incoming CoAP packets to server or client channel */ static void csmp_ns_socket_cb(void *cb_ptr) { socket_callback_t *cb = (socket_callback_t *)cb_ptr; @@ -165,31 +183,54 @@ static void csmp_ns_socket_cb(void *cb_ptr) } return; } - g_rx_len = socket_recvfrom(cb->socket_id, g_rx_buf, CSMP_TI_RX_BUF_LEN, 0, &src); - if (g_rx_len <= 0) + /* Read into a temporary buffer so we can inspect the CoAP type before + * routing to the correct receive channel. */ + static uint8_t tmp[CSMP_TI_RX_BUF_LEN]; + int32_t rlen = socket_recvfrom(cb->socket_id, tmp, CSMP_TI_RX_BUF_LEN, 0, &src); + if (rlen <= 0) { return; } - g_rx_src.sin6_family = AF_INET6; - g_rx_src.sin6_port = htons(src.identifier); - memcpy(g_rx_src.sin6_addr.s6_addr, src.address, 16u); + /* CoAP type is in bits 4-5 of byte 0: + * 0=CON, 1=NON → server channel (inbound requests from FND) + * 2=ACK, 3=RST → client channel (responses to device's outgoing CON) */ + int ch = (rlen > 0 && ((tmp[0] >> 4) & 0x03) >= 2) ? CSMP_TI_CH_CLIENT : CSMP_TI_CH_SERVER; + g_rx_len[ch] = rlen; + memcpy(g_rx_buf[ch], tmp, (size_t)rlen); + g_rx_src[ch].sin6_family = AF_INET6; + g_rx_src[ch].sin6_port = htons(src.identifier); + memcpy(g_rx_src[ch].sin6_addr.s6_addr, src.address, 16u); BaseType_t w = pdFALSE; - xSemaphoreGiveFromISR(g_rx_sem, &w); + xSemaphoreGiveFromISR(g_rx_sem[ch], &w); portYIELD_FROM_ISR(w); } +/* Open (or return a synthetic handle for) the UDP socket used by CSMP CoAP */ osal_socket_handle_t osal_socket(osal_basetype_t d, osal_basetype_t t, osal_basetype_t p) { (void)d; (void)t; (void)p; - nanostack_lock(); - g_ns_sock = socket_open(SOCKET_UDP, 0, csmp_ns_socket_cb); - nanostack_unlock(); - DPRINTF("osal_socket: sock=%d (%s)\n", (int)g_ns_sock, g_ns_sock >= 0 ? "OK" : "FAIL"); - return (osal_socket_handle_t)g_ns_sock; + if (g_sock_alloc_count == 0) + { + /* First call: coapserver_listen() — open the real nanostack socket. */ + nanostack_lock(); + g_ns_sock = socket_open(SOCKET_UDP, 0, csmp_ns_socket_cb); + nanostack_unlock(); + g_sock_alloc_count = 1; + DPRINTF("osal_socket: server sock=%d\n", (int)g_ns_sock); + return (osal_socket_handle_t)g_ns_sock; + } + else + { + g_sock_alloc_count++; + DPRINTF("osal_socket: client sock=%d (synthetic)\n", + (int)(g_ns_sock + CSMP_TI_CLIENT_FD_OFFSET)); + return (osal_socket_handle_t)(g_ns_sock + CSMP_TI_CLIENT_FD_OFFSET); + } } +/* Bind the nanostack UDP socket to the CoAP port */ osal_basetype_t osal_bind(osal_socket_handle_t sockd, osal_sockaddr_t *addr, osal_socklen_t addrlen) { (void)addrlen; @@ -204,26 +245,31 @@ osal_basetype_t osal_bind(osal_socket_handle_t sockd, osal_sockaddr_t *addr, osa return r == 0 ? OSAL_SUCCESS : OSAL_FAILURE; } +/* Block until a CoAP packet arrives on the correct channel and copy it to the caller's buffer */ osal_ssize_t osal_recvfrom(osal_socket_handle_t sockd, void *buf, size_t len, osal_basetype_t flags, osal_sockaddr_t *src_addr, osal_socklen_t *addrlen) { - (void)sockd; (void)flags; - xSemaphoreTake(g_rx_sem, portMAX_DELAY); - int32_t n = (g_rx_len < (int32_t)len) ? g_rx_len : (int32_t)len; - memcpy(buf, g_rx_buf, (size_t)n); + /* Select channel: server handle (real fd) → channel 0 (CON/NON), + * client handle (fd + CSMP_TI_CLIENT_FD_OFFSET) → channel 1 (ACK/RST). */ + int ch = ((int)sockd >= (int)(g_ns_sock + CSMP_TI_CLIENT_FD_OFFSET)) + ? CSMP_TI_CH_CLIENT : CSMP_TI_CH_SERVER; + xSemaphoreTake(g_rx_sem[ch], portMAX_DELAY); + int32_t n = (g_rx_len[ch] < (int32_t)len) ? g_rx_len[ch] : (int32_t)len; + memcpy(buf, g_rx_buf[ch], (size_t)n); if (src_addr) { - memcpy(src_addr, &g_rx_src, sizeof(g_rx_src)); + memcpy(src_addr, &g_rx_src[ch], sizeof(g_rx_src[ch])); if (addrlen) { - *addrlen = (osal_socklen_t)sizeof(g_rx_src); + *addrlen = (osal_socklen_t)sizeof(g_rx_src[ch]); } } return (osal_ssize_t)n; } +/* Send a CoAP packet over the nanostack UDP socket, stripping the synthetic client offset */ osal_ssize_t osal_sendto(osal_socket_handle_t sockd, const void *buf, size_t len, osal_basetype_t flags, const osal_sockaddr_t *dest, osal_socklen_t addrlen) @@ -235,18 +281,28 @@ osal_ssize_t osal_sendto(osal_socket_handle_t sockd, const void *buf, size_t len d.identifier = ntohs(dest->sin6_port); memcpy(d.address, dest->sin6_addr.s6_addr, 16u); + /* Strip the client channel offset — always send on the real nanostack socket. */ + int8_t real_fd = (int8_t)(((int)sockd >= (int)(g_ns_sock + CSMP_TI_CLIENT_FD_OFFSET)) + ? g_ns_sock : (int8_t)sockd); DPRINTF("osal_sendto: PRE-DELAY sock=%d len=%u dst_port=%u\n", - (int)sockd, (unsigned)len, (unsigned)d.identifier); - vTaskDelay(pdMS_TO_TICKS(50)); - DPRINTF("osal_sendto: POST-DELAY calling socket_sendto\n"); + (int)real_fd, (unsigned)len, (unsigned)d.identifier); - int16_t r = socket_sendto((int8_t)sockd, &d, (void *)buf, (uint16_t)len); - DPRINTF("osal_sendto: socket_sendto returned r=%d\n", (int)r); + vTaskDelay(pdMS_TO_TICKS(10)); + DPRINTF("osal_sendto: POST-DELAY calling socket_sendto\n"); - DPRINTF("osal_sendto: sock=%d len=%u rv=%d\n", (int)sockd, (unsigned)len, (int)r); + int16_t r = socket_sendto(real_fd, &d, (void *)buf, (uint16_t)len); + /* TI NSS socket_sendto returns 0 on success (not byte count like POSIX). + * Return len on success so callers get the expected positive byte count. */ + if (r == 0) + { + DPRINTF("osal_sendto: sock=%d len=%u OK\n", (int)sockd, (unsigned)len); + return (osal_ssize_t)len; + } + DPRINTF("osal_sendto: sock=%d len=%u FAILED r=%d\n", (int)sockd, (unsigned)len, (int)r); return (osal_ssize_t)r; } +/* Scatter-gather send: forwards the first iov buffer via osal_sendto */ osal_ssize_t osal_sendmsg(osal_socket_handle_t sockd, const struct msghdr msg, osal_basetype_t flags) { @@ -259,12 +315,14 @@ osal_ssize_t osal_sendmsg(osal_socket_handle_t sockd, const struct msghdr msg, (osal_socklen_t)msg.msg_namelen); } +/* Convert a text IPv6 address string to a binary in6_addr using the Nanostack ip6string helper */ osal_basetype_t osal_inet_pton(osal_basetype_t af, const char *src, void *dst) { (void)af; return stoip6(src, strlen(src), dst) ? 1 : 0; } +/* No-op stub: socket readiness is always assumed available on this target */ osal_basetype_t osal_select(osal_basetype_t n, osal_sd_set_t *r, osal_sd_set_t *w, osal_sd_set_t *e, struct timeval *t) @@ -277,6 +335,7 @@ osal_basetype_t osal_select(osal_basetype_t n, osal_sd_set_t *r, return 1; } +/* Zero-fill a sockaddr and set family and port, leaving the address as the wildcard */ void osal_update_sockaddr(osal_sockaddr_t *a, uint16_t p) { memset(a, 0, sizeof(*a)); @@ -285,6 +344,7 @@ void osal_update_sockaddr(osal_sockaddr_t *a, uint16_t p) a->sin6_port = htons(p); } +/* Print an IPv6 address and port in bracket notation via DPRINTF */ void osal_print_formatted_ip(const osal_sockaddr_t *s) { DPRINTF("[%x:%x:%x:%x:%x:%x:%x:%x]:%hu\n", @@ -299,6 +359,7 @@ void osal_print_formatted_ip(const osal_sockaddr_t *s) ntohs(s->sin6_port)); } +/* Return wall-clock time derived from ClockP ticks plus the stored epoch offset */ osal_basetype_t osal_gettime(struct timeval *tv, struct timezone *tz) { (void)tz; @@ -311,6 +372,7 @@ osal_basetype_t osal_gettime(struct timeval *tv, struct timezone *tz) return OSAL_SUCCESS; } +/* Set the epoch offset so that osal_gettime matches the NMS-provided wall-clock time */ osal_basetype_t osal_settime(struct timeval *tv, struct timezone *tz) { (void)tz; @@ -325,12 +387,15 @@ osal_basetype_t osal_settime(struct timeval *tv, struct timezone *tz) } /* Signals — no-op on embedded */ +/* No-op stub: signal delivery is not supported on this embedded target */ osal_sighandler_t osal_signal(osal_basetype_t n, osal_sighandler_t h) { (void)n; (void)h; return NULL; } + +/* No-op stub: process signal masks are not applicable on FreeRTOS */ osal_basetype_t osal_sigprocmask(osal_basetype_t h, const osal_sigset_t *s, osal_sigset_t *o) { (void)h; @@ -338,11 +403,15 @@ osal_basetype_t osal_sigprocmask(osal_basetype_t h, const osal_sigset_t *s, osal (void)o; return OSAL_FAILURE; } + +/* No-op stub: signal sets are not used on this embedded target */ osal_basetype_t osal_sigemptyset(osal_sigset_t *s) { (void)s; return OSAL_FAILURE; } + +/* No-op stub: signal sets are not used on this embedded target */ osal_basetype_t osal_sigaddset(osal_sigset_t *s, osal_basetype_t n) { (void)s; @@ -350,12 +419,15 @@ osal_basetype_t osal_sigaddset(osal_sigset_t *s, osal_basetype_t n) return OSAL_FAILURE; } -/* Trickle timers — copied verbatim from osal_freertos.c */ +/* Start a trickle timer with the given imin/imax interval bounds and fire callback */ void osal_trickle_timer_start(osal_timerid_t timerid, uint32_t imin, uint32_t imax, trickle_timer_fired_t cb) { uint32_t min; struct timeval tv = {0}; + /* Guard: imin=0 means "no periodic reporting" — rand() % 0 is UB. */ + if (imin == 0) + return; if (!m_timert_isrunning) { m_timert_isrunning = true; @@ -369,11 +441,13 @@ void osal_trickle_timer_start(osal_timerid_t timerid, uint32_t imin, uint32_t im timers[timerid].is_running = true; timer_fired[timerid] = cb; min = timers[timerid].icur >> 1; - timers[timerid].tfire = timers[timerid].t0 + min + (uint32_t)(rand() % (timers[timerid].icur - min)); + timers[timerid].tfire = timers[timerid].t0 + min + + (uint32_t)(rand() % (timers[timerid].icur - min)); xTimerStart(timers[timerid].timer, 0); osal_update_timer(); } +/* Stop a trickle timer and disable the global running flag if all timers are idle */ void osal_trickle_timer_stop(osal_timerid_t timerid) { timers[timerid].is_running = false; @@ -384,10 +458,16 @@ void osal_trickle_timer_stop(osal_timerid_t timerid) xTimerStop(timers[timerid].timer, 0); } +/* Allocate heap memory from the FreeRTOS heap */ void *osal_malloc(size_t n) { return pvPortMalloc(n); } + +/* Free memory back to the FreeRTOS heap */ void osal_free(void *p) { vPortFree(p); } + +/* Suspend the calling task for the given number of milliseconds */ void osal_sleep_ms(uint64_t ms) { vTaskDelay(pdMS_TO_TICKS((uint32_t)ms)); } +/* FreeRTOS stack-overflow hook: log the offending task name and halt */ void vApplicationStackOverflowHook(TaskHandle_t t, char *n) { (void)t; @@ -397,18 +477,17 @@ void vApplicationStackOverflowHook(TaskHandle_t t, char *n) } } +/* Reboot the SoC via SysCtrl after suspending all tasks */ osal_basetype_t osal_system_reboot(struct in6_addr *NMSaddr) { (void)NMSaddr; DPRINTF("osal_system_reboot\n"); + vTaskSuspendAll(); SysCtrlSystemReset(); - return OSAL_SUCCESS; /* unreachable */ + return OSAL_SUCCESS; } -/* ------------------------------------------------------------------ - * OTA OSAL functions — internal flash and NVOCMP slot headers. - * ------------------------------------------------------------------ */ - +/* Read an OTA slot header from NVOCMP persistent storage */ osal_basetype_t osal_read_slothdr(uint8_t slotid, Csmp_Slothdr *slot) { if (!pNV || !pNV->readItem || !slot) @@ -431,6 +510,7 @@ osal_basetype_t osal_read_slothdr(uint8_t slotid, Csmp_Slothdr *slot) return OSAL_SUCCESS; } +/* Write (or create) an OTA slot header in NVOCMP persistent storage */ osal_basetype_t osal_write_slothdr(uint8_t slotid, Csmp_Slothdr *slot) { if (!pNV || !slot) @@ -463,15 +543,7 @@ osal_basetype_t osal_write_slothdr(uint8_t slotid, Csmp_Slothdr *slot) return OSAL_SUCCESS; } -/* ------------------------------------------------------------------ - * Off-Chip OAD flash helpers — external SPI flash (MX25R8035F) via NVS driver (NVSSPI25X). - * - * UPLOAD_IMAGE slot lives entirely in external flash at offset 0x0. - * RUN_IMAGE is memory-mapped internal flash — read via memcpy, never erased here. - * BACKUP_IMAGE: not used — MCUBoot handles rollback natively via version comparison. - * ------------------------------------------------------------------ */ - -/** Erase the external flash secondary slot (UPLOAD_IMAGE only). */ +/* Erase the external SPI flash secondary slot to prepare it for an OTA image upload */ osal_basetype_t ti_flash_erase_slot(uint8_t slotid) { if (slotid != UPLOAD_IMAGE) @@ -502,6 +574,7 @@ osal_basetype_t ti_flash_erase_slot(uint8_t slotid) return OSAL_SUCCESS; } +/* Read firmware bytes from internal flash (RUN_IMAGE) or external SPI flash (UPLOAD_IMAGE) */ osal_basetype_t osal_read_firmware(uint8_t slotid, uint8_t *data, uint32_t size) { if (data == NULL || size > CSMP_TI_SLOT_MAX_SIZE) @@ -528,6 +601,7 @@ osal_basetype_t osal_read_firmware(uint8_t slotid, uint8_t *data, uint32_t size) return OSAL_FAILURE; } +/* Write a firmware chunk to the external SPI flash UPLOAD_IMAGE slot */ osal_basetype_t osal_write_firmware(uint8_t slotid, uint8_t *data, uint32_t size) { if (slotid != UPLOAD_IMAGE || data == NULL || size > CSMP_TI_SLOT_MAX_SIZE) @@ -544,17 +618,17 @@ osal_basetype_t osal_write_firmware(uint8_t slotid, uint8_t *data, uint32_t size return (r == NVS_STATUS_SUCCESS) ? OSAL_SUCCESS : OSAL_FAILURE; } +/* No-op: MCUBoot handles firmware rollback natively; SetBackupRequest (TLV 70) is accepted but ignored */ osal_basetype_t osal_copy_firmware(uint8_t src_slotid, uint8_t dst_slotid, Csmp_Slothdr *slots) { - /* With MCUBoot, rollback is handled by the bootloader automatically. - * SetBackupRequest (TLV 70) from FND is accepted but is a no-op here. */ (void)src_slotid; (void)dst_slotid; (void)slots; DPRINTF("osal_copy_firmware: no-op — MCUBoot handles rollback natively\n"); return OSAL_SUCCESS; } /* Internal trickle helpers — identical to osal_freertos.c */ +/* Recalculate the nearest trickle fire time and reschedule the FreeRTOS timer accordingly */ static void osal_update_timer(void) { struct timeval tv = {0}; @@ -584,6 +658,7 @@ static void osal_update_timer(void) } } +/* FreeRTOS timer callback: fire expired trickle timers and advance their intervals */ static void osal_alarm_fired(TimerHandle_t t) { (void)t; @@ -613,9 +688,10 @@ static void osal_alarm_fired(TimerHandle_t t) osal_update_timer(); } +/* Timer daemon trampoline: invokes osal_alarm_fired from the FreeRTOS timer task context */ static void osal_alarm_fired_pend_fnc(void *p1, uint32_t p2) { (void)p1; (void)p2; osal_alarm_fired(NULL); -} \ No newline at end of file +} diff --git a/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak b/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak index 778201c..2e529d2 100644 --- a/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak +++ b/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak @@ -18,21 +18,25 @@ DEVICE_FAMILY ?= CC13X4 ifeq ($(DEVICE_FAMILY),CC13X4) C_DEFS += -DDeviceFamily_CC13X4 + C_FLAGS += -mcpu=cortex-m33 -mfloat-abi=hard -mfpu=fpv5-sp-d16 DEVICE_DIR = cc13x4_cc26x4 FREERTOS_PORT = ARM_CM33/non_secure FREERTOS_CFG = cc13x4_cc26x4 else ifeq ($(DEVICE_FAMILY),CC13X2X7) C_DEFS += -DDeviceFamily_CC13X2X7 + C_FLAGS += -mcpu=cortex-m4 -march=armv7e-m -mfloat-abi=hard -mfpu=fpv4-sp-d16 DEVICE_DIR = cc13x2x7_cc26x2x7 FREERTOS_PORT = ARM_CM4F FREERTOS_CFG = cc13x2x7_cc26x2x7 else ifeq ($(DEVICE_FAMILY),CC13X2) C_DEFS += -DDeviceFamily_CC13X2 + C_FLAGS += -mcpu=cortex-m4 -march=armv7e-m -mfloat-abi=hard -mfpu=fpv4-sp-d16 DEVICE_DIR = cc13x2_cc26x2 FREERTOS_PORT = ARM_CM4F FREERTOS_CFG = cc13x2_cc26x2 else ifeq ($(DEVICE_FAMILY),CC13X1) C_DEFS += -DDeviceFamily_CC13X1 + C_FLAGS += -mcpu=cortex-m4 -march=armv7e-m -mfloat-abi=hard -mfpu=fpv4-sp-d16 DEVICE_DIR = cc13x1_cc26x1 FREERTOS_PORT = ARM_CM4F FREERTOS_CFG = cc13x1_cc26x1 diff --git a/sample/ti_simplelink_wisun.target b/sample/ti_simplelink_wisun.target new file mode 100644 index 0000000..f62c6b4 --- /dev/null +++ b/sample/ti_simplelink_wisun.target @@ -0,0 +1,97 @@ +#################################################################### +# TI Wi-SUN FAN — board example build target # +# # +# Loops over all boards in Vendors/TI/ and builds each board's # +# csmp_example_tirf firmware using the pre-built library. # +# # +# SETUP (two steps before running build.sh): # +# # +# 1. Set SIMPLELINK_SDK_LINUX below to your SimpleLink SDK path. # +# # +# 2. Edit $(SDK)/imports.mak to set: # +# SYSCONFIG_TOOL — path to sysconfig_cli.sh # +# TICLANG_ARMCOMPILER — path to ti-cgt-armllvm_x.x.x # +# (TI recommends editing imports.mak once per machine.) # +# # +# No other repositories are required. # +#################################################################### +.PHONY: all ti_simplelink_wisun clean + +TOPDIR := $(abspath ..) + +# ----------------------------------------------------------------------- +# TI SimpleLink CC13xx/CC26xx SDK — edit the path for your installation. +# All Wi-SUN stack sources, NV driver, RF driver, and device headers +# are taken from this single SDK. No other SDKs are needed. +# ----------------------------------------------------------------------- +SIMPLELINK_SDK_WIN = +SIMPLELINK_SDK_OSX = +SIMPLELINK_SDK_LINUX = /home/labuser/ti/simplelink_cc13xx_cc26xx_sdk_8_32_00_07 + +ifeq ($(OS),Windows_NT) + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= $(SIMPLELINK_SDK_WIN) +else + UNAME_S := $(shell uname -s) + ifeq ($(UNAME_S),Darwin) + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= $(SIMPLELINK_SDK_OSX) + else + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR ?= $(SIMPLELINK_SDK_LINUX) + endif +endif + +# ----------------------------------------------------------------------- +# Pull SYSCONFIG_TOOL and TICLANG_ARMCOMPILER from the SDK's imports.mak. +# Edit that file once to point to your local SysConfig and compiler. +# Standalone install paths on this machine (set in the SDK's imports.mak): +# SYSCONFIG_TOOL ?= /home/labuser/ti/sysconfig_1.21.1/sysconfig_cli.sh +# TICLANG_ARMCOMPILER ?= /home/labuser/ti/ti_cgt_tiarmclang_3.2.2.LTS/ti-cgt-armllvm_3.2.2.LTS +# ----------------------------------------------------------------------- +-include $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/imports.mak + +# ----------------------------------------------------------------------- +# Build configuration — override on the command line if needed +# RELEASE (default) produces .hex only +# SECUREBOOT produces .hex + MCUBoot-signed .bin +# Usage: ./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT +# ----------------------------------------------------------------------- +CONFIG ?= RELEASE + +# ----------------------------------------------------------------------- +# Board discovery — no changes needed below this line +# ----------------------------------------------------------------------- +BOARD_DIRS := $(wildcard $(TOPDIR)/Vendors/TI/*/csmp_example_tirf/freertos/ticlang/) + +all: ti_simplelink_wisun + +ti_simplelink_wisun: +ifeq ($(strip $(BOARD_DIRS)),) + @echo "" + @echo "TI Wi-SUN FAN — no boards found in Vendors/TI/" + @echo "" + @echo "Library csmp_agent_lib_ti_simplelink_wisun.a was built successfully." +else + @echo "Building TI Wi-SUN FAN board examples..." + @$(foreach dir, $(BOARD_DIRS), \ + echo "--- Building: $(dir) ---"; \ + $(MAKE) -C $(dir) \ + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR="$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)" \ + CSMP_AGENT_LIB_INSTALL_DIR="$(TOPDIR)" \ + SYSCONFIG_TOOL="$(SYSCONFIG_TOOL)" \ + CC="$(TICLANG_ARMCOMPILER)/bin/tiarmclang" \ + LNK="$(TICLANG_ARMCOMPILER)/bin/tiarmclang" \ + HEX="$(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy" \ + CONFIG="$(CONFIG)" || exit 1; \ + ) + @echo "" + @echo "All boards built. Output .hex files:" + @$(foreach dir, $(BOARD_DIRS), \ + ls $(dir)*.hex 2>/dev/null; \ + ) +endif + +clean: + @$(foreach dir, $(BOARD_DIRS), \ + $(MAKE) -C $(dir) clean \ + SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR="$(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)" \ + 2>/dev/null; \ + ) diff --git a/sample/tlvs/ti_simplelink_wisun_tlvs.c b/sample/tlvs/ti_simplelink_wisun_tlvs.c index a85af5d..823eda2 100644 --- a/sample/tlvs/ti_simplelink_wisun_tlvs.c +++ b/sample/tlvs/ti_simplelink_wisun_tlvs.c @@ -19,11 +19,10 @@ #include "6LoWPAN/ws/ws_cfg_settings.h" #include "6LoWPAN/ws/ws_bootstrap.h" #include "ws_management_api.h" -/* DeviceFamily.h must precede any DeviceFamily_constructPath() usage */ #include #include DeviceFamily_constructPath(driverlib/sys_ctrl.h) #include /* CONFIG_NVSEXTERNAL */ -#include /* Off-Chip OAD secondary slot via NVSSPI25X */ +#include /* Off-Chip OAD secondary slot */ /* ---- Global TLV structs ---- */ Hardware_Desc g_hardwareDesc = HARDWARE_DESC_INIT; @@ -71,6 +70,9 @@ extern int8_t interface_id; /* set by application.c after Wi-SUN join */ extern volatile bool connectedFlg; extern int64_t g_ti_csmp_time_offset_sec; +/* Hardware ID reported to FND in TLV75 — must match hw_info in FND device meta file */ +#define TI_WISUN_HWID "CC13XX" + /* ---- pubkey_get — binary key, no null terminator ---- */ #define PUBLIC_KEY_LEN 65 static const char pubkey[PUBLIC_KEY_LEN] = { @@ -79,63 +81,51 @@ static const char pubkey[PUBLIC_KEY_LEN] = { 0xC4, 0x81, 0x19, 0xB0, 0xE6, 0x60, 0xB8, 0x64, 0x14, 0x01, 0x5D, 0x56, 0x83, 0xBE, 0xE1, 0x85, 0x98, 0xCB, 0x90, 0xE1, 0xF7, 0x9B, 0xF4, 0x33, 0x5A, 0x4B, 0x29, 0xAD, 0x35, 0x69, 0x9B, 0x4F, 0xDC, 0x42, 0x7F, 0xEB, 0xC2, 0x99, 0xA5}; + +/* Copies the static ECDSA public key bytes into the caller-supplied buffer. */ void pubkey_get(char *key) { memcpy(key, pubkey, PUBLIC_KEY_LEN); } +/* Populates and returns the hardware descriptor TLV with board identity and firmware revision. */ void *hardware_desc_get(uint32_t *num) { *num = 1; g_hardwareDesc.has_entphysicalindex = true; g_hardwareDesc.entphysicalindex = 1; g_hardwareDesc.has_entphysicaldescr = true; - snprintf(g_hardwareDesc.entphysicaldescr, sizeof(g_hardwareDesc.entphysicaldescr), "TI CC13xx Wi-SUN FAN Router Node"); - g_hardwareDesc.has_entphysicalclass = true; g_hardwareDesc.entphysicalclass = CLASS_MODULE; g_hardwareDesc.has_entphysicalname = true; - snprintf(g_hardwareDesc.entphysicalname, sizeof(g_hardwareDesc.entphysicalname), "wisun0"); - g_hardwareDesc.has_entphysicalhardwarerev = true; - snprintf(g_hardwareDesc.entphysicalhardwarerev, sizeof(g_hardwareDesc.entphysicalhardwarerev), "1.0"); - g_hardwareDesc.has_entphysicalfirmwarerev = true; - memcpy(g_hardwareDesc.entphysicalfirmwarerev, g_slothdr[RUN_IMAGE].version, sizeof(g_hardwareDesc.entphysicalfirmwarerev)); - g_hardwareDesc.has_entphysicalserialnum = true; - snprintf(g_hardwareDesc.entphysicalserialnum, sizeof(g_hardwareDesc.entphysicalserialnum), "%02X%02X%02X%02X%02X%02X%02X%02X", g_eui64[0], g_eui64[1], g_eui64[2], g_eui64[3], g_eui64[4], g_eui64[5], g_eui64[6], g_eui64[7]); - g_hardwareDesc.has_entphysicalmfgname = true; - snprintf(g_hardwareDesc.entphysicalmfgname, sizeof(g_hardwareDesc.entphysicalmfgname), "Texas Instruments"); - g_hardwareDesc.has_entphysicalmodelname = true; - snprintf(g_hardwareDesc.entphysicalmodelname, sizeof(g_hardwareDesc.entphysicalmodelname), "CC13xx"); - g_hardwareDesc.has_entphysicalfunction = true; g_hardwareDesc.entphysicalfunction = FUNCTION_RE; - return &g_hardwareDesc; } +/* Populates and returns the interface descriptor TLV for the Wi-SUN lowpan interface. */ void *interface_desc_get(uint32_t *num) { *num = 1; memset(g_interfaceDesc, 0, sizeof(g_interfaceDesc)); - /* Wi-SUN only — FND NPEs when an interface has no matching IPAddress entry */ g_interfaceDesc[0].has_ifindex = true; - g_interfaceDesc[0].ifindex = 2; + g_interfaceDesc[0].ifindex = 1; g_interfaceDesc[0].has_ifname = true; - snprintf(g_interfaceDesc[0].ifname, sizeof(g_interfaceDesc[0].ifname), "wisun0"); + snprintf(g_interfaceDesc[0].ifname, sizeof(g_interfaceDesc[0].ifname), "lowpan"); g_interfaceDesc[0].has_ifdescr = true; snprintf(g_interfaceDesc[0].ifdescr, sizeof(g_interfaceDesc[0].ifdescr), "IEEE 802.15.4 Wi-SUN FAN"); g_interfaceDesc[0].has_iftype = true; @@ -146,15 +136,13 @@ void *interface_desc_get(uint32_t *num) return g_interfaceDesc; } +/* Reads the global unicast IPv6 address from the stack and returns the IP address TLV. */ void *ipaddress_get(uint32_t *num) { uint8_t addr[16]; uint32_t cnt = 0; memset(g_ipAddress, 0, sizeof(g_ipAddress)); nanostack_lock(); - /* Report GUA only — Cisco FND NPEs when processing link-local (fe80) because - * FND has no managed network context for link-local space. Cisco guidance - * explicitly requires "the same GUA" in TLV16. */ if (interface_id >= 0 && arm_net_address_get(interface_id, ADDR_IPV6_GP, addr) == 0) { g_ipAddress[cnt].has_ipaddressindex = true; @@ -165,13 +153,8 @@ void *ipaddress_get(uint32_t *num) g_ipAddress[cnt].ipaddressaddr.len = 16u; memcpy(g_ipAddress[cnt].ipaddressaddr.data, addr, 16u); g_ipAddress[cnt].has_ipaddressifindex = true; - g_ipAddress[cnt].ipaddressifindex = 2; + g_ipAddress[cnt].ipaddressifindex = 1; g_ipAddress[cnt].has_ipaddresstype = true; - g_ipAddress[cnt].ipaddresstype = UNICAST; - /* ip_origin_t has a gap (no value 3): DHCP=4, LINKLAYER=5. - * RFC 4293 maps: dhcp=3, linklayer=4, random=5. - * FND follows RFC 4293: our LINKLAYER(5) looks like "random" to FND. - * Send DHCP(4) which equals RFC 4293 linklayer(4) for an EUI-64 GUA. */ g_ipAddress[cnt].has_ipaddressorigin = true; g_ipAddress[cnt].ipaddressorigin = DHCP; g_ipAddress[cnt].has_ipaddressstatus = true; @@ -185,18 +168,18 @@ void *ipaddress_get(uint32_t *num) return (cnt > 0) ? g_ipAddress : NULL; } -/* Discover the first active RPL instance and read its DODAG info. - * Must be called while holding the nanostack lock. - * Returns 1 on success, 0 on failure — same semantics as rpl_read_dodag_info. */ +/* Reads DODAG info for the first RPL instance found on the interface. */ static uint8_t rpl_read_dodag_info_auto(rpl_dodag_info_t *dodag_ptr) { uint8_t buf[8]; uint8_t cnt = rpl_instance_list_read(buf, sizeof(buf)); - if (cnt == 0) + if (cnt == 0){ return 0u; + } return rpl_read_dodag_info(dodag_ptr, buf[0]); } +/* Populates and returns the IP route TLV using the RPL primary parent as next-hop. */ void *iproute_get(uint32_t *num) { *num = 1; @@ -210,7 +193,7 @@ void *iproute_get(uint32_t *num) g_ipRoute.has_inetcidrroutepfxlen = true; g_ipRoute.inetcidrroutepfxlen = 0u; g_ipRoute.has_inetcidrrouteifindex = true; - g_ipRoute.inetcidrrouteifindex = 2; + g_ipRoute.inetcidrrouteifindex = 1; g_ipRoute.has_inetcidrroutenexthoptype = true; g_ipRoute.has_inetcidrroutenexthop = true; g_ipRoute.inetcidrroutenexthop.len = 16u; @@ -218,8 +201,7 @@ void *iproute_get(uint32_t *num) nanostack_lock(); int rpl_ret = rpl_read_dodag_info_auto(&info); nanostack_unlock(); - /* parent_flags is an enum value: RPL_ROOT_PARENT=0, RPL_PRIMARY_PARENT_SET=1, - * RPL_SECONDARY_PARENT_SET=2. Any non-zero value means primary_parent is valid. */ + if (rpl_ret != 0 && info.parent_flags != RPL_ROOT_PARENT) { g_ipRoute.inetcidrroutenexthoptype = IPV6; @@ -233,6 +215,7 @@ void *iproute_get(uint32_t *num) return &g_ipRoute; } +/* Returns the current POSIX time as a Current_Time TLV. */ void *currenttime_get(uint32_t *num) { struct timeval tv = {0}; @@ -244,6 +227,7 @@ void *currenttime_get(uint32_t *num) return &g_currentTime; } +/* Sets the system clock from the POSIX timestamp in a received Current_Time TLV. */ void currenttime_post(Current_Time *tlv) { struct timeval tv = {0}; @@ -254,6 +238,7 @@ void currenttime_post(Current_Time *tlv) } } +/* Returns the elapsed uptime in seconds since Wi-SUN join as an Up_Time TLV. */ void *uptime_get(uint32_t *num) { *num = 1; @@ -262,10 +247,15 @@ void *uptime_get(uint32_t *num) uint32_t us_pt = ClockP_getSystemTickPeriod(); uint32_t now_s = (uint32_t)(((uint64_t)ticks * us_pt) / 1000000ULL); g_upTime.has_sysuptime = true; - g_upTime.sysuptime = now_s - g_init_time; /* g_init_time in seconds */ + g_upTime.sysuptime = now_s - g_init_time; return &g_upTime; } +#ifndef WISUN_FAN_LINK_RATE_BPS +#define WISUN_FAN_LINK_RATE_BPS 150000UL +#endif + +/* Populates and returns interface metrics TLV with NanoStack counters and link rate. */ void *interface_metrics_get(uint32_t *num) { *num = 1; @@ -275,7 +265,11 @@ void *interface_metrics_get(uint32_t *num) protocol_stats_start(&s); nanostack_unlock(); g_interfaceMetrics[0].has_ifindex = true; - g_interfaceMetrics[0].ifindex = 2; /* fixed: must match interfaceDesc[1].ifindex = 2 */ + g_interfaceMetrics[0].ifindex = 1; + g_interfaceMetrics[0].has_ifinspeed = true; + g_interfaceMetrics[0].ifinspeed = WISUN_FAN_LINK_RATE_BPS; + g_interfaceMetrics[0].has_ifoutspeed = true; + g_interfaceMetrics[0].ifoutspeed = WISUN_FAN_LINK_RATE_BPS; g_interfaceMetrics[0].has_ifadminstatus = true; g_interfaceMetrics[0].ifadminstatus = IF_ADMIN_STATUS_UP; g_interfaceMetrics[0].has_ifoperstatus = true; @@ -286,16 +280,17 @@ void *interface_metrics_get(uint32_t *num) g_interfaceMetrics[0].ifoutoctets = s.ip_tx_bytes; g_interfaceMetrics[0].has_ifindiscards = true; g_interfaceMetrics[0].ifindiscards = s.ip_rx_drop + s.frag_rx_errors; + g_interfaceMetrics[0].has_ifoutdiscards = true; + g_interfaceMetrics[0].ifoutdiscards = s.adapt_layer_tx_congestion_drop; g_interfaceMetrics[0].has_ifouterrors = true; - g_interfaceMetrics[0].ifouterrors = s.ip_no_route + s.adapt_layer_tx_congestion_drop + s.frag_tx_errors; + g_interfaceMetrics[0].ifouterrors = s.ip_no_route + s.frag_tx_errors; return g_interfaceMetrics; } -/* Cache last valid RPL metrics so FND sees stable values during RPL re-convergence - * (Poison count events briefly set rank=0xFFFF, which would send empty/wrong data). */ static IPRoute_RPLMetrics g_iprouteRplmetrics_cache = IPROUTE_RPLMETRICS_INIT; static bool g_iprouteRplmetrics_valid = false; +/* Populates and returns the RPL routing metrics TLV including rank, ETX, hop count, and RSSI. */ void *iproute_rplmetrics_get(uint32_t *num) { *num = 1; @@ -329,7 +324,6 @@ void *iproute_rplmetrics_get(uint32_t *num) return g_iprouteRplmetrics_valid ? &g_iprouteRplmetrics_cache : &g_iprouteRplmetrics; } - /* Count direct neighbors for dagSize */ uint32_t parent_cnt = 0u, child_cnt = 0u; uint16_t primary_etx = 0xFFFFu; for (int i = 0; i < nbr_cnt; i++) @@ -353,37 +347,29 @@ void *iproute_rplmetrics_get(uint32_t *num) g_iprouteRplmetrics.has_dagsize = true; g_iprouteRplmetrics.dagsize = parent_cnt + child_cnt + 1u; - /* dag_min_hop_rank_inc = MinHopRankIncrease (128 in Wi-SUN). Root rank equals this - * value, so hops from root = (rank / mhri) - 1. */ { uint16_t mhri = (info.dag_min_hop_rank_inc > 0u) ? info.dag_min_hop_rank_inc : 128u; uint32_t rank_steps = (uint32_t)(info.curent_rank / mhri); g_iprouteRplmetrics.has_hops = true; g_iprouteRplmetrics.hops = (rank_steps > 1u) ? (rank_steps - 1u) : 0u; - /* pathetx: use actual measured routing cost (ETX to border router) from ws_stack_info - * when available — more accurate than rank-based approximation. */ g_iprouteRplmetrics.has_pathetx = true; - if (ws_info.routing_cost > 0u && ws_info.routing_cost != 0xFFFFu) + if (ws_info.routing_cost > 0u && ws_info.routing_cost != 0xFFFFu){ g_iprouteRplmetrics.pathetx = ws_info.routing_cost; - else - g_iprouteRplmetrics.pathetx = (info.curent_rank > mhri) ? - (uint16_t)(info.curent_rank - mhri) : 0u; + } + else{ + g_iprouteRplmetrics.pathetx = (info.curent_rank > mhri) ? (uint16_t)(info.curent_rank - mhri) : 0u; + } - /* linketx: use primary parent's measured ETX from neighbor table when available. */ g_iprouteRplmetrics.has_linketx = true; - if (primary_etx != 0xFFFFu) + if (primary_etx != 0xFFFFu){ g_iprouteRplmetrics.linketx = primary_etx; - else - g_iprouteRplmetrics.linketx = (info.curent_rank > info.primary_parent_rank) ? - (uint16_t)(info.curent_rank - info.primary_parent_rank) : 0u; + } + else{ + g_iprouteRplmetrics.linketx = (info.curent_rank > info.primary_parent_rank) ? (uint16_t)(info.curent_rank - info.primary_parent_rank) : 0u; + } } - /* RSSI: Wi-SUN RSL encoding is 0–254 where dBm = rsl - 174. - * rsl_in = RSSI of parent's signal as received at this node (forward path). - * rsl_out = estimated RSSI of our signal as received at parent (reverse path). */ - /* Wi-SUN RSL: 0 = -174 dBm, 254 = +80 dBm. Value 255 (0xFF) is nanostack's - * sentinel for "not yet measured" — must be excluded from both bounds checks. */ if (ws_info.rsl_in > 0u && ws_info.rsl_in < 255u) { g_iprouteRplmetrics.has_rssiforward = true; @@ -400,6 +386,7 @@ void *iproute_rplmetrics_get(uint32_t *num) return &g_iprouteRplmetrics; } +/* Populates and returns the WPAN status TLV with PAN ID, SSID, TX power, rank, and neighbor count. */ void *wpanstatus_get(uint32_t *num) { *num = 1; @@ -413,7 +400,7 @@ void *wpanstatus_get(uint32_t *num) } ws_info_t *ws = cur->ws_info; g_wpanStatus.has_ifindex = true; - g_wpanStatus.ifindex = 2; /* fixed: must match interfaceDesc[1].ifindex = 2 */ + g_wpanStatus.ifindex = 1; g_wpanStatus.has_panid = true; g_wpanStatus.panid = ws->network_pan_id; if (ws->cfg) @@ -438,9 +425,7 @@ void *wpanstatus_get(uint32_t *num) ws_neighbor_info_get(interface_id, nbr_buf, (uint16_t)fill); for (int i = 0; i < fill; i++) { - if (nbr_buf[i].type == WS_PRIMARY_PARENT || - nbr_buf[i].type == WS_SECONDARY_PARENT || - nbr_buf[i].type == WS_CHILD) + if (nbr_buf[i].type == WS_PRIMARY_PARENT || nbr_buf[i].type == WS_SECONDARY_PARENT || nbr_buf[i].type == WS_CHILD) nbr_cnt++; } } @@ -470,6 +455,7 @@ void *wpanstatus_get(uint32_t *num) return &g_wpanStatus; } +/* Populates and returns the RPL instance TLV with DODAG ID, rank, and neighbor counts. */ void *rplinstance_get(uint32_t *num) { *num = 1; @@ -522,6 +508,7 @@ void *rplinstance_get(uint32_t *num) return &g_rplInstance; } +/* Returns the active OTA transfer request TLV, or status-only if no download is in progress. */ void *transferRequest_get(tlvid_t id, uint32_t *n) { (void)id; @@ -548,6 +535,7 @@ void *transferRequest_get(tlvid_t id, uint32_t *n) return &g_transferRequest; } +/* Validates an incoming OTA transfer request and initializes the upload slot in external flash. */ void transferRequest_post(tlvid_t id, Transfer_Request *tlv) { (void)id; @@ -569,10 +557,14 @@ void transferRequest_post(tlvid_t id, Transfer_Request *tlv) DPRINTF("OTA: bad hash len %u\n", (unsigned)tlv->filehash.len); return; } - if (tlv->filesize == 0 || tlv->filesize > CSMP_FWMGMT_SLOTIMG_SIZE) + if (tlv->filesize <= CSMP_IMAGE_HDR_SIZE || + (tlv->filesize - CSMP_IMAGE_HDR_SIZE) > CSMP_FWMGMT_SLOTIMG_SIZE) { tlv->response = RESPONSE_FILE_SIZE_TOO_BIG; - DPRINTF("OTA: bad filesize %lu\n", (unsigned long)tlv->filesize); + DPRINTF("OTA: bad filesize %lu (slot=%lu hdr=%u)\n", + (unsigned long)tlv->filesize, + (unsigned long)CSMP_FWMGMT_SLOTIMG_SIZE, + (unsigned)CSMP_IMAGE_HDR_SIZE); return; } /* blocksize <= CSMP max (1024) and large enough to fit in 1024-block bitmap */ @@ -584,12 +576,27 @@ void transferRequest_post(tlvid_t id, Transfer_Request *tlv) DPRINTF("OTA: bad blocksize %lu\n", (unsigned long)tlv->blocksize); return; } - /* Reject if a load request is already pending for the upload slot */ if (g_initload && g_curloadslot == UPLOAD_IMAGE) { - tlv->response = RESPONSE_PENDING_REBOOT; - DPRINTF("OTA: pending reboot\n"); - return; + if (memcmp(tlv->filehash.data, + g_slothdr[UPLOAD_IMAGE].filehash, SHA256_HASH_SIZE) != 0) + { + /* Different version — supersede the old pending activation */ + osal_trickle_timer_stop(lrq_timer); + g_initload = false; + DPRINTF("OTA: new version supersedes pending activation — accepting\n"); + /* Fall through to normal initialise-upload-slot path */ + } + else + { + /* Same version already pending — extend timer and tell FND to wait. + * imin/imax are in SECONDS (not milliseconds) — use 30, not 30000. */ + osal_trickle_timer_stop(lrq_timer); + osal_trickle_timer_start(lrq_timer, 30U, 30U, (trickle_timer_fired_t)loadreq_timer_fired); + tlv->response = RESPONSE_PENDING_REBOOT; + DPRINTF("OTA: pending reboot — extended activation timer 30s\n"); + return; + } } /* Reject duplicate transfers */ if (memcmp(tlv->filehash.data, g_slothdr[UPLOAD_IMAGE].filehash, SHA256_HASH_SIZE) == 0) @@ -642,10 +649,6 @@ void transferRequest_post(tlvid_t id, Transfer_Request *tlv) g_slothdr[UPLOAD_IMAGE].reportintervalmax = tmax; g_slothdr[UPLOAD_IMAGE].status = FWHDR_STATUS_DOWNLOAD; - /* Erase the external flash secondary slot. - * ti_flash_erase_slot calls NVS_erase — safe because the secondary - * slot is in external SPI flash, not in the internal flash where the - * application code currently runs. */ if (ti_flash_erase_slot(UPLOAD_IMAGE) != OSAL_SUCCESS) { tlv->response = RESPONSE_INVALID_REQ; @@ -660,6 +663,7 @@ void transferRequest_post(tlvid_t id, Transfer_Request *tlv) (unsigned long)g_slothdr[UPLOAD_IMAGE].blocksize); } +/* Writes a received OTA image block to external flash and tracks download completion. */ void imageBlock_post(tlvid_t id, Image_Block *tlv) { (void)id; @@ -744,12 +748,6 @@ void imageBlock_post(tlvid_t id, Image_Block *tlv) if (blocknum == 0) { - /* - * Block 0: strip the 256-byte CSMP image header. - * CSMP prepends metadata (filename, version, hwid, hash) to the image. - * This header must NOT be written to flash — Gecko Bootloader uses a GBL - * file format; TI expects a raw binary starting with the vector table. - */ if (g_imageBlock.blockdata.len <= CSMP_IMAGE_HDR_SIZE) { DPRINTF("OTA: block 0 too small to strip header\n"); @@ -778,8 +776,7 @@ void imageBlock_post(tlvid_t id, Image_Block *tlv) g_downloadbusy = false; return; } - int_fast16_t nvsResult = NVS_write(h, flash_addr, data_ptr, data_len, - NVS_WRITE_POST_VERIFY); + int_fast16_t nvsResult = NVS_write(h, flash_addr, data_ptr, data_len, 0); NVS_close(h); if (nvsResult != NVS_STATUS_SUCCESS) @@ -793,16 +790,16 @@ void imageBlock_post(tlvid_t id, Image_Block *tlv) tlv->retval = true; - /* Mark block as received (clear bit in inverted bitmap) */ + taskENTER_CRITICAL(); mapval ^= (1UL << bit); g_slothdr[UPLOAD_IMAGE].nblkmap[word] = mapval; + taskEXIT_CRITICAL(); DPRINTF("OTA: block %lu written @ 0x%08lx len=%lu map[%lu]=0x%08lx\n", (unsigned long)blocknum, (unsigned long)flash_addr, (unsigned long)data_len, (unsigned long)word, (unsigned long)mapval); - /* Persist slot header to NVM every 10 blocks (power-fail resume) */ - if (blocknum && !(blocknum % 10U)) + if (blocknum && !(blocknum % 50U)) { osal_write_slothdr(UPLOAD_IMAGE, &g_slothdr[UPLOAD_IMAGE]); DPRINTF("OTA: slot header persisted at block %lu\n", (unsigned long)blocknum); @@ -811,6 +808,7 @@ void imageBlock_post(tlvid_t id, Image_Block *tlv) g_downloadbusy = false; } +/* Returns the pending OTA load request TLV for the scheduled activation slot. */ void *loadRequest_get(tlvid_t id, uint32_t *n) { (void)id; @@ -839,6 +837,7 @@ void *loadRequest_get(tlvid_t id, uint32_t *n) return &g_loadRequest; } +/* Schedules OTA image activation at the requested load time by starting the load timer. */ void loadRequest_post(tlvid_t id, Load_Request *tlv) { (void)id; @@ -890,15 +889,30 @@ void loadRequest_post(tlvid_t id, Load_Request *tlv) g_curloadtime = 0; g_initload = true; - /* Calculate timer delay from loadtime */ uint32_t delay = MIN_LOAD_DELAY; if (tlv->loadtime != 0) { struct timeval tv = {0}; osal_gettime(&tv, NULL); - if (tlv->loadtime > (uint32_t)tv.tv_sec) + + /* Sanity check: if current time looks like epoch (~0) rather than a real + * Unix timestamp, the time is not yet synced. Cap delay at 3600s. */ + bool time_synced = (g_ti_csmp_time_offset_sec != 0); + if (!time_synced) + { + DPRINTF("OTA: WARNING — time not synced, LoadRequest delay capped at 60s\n"); + delay = 60U; /* fallback: fire in 60 seconds */ + } + else if (tlv->loadtime > (uint32_t)tv.tv_sec) { delay = tlv->loadtime - (uint32_t)tv.tv_sec; + /* Sanity cap: reject absurd delays caused by residual epoch skew */ + if (delay > 3600U) + { + DPRINTF("OTA: LoadRequest delay %lu s > 3600, time offset suspect — capping\n", + (unsigned long)delay); + delay = MIN_LOAD_DELAY; + } } else { @@ -910,9 +924,12 @@ void loadRequest_post(tlvid_t id, Load_Request *tlv) g_curloadtime = g_loadRequest.loadtime; osal_trickle_timer_start(lrq_timer, delay, delay, (trickle_timer_fired_t)loadreq_timer_fired); - DPRINTF("OTA: LoadRequest timer started, delay=%lu s, slot=%lu\n", (unsigned long)delay, (unsigned long)g_curloadslot); + DPRINTF("OTA: LoadRequest timer started, delay=%lu s (synced=%d), slot=%lu\n", + (unsigned long)delay, (int)(g_ti_csmp_time_offset_sec != 0), + (unsigned long)g_curloadslot); } +/* Cancels a pending OTA activation if the provided filehash matches the current load slot. */ void cancelLoadRequest_post(tlvid_t id, Cancel_Load_Request *tlv) { (void)id; @@ -951,6 +968,7 @@ void cancelLoadRequest_post(tlvid_t id, Cancel_Load_Request *tlv) } } +/* Copies a completed upload or running image into the backup slot. */ void setBackupRequest_post(tlvid_t id, Set_Backup_Request *tlv) { (void)id; @@ -1005,9 +1023,25 @@ void setBackupRequest_post(tlvid_t id, Set_Backup_Request *tlv) DPRINTF("OTA: SetBackup complete\n"); } +/* Propagates filename and version from the run slot to any other slot sharing the same filehash. */ +static void ti_fwmgmt_sync_slothdrs(void) +{ + for (uint32_t i = 1; i < CSMP_FWMGMT_ACTIVE_SLOTS; i++) + { + if (memcmp(g_slothdr[i].filehash, g_slothdr[RUN_IMAGE].filehash, SHA256_HASH_SIZE) == 0 && + strncmp(g_slothdr[i].filename, g_slothdr[RUN_IMAGE].filename, FILE_NAME_SIZE) != 0) + { + strncpy(g_slothdr[i].filename, g_slothdr[RUN_IMAGE].filename, FILE_NAME_SIZE); + strncpy(g_slothdr[i].version, g_slothdr[RUN_IMAGE].version, VERSION_SIZE); + } + } +} + +/* Populates and returns the firmware image info TLV array for all OTA slots. */ void* firmwareImageInfo_get(tlvid_t tlvid, uint32_t *num) { (void)tlvid; + ti_fwmgmt_sync_slothdrs(); *num = 0; for (uint32_t i = 0; i < CSMP_FWMGMT_ACTIVE_SLOTS; i++) { @@ -1015,19 +1049,27 @@ void* firmwareImageInfo_get(tlvid_t tlvid, uint32_t *num) (*num)++; g_firmwareImageInfo[i].has_index = true; g_firmwareImageInfo[i].index = i + 1u; - g_firmwareImageInfo[i].has_filehash = true; - g_firmwareImageInfo[i].filehash.len = SHA256_HASH_SIZE; - memcpy(g_firmwareImageInfo[i].filehash.data, g_slothdr[i].filehash, SHA256_HASH_SIZE); - g_firmwareImageInfo[i].has_filename = true; - strncpy(g_firmwareImageInfo[i].filename, g_slothdr[i].filename, FILE_NAME_SIZE); - g_firmwareImageInfo[i].has_version = true; - strncpy(g_firmwareImageInfo[i].version, g_slothdr[i].version, VERSION_SIZE); - g_firmwareImageInfo[i].has_filesize = true; - g_firmwareImageInfo[i].filesize = g_slothdr[i].filesize; - g_firmwareImageInfo[i].has_blocksize = true; - g_firmwareImageInfo[i].blocksize = g_slothdr[i].blocksize; - g_firmwareImageInfo[i].blockcnt = g_slothdr[i].blockcnt; - if (g_slothdr[i].status == FWHDR_STATUS_DOWNLOAD) + bool slot_valid = ((uint8_t)g_slothdr[i].filename[0] != 0xFFu); + + if (slot_valid) + { + g_firmwareImageInfo[i].has_filehash = true; + g_firmwareImageInfo[i].filehash.len = SHA256_HASH_SIZE; + memcpy(g_firmwareImageInfo[i].filehash.data, g_slothdr[i].filehash, SHA256_HASH_SIZE); + g_firmwareImageInfo[i].has_filename = true; + strncpy(g_firmwareImageInfo[i].filename, g_slothdr[i].filename, FILE_NAME_SIZE); + g_firmwareImageInfo[i].has_version = true; + strncpy(g_firmwareImageInfo[i].version, g_slothdr[i].version, VERSION_SIZE); + } + if (slot_valid) + { + g_firmwareImageInfo[i].has_filesize = true; + g_firmwareImageInfo[i].filesize = g_slothdr[i].filesize; + g_firmwareImageInfo[i].has_blocksize = true; + g_firmwareImageInfo[i].blocksize = g_slothdr[i].blocksize; + g_firmwareImageInfo[i].blockcnt = g_slothdr[i].blockcnt; + } + if (slot_valid && g_slothdr[i].status == FWHDR_STATUS_DOWNLOAD) { uint32_t blks = (g_slothdr[i].blockcnt + 31u) / 32u; if (blks > CSMP_FWMGMT_BLKMAP_CNT) @@ -1059,20 +1101,27 @@ void* firmwareImageInfo_get(tlvid_t tlvid, uint32_t *num) g_firmwareImageInfo[i].has_loadtime = true; g_firmwareImageInfo[i].loadtime = g_curloadtime; } - g_firmwareImageInfo[i].has_hwinfo = true; - g_firmwareImageInfo[i].hwinfo.has_hwid = true; - strncpy(g_firmwareImageInfo[i].hwinfo.hwid, g_slothdr[i].hwid, HWID_SIZE); - g_firmwareImageInfo[i].status = g_slothdr[i].status; + if (slot_valid) + { + g_firmwareImageInfo[i].has_hwinfo = true; + g_firmwareImageInfo[i].hwinfo.has_hwid = true; + strncpy(g_firmwareImageInfo[i].hwinfo.hwid, TI_WISUN_HWID, HWID_SIZE); + g_firmwareImageInfo[i].hwinfo.has_vendorhwid = true; + strncpy(g_firmwareImageInfo[i].hwinfo.vendorhwid, TI_WISUN_HWID, HWID_SIZE); + g_firmwareImageInfo[i].status = g_slothdr[i].status; + } } return g_firmwareImageInfo; } +/* Returns a pointer to the current signature settings TLV. */ void *signature_settings_get(uint32_t *num) { *num = 1; return &g_SignatureSettings; } +/* Applies received signature settings fields to the global Signature_Settings struct. */ void signature_settings_post(Signature_Settings *tlv) { if (!tlv) @@ -1097,6 +1146,7 @@ void signature_settings_post(Signature_Settings *tlv) } } +/* Stops the async timer and triggers a system reboot to the NMS address. */ static void rebootreq_timer_fired(void) { osal_trickle_timer_stop(async_timer); @@ -1104,6 +1154,7 @@ static void rebootreq_timer_fired(void) g_reboot_request = false; } +/* Starts the reboot timer when a REBOOT flag is received in a Reboot_Request TLV. */ void rebootRequest_post(tlvid_t tlvid, Reboot_Request *tlv) { (void)tlvid; @@ -1118,7 +1169,7 @@ void rebootRequest_post(tlvid_t tlvid, Reboot_Request *tlv) } } - +/* Populates and returns vendor TLV subtypes including RPL health and join time. */ void *vendorTlv_get(tlvid_t tlvid, uint32_t *num) { if (tlvid.vendor != VENDOR_ID) @@ -1159,6 +1210,7 @@ void *vendorTlv_get(tlvid_t tlvid, uint32_t *num) return g_vendorTlv; } +/* Updates a vendor TLV subtype value from the received data, or stores in slot 0 if not found. */ void vendorTlv_post(tlvid_t tlvid, Vendor_Tlv *tlv) { if (tlvid.vendor != VENDOR_ID || !tlv) @@ -1177,50 +1229,44 @@ void vendorTlv_post(tlvid_t tlvid, Vendor_Tlv *tlv) memcpy(g_vendorTlv[0].value.data, tlv->value.data, tlv->value.len); } -/* - * ti_ota_activate — MCUBoot upgrade activation. - * - * Writes the 16-byte MCUBoot "upgrade pending" magic into the upload - * slot trailer, then performs a normal software reset. MCUBoot runs at - * next boot, finds the magic, copies the upload slot → run slot, and - * boots the new firmware. - * - * Unlike the old ti_ota_copy_and_reboot(): - * - Does NOT run from SRAM (.ramcode removed) - * - Does NOT call IntMasterDisable() - * - Does NOT directly erase or program the run slot - * - MCUBoot handles the flash copy safely before the application starts - * - * Requires MCUBoot binary flashed at 0x0 and -DSBL_ENABLE in build flags. - * Without MCUBoot present the magic bytes are written to flash but nothing - * acts on them — the device reboots normally into the unchanged firmware. - */ +/* Triggers a system reboot so MCUBoot can install the OTA image from external flash. */ static void ti_ota_activate(void) { - /* TI MCUBoot uses VERSION COMPARISON — no magic bytes, no pending flag. - * On every reset MCUBoot reads ih_ver from primary (internal flash) and - * secondary (external flash) slots. If secondary.ih_ver > primary.ih_ver - * AND the ECDSA-P256 signature is valid, MCUBoot copies ext flash → internal - * flash and boots the new image. Simply rebooting is all that is needed. */ - DPRINTF("OTA: rebooting — MCUBoot will install ext flash image if version is higher\n"); - osal_sleep_ms(100); /* let trace output flush through ITM */ - SysCtrlSystemReset(); - - for (;;) {} /* unreachable */ + DPRINTF("OTA: rebooting — MCUBoot will install ext flash image\n"); + osal_system_reboot(NULL); + for (;;) { + DPRINTF("Reached"); + } /* unreachable */ } -/* Called by lrq_timer when loadtime arrives */ +/* Called by lrq_timer: updates run slot header, clears upload slot, then activates via MCUBoot reboot. */ static void loadreq_timer_fired(void) { - DPRINTF("OTA: loadreq_timer_fired — activating slot %lu\n", - (unsigned long)g_curloadslot); + DPRINTF("OTA: loadreq_timer_fired — activating slot %lu\n", (unsigned long)g_curloadslot); osal_trickle_timer_stop(lrq_timer); - /* Persist run slot header so the new version is visible after reboot */ - memcpy(&g_slothdr[RUN_IMAGE], &g_slothdr[g_curloadslot], sizeof(Csmp_Slothdr)); - osal_write_slothdr(RUN_IMAGE, &g_slothdr[RUN_IMAGE]); + if (g_curloadslot < CSMP_FWMGMT_ACTIVE_SLOTS && g_slothdr[g_curloadslot].status == FWHDR_STATUS_COMPLETE) + { + memcpy(&g_slothdr[RUN_IMAGE], &g_slothdr[g_curloadslot], sizeof(Csmp_Slothdr)); + osal_write_slothdr(RUN_IMAGE, &g_slothdr[RUN_IMAGE]); + DPRINTF("OTA: RUN slot updated to version '%s'\n", g_slothdr[RUN_IMAGE].version); + memset(&g_slothdr[UPLOAD_IMAGE], 0xFF, sizeof(Csmp_Slothdr)); + osal_write_slothdr(UPLOAD_IMAGE, &g_slothdr[UPLOAD_IMAGE]); + } - /* Signal MCUBoot and reboot — MCUBoot copies upload → run at next boot */ ti_ota_activate(); -} \ No newline at end of file +} + +/* Checks on startup for a completed upload slot and auto-schedules activation in 30 seconds if found. */ +void ti_ota_check_pending_activation(void) +{ + if (g_slothdr[UPLOAD_IMAGE].status == FWHDR_STATUS_COMPLETE && !g_initload) + { + DPRINTF("OTA: pending activation found on startup — auto-activating in 30 secs\n"); + g_curloadslot = UPLOAD_IMAGE; + g_curloadtime = 30U; + g_initload = true; + osal_trickle_timer_start(lrq_timer, 30U, 30U, (trickle_timer_fired_t)loadreq_timer_fired); + } +} diff --git a/tools/tpd_config_cc13xx.json b/tools/tpd_config_cc13xx.json new file mode 100644 index 0000000..300f439 --- /dev/null +++ b/tools/tpd_config_cc13xx.json @@ -0,0 +1,12 @@ +{ + "major": "1", + "minor": "0", + "build": "0", + "name": "ti-node-1.0.0", + "hwid": "CC13XX", + "sub_hwid": "0", + "branch": "main", + "commit": "0000000", + "date": "Jun 06 2026", + "kernelrev": "WISUN_1.0" +} From 704e76bdb33e640afe1c679f011a882d0658df73 Mon Sep 17 00:00:00 2001 From: a1257330 Date: Tue, 23 Jun 2026 16:26:54 +0530 Subject: [PATCH 3/3] ti: simplify OTA workflow and fix SecureBoot version scheme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop the manual CsmpAgentLib_sample.c version-string step from the OTA upgrade guide - FND reads the version from the signed image header, so the source edit was redundant and error-prone. Renumber the OTA checklist steps (H.3-H.13 → H.3-H.12) and correct the flash artifact reference from ns_node_csmp.hex to ns_node_csmp.bin. Replace the hardcoded SecureBoot.mak imgtool version (2.0.0) with 1.0.0+ so each build carries a unique build number without requiring a manual version bump between OTA cycles. Remove the stale ti_ota_check_pending_activation() call from application.c that is now handled elsewhere in the startup sequence. --- .../freertos/ticlang/SecureBoot.mak | 2 +- Vendors/TI/README.md | 71 +++++++------------ Vendors/TI/application/application.c | 2 - 3 files changed, 27 insertions(+), 48 deletions(-) diff --git a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak index ac46b63..8244ad8 100644 --- a/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak @@ -5,4 +5,4 @@ LFLAGS += -Wl,--define=SBL_ENABLE .PHONY: postbuild postbuild: $(NAME).hex $(TICLANG_ARMCOMPILER)/bin/tiarmobjcopy $(NAME).out --output-target binary $(NAME)-noheader.bin - $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 2.0.0 --pad-header --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; + $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/tools/common/mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xA8000 --pad --version 1.0.0+$(shell date +%Y%m%d) --pad-header --key $(SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR)/source/third_party/mcuboot/root-ec-p256.pem $(NAME)-noheader.bin $(NAME).bin; diff --git a/Vendors/TI/README.md b/Vendors/TI/README.md index 43de113..0a94406 100644 --- a/Vendors/TI/README.md +++ b/Vendors/TI/README.md @@ -883,7 +883,7 @@ MCUBoot must be flashed to the device before the application. Flash in this orde 3. **Second — add the CSMP application image:** - Click **Add file** and select: ``` - Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.hex + Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin ``` 4. Click **Load Images** to flash both files to the device. @@ -896,30 +896,12 @@ MCUBoot must be flashed to the device before the application. Flash in this orde The upgrade image must have a **strictly higher version** than the currently running image. MCUBoot rejects any image with a version equal to or lower than what is already running. -#### Step H.3 - Update the version string in `CsmpAgentLib_sample.c` - -Open `sample/CsmpAgentLib_sample.c` and find the `default_run_slot_image` line (around line 49): - -```c -Csmp_Slothdr default_run_slot_image = {{0x61,0xe7,...}, -"opencsmp-node-1.0.00","1.0.00", "CC13XX", 27904, 0, 0, 0, 0, 0, 0, {0},0, 0}; -``` - -Update the filename and version strings to match what you are about to build. For example, if the upgrade version will be `2.0.0`: - -```c -Csmp_Slothdr default_run_slot_image = {{0x61,0xe7,...}, -"opencsmp-node-2.0.00","2.0.00", "CC13XX", 27904, 0, 0, 0, 0, 0, 0, {0},0, 0}; -``` - -> This controls what version FND reads from **TLV 75 FirmwareImageInfo** after the OTA completes and the device reboots. It must match the `--version` argument in the next step. - -#### Step H.4 - Update the imgtool version in the board makefile +#### Step H.3 - Update the imgtool version in the board makefile Open the makefile for your board. For LP-CC1352P7-1: ```bash -nano Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile +nano Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/SecureBoot.mak ``` Find the `imgtool sign` line in the `postbuild` section: @@ -941,7 +923,7 @@ Change `--version 1.0.0` to a version **higher** than what is currently running > The version here must be strictly greater than the running version. `2.0.0 > 1.0.0` ✓. MCUBoot compares major → minor → revision in order. The build number is ignored. -#### Step H.5 - Build the upgrade image +#### Step H.4 - Build the upgrade image ```bash ./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT @@ -952,7 +934,7 @@ The output `.bin` is now signed with version `2.0.0`: Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin ``` -#### Step H.6 - Update `tpd_config_cc13xx.json` to match the upgrade version +#### Step H.5 - Update `tpd_config_cc13xx.json` to match the upgrade version Before wrapping the binary, update `tools/tpd_config_cc13xx.json` so the metadata embedded in the TPD header matches the version you just built. FND reads this header to display the image name and version in its firmware list. @@ -960,7 +942,7 @@ Before wrapping the binary, update `tools/tpd_config_cc13xx.json` so the metadat nano tools/tpd_config_cc13xx.json ``` -The file looks like this — edit `major`, `minor`, `build`, and `name` to match the version set in Step H.4: +The file looks like this — edit `major`, `minor`, `build`, and `name` to match the version set in Step H.3: ```json { @@ -991,7 +973,7 @@ Fields to update every time you build a new upgrade image: Save and close the file before running `add_tpdheader.py`. -#### Step H.7 - Wrap the image with the CSMP TPD header +#### Step H.6 - Wrap the image with the CSMP TPD header FND requires the firmware binary to have a 256-byte CSMP metadata header prepended before it can be uploaded. Use the `add_tpdheader.py` tool for this. @@ -1005,13 +987,13 @@ python3 tools/add_tpdheader.py \ ``` Replace the arguments with your actual paths and preferred output filename: -- **Argument 1** — path to the `.bin` built in Step H.5 +- **Argument 1** — path to the `.bin` built in Step H.4 - **Argument 2** — name for the output file that you will upload to FND (any name ending in `.bin`) - **Argument 3** — TPD config file (`tools/tpd_config_cc13xx.json` contains the `hwid: "CC13XX"` and version metadata) This creates `ota_upgrade_v2.bin` in the current directory. -#### Step H.8 - Transfer the image to the FND server +#### Step H.7 - Transfer the image to the FND server Copy the wrapped binary to the machine where you access FND (or to any machine with a browser that can reach the FND web UI): @@ -1023,7 +1005,7 @@ scp ota_upgrade_v2.bin user@fnd-server:/tmp/ ### Phase 3: Trigger the OTA from FND -#### Step H.9 - Upload the firmware image to FND +#### Step H.8 - Upload the firmware image to FND 1. Log in to the Cisco FND web interface. 2. Navigate to **CONFIG → Firmware Update**. @@ -1032,17 +1014,17 @@ scp ota_upgrade_v2.bin user@fnd-server:/tmp/ 5. In the dialog that appears, click **Browse**, select `ota_upgrade_v2.bin` from your machine. 6. Click **Add File**. FND reads the 256-byte header and registers the image name and version. -#### Step H.10 - Assign the image to a device group and start upload +#### Step H.9 - Assign the image to a device group and start upload 1. In the left panel, click **Groups**. 2. Select the device group that contains your mesh node (e.g., `default-cc13xx`). 3. In the right panel, click **Upload Image**. 4. In the dialog: - **Select Type:** choose `PLC-RF` - - **Select an Image:** choose the image you uploaded in Step H.8 (`ota_upgrade_v2.bin`) + - **Select an Image:** choose the image you uploaded in Step H.7 (`ota_upgrade_v2.bin`) 5. Click **Upload Image** to start sending blocks to the device. -#### Step H.11 - Monitor the OTA progress +#### Step H.10 - Monitor the OTA progress On the same firmware group page, click the **Logs** tab. You will see progress similar to: @@ -1064,7 +1046,7 @@ The **Status** column on the Firmware Management page also updates as the transf > You can also monitor block reception on the device's serial terminal. Look for `OTA: block N written` and `OTA: download complete!` log lines. -#### Step H.12 - Reboot the device to apply the new firmware +#### Step H.11 - Reboot the device to apply the new firmware After the upload is complete, schedule a reboot via FND so MCUBoot can apply the image from external flash. @@ -1076,12 +1058,12 @@ After the upload is complete, schedule a reboot via FND so MCUBoot can apply the The device reboots at the scheduled time. MCUBoot runs, finds the new image in external flash, verifies the ECDSA-P256 signature, copies it to internal flash, and boots it. -#### Step H.13 - Verify the upgrade +#### Step H.12 - Verify the upgrade After the device rejoins the Wi-SUN network and re-registers with FND (allow 60–90 seconds): 1. In **Devices → Field Devices**, open the device detail page. -2. Check the **Firmware** tab — the running firmware version should now show `2.0.0` (or whatever version you set in Steps H.3–H.4). +2. Check the **Firmware** tab — the running firmware version should now show `2.0.0` (or whatever version you set in Step H.3). 3. Alternatively, run `getoadfwver` from the border router if using pySpinel, or check the TLV 75 FirmwareImageInfo response in FND's Troubleshooting tab. --- @@ -1090,15 +1072,14 @@ After the device rejoins the Wi-SUN network and re-registers with FND (allow 60 | Step | Action | Where | |------|--------|-------| -| H.3 | Update version in `default_run_slot_image` | `sample/CsmpAgentLib_sample.c` line ~49 | -| H.4 | Update `--version` in imgtool command | `Vendors/TI//.../makefile` postbuild section | -| H.5 | Build | `./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT` | -| H.6 | Update `tpd_config_cc13xx.json` version fields | `tools/tpd_config_cc13xx.json` — match major/minor/build/name to H.4 version | -| H.7 | Wrap with TPD header | `python3 tools/add_tpdheader.py tools/tpd_config_cc13xx.json` | -| H.8 | Copy to FND host | `scp user@fnd-server:/tmp/` | -| H.9 | Upload image to FND | CONFIG → Firmware Update → Images → PLC-RF → + | -| H.10 | Assign to group | CONFIG → Firmware Update → Groups → Upload Image | -| H.11 | Monitor | Logs tab on the group firmware page | -| H.12 | Reboot device | Config → Firmware Update → Image List → Actions column → calendar icon | -| H.13 | Verify | Device detail → Firmware tab shows new version | +| H.3 | Update `--version` in imgtool command | `Vendors/TI//.../SecureBoot.mak` | +| H.4 | Build | `./build.sh ti_simplelink_wisun CONFIG=SECUREBOOT` | +| H.5 | Update `tpd_config_cc13xx.json` version fields | `tools/tpd_config_cc13xx.json` — match major/minor/build/name to H.3 version | +| H.6 | Wrap with TPD header | `python3 tools/add_tpdheader.py tools/tpd_config_cc13xx.json` | +| H.7 | Copy to FND host | `scp user@fnd-server:/tmp/` | +| H.8 | Upload image to FND | CONFIG → Firmware Update → Images → PLC-RF → + | +| H.9 | Assign to group | CONFIG → Firmware Update → Groups → Upload Image | +| H.10 | Monitor | Logs tab on the group firmware page | +| H.11 | Reboot device | Config → Firmware Update → Image List → Actions column → calendar icon | +| H.12 | Verify | Device detail → Firmware tab shows new version | diff --git a/Vendors/TI/application/application.c b/Vendors/TI/application/application.c index 983118b..4a50ef4 100644 --- a/Vendors/TI/application/application.c +++ b/Vendors/TI/application/application.c @@ -1241,8 +1241,6 @@ void *mainThread(void *arg0) * calls xTimerStart() — which asserts on a NULL handle if this is skipped. */ osal_kernel_start(); - extern void ti_ota_check_pending_activation(void); - ti_ota_check_pending_activation(); int csmp_ret = csmp_service_start(&g_devconfig, &g_csmp_handle); tr_info("CSMP: csmp_service_start - done");