diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 index 112d230..c84981b --- 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 clean && make CONFIG=SECUREBOOT -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..c6eb219 --- /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 = 0xC000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00001000; + +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..8244ad8 --- /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 + $(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/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..588845b --- /dev/null +++ b/Vendors/TI/LP_CC1312R7/csmp_example_tirf/freertos/ticlang/makefile @@ -0,0 +1,561 @@ +# 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 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), +# 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,--diag_suppress=10247 \ + -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 $@ +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 $@ + @ $(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..7b00734 --- /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 = 0xC000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00001000; + +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..8244ad8 --- /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 + $(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_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..588845b --- /dev/null +++ b/Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/makefile @@ -0,0 +1,561 @@ +# 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 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), +# 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,--diag_suppress=10247 \ + -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 $@ +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 $@ + @ $(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..bc71828 --- /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 = 0xC000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +FreeRTOS.timerStackSize = 0x00001000; + +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..8244ad8 --- /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 + $(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/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..cb3ded6 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1314R10/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 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), +# 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 $@ +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 $@ + @ $(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..2ddafc1 --- /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 = 0xC000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +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/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..8244ad8 --- /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 + $(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/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..cb3ded6 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_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 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), +# 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 $@ +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 $@ + @ $(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..62286f9 --- /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 = 0xC000; +FreeRTOS.posixThreadStackSize = 0x00000200; +FreeRTOS.idleStackSize = 0x00000180; +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/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..8244ad8 --- /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 + $(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/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..cb3ded6 --- /dev/null +++ b/Vendors/TI/LP_EM_CC1354P10_6/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 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), +# 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 $@ +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 $@ + @ $(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..0a94406 --- /dev/null +++ b/Vendors/TI/README.md @@ -0,0 +1,1085 @@ +# 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**. The address is defined in **two places** — both must match your FND address before building. + +| 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 +nano Vendors/TI/application/defines/router.opts +``` + +Find this line: + +``` +-DCSMP_AGENT_NMS_ADDRESS=\"fd00::3\" +``` + +Replace `fd00::3` with your FND server's actual IPv6 address: + +``` +-DCSMP_AGENT_NMS_ADDRESS=\"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 +``` + +Find this line near the top of the configuration block (around line 123): + +```c +#define CSMP_AGENT_NMS_ADDRESS "fd00::3" +``` + +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. + +--- + +## 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 - 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: + +```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 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.4 - 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 files you will use for your specific board are: + +| 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 ← flash this initially +Vendors/TI/LP_CC1352P7_1/csmp_example_tirf/freertos/ticlang/ns_node_csmp.bin ← use this for OTA +``` + +### Step B.5 - Clean the build + +To remove all build artifacts (library, objects, and board hex): + +```bash +./build.sh clean +``` + +### Step B.6 - 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 two things: the device type definition (created once per FND installation) and the device's EUI-64 identity (added once per physical device). + +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 +``` + +### 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. + +--- + +## 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 - 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. + +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.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: + +```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.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. + +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.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. + +```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. + +--- + +### 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. + +### 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 + +--- + +## 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.bin + ``` + +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 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/SecureBoot.mak +``` + +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.4 - 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.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. + +```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.3: + +```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.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. + +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.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.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): + +```bash +scp ota_upgrade_v2.bin user@fnd-server:/tmp/ +``` + +--- + +### Phase 3: Trigger the OTA from 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**. +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.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.7 (`ota_upgrade_v2.bin`) +5. Click **Upload Image** to start sending blocks to the device. + +#### Step H.10 - 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.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. + +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.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 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. + +--- + +### OTA Quick Reference + +| Step | Action | Where | +|------|--------|-------| +| 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/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..4a50ef4 --- /dev/null +++ b/Vendors/TI/application/application.c @@ -0,0 +1,1745 @@ +/* + * 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. + */ + +#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" +#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" +#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 + *****************************************************************************/ +#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 + *****************************************************************************/ + +/* Handle mesh network connection status changes and update connectedFlg/connect state. */ +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"); + } +} + +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; + + 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; +} + +/* 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; + +#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; +} + +/* Start the Wi-SUN network connection process and register the status callback. */ +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; +} + +/* 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; + 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) + +/* GPIO interrupt handler for board buttons (BTN1/BTN2). */ +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 +/* 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( + &pan_rediscover_tasklet, + 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 = { + .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); +/* 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; + 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 + +/* 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) +{ + + 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 +/* 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) +{ + 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 +/* 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) +{ + 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); + + // 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(); + +/* 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) +{ + + 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 +/* Application main thread: configures GPIO, joins Wi-SUN, then starts the CSMP agent. */ +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: 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(); + 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; + +#ifndef CSMP_BUILD_EPOCH +# define CSMP_BUILD_EPOCH 1780000000UL /* 2026-05-25 — fallback only */ +#endif + { + 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. + * 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 */ + 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 + +/* Post NCP_SEND_RESPONSE_EVENT to the NCP tasklet to trigger response transmission to the host. */ +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); +} + +/* Post NCP_SEND_ASYNC_RSPONSE_EVENT to the NCP tasklet to trigger async response transmission. */ +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); +} + +/* Forward a UART event to the NCP tasklet 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 both LEDs indefinitely to signal an unrecoverable assert condition. */ +static inline void auto_start_assert_led() +{ + while(1) + { + sleep(2); + GPIO_toggle(CONFIG_GPIO_GLED); + GPIO_toggle(CONFIG_GPIO_RLED); + } +} + +/* 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 = { + .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 + +/* 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; + 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 +} + +/* Register the NCP tasklet with the event OS and trigger ARM_LIB_TASKLET_INIT_EVENT. */ +void ncp_tasklet_start(void) +{ + eventOS_event_handler_create( + &ncp_tasklet, + ARM_LIB_TASKLET_INIT_EVENT); +} + +/* Return true if the Wi-SUN network interface has been brought up. */ +bool is_net_if_up(void) +{ + if(interface_id < 0) + { + return (false); + } + else + { + return (true); + } +} + +/* 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()) + { + 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); + +} + +/* Return true if the node has completed Wi-SUN network join (connectedFlg is set). */ +bool is_net_stack_up(void) +{ + return(connectedFlg); +} + +/* 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); + + 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() +} + +/* 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; + 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; +} + +/* 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; + 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; + +} + +/* 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; + 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 + +/* 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; + 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 +} + +/* 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; + 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); +} + +/* 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; + cur = protocol_stack_interface_info_get(IF_6LoWPAN); + + return &cur->ip_groups; +} + +/* 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; + + 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; +} + +/* 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; + + 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; +} + +/* 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; + 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; +} + +/* 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; + 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; + +/* 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; + + 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/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/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..c85d356 100755 --- a/build.sh +++ b/build.sh @@ -9,25 +9,29 @@ 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/ [ ! -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/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 15f35cc..8eb4e27 100644 --- a/osal/osal.h +++ b/osal/osal.h @@ -39,10 +39,16 @@ #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 +#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 @@ -675,4 +681,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..a41c491 --- /dev/null +++ b/osal/ti_simplelink_wisun/osal_platform_types.h @@ -0,0 +1,122 @@ +#ifndef __OSAL_PLATFORM_TYPES_H +#define __OSAL_PLATFORM_TYPES_H + +#include +#include +#include +#include + +/* struct timeval — from TI POSIX shim */ +#include + +#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 +/* 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 + +extern int close(int fd); + +typedef uint32_t socklen_t; +typedef int32_t ssize_t; + +#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)))) + +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 + +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; + +#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 0x00000000UL +#endif +#ifndef CSMP_TI_BACKUP_SLOT_ADDR +#define CSMP_TI_BACKUP_SLOT_ADDR 0x00000000UL +#endif +#ifndef CSMP_TI_SLOT_MAX_SIZE +#define CSMP_TI_SLOT_MAX_SIZE 0x000A8000UL +#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 + +#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..6050eea --- /dev/null +++ b/osal/ti_simplelink_wisun/osal_ti_simplelink_wisun.c @@ -0,0 +1,697 @@ + +#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" + +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; + +#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++) + { + 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); + } + 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), + (TaskHandle_t *)thread); + DPRINTF("task '%s' %s\n", name, r == pdPASS ? "ok" : "failed"); + 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; +} + +/* 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) +{ + (void)h; + (void)s; + (void)o; + 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) + { + return OSAL_FAILURE; + } + *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) + { + vSemaphoreDelete(*s); + } + return OSAL_SUCCESS; +} + +/* 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; + 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; + } + /* 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; + } + /* 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[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; + 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; + 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; +} + +/* 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)flags; + /* 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[ch], sizeof(g_rx_src[ch])); + if (addrlen) + { + *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) +{ + (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); + + /* 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)real_fd, (unsigned)len, (unsigned)d.identifier); + + vTaskDelay(pdMS_TO_TICKS(10)); + DPRINTF("osal_sendto: POST-DELAY calling socket_sendto\n"); + + 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) +{ + 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); +} + +/* 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) +{ + (void)n; + (void)r; + (void)w; + (void)e; + (void)t; + 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)); + a->sin6_family = AF_INET6; + memset(&a->sin6_addr, 0, sizeof(a->sin6_addr)); + 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", + ((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)); +} + +/* 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; + 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; +} + +/* 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; + 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 */ +/* 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; + (void)s; + (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; + (void)n; + return OSAL_FAILURE; +} + +/* 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; + } + 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(); +} + +/* 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; + 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); +} + +/* 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; + DPRINTF("stack overflow: %s\n", n); + for (;;) + { + } +} + +/* 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; +} + +/* 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) + { + 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; +} + +/* 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) + { + 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; +} + +/* 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) + { + 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; +} + +/* 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) + 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; +} + +/* 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) + 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; +} + +/* 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) +{ + (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}; + 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); + } + } + } +} + +/* FreeRTOS timer callback: fire expired trickle timers and advance their intervals */ +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(); +} + +/* 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); +} 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..2e529d2 --- /dev/null +++ b/osal/ti_simplelink_wisun/ti_simplelink_wisun.mak @@ -0,0 +1,75 @@ +#################################################################### +# 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 + 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 +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/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 new file mode 100644 index 0000000..823eda2 --- /dev/null +++ b/sample/tlvs/ti_simplelink_wisun_tlvs.c @@ -0,0 +1,1272 @@ +#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" +#include +#include DeviceFamily_constructPath(driverlib/sys_ctrl.h) +#include /* CONFIG_NVSEXTERNAL */ +#include /* Off-Chip OAD secondary slot */ + +/* ---- 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; + +/* 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] = { + 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}; + +/* 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)); + g_interfaceDesc[0].has_ifindex = true; + g_interfaceDesc[0].ifindex = 1; + g_interfaceDesc[0].has_ifname = true; + 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; + 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; +} + +/* 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(); + 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 = 1; + g_ipAddress[cnt].has_ipaddresstype = true; + 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; +} + +/* 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){ + 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; + 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 = 1; + 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(); + + 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; +} + +/* Returns the current POSIX time as a Current_Time TLV. */ +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; +} + +/* Sets the system clock from the POSIX timestamp in a received Current_Time TLV. */ +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); + } +} + +/* Returns the elapsed uptime in seconds since Wi-SUN join as an Up_Time TLV. */ +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; + 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; + 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 = 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; + 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_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.frag_tx_errors; + return g_interfaceMetrics; +} + +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; + 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; + } + + 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; + + { + 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; + + 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; + } + + 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; + } + } + + 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; +} + +/* 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; + 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 = 1; + 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; +} + +/* Populates and returns the RPL instance TLV with DODAG ID, rank, and neighbor counts. */ +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; +} + +/* 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; + + /* 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; +} + +/* 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; + 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 <= 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 (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 */ + 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; + } + if (g_initload && g_curloadslot == UPLOAD_IMAGE) + { + 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) + { + 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; + + 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); +} + +/* Writes a received OTA image block to external flash and tracks download completion. */ +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) + { + 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, 0); + 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; + + 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); + + 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); + } + + 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; + + 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; +} + +/* 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; + 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; + + uint32_t delay = MIN_LOAD_DELAY; + if (tlv->loadtime != 0) + { + struct timeval tv = {0}; + osal_gettime(&tv, NULL); + + /* 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 + { + 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 (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; + 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; + } +} + +/* Copies a completed upload or running image into the backup slot. */ +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"); +} + +/* 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++) + { + memset(&g_firmwareImageInfo[i], 0, sizeof(g_firmwareImageInfo[i])); + (*num)++; + g_firmwareImageInfo[i].has_index = true; + g_firmwareImageInfo[i].index = i + 1u; + 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) + { + 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; + } + 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) + 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); + } +} + +/* 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); + osal_system_reboot(&g_devconfig.NMSaddr); + 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; + 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; + } +} + +/* 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) + { + *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; +} + +/* 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) + 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); +} + +/* Triggers a system reboot so MCUBoot can install the OTA image from external flash. */ +static void ti_ota_activate(void) +{ + DPRINTF("OTA: rebooting — MCUBoot will install ext flash image\n"); + osal_system_reboot(NULL); + for (;;) { + DPRINTF("Reached"); + } /* unreachable */ +} + +/* 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); + + osal_trickle_timer_stop(lrq_timer); + + 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]); + } + + ti_ota_activate(); +} + +/* 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/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 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" +}