From 3141c9a49a9e763c449b5731487eecaf8e6d56ca Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Mon, 31 Oct 2022 20:04:41 +0100 Subject: [PATCH 1/1] Own changes --- .../Application/zcl_genericapp.c | 43 +- .../Application/zcl_genericapp_data.c | 50 ++- .../Common/zcl/zcl.c | 10 + .../Stack/Config/f8wrouter.opts | 2 + .../Stack/Config/preinclude.h | 51 +++ .../Stack/sys/zcomdef.h | 3 + .../Stack/sys/zglobals.c | 2 +- .../Stack/zdo/zd_app.c | 22 +- .../cc13x2_cc26x2_tirtos7_ticlang.cmd | 6 +- .../ti_devices_config.c | 108 +++++ .../ti_drivers_config.h | 274 +++++++++++++ .../ti_radio_config.c | 385 ++++++++++++++++++ .../ti_radio_config.h | 83 ++++ .../zr_genericapp.syscfg | 11 +- .../Application/zcl_genericapp.c | 43 +- .../Application/zcl_genericapp_data.c | 50 ++- .../Common/zcl/zcl.c | 10 + .../Stack/Config/f8wrouter.opts | 2 + .../Stack/Config/preinclude.h | 33 ++ .../Stack/sys/zcomdef.h | 3 + .../Stack/sys/zglobals.c | 2 +- .../Stack/zdo/zd_app.c | 22 +- .../cc13x2_cc26x2_tirtos7_ticlang.cmd | 6 +- .../zr_genericapp.syscfg | 7 +- .../Application/zcl_genericapp.c | 43 +- .../Application/zcl_genericapp_data.c | 50 ++- .../Common/zcl/zcl.c | 10 + .../Stack/Config/f8wrouter.opts | 2 + .../Stack/Config/preinclude.h | 33 ++ .../Stack/sys/zcomdef.h | 3 + .../Stack/sys/zglobals.c | 2 +- .../Stack/zdo/zd_app.c | 22 +- .../cc13x2_cc26x2_tirtos7_ticlang.cmd | 6 +- .../zr_genericapp.syscfg | 7 +- 34 files changed, 1268 insertions(+), 138 deletions(-) create mode 100644 zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h create mode 100644 zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_devices_config.c create mode 100644 zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_drivers_config.h create mode 100644 zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.c create mode 100644 zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.h create mode 100644 zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h create mode 100644 zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/preinclude.h diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c index 550be7a..0725b39 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c @@ -53,6 +53,8 @@ * INCLUDES */ +#include + #include "rom_jt_154.h" #include "zcomdef.h" @@ -68,6 +70,8 @@ #include "zcl_genericapp.h" #include "zcl_port.h" +#include "osal_nv.h" + #include #include "ti_drivers_config.h" #include "util_timer.h" @@ -261,6 +265,14 @@ void sampleApp_task(NVINTF_nvFuncts_t *pfnNV) pfnZdlNV = pfnNV; zclport_registerNV(pfnZdlNV, ZCL_PORT_SCENE_TABLE_NV_ID); + // Init the transmit power NV item, this will be skipped if item is already initialized + int8_t transmitPower = TXPOWER; + osal_nv_item_init( ZCD_NV_TRANSMIT_POWER, sizeof(transmitPower), &transmitPower ); + + // Set transmit power + osal_nv_read( ZCD_NV_TRANSMIT_POWER, 0, sizeof( transmitPower ), &transmitPower ); + ZMacSetTransmitPower( (ZMacTransmitPower_t)transmitPower ); + // Initialize application zclGenericApp_initialization(); @@ -870,6 +882,7 @@ static void zclGenericApp_processAfIncomingMsgInd(zstack_afIncomingMsgInd_t *pIn */ static void zclGenericApp_ProcessCommissioningStatus(bdbCommissioningModeMsg_t *bdbCommissioningModeMsg) { + zstack_bdbStartCommissioningReq_t zstack_bdbStartCommissioningReq; switch(bdbCommissioningModeMsg->bdbCommissioningMode) { case BDB_COMMISSIONING_FORMATION: @@ -909,6 +922,8 @@ static void zclGenericApp_ProcessCommissioningStatus(bdbCommissioningModeMsg_t * } break; case BDB_COMMISSIONING_INITIALIZATION: + zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; + Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); //Initialization notification can only be successful. Failure on initialization //only happens for ZED and is notified as BDB_COMMISSIONING_PARENT_LOST notification @@ -1209,28 +1224,16 @@ static void zclGenericApp_changeKeyCallback(Button_Handle _btn, Button_EventMask */ static void zclGenericApp_processKey(Button_Handle _btn) { - zstack_bdbStartCommissioningReq_t zstack_bdbStartCommissioningReq; - //Button 1 - if(_btn == gLeftButtonHandle) - { - if(ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE) - { + NLME_LeaveReq_t req; + memset( &req, 0, sizeof( NLME_LeaveReq_t ) ); + NLME_LeaveReq(&req); + // Sleep for 2 seconds, otherwise leave request is not send + Task_sleep(2000 * (1000 / ClockP_getSystemTickPeriod())); - zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; - Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); - } - else if (ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE) - { - zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; - Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); - } - } - //Button 2 - if(_btn == gRightButtonHandle) - { - Zstackapi_bdbResetLocalActionReq(appServiceTaskId); - } + zgWriteStartupOptions( ZG_STARTUP_SET, + ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE); + SysCtrlSystemReset(); } diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c index c0e473d..4d08810 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c @@ -49,6 +49,8 @@ #include "zcl_general.h" #include "zcl_ha.h" +#include "osal_nv.h" + /* GENERICAPP_TODO: Include any of the header files below to access specific cluster data #include "zcl_poll_control.h" #include "zcl_electrical_measurement.h" @@ -96,8 +98,11 @@ const uint16_t zclGenericApp_identify_clusterRevision = 0x0001; const uint8_t zclGenericApp_HWRevision = GENERICAPP_HWVERSION; const uint8_t zclGenericApp_ZCLVersion = GENERICAPP_ZCLVERSION; const uint8_t zclGenericApp_ManufacturerName[] = { 16, 'T','e','x','a','s','I','n','s','t','r','u','m','e','n','t','s' }; +const uint8_t zclGenericApp_ModelID[] = { 9, 't','i','.','r','o','u','t','e','r' }; +const uint8_t zclGenericApp_SwBuildID[] = { 8, '2','0','2','2','1','1','0','2' }; const uint8_t zclGenericApp_PowerSource = POWER_SOURCE_MAINS_1_PHASE; uint8_t zclGenericApp_PhysicalEnvironment = PHY_UNSPECIFIED_ENV; +int8_t zclGenericApp_TransmitPower; #ifdef ZCL_IDENTIFY // Identify Cluster @@ -134,7 +139,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_HW_VERSION, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h) ZCL_DATATYPE_UINT8, // Data Type - found in zcl.h - ACCESS_CONTROL_READ, // Variable access control - found in zcl.h + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), // Variable access control - found in zcl.h (void *)&zclGenericApp_HWRevision // Pointer to attribute variable } }, @@ -143,16 +148,34 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_ZCL_VERSION, ZCL_DATATYPE_UINT8, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_REPORTABLE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_ZCLVersion } }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_MODEL_IDENTIFIER, + ZCL_DATATYPE_CHAR_STR, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), + (void *)zclGenericApp_ModelID + } + }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_SW_BUILD_ID, + ZCL_DATATYPE_CHAR_STR, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), + (void *)zclGenericApp_SwBuildID + } + }, { ZCL_CLUSTER_ID_GENERAL_BASIC, { // Attribute record ATTRID_BASIC_MANUFACTURER_NAME, ZCL_DATATYPE_CHAR_STR, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)zclGenericApp_ManufacturerName } }, @@ -161,7 +184,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_POWER_SOURCE, ZCL_DATATYPE_ENUM8, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_PowerSource } }, @@ -170,7 +193,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_PHYSICAL_ENVIRONMENT, ZCL_DATATYPE_ENUM8, - (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE), + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_PhysicalEnvironment } }, @@ -179,10 +202,20 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_CLUSTER_REVISION, ZCL_DATATYPE_UINT16, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_basic_clusterRevision } }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_TRANSMIT_POWER, + ZCL_DATATYPE_INT8, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), + (void *)&zclGenericApp_TransmitPower + } + }, + #ifdef ZCL_IDENTIFY // *** Identify Cluster Attribute *** @@ -191,7 +224,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_IDENTIFY_IDENTIFY_TIME, ZCL_DATATYPE_UINT16, - (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE), + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_IdentifyTime } }, @@ -201,7 +234,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_CLUSTER_REVISION, ZCL_DATATYPE_UINT16, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_identify_clusterRevision } }, @@ -276,6 +309,7 @@ void zclGenericApp_ResetAttributesToDefaultValues(void) { zclGenericApp_PhysicalEnvironment = PHY_UNSPECIFIED_ENV; + osal_nv_read( ZCD_NV_TRANSMIT_POWER, 0, sizeof( zclGenericApp_TransmitPower ), &zclGenericApp_TransmitPower ); #ifdef ZCL_IDENTIFY zclGenericApp_IdentifyTime = 0; diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c index 51902c4..9afcba3 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c @@ -47,6 +47,8 @@ #include "zcl.h" #include "zcl_general.h" +#include "osal_nv.h" + #if defined ( INTER_PAN ) || defined ( BDB_TL_INITIATOR ) || defined ( BDB_TL_TARGET ) #include "stub_aps.h" #endif @@ -4675,6 +4677,14 @@ static uint8_t zclProcessInWriteCmd( zclIncoming_t *pInMsg ) status = zclWriteAttrData( pInMsg->msg->endPoint, &(pInMsg->msg->srcAddr), &attrRec, statusRec ); } + + if((pInMsg->msg->clusterId == ZCL_CLUSTER_ID_GENERAL_BASIC) && (statusRec->attrID == ATTRID_BASIC_TRANSMIT_POWER)) + { + int8_t transmitPower; + OsalPort_memcpy((int8_t*)&transmitPower,statusRec->attrData,sizeof(int8_t)); + ZMacSetTransmitPower( (ZMacTransmitPower_t)transmitPower ); + osal_nv_write( ZCD_NV_TRANSMIT_POWER, sizeof( transmitPower ), &transmitPower ); + } } else // Use CB { diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts index b841d60..ed396c2 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts @@ -9,3 +9,5 @@ -DADDRMGR_NV_SINGLES -DBINDINGTABLE_NV_SINGLES -DASSOCLIST_NV_SINGLES + +-include preinclude.h \ No newline at end of file diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h new file mode 100644 index 0000000..1d0429a --- /dev/null +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h @@ -0,0 +1,51 @@ +// Increase MAC buffers +#undef MAC_CFG_TX_DATA_MAX +#define MAC_CFG_TX_DATA_MAX 20 +#undef MAC_CFG_TX_MAX +#define MAC_CFG_TX_MAX 32 +#undef MAC_CFG_RX_MAX +#define MAC_CFG_RX_MAX 20 + +// Increase NV pages to 3 to allow for bigger device tables +#undef NVOCMP_NVPAGES +#define NVOCMP_NVPAGES 3 + +// Increase the max number of boardcasts, the default broadcast delivery time is 3 seconds +// with the value below this will allow for 1 broadcast every 0.15 second +#define MAX_BCAST 30 + +#define ZCL_REPORT_DESTINATION_DEVICE +#define BDB_REPORTING +#define CUI_DISABLE +#define NWK_MAX_DEVICE_LIST 50 +#define MAX_NEIGHBOR_ENTRIES 50 +#define MAX_RTG_ENTRIES 150 +#define ZDO_API_ADVANCED + +// From https://www.ti.com/lit/an/swra650b/swra650b.pdf +#define LINK_DOWN_TRIGGER 12 +#define NWK_ROUTE_AGE_LIMIT 5 +#define DEF_NWK_RADIUS 15 +#define DEFAULT_ROUTE_REQUEST_RADIUS 8 +#define ZDNWKMGR_MIN_TRANSMISSIONS 0 +#define ROUTE_DISCOVERY_TIME 13 + +/** + * Set default transmit power to 9 + */ +#define TXPOWER 9 + +#define ATTRID_BASIC_TRANSMIT_POWER 0x1337 + +// Different configs, uncomment for for launchpad firmware +#define LAUNCHPAD_CONFIG 1 + +#ifdef LAUNCHPAD_CONFIG +#define CONFIG_RF_24GHZ 0x0000001c +#define CONFIG_RF_HIGH_PA 0x0000001d +#define SET_CCFG_MODE_CONF_XOSC_CAPARRAY_DELTA 0xc1 +#else +#define CONFIG_RF_24GHZ 0x0000006 +#define CONFIG_RF_HIGH_PA 0x0000005 +#define SET_CCFG_MODE_CONF_XOSC_CAPARRAY_DELTA 0xfa +#endif diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h index 26c0b45..8a338c1 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h @@ -123,6 +123,9 @@ extern "C" #define ZCD_NV_STARTUP_OPTION 0x0003 #define ZCD_NV_START_DELAY 0x0004 +// Custom transmit power NV item +#define ZCD_NV_TRANSMIT_POWER 0x0010 + // NWK Layer NV item IDs #define ZCD_NV_NIB 0x0021 #define ZCD_NV_DEVICE_LIST 0x0022 diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c index 706736b..b63af7b 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c @@ -225,7 +225,7 @@ uint8_t zgEndDeviceConfiguration = END_DEV_CONFIGURATION; // // NOTICE: Before enabling Child Aging make sure to review all the related // definitions in this file, especially zgNwkParentInformation. -uint8_t zgChildAgingEnable = TRUE; +uint8_t zgChildAgingEnable = FALSE; //========== TouchLink NWK configuration =============== // Values used by Router when starts a network as initiator diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c index 1f30180..0fd57f5 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c @@ -441,12 +441,11 @@ uint32_t ZDApp_event_loop( uint8_t task_id, uint32_t events ) ZDApp_ChangeState( DEV_ROUTER ); } - if ( zgChildAgingEnable == TRUE ) - { - // Once the device has changed its state to a ROUTER set the timer to send - // Parent annce - ZDApp_SetParentAnnceTimer(); - } + // As we cannot enable child aging as Xiaomi devices will drop off + // but we stil want to have the parent announces we always enable it here. + // Otherwise some end devices could be unreachable when they changed parent + // while the coordinator was powered off. + ZDApp_SetParentAnnceTimer(); } else { @@ -907,12 +906,11 @@ void ZDApp_NetworkStartEvt( void ) bdb_reportCommissioningState(BDB_INITIALIZATION,TRUE); } - if ( zgChildAgingEnable == TRUE ) - { - // Once the device has changed its state to a COORDINATOR set the timer to send - // Parent annce - ZDApp_SetParentAnnceTimer(); - } + // As we cannot enable child aging as Xiaomi devices will drop off + // but we stil want to have the parent announces we always enable it here. + // Otherwise some end devices could be unreachable when they changed parent + // while the coordinator was powered off. + ZDApp_SetParentAnnceTimer(); } else { diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd index da62af1..234ac56 100755 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd @@ -71,9 +71,9 @@ #endif #define FLASH_BASE 0x00000000 -#define FLASH_SIZE (0x56000 - (NVOCMP_NVPAGES * 0x2000)) -#define FLASH_NV_BASE (0x56000 - (NVOCMP_NVPAGES * 0x2000)) -#define FLASH_NV_SIZE (NVOCMP_NVPAGES * 0x2000) +#define FLASH_SIZE 0x50000 +#define FLASH_NV_BASE 0x50000 +#define FLASH_NV_SIZE 0x6000 #define FLASH_LAST_BASE 0x56000 #define FLASH_LAST_SIZE 0x2000 diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_devices_config.c b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_devices_config.c new file mode 100644 index 0000000..c80aafd --- /dev/null +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_devices_config.c @@ -0,0 +1,108 @@ +/* + * ======== ti_devices_config.c ======== + * Customer Configuration for CC26XX and CC13XX devices. + * + * DO NOT EDIT - This file is generated by the SysConfig tool. + * + */ + +//##################################### +// Force VDDR high setting (Higher output power but also higher power consumption) +// This is also called "boost mode" +//##################################### + +// Force VDDR voltage to the factory HH setting (FCFG1..VDDR_TRIM_HH) +#define CCFG_FORCE_VDDR_HH 0x1 + + +//##################################### +// Power settings +//##################################### + +// Do not use the DC/DC during recharge in powerdown +#define SET_CCFG_MODE_CONF_DCDC_RECHARGE 0x1 + +// Do not use the DC/DC during active mode +#define SET_CCFG_MODE_CONF_DCDC_ACTIVE 0x1 + + +//##################################### +// Clock settings +//##################################### + +// LF XOSC +#define SET_CCFG_MODE_CONF_SCLK_LF_OPTION 0x2 + +// Apply cap-array delta +#define SET_CCFG_MODE_CONF_XOSC_CAP_MOD 0x0 +// CUSTOM: set in preinclude.h +// #define SET_CCFG_MODE_CONF_XOSC_CAPARRAY_DELTA 0xc1 + +//##################################### +// Special HF clock source setting +//##################################### + +// HF source is a 48 MHz xtal +#define SET_CCFG_MODE_CONF_XOSC_FREQ 0x2 + +//##################################### +// Bootloader settings +//##################################### + +// Enable ROM boot loader +#define SET_CCFG_BL_CONFIG_BOOTLOADER_ENABLE 0xC5 + +// Enabled boot loader backdoor +#define SET_CCFG_BL_CONFIG_BL_ENABLE 0xC5 + +// DIO number for boot loader backdoor +#define SET_CCFG_BL_CONFIG_BL_PIN_NUMBER 0xf + +// Active low to open boot loader backdoor +#define SET_CCFG_BL_CONFIG_BL_LEVEL 0x0 + + +// Default address in IMAGE_VALID_CONF register +#define SET_CCFG_IMAGE_VALID_CONF_IMAGE_VALID 0x00000000 + +//##################################### +// Debug access settings +//##################################### + +// Disable unlocking of TI Failure Analysis option +#define SET_CCFG_CCFG_TI_OPTIONS_TI_FA_ENABLE 0x00 + +// Disable customer key CKEY0-3 to be XOR'ed with TI FA option unlock key +#define SET_CCFG_CCFG_TI_OPTIONS_C_FA_DIS 0xC5 + +// Access enabled if also enabled in FCFG +#define SET_CCFG_CCFG_TAP_DAP_0_CPU_DAP_ENABLE 0xC5 + +// Access enabled if also enabled in FCFG +#define SET_CCFG_CCFG_TAP_DAP_0_PWRPROF_TAP_ENABLE 0xC5 + +// Access disabled +#define SET_CCFG_CCFG_TAP_DAP_0_TEST_TAP_ENABLE 0x00 + +// Access disabled +#define SET_CCFG_CCFG_TAP_DAP_1_PBIST2_TAP_ENABLE 0x00 + +// Access disabled +#define SET_CCFG_CCFG_TAP_DAP_1_PBIST1_TAP_ENABLE 0x00 + +// Access disabled +#define SET_CCFG_CCFG_TAP_DAP_1_AON_TAP_ENABLE 0x00 + +//##################################### +// Select between cache or GPRAM +//##################################### + +// Cache is enabled and GPRAM is disabled (unavailable) +#define SET_CCFG_SIZE_AND_DIS_FLAGS_DIS_GPRAM 0x1 + +/* + * ======== Include Base Settings for device ======== + */ + +#include +#include DeviceFamily_constructPath(startup_files/ccfg.c) diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_drivers_config.h b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_drivers_config.h new file mode 100644 index 0000000..6a57a31 --- /dev/null +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_drivers_config.h @@ -0,0 +1,274 @@ +/* + * ======== ti_drivers_config.h ======== + * Configured TI-Drivers module declarations + * + * The macros defines herein are intended for use by applications which + * directly include this header. These macros should NOT be hard coded or + * copied into library source code. + * + * Symbols declared as const are intended for use with libraries. + * Library source code must extern the correct symbol--which is resolved + * when the application is linked. + * + * DO NOT EDIT - This file is generated for the CC1352P_2_LAUNCHXL + * by the SysConfig tool. + */ +#ifndef ti_drivers_config_h +#define ti_drivers_config_h + +#define CONFIG_SYSCONFIG_PREVIEW + +#define CONFIG_CC1352P_2_LAUNCHXL +#ifndef DeviceFamily_CC13X2 +#define DeviceFamily_CC13X2 +#endif + +#include + +#include + +/* support C++ sources */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * ======== CCFG ======== + */ + + +/* + * ======== AESCBC ======== + */ + +extern const uint_least8_t CONFIG_AESCBC_0_CONST; +#define CONFIG_AESCBC_0 0 +#define CONFIG_TI_DRIVERS_AESCBC_COUNT 1 + + +/* + * ======== AESCCM ======== + */ + +extern const uint_least8_t CONFIG_AESCCM_0_CONST; +#define CONFIG_AESCCM_0 0 +#define CONFIG_TI_DRIVERS_AESCCM_COUNT 1 + + +/* + * ======== AESECB ======== + */ + +extern const uint_least8_t CONFIG_AESECB_0_CONST; +#define CONFIG_AESECB_0 0 +#define CONFIG_TI_DRIVERS_AESECB_COUNT 1 + + +/* + * ======== ECDH ======== + */ + +extern const uint_least8_t CONFIG_ECDH_0_CONST; +#define CONFIG_ECDH_0 0 +#define CONFIG_TI_DRIVERS_ECDH_COUNT 1 + + +/* + * ======== ECDSA ======== + */ + +extern const uint_least8_t CONFIG_ECDSA_0_CONST; +#define CONFIG_ECDSA_0 0 +#define CONFIG_TI_DRIVERS_ECDSA_COUNT 1 + + +/* + * ======== GPIO ======== + */ +/* Owned by CONFIG_DISPLAY_UART as */ +extern const uint_least8_t CONFIG_GPIO_DISPLAY_UART_TX_CONST; +#define CONFIG_GPIO_DISPLAY_UART_TX 13 + +/* Owned by CONFIG_DISPLAY_UART as */ +extern const uint_least8_t CONFIG_GPIO_DISPLAY_UART_RX_CONST; +#define CONFIG_GPIO_DISPLAY_UART_RX 12 + +/* Owned by /ti/drivers/RF as */ +extern const uint_least8_t CONFIG_RF_24GHZ_CONST; +// CUSTOM: set in preinclude.h +// #define CONFIG_RF_24GHZ 28 + +/* Owned by /ti/drivers/RF as */ +extern const uint_least8_t CONFIG_RF_HIGH_PA_CONST; +// CUSTOM: set in preinclude.h +// #define CONFIG_RF_HIGH_PA 29 + +/* Owned by /ti/drivers/RF as */ +extern const uint_least8_t CONFIG_RF_SUB1GHZ_CONST; +#define CONFIG_RF_SUB1GHZ 30 + +/* Owned by CONFIG_BTN_LEFT as */ +extern const uint_least8_t CONFIG_GPIO_BTN1_CONST; +#define CONFIG_GPIO_BTN1 15 + +/* Owned by CONFIG_BTN_RIGHT as */ +extern const uint_least8_t CONFIG_GPIO_BTN2_CONST; +#define CONFIG_GPIO_BTN2 14 + +/* Owned by CONFIG_LED_RED as */ +extern const uint_least8_t CONFIG_GPIO_RLED_CONST; +#define CONFIG_GPIO_RLED 6 + +/* Owned by CONFIG_LED_GREEN as */ +extern const uint_least8_t CONFIG_GPIO_GLED_CONST; +#define CONFIG_GPIO_GLED 7 + +/* Owned by CONFIG_NVS_SPI_0 as */ +extern const uint_least8_t CONFIG_GPIO_0_CONST; +#define CONFIG_GPIO_0 20 + +/* Owned by CONFIG_SPI_0 as */ +extern const uint_least8_t CONFIG_PIN_SPI_SCLK_CONST; +#define CONFIG_PIN_SPI_SCLK 10 + +/* Owned by CONFIG_SPI_0 as */ +extern const uint_least8_t CONFIG_PIN_SPI_MISO_CONST; +#define CONFIG_PIN_SPI_MISO 8 + +/* Owned by CONFIG_SPI_0 as */ +extern const uint_least8_t CONFIG_PIN_SPI_MOSI_CONST; +#define CONFIG_PIN_SPI_MOSI 9 + +/* The range of pins available on this device */ +extern const uint_least8_t GPIO_pinLowerBound; +extern const uint_least8_t GPIO_pinUpperBound; + +/* LEDs are active high */ +#define CONFIG_GPIO_LED_ON (1) +#define CONFIG_GPIO_LED_OFF (0) + +#define CONFIG_LED_ON (CONFIG_GPIO_LED_ON) +#define CONFIG_LED_OFF (CONFIG_GPIO_LED_OFF) + + +/* + * ======== NVS ======== + */ + +extern const uint_least8_t CONFIG_NVSINTERNAL_CONST; +#define CONFIG_NVSINTERNAL 0 +/* + * MOSI: DIO9 + * MISO: DIO8 + * SCLK: DIO10 + * LaunchPad SPI Bus + * SS: undefined + */ +extern const uint_least8_t CONFIG_NVSEXTERNAL_CONST; +#define CONFIG_NVSEXTERNAL 1 +#define CONFIG_TI_DRIVERS_NVS_COUNT 2 + + +/* + * ======== RF ======== + */ +#define Board_DIO_30_RFSW 0x0000001e + + +/* + * ======== SHA2 ======== + */ + +extern const uint_least8_t CONFIG_SHA2_0_CONST; +#define CONFIG_SHA2_0 0 +#define CONFIG_TI_DRIVERS_SHA2_COUNT 1 + + +/* + * ======== SPI ======== + */ + +/* + * MOSI: DIO9 + * MISO: DIO8 + * SCLK: DIO10 + * LaunchPad SPI Bus + */ +extern const uint_least8_t CONFIG_SPI_0_CONST; +#define CONFIG_SPI_0 0 +#define CONFIG_TI_DRIVERS_SPI_COUNT 1 + + +/* + * ======== TRNG ======== + */ + +extern const uint_least8_t CONFIG_TRNG_0_CONST; +#define CONFIG_TRNG_0 0 +#define CONFIG_TI_DRIVERS_TRNG_COUNT 1 + + +/* + * ======== UART2 ======== + */ + +/* + * TX: DIO13 + * RX: DIO12 + * XDS110 UART + */ +extern const uint_least8_t CONFIG_DISPLAY_UART_CONST; +#define CONFIG_DISPLAY_UART 0 +#define CONFIG_TI_DRIVERS_UART2_COUNT 1 + + +/* + * ======== Button ======== + */ + +extern const uint_least8_t CONFIG_BTN_LEFT_CONST; +#define CONFIG_BTN_LEFT 0 +extern const uint_least8_t CONFIG_BTN_RIGHT_CONST; +#define CONFIG_BTN_RIGHT 1 +#define CONFIG_TI_DRIVERS_BUTTON_COUNT 2 + + +/* + * ======== LED ======== + */ + +extern const uint_least8_t CONFIG_LED_RED_CONST; +#define CONFIG_LED_RED 0 +extern const uint_least8_t CONFIG_LED_GREEN_CONST; +#define CONFIG_LED_GREEN 1 +#define CONFIG_TI_DRIVERS_LED_COUNT 2 + + +/* + * ======== Board_init ======== + * Perform all required TI-Drivers initialization + * + * This function should be called once at a point before any use of + * TI-Drivers. + */ +extern void Board_init(void); + +/* + * ======== Board_initGeneral ======== + * (deprecated) + * + * Board_initGeneral() is defined purely for backward compatibility. + * + * All new code should use Board_init() to do any required TI-Drivers + * initialization _and_ use _init() for only where specific drivers + * are explicitly referenced by the application. _init() functions + * are idempotent. + */ +#define Board_initGeneral Board_init + +#ifdef __cplusplus +} +#endif + +#endif /* include guard */ diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.c b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.c new file mode 100644 index 0000000..229cea7 --- /dev/null +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.c @@ -0,0 +1,385 @@ +/* + * ======== ti_radio_config.c ======== + * Configured RadioConfig module definitions + * + * DO NOT EDIT - This file is generated for the CC1352P1F3RGZ + * by the SysConfig tool. + * + * Radio Config module version : 1.14 + * SmartRF Studio data version : 2.27.0 + */ + +#include "ti_radio_config.h" +#include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_ieee_802_15_4.h) + + +// ********************************************************************************* +// RF Frontend configuration +// ********************************************************************************* +// RF design based on: LAUNCHXL-CC1352P-2 + +// TX Power tables +// The RF_TxPowerTable_DEFAULT_PA_ENTRY and RF_TxPowerTable_HIGH_PA_ENTRY macros are defined in RF.h. +// The following arguments are required: +// RF_TxPowerTable_DEFAULT_PA_ENTRY(bias, gain, boost, coefficient) +// RF_TxPowerTable_HIGH_PA_ENTRY(bias, ibboost, boost, coefficient, ldoTrim) +// See the Technical Reference Manual for further details about the "txPower" Command field. +// The PA settings require the CCFG_FORCE_VDDR_HH = 0 unless stated otherwise. + +// 868 MHz, 13 dBm +RF_TxPowerTable_Entry txPowerTable_868_pa13[TXPOWERTABLE_868_PA13_SIZE] = +{ + {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(0, 3, 0, 2) }, // 0x04C0 + {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(1, 3, 0, 3) }, // 0x06C1 + {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(2, 3, 0, 5) }, // 0x0AC2 + {-7, RF_TxPowerTable_DEFAULT_PA_ENTRY(3, 3, 0, 5) }, // 0x0AC3 + {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(4, 3, 0, 5) }, // 0x0AC4 + {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(5, 3, 0, 6) }, // 0x0CC5 + {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 8) }, // 0x10C8 + {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(9, 3, 0, 9) }, // 0x12C9 + {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 9) }, // 0x12CA + {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(11, 3, 0, 10) }, // 0x14CB + {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(13, 3, 0, 11) }, // 0x16CD + {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(14, 3, 0, 14) }, // 0x1CCE + {6, RF_TxPowerTable_DEFAULT_PA_ENTRY(17, 3, 0, 16) }, // 0x20D1 + {7, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 19) }, // 0x26D4 + {8, RF_TxPowerTable_DEFAULT_PA_ENTRY(24, 3, 0, 22) }, // 0x2CD8 + {9, RF_TxPowerTable_DEFAULT_PA_ENTRY(28, 3, 0, 31) }, // 0x3EDC + {10, RF_TxPowerTable_DEFAULT_PA_ENTRY(18, 2, 0, 31) }, // 0x3E92 + {11, RF_TxPowerTable_DEFAULT_PA_ENTRY(26, 2, 0, 51) }, // 0x669A + {12, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 0, 0, 82) }, // 0xA410 + // The original PA value (12.5 dBm) has been rounded to an integer value. + {13, RF_TxPowerTable_DEFAULT_PA_ENTRY(36, 0, 0, 89) }, // 0xB224 + // This setting requires CCFG_FORCE_VDDR_HH = 1. + {14, RF_TxPowerTable_DEFAULT_PA_ENTRY(63, 0, 1, 0) }, // 0x013F + RF_TxPowerTable_TERMINATION_ENTRY +}; + + +// 2400 MHz, 5 dBm +RF_TxPowerTable_Entry txPowerTable_2400_pa5[TXPOWERTABLE_2400_PA5_SIZE] = +{ + {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(6, 3, 0, 2) }, // 0x04C6 + {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) }, // 0x06C8 + {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) }, // 0x06CA + {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) }, // 0x0ACC + {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) }, // 0x0ACF + {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) }, // 0x0AD0 + {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) }, // 0x10D4 + {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) }, // 0x12D6 + {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) }, // 0x1893 + {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) }, // 0x2853 + {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) }, // 0x2856 + {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) }, // 0x3259 + {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) }, // 0x385D + {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) }, // 0x4E63 + {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) }, // 0x7217 + RF_TxPowerTable_TERMINATION_ENTRY +}; + +// 2400 MHz, 5 + 20 dBm +RF_TxPowerTable_Entry txPowerTable_2400_pa5_20[TXPOWERTABLE_2400_PA5_20_SIZE] = +{ + {-20, RF_TxPowerTable_DEFAULT_PA_ENTRY(6, 3, 0, 2) }, // 0x04C6 + {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) }, // 0x06C8 + {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) }, // 0x06CA + {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) }, // 0x0ACC + {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) }, // 0x0ACF + {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) }, // 0x0AD0 + {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) }, // 0x10D4 + {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) }, // 0x12D6 + {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) }, // 0x1893 + {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) }, // 0x2853 + {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) }, // 0x2856 + {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) }, // 0x3259 + {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) }, // 0x385D + {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) }, // 0x4E63 + {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) }, // 0x7217 + + // CUSTOM: allow transmit power 6 - 13 dbm + {6, .value.rawValue = (0x144f2a), .value.paType = RF_TxPowerTable_HighPA }, + {7, .value.rawValue = (0x14285f), .value.paType = RF_TxPowerTable_HighPA }, + {8, .value.rawValue = (0x10335a), .value.paType = RF_TxPowerTable_HighPA }, + {9, .value.rawValue = (0x103f5f), .value.paType = RF_TxPowerTable_HighPA }, + {10, .value.rawValue = (0x104f66), .value.paType = RF_TxPowerTable_HighPA }, + {11, .value.rawValue = (0x3021cb), .value.paType = RF_TxPowerTable_HighPA }, + {12, .value.rawValue = (0x3f27cc), .value.paType = RF_TxPowerTable_HighPA }, + {13, .value.rawValue = (0x3fc3cd), .value.paType = RF_TxPowerTable_HighPA }, + + {14, RF_TxPowerTable_HIGH_PA_ENTRY(22, 3, 1, 19, 27) }, // 0x1B27D6 + {15, RF_TxPowerTable_HIGH_PA_ENTRY(26, 3, 1, 23, 27) }, // 0x1B2FDA + {16, RF_TxPowerTable_HIGH_PA_ENTRY(30, 3, 1, 28, 27) }, // 0x1B39DE + {17, RF_TxPowerTable_HIGH_PA_ENTRY(37, 3, 1, 39, 27) }, // 0x1B4FE5 + {18, RF_TxPowerTable_HIGH_PA_ENTRY(32, 3, 1, 35, 48) }, // 0x3047E0 + {19, RF_TxPowerTable_HIGH_PA_ENTRY(34, 3, 1, 48, 63) }, // 0x3F61E2 + {20, RF_TxPowerTable_HIGH_PA_ENTRY(53, 3, 1, 58, 63) }, // 0x3F75F5 + RF_TxPowerTable_TERMINATION_ENTRY +}; + + + +//********************************************************************************* +// RF Setting: IEEE 802.15.4-2006, 250 kbps, OQPSK, DSSS = 1:8 +// +// PHY: ieee154 +// Setting file: setting_ieee_802_15_4.json +//********************************************************************************* + +// PARAMETER SUMMARY +// Channel - Frequency (MHz): 2405 +// TX Power (dBm): 20 + +// TI-RTOS RF Mode Object +RF_Mode RF_prop_ieee154 = +{ + .rfMode = RF_MODE_AUTO, + .cpePatchFxn = &rf_patch_cpe_ieee_802_15_4, + .mcePatchFxn = 0, + .rfePatchFxn = 0 +}; + +// Overrides for CMD_RADIO_SETUP_PA +uint32_t pOverrides_ieee154[] = +{ + // override_ieee_802_15_4.json + // Rx: Set LNA bias current offset to +15 to saturate trim to max (default: 0) + (uint32_t)0x000F8883, + // Tx: Set DCDC settings IPEAK=3, dither = off + (uint32_t)0x00F388D3, + (uint32_t)0xFFFFFFFF +}; + +// Overrides for CMD_RADIO_SETUP_PA +uint32_t pOverrides_ieee154TxStd[] = +{ + // override_txstd_placeholder.json + // TX Standard power override + TX_STD_POWER_OVERRIDE(0x7217), + // The ANADIV radio parameter based on LO divider and front end settings + (uint32_t)0x05320703, + // override_txstd_settings.json + // Set RTIM offset to default for standard PA + (uint32_t)0x00008783, + // Set synth mux to default value for standard PA + (uint32_t)0x050206C3, + // Set TXRX pin to 0 in RX and high impedance in idle/TX. + HW_REG_OVERRIDE(0x60A8,0x0401), + (uint32_t)0xFFFFFFFF +}; + +// Overrides for CMD_RADIO_SETUP_PA +uint32_t pOverrides_ieee154Tx20[] = +{ + // override_tx20_placeholder.json + // TX HighPA power override + TX20_POWER_OVERRIDE(0x003F75F5), + // The ANADIV radio parameter based on LO divider and front end settings + (uint32_t)0x01C20703, + // override_tx20_settings.json + // Set RTIM offset to 3 for high power PA + (uint32_t)0x00038783, + // Set synth mux for high power PA + (uint32_t)0x010206C3, + // Set TXRX pin to 0 in RX/TX and high impedance in idle. + HW_REG_OVERRIDE(0x60A8,0x0001), + (uint32_t)0xFFFFFFFF +}; + + + +// CMD_RADIO_SETUP_PA +// Radio Setup Command for Pre-Defined Schemes +const rfc_CMD_RADIO_SETUP_PA_t RF_cmdRadioSetup_ieee154 = +{ + .commandNo = 0x0802, + .status = 0x0000, + .pNextOp = 0, + .startTime = 0x00000000, + .startTrigger.triggerType = 0x0, + .startTrigger.bEnaCmd = 0x0, + .startTrigger.triggerNo = 0x0, + .startTrigger.pastTrig = 0x0, + .condition.rule = 0x1, + .condition.nSkip = 0x0, + .mode = 0x01, + .loDivider = 0x00, + .config.frontEndMode = 0x0, + .config.biasMode = 0x1, + .config.analogCfgMode = 0x0, + .config.bNoFsPowerUp = 0x0, + .config.bSynthNarrowBand = 0x0, + .txPower = 0xFFFF, + .pRegOverride = pOverrides_ieee154, + .pRegOverrideTxStd = pOverrides_ieee154TxStd, + .pRegOverrideTx20 = pOverrides_ieee154Tx20 +}; + +// CMD_FS +// Frequency Synthesizer Programming Command +const rfc_CMD_FS_t RF_cmdFs_ieee154 = +{ + .commandNo = 0x0803, + .status = 0x0000, + .pNextOp = 0, + .startTime = 0x00000000, + .startTrigger.triggerType = 0x0, + .startTrigger.bEnaCmd = 0x0, + .startTrigger.triggerNo = 0x0, + .startTrigger.pastTrig = 0x0, + .condition.rule = 0x1, + .condition.nSkip = 0x0, + .frequency = 0x0965, + .fractFreq = 0x0000, + .synthConf.bTxMode = 0x0, + .synthConf.refFreq = 0x0, + .__dummy0 = 0x00, + .__dummy1 = 0x00, + .__dummy2 = 0x00, + .__dummy3 = 0x0000 +}; + +// CMD_IEEE_TX +// IEEE 802.15.4 Transmit Command +const rfc_CMD_IEEE_TX_t RF_cmdIeeeTx_ieee154 = +{ + .commandNo = 0x2C01, + .status = 0x0000, + .pNextOp = 0, + .startTime = 0x00000000, + .startTrigger.triggerType = 0x0, + .startTrigger.bEnaCmd = 0x0, + .startTrigger.triggerNo = 0x0, + .startTrigger.pastTrig = 0x0, + .condition.rule = 0x1, + .condition.nSkip = 0x0, + .txOpt.bIncludePhyHdr = 0x0, + .txOpt.bIncludeCrc = 0x0, + .txOpt.payloadLenMsb = 0x0, + .payloadLen = 0x1E, + .pPayload = 0, + .timeStamp = 0x00000000 +}; + +// CMD_IEEE_RX +// IEEE 802.15.4 Receive Command +const rfc_CMD_IEEE_RX_t RF_cmdIeeeRx_ieee154 = +{ + .commandNo = 0x2801, + .status = 0x0000, + .pNextOp = 0, + .startTime = 0x00000000, + .startTrigger.triggerType = 0x0, + .startTrigger.bEnaCmd = 0x0, + .startTrigger.triggerNo = 0x0, + .startTrigger.pastTrig = 0x0, + .condition.rule = 0x1, + .condition.nSkip = 0x0, + .channel = 0x00, + .rxConfig.bAutoFlushCrc = 0x0, + .rxConfig.bAutoFlushIgn = 0x0, + .rxConfig.bIncludePhyHdr = 0x0, + .rxConfig.bIncludeCrc = 0x0, + .rxConfig.bAppendRssi = 0x1, + .rxConfig.bAppendCorrCrc = 0x1, + .rxConfig.bAppendSrcInd = 0x0, + .rxConfig.bAppendTimestamp = 0x0, + .pRxQ = 0, + .pOutput = 0, + .frameFiltOpt.frameFiltEn = 0x0, + .frameFiltOpt.frameFiltStop = 0x0, + .frameFiltOpt.autoAckEn = 0x0, + .frameFiltOpt.slottedAckEn = 0x0, + .frameFiltOpt.autoPendEn = 0x0, + .frameFiltOpt.defaultPend = 0x0, + .frameFiltOpt.bPendDataReqOnly = 0x0, + .frameFiltOpt.bPanCoord = 0x0, + .frameFiltOpt.maxFrameVersion = 0x3, + .frameFiltOpt.fcfReservedMask = 0x0, + .frameFiltOpt.modifyFtFilter = 0x0, + .frameFiltOpt.bStrictLenFilter = 0x0, + .frameTypes.bAcceptFt0Beacon = 0x1, + .frameTypes.bAcceptFt1Data = 0x1, + .frameTypes.bAcceptFt2Ack = 0x1, + .frameTypes.bAcceptFt3MacCmd = 0x1, + .frameTypes.bAcceptFt4Reserved = 0x1, + .frameTypes.bAcceptFt5Reserved = 0x1, + .frameTypes.bAcceptFt6Reserved = 0x1, + .frameTypes.bAcceptFt7Reserved = 0x1, + .ccaOpt.ccaEnEnergy = 0x0, + .ccaOpt.ccaEnCorr = 0x0, + .ccaOpt.ccaEnSync = 0x0, + .ccaOpt.ccaCorrOp = 0x1, + .ccaOpt.ccaSyncOp = 0x1, + .ccaOpt.ccaCorrThr = 0x0, + .ccaRssiThr = 0x64, + .__dummy0 = 0x00, + .numExtEntries = 0x00, + .numShortEntries = 0x00, + .pExtEntryList = 0, + .pShortEntryList = 0, + .localExtAddr = 0x12345678, + .localShortAddr = 0xABBA, + .localPanID = 0x0000, + .__dummy1 = 0x000000, + .endTrigger.triggerType = 0x1, + .endTrigger.bEnaCmd = 0x0, + .endTrigger.triggerNo = 0x0, + .endTrigger.pastTrig = 0x0, + .endTime = 0x00000000 +}; + +// CMD_IEEE_CSMA +// IEEE 802.15.4 CSMA-CA Command +const rfc_CMD_IEEE_CSMA_t RF_cmdIeeeCsma_ieee154 = +{ + .commandNo = 0x2C02, + .status = 0x0000, + .pNextOp = 0, + .startTime = 0x00000000, + .startTrigger.triggerType = 0x0, + .startTrigger.bEnaCmd = 0x0, + .startTrigger.triggerNo = 0x0, + .startTrigger.pastTrig = 0x0, + .condition.rule = 0x0, + .condition.nSkip = 0x0, + .randomState = 0x0000, + .macMaxBE = 0x00, + .macMaxCSMABackoffs = 0x00, + .csmaConfig.initCW = 0x0, + .csmaConfig.bSlotted = 0x0, + .csmaConfig.rxOffMode = 0x0, + .NB = 0x00, + .BE = 0x00, + .remainingPeriods = 0x00, + .lastRssi = 0x00, + .endTrigger.triggerType = 0x0, + .endTrigger.bEnaCmd = 0x0, + .endTrigger.triggerNo = 0x0, + .endTrigger.pastTrig = 0x0, + .lastTimeStamp = 0x00000000, + .endTime = 0x00000000 +}; + +// CMD_IEEE_RX_ACK +// IEEE 802.15.4 Receive Acknowledgement Command +const rfc_CMD_IEEE_RX_ACK_t RF_cmdIeeeRxAck_ieee154 = +{ + .commandNo = 0x2C03, + .status = 0x0000, + .pNextOp = 0, + .startTime = 0x00000000, + .startTrigger.triggerType = 0x0, + .startTrigger.bEnaCmd = 0x0, + .startTrigger.triggerNo = 0x0, + .startTrigger.pastTrig = 0x0, + .condition.rule = 0x0, + .condition.nSkip = 0x0, + .seqNo = 0x00, + .endTrigger.triggerType = 0x0, + .endTrigger.bEnaCmd = 0x0, + .endTrigger.triggerNo = 0x0, + .endTrigger.pastTrig = 0x0, + .endTime = 0x00000000 +}; + + diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.h b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.h new file mode 100644 index 0000000..870127b --- /dev/null +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/ti_radio_config.h @@ -0,0 +1,83 @@ +/* + * ======== ti_radio_config.h ======== + * Configured RadioConfig module definitions + * + * DO NOT EDIT - This file is generated for the CC1352P1F3RGZ + * by the SysConfig tool. + * + * Radio Config module version : 1.14 + * SmartRF Studio data version : 2.27.0 + */ +#ifndef _TI_RADIO_CONFIG_H_ +#define _TI_RADIO_CONFIG_H_ + +#include +#include DeviceFamily_constructPath(driverlib/rf_mailbox.h) +#include DeviceFamily_constructPath(driverlib/rf_common_cmd.h) +#include DeviceFamily_constructPath(driverlib/rf_ieee_cmd.h) +#include + +/* SmartRF Studio version that the RF data is fetched from */ +#define SMARTRF_STUDIO_VERSION "2.27.0" + +// ********************************************************************************* +// RF Frontend configuration +// ********************************************************************************* +// RF design based on: LAUNCHXL-CC1352P-2 +#define LAUNCHXL_CC1352P_2 + +// High-Power Amplifier supported +#define SUPPORT_HIGH_PA + +// RF frontend configuration +#define FRONTEND_SUB1G_DIFF_RF +#define FRONTEND_SUB1G_EXT_BIAS +#define FRONTEND_24G_DIFF_RF +#define FRONTEND_24G_EXT_BIAS + +// Supported frequency bands +#define SUPPORT_FREQBAND_868 +#define SUPPORT_FREQBAND_2400 + +// TX power table size definitions +#define TXPOWERTABLE_868_PA13_SIZE 22 // 868 MHz, 13 dBm +#define TXPOWERTABLE_2400_PA5_SIZE 16 // 2400 MHz, 5 dBm +// CUSTOM: account for extra entities in ti_radio_config.c txPowerTable_2400_pa5_20 +#define TXPOWERTABLE_2400_PA5_20_SIZE 31 // 2400 MHz, 5 + 20 dBm + +// TX power tables +extern RF_TxPowerTable_Entry txPowerTable_868_pa13[]; // 868 MHz, 13 dBm +extern RF_TxPowerTable_Entry txPowerTable_2400_pa5[]; // 2400 MHz, 5 dBm +extern RF_TxPowerTable_Entry txPowerTable_2400_pa5_20[]; // 2400 MHz, 5 + 20 dBm + + + +//********************************************************************************* +// RF Setting: IEEE 802.15.4-2006, 250 kbps, OQPSK, DSSS = 1:8 +// +// PHY: ieee154 +// Setting file: setting_ieee_802_15_4.json +//********************************************************************************* + +// PA table usage +#define TX_POWER_TABLE_SIZE_ieee154 TXPOWERTABLE_2400_PA5_20_SIZE + +#define txPowerTable_ieee154 txPowerTable_2400_pa5_20 + +// TI-RTOS RF Mode object +extern RF_Mode RF_prop_ieee154; + +// RF Core API commands +extern const rfc_CMD_RADIO_SETUP_PA_t RF_cmdRadioSetup_ieee154; +extern const rfc_CMD_FS_t RF_cmdFs_ieee154; +extern const rfc_CMD_IEEE_TX_t RF_cmdIeeeTx_ieee154; +extern const rfc_CMD_IEEE_RX_t RF_cmdIeeeRx_ieee154; +extern const rfc_CMD_IEEE_CSMA_t RF_cmdIeeeCsma_ieee154; +extern const rfc_CMD_IEEE_RX_ACK_t RF_cmdIeeeRxAck_ieee154; + +// RF Core API overrides +extern uint32_t pOverrides_ieee154[]; +extern uint32_t pOverrides_ieee154TxStd[]; +extern uint32_t pOverrides_ieee154Tx20[]; + +#endif // _TI_RADIO_CONFIG_H_ diff --git a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg index 1b16340..f700be5 100644 --- a/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg +++ b/zr_genericapp_CC1352P_2_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg @@ -4,6 +4,10 @@ * @cliArgs --board "/ti/boards/CC1352P_2_LAUNCHXL" --rtos "tirtos7" --product "simplelink_cc13xx_cc26xx_sdk@6.30.00.84" * @versions {"tool":"1.14.0+2667"} */ +scripting.excludeFromBuild("ti_devices_config.c"); +scripting.excludeFromBuild("ti_radio_config.c"); +scripting.excludeFromBuild("ti_radio_config.h"); +scripting.excludeFromBuild("ti_drivers_config.h"); /** * Import the modules used in this configuration. @@ -65,6 +69,7 @@ CCFG.enableBootloaderBackdoor = true; CCFG.dioBootloaderBackdoor = 15; CCFG.levelBootloaderBackdoor = "Active low"; CCFG.forceVddr = true; +CCFG.enableDCDC = false; CCFG.ccfgTemplate.$name = "ti_devices_CCFG_CCFGCC26XXTemplate0"; rfdesign.rfDesign = "LAUNCHXL-CC1352P-2"; @@ -87,8 +92,8 @@ ECDSA1.$name = "CONFIG_ECDSA_0"; NVS1.$name = "CONFIG_NVSINTERNAL"; NVS1.internalFlash.$name = "ti_drivers_nvs_NVSCC26XX0"; -NVS1.internalFlash.regionSize = 0x4000; -NVS1.internalFlash.regionBase = 0x52000; +NVS1.internalFlash.regionBase = 0x50000; +NVS1.internalFlash.regionSize = 0x6000; NVS2.$name = "CONFIG_NVSEXTERNAL"; NVS2.nvsType = "External"; @@ -179,6 +184,8 @@ zstack.deviceTypeReadOnly = true; zstack.touchlink.$name = "ti_zstack_touchlink_zstack_touchlink0"; zstack.pm.$name = "ti_zstack_pm_zstack_pm0"; zstack.rf.$name = "ti_zstack_rf_zstack_rf0"; +zstack.rf.txPower = "20"; +zstack.rf.primaryChannels = [11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]; zstack.rf.radioConfig.$name = "ti_devices_radioconfig_settings_ieee_15_40"; zstack.rf.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0"; zstack.rf.coexSettings.$name = "ti_zstack_rf_zstack_coex_mod0"; diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c index 550be7a..0725b39 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp.c @@ -53,6 +53,8 @@ * INCLUDES */ +#include + #include "rom_jt_154.h" #include "zcomdef.h" @@ -68,6 +70,8 @@ #include "zcl_genericapp.h" #include "zcl_port.h" +#include "osal_nv.h" + #include #include "ti_drivers_config.h" #include "util_timer.h" @@ -261,6 +265,14 @@ void sampleApp_task(NVINTF_nvFuncts_t *pfnNV) pfnZdlNV = pfnNV; zclport_registerNV(pfnZdlNV, ZCL_PORT_SCENE_TABLE_NV_ID); + // Init the transmit power NV item, this will be skipped if item is already initialized + int8_t transmitPower = TXPOWER; + osal_nv_item_init( ZCD_NV_TRANSMIT_POWER, sizeof(transmitPower), &transmitPower ); + + // Set transmit power + osal_nv_read( ZCD_NV_TRANSMIT_POWER, 0, sizeof( transmitPower ), &transmitPower ); + ZMacSetTransmitPower( (ZMacTransmitPower_t)transmitPower ); + // Initialize application zclGenericApp_initialization(); @@ -870,6 +882,7 @@ static void zclGenericApp_processAfIncomingMsgInd(zstack_afIncomingMsgInd_t *pIn */ static void zclGenericApp_ProcessCommissioningStatus(bdbCommissioningModeMsg_t *bdbCommissioningModeMsg) { + zstack_bdbStartCommissioningReq_t zstack_bdbStartCommissioningReq; switch(bdbCommissioningModeMsg->bdbCommissioningMode) { case BDB_COMMISSIONING_FORMATION: @@ -909,6 +922,8 @@ static void zclGenericApp_ProcessCommissioningStatus(bdbCommissioningModeMsg_t * } break; case BDB_COMMISSIONING_INITIALIZATION: + zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; + Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); //Initialization notification can only be successful. Failure on initialization //only happens for ZED and is notified as BDB_COMMISSIONING_PARENT_LOST notification @@ -1209,28 +1224,16 @@ static void zclGenericApp_changeKeyCallback(Button_Handle _btn, Button_EventMask */ static void zclGenericApp_processKey(Button_Handle _btn) { - zstack_bdbStartCommissioningReq_t zstack_bdbStartCommissioningReq; - //Button 1 - if(_btn == gLeftButtonHandle) - { - if(ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE) - { + NLME_LeaveReq_t req; + memset( &req, 0, sizeof( NLME_LeaveReq_t ) ); + NLME_LeaveReq(&req); + // Sleep for 2 seconds, otherwise leave request is not send + Task_sleep(2000 * (1000 / ClockP_getSystemTickPeriod())); - zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; - Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); - } - else if (ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE) - { - zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; - Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); - } - } - //Button 2 - if(_btn == gRightButtonHandle) - { - Zstackapi_bdbResetLocalActionReq(appServiceTaskId); - } + zgWriteStartupOptions( ZG_STARTUP_SET, + ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE); + SysCtrlSystemReset(); } diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c index c0e473d..4d08810 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Application/zcl_genericapp_data.c @@ -49,6 +49,8 @@ #include "zcl_general.h" #include "zcl_ha.h" +#include "osal_nv.h" + /* GENERICAPP_TODO: Include any of the header files below to access specific cluster data #include "zcl_poll_control.h" #include "zcl_electrical_measurement.h" @@ -96,8 +98,11 @@ const uint16_t zclGenericApp_identify_clusterRevision = 0x0001; const uint8_t zclGenericApp_HWRevision = GENERICAPP_HWVERSION; const uint8_t zclGenericApp_ZCLVersion = GENERICAPP_ZCLVERSION; const uint8_t zclGenericApp_ManufacturerName[] = { 16, 'T','e','x','a','s','I','n','s','t','r','u','m','e','n','t','s' }; +const uint8_t zclGenericApp_ModelID[] = { 9, 't','i','.','r','o','u','t','e','r' }; +const uint8_t zclGenericApp_SwBuildID[] = { 8, '2','0','2','2','1','1','0','2' }; const uint8_t zclGenericApp_PowerSource = POWER_SOURCE_MAINS_1_PHASE; uint8_t zclGenericApp_PhysicalEnvironment = PHY_UNSPECIFIED_ENV; +int8_t zclGenericApp_TransmitPower; #ifdef ZCL_IDENTIFY // Identify Cluster @@ -134,7 +139,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_HW_VERSION, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h) ZCL_DATATYPE_UINT8, // Data Type - found in zcl.h - ACCESS_CONTROL_READ, // Variable access control - found in zcl.h + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), // Variable access control - found in zcl.h (void *)&zclGenericApp_HWRevision // Pointer to attribute variable } }, @@ -143,16 +148,34 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_ZCL_VERSION, ZCL_DATATYPE_UINT8, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_REPORTABLE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_ZCLVersion } }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_MODEL_IDENTIFIER, + ZCL_DATATYPE_CHAR_STR, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), + (void *)zclGenericApp_ModelID + } + }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_SW_BUILD_ID, + ZCL_DATATYPE_CHAR_STR, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), + (void *)zclGenericApp_SwBuildID + } + }, { ZCL_CLUSTER_ID_GENERAL_BASIC, { // Attribute record ATTRID_BASIC_MANUFACTURER_NAME, ZCL_DATATYPE_CHAR_STR, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)zclGenericApp_ManufacturerName } }, @@ -161,7 +184,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_POWER_SOURCE, ZCL_DATATYPE_ENUM8, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_PowerSource } }, @@ -170,7 +193,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_PHYSICAL_ENVIRONMENT, ZCL_DATATYPE_ENUM8, - (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE), + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_PhysicalEnvironment } }, @@ -179,10 +202,20 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_CLUSTER_REVISION, ZCL_DATATYPE_UINT16, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_basic_clusterRevision } }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_TRANSMIT_POWER, + ZCL_DATATYPE_INT8, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), + (void *)&zclGenericApp_TransmitPower + } + }, + #ifdef ZCL_IDENTIFY // *** Identify Cluster Attribute *** @@ -191,7 +224,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_IDENTIFY_IDENTIFY_TIME, ZCL_DATATYPE_UINT16, - (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE), + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_IdentifyTime } }, @@ -201,7 +234,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_CLUSTER_REVISION, ZCL_DATATYPE_UINT16, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_identify_clusterRevision } }, @@ -276,6 +309,7 @@ void zclGenericApp_ResetAttributesToDefaultValues(void) { zclGenericApp_PhysicalEnvironment = PHY_UNSPECIFIED_ENV; + osal_nv_read( ZCD_NV_TRANSMIT_POWER, 0, sizeof( zclGenericApp_TransmitPower ), &zclGenericApp_TransmitPower ); #ifdef ZCL_IDENTIFY zclGenericApp_IdentifyTime = 0; diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c index 51902c4..9afcba3 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Common/zcl/zcl.c @@ -47,6 +47,8 @@ #include "zcl.h" #include "zcl_general.h" +#include "osal_nv.h" + #if defined ( INTER_PAN ) || defined ( BDB_TL_INITIATOR ) || defined ( BDB_TL_TARGET ) #include "stub_aps.h" #endif @@ -4675,6 +4677,14 @@ static uint8_t zclProcessInWriteCmd( zclIncoming_t *pInMsg ) status = zclWriteAttrData( pInMsg->msg->endPoint, &(pInMsg->msg->srcAddr), &attrRec, statusRec ); } + + if((pInMsg->msg->clusterId == ZCL_CLUSTER_ID_GENERAL_BASIC) && (statusRec->attrID == ATTRID_BASIC_TRANSMIT_POWER)) + { + int8_t transmitPower; + OsalPort_memcpy((int8_t*)&transmitPower,statusRec->attrData,sizeof(int8_t)); + ZMacSetTransmitPower( (ZMacTransmitPower_t)transmitPower ); + osal_nv_write( ZCD_NV_TRANSMIT_POWER, sizeof( transmitPower ), &transmitPower ); + } } else // Use CB { diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts index b841d60..ed396c2 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/f8wrouter.opts @@ -9,3 +9,5 @@ -DADDRMGR_NV_SINGLES -DBINDINGTABLE_NV_SINGLES -DASSOCLIST_NV_SINGLES + +-include preinclude.h \ No newline at end of file diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h new file mode 100644 index 0000000..1ce7b56 --- /dev/null +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/Config/preinclude.h @@ -0,0 +1,33 @@ +// Increase MAC buffers +#undef MAC_CFG_TX_DATA_MAX +#define MAC_CFG_TX_DATA_MAX 20 +#undef MAC_CFG_TX_MAX +#define MAC_CFG_TX_MAX 32 +#undef MAC_CFG_RX_MAX +#define MAC_CFG_RX_MAX 20 + +// Increase NV pages to 3 to allow for bigger device tables +#undef NVOCMP_NVPAGES +#define NVOCMP_NVPAGES 3 + +// Increase the max number of boardcasts, the default broadcast delivery time is 3 seconds +// with the value below this will allow for 1 broadcast every 0.15 second +#define MAX_BCAST 30 + +#define ZCL_REPORT_DESTINATION_DEVICE +#define BDB_REPORTING +#define CUI_DISABLE +#define NWK_MAX_DEVICE_LIST 50 +#define MAX_NEIGHBOR_ENTRIES 50 +#define MAX_RTG_ENTRIES 150 +#define ZDO_API_ADVANCED + +#define ATTRID_BASIC_TRANSMIT_POWER 0x1337 + +// From https://www.ti.com/lit/an/swra650b/swra650b.pdf +#define LINK_DOWN_TRIGGER 12 +#define NWK_ROUTE_AGE_LIMIT 5 +#define DEF_NWK_RADIUS 15 +#define DEFAULT_ROUTE_REQUEST_RADIUS 8 +#define ZDNWKMGR_MIN_TRANSMISSIONS 0 +#define ROUTE_DISCOVERY_TIME 13 diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h index 26c0b45..8a338c1 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zcomdef.h @@ -123,6 +123,9 @@ extern "C" #define ZCD_NV_STARTUP_OPTION 0x0003 #define ZCD_NV_START_DELAY 0x0004 +// Custom transmit power NV item +#define ZCD_NV_TRANSMIT_POWER 0x0010 + // NWK Layer NV item IDs #define ZCD_NV_NIB 0x0021 #define ZCD_NV_DEVICE_LIST 0x0022 diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c index 706736b..b63af7b 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/sys/zglobals.c @@ -225,7 +225,7 @@ uint8_t zgEndDeviceConfiguration = END_DEV_CONFIGURATION; // // NOTICE: Before enabling Child Aging make sure to review all the related // definitions in this file, especially zgNwkParentInformation. -uint8_t zgChildAgingEnable = TRUE; +uint8_t zgChildAgingEnable = FALSE; //========== TouchLink NWK configuration =============== // Values used by Router when starts a network as initiator diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c index 1f30180..0fd57f5 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/Stack/zdo/zd_app.c @@ -441,12 +441,11 @@ uint32_t ZDApp_event_loop( uint8_t task_id, uint32_t events ) ZDApp_ChangeState( DEV_ROUTER ); } - if ( zgChildAgingEnable == TRUE ) - { - // Once the device has changed its state to a ROUTER set the timer to send - // Parent annce - ZDApp_SetParentAnnceTimer(); - } + // As we cannot enable child aging as Xiaomi devices will drop off + // but we stil want to have the parent announces we always enable it here. + // Otherwise some end devices could be unreachable when they changed parent + // while the coordinator was powered off. + ZDApp_SetParentAnnceTimer(); } else { @@ -907,12 +906,11 @@ void ZDApp_NetworkStartEvt( void ) bdb_reportCommissioningState(BDB_INITIALIZATION,TRUE); } - if ( zgChildAgingEnable == TRUE ) - { - // Once the device has changed its state to a COORDINATOR set the timer to send - // Parent annce - ZDApp_SetParentAnnceTimer(); - } + // As we cannot enable child aging as Xiaomi devices will drop off + // but we stil want to have the parent announces we always enable it here. + // Otherwise some end devices could be unreachable when they changed parent + // while the coordinator was powered off. + ZDApp_SetParentAnnceTimer(); } else { diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd index da62af1..234ac56 100755 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd @@ -71,9 +71,9 @@ #endif #define FLASH_BASE 0x00000000 -#define FLASH_SIZE (0x56000 - (NVOCMP_NVPAGES * 0x2000)) -#define FLASH_NV_BASE (0x56000 - (NVOCMP_NVPAGES * 0x2000)) -#define FLASH_NV_SIZE (NVOCMP_NVPAGES * 0x2000) +#define FLASH_SIZE 0x50000 +#define FLASH_NV_BASE 0x50000 +#define FLASH_NV_SIZE 0x6000 #define FLASH_LAST_BASE 0x56000 #define FLASH_LAST_SIZE 0x2000 diff --git a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg index 7af3313..300960f 100644 --- a/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg +++ b/zr_genericapp_CC26X2R1_LAUNCHXL_tirtos7_ticlang/zr_genericapp.syscfg @@ -62,6 +62,7 @@ CCFG.enableBootloader = true; CCFG.enableBootloaderBackdoor = true; CCFG.dioBootloaderBackdoor = 13; CCFG.levelBootloaderBackdoor = "Active low"; +CCFG.enableDCDC = false; CCFG.ccfgTemplate.$name = "ti_devices_CCFG_CCFGCC26XXTemplate0"; Display1.$hardware = system.deviceData.board.components.XDS110UART; @@ -82,8 +83,8 @@ ECDSA1.$name = "CONFIG_ECDSA_0"; NVS1.$name = "CONFIG_NVSINTERNAL"; NVS1.internalFlash.$name = "ti_drivers_nvs_NVSCC26XX0"; -NVS1.internalFlash.regionSize = 0x4000; -NVS1.internalFlash.regionBase = 0x52000; +NVS1.internalFlash.regionBase = 0x50000; +NVS1.internalFlash.regionSize = 0x6000; NVS2.$name = "CONFIG_NVSEXTERNAL"; NVS2.nvsType = "External"; @@ -172,6 +173,8 @@ zstack.deviceTypeReadOnly = true; zstack.touchlink.$name = "ti_zstack_touchlink_zstack_touchlink0"; zstack.pm.$name = "ti_zstack_pm_zstack_pm0"; zstack.rf.$name = "ti_zstack_rf_zstack_rf0"; +zstack.rf.primaryChannels = [11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]; +zstack.rf.txPower = "5"; zstack.rf.radioConfig.$name = "ti_devices_radioconfig_settings_ieee_15_40"; zstack.rf.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0"; zstack.rf.coexSettings.$name = "ti_zstack_rf_zstack_coex_mod0"; diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp.c b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp.c index 550be7a..0725b39 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp.c +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp.c @@ -53,6 +53,8 @@ * INCLUDES */ +#include + #include "rom_jt_154.h" #include "zcomdef.h" @@ -68,6 +70,8 @@ #include "zcl_genericapp.h" #include "zcl_port.h" +#include "osal_nv.h" + #include #include "ti_drivers_config.h" #include "util_timer.h" @@ -261,6 +265,14 @@ void sampleApp_task(NVINTF_nvFuncts_t *pfnNV) pfnZdlNV = pfnNV; zclport_registerNV(pfnZdlNV, ZCL_PORT_SCENE_TABLE_NV_ID); + // Init the transmit power NV item, this will be skipped if item is already initialized + int8_t transmitPower = TXPOWER; + osal_nv_item_init( ZCD_NV_TRANSMIT_POWER, sizeof(transmitPower), &transmitPower ); + + // Set transmit power + osal_nv_read( ZCD_NV_TRANSMIT_POWER, 0, sizeof( transmitPower ), &transmitPower ); + ZMacSetTransmitPower( (ZMacTransmitPower_t)transmitPower ); + // Initialize application zclGenericApp_initialization(); @@ -870,6 +882,7 @@ static void zclGenericApp_processAfIncomingMsgInd(zstack_afIncomingMsgInd_t *pIn */ static void zclGenericApp_ProcessCommissioningStatus(bdbCommissioningModeMsg_t *bdbCommissioningModeMsg) { + zstack_bdbStartCommissioningReq_t zstack_bdbStartCommissioningReq; switch(bdbCommissioningModeMsg->bdbCommissioningMode) { case BDB_COMMISSIONING_FORMATION: @@ -909,6 +922,8 @@ static void zclGenericApp_ProcessCommissioningStatus(bdbCommissioningModeMsg_t * } break; case BDB_COMMISSIONING_INITIALIZATION: + zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; + Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); //Initialization notification can only be successful. Failure on initialization //only happens for ZED and is notified as BDB_COMMISSIONING_PARENT_LOST notification @@ -1209,28 +1224,16 @@ static void zclGenericApp_changeKeyCallback(Button_Handle _btn, Button_EventMask */ static void zclGenericApp_processKey(Button_Handle _btn) { - zstack_bdbStartCommissioningReq_t zstack_bdbStartCommissioningReq; - //Button 1 - if(_btn == gLeftButtonHandle) - { - if(ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE) - { + NLME_LeaveReq_t req; + memset( &req, 0, sizeof( NLME_LeaveReq_t ) ); + NLME_LeaveReq(&req); + // Sleep for 2 seconds, otherwise leave request is not send + Task_sleep(2000 * (1000 / ClockP_getSystemTickPeriod())); - zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; - Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); - } - else if (ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE) - { - zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING; - Zstackapi_bdbStartCommissioningReq(appServiceTaskId,&zstack_bdbStartCommissioningReq); - } - } - //Button 2 - if(_btn == gRightButtonHandle) - { - Zstackapi_bdbResetLocalActionReq(appServiceTaskId); - } + zgWriteStartupOptions( ZG_STARTUP_SET, + ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE); + SysCtrlSystemReset(); } diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp_data.c b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp_data.c index c0e473d..4d08810 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp_data.c +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Application/zcl_genericapp_data.c @@ -49,6 +49,8 @@ #include "zcl_general.h" #include "zcl_ha.h" +#include "osal_nv.h" + /* GENERICAPP_TODO: Include any of the header files below to access specific cluster data #include "zcl_poll_control.h" #include "zcl_electrical_measurement.h" @@ -96,8 +98,11 @@ const uint16_t zclGenericApp_identify_clusterRevision = 0x0001; const uint8_t zclGenericApp_HWRevision = GENERICAPP_HWVERSION; const uint8_t zclGenericApp_ZCLVersion = GENERICAPP_ZCLVERSION; const uint8_t zclGenericApp_ManufacturerName[] = { 16, 'T','e','x','a','s','I','n','s','t','r','u','m','e','n','t','s' }; +const uint8_t zclGenericApp_ModelID[] = { 9, 't','i','.','r','o','u','t','e','r' }; +const uint8_t zclGenericApp_SwBuildID[] = { 8, '2','0','2','2','1','1','0','2' }; const uint8_t zclGenericApp_PowerSource = POWER_SOURCE_MAINS_1_PHASE; uint8_t zclGenericApp_PhysicalEnvironment = PHY_UNSPECIFIED_ENV; +int8_t zclGenericApp_TransmitPower; #ifdef ZCL_IDENTIFY // Identify Cluster @@ -134,7 +139,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_HW_VERSION, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h) ZCL_DATATYPE_UINT8, // Data Type - found in zcl.h - ACCESS_CONTROL_READ, // Variable access control - found in zcl.h + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), // Variable access control - found in zcl.h (void *)&zclGenericApp_HWRevision // Pointer to attribute variable } }, @@ -143,16 +148,34 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_ZCL_VERSION, ZCL_DATATYPE_UINT8, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_REPORTABLE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_ZCLVersion } }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_MODEL_IDENTIFIER, + ZCL_DATATYPE_CHAR_STR, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), + (void *)zclGenericApp_ModelID + } + }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_SW_BUILD_ID, + ZCL_DATATYPE_CHAR_STR, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), + (void *)zclGenericApp_SwBuildID + } + }, { ZCL_CLUSTER_ID_GENERAL_BASIC, { // Attribute record ATTRID_BASIC_MANUFACTURER_NAME, ZCL_DATATYPE_CHAR_STR, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)zclGenericApp_ManufacturerName } }, @@ -161,7 +184,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_POWER_SOURCE, ZCL_DATATYPE_ENUM8, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_PowerSource } }, @@ -170,7 +193,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_BASIC_PHYSICAL_ENVIRONMENT, ZCL_DATATYPE_ENUM8, - (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE), + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_PhysicalEnvironment } }, @@ -179,10 +202,20 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_CLUSTER_REVISION, ZCL_DATATYPE_UINT16, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_basic_clusterRevision } }, + { + ZCL_CLUSTER_ID_GENERAL_BASIC, + { // Attribute record + ATTRID_BASIC_TRANSMIT_POWER, + ZCL_DATATYPE_INT8, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), + (void *)&zclGenericApp_TransmitPower + } + }, + #ifdef ZCL_IDENTIFY // *** Identify Cluster Attribute *** @@ -191,7 +224,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_IDENTIFY_IDENTIFY_TIME, ZCL_DATATYPE_UINT16, - (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE), + (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_IdentifyTime } }, @@ -201,7 +234,7 @@ CONST zclAttrRec_t zclGenericApp_Attrs[] = { // Attribute record ATTRID_CLUSTER_REVISION, ZCL_DATATYPE_UINT16, - ACCESS_CONTROL_READ, + (ACCESS_CONTROL_READ | ACCESS_CONTROL_AUTH_READ), (void *)&zclGenericApp_identify_clusterRevision } }, @@ -276,6 +309,7 @@ void zclGenericApp_ResetAttributesToDefaultValues(void) { zclGenericApp_PhysicalEnvironment = PHY_UNSPECIFIED_ENV; + osal_nv_read( ZCD_NV_TRANSMIT_POWER, 0, sizeof( zclGenericApp_TransmitPower ), &zclGenericApp_TransmitPower ); #ifdef ZCL_IDENTIFY zclGenericApp_IdentifyTime = 0; diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Common/zcl/zcl.c b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Common/zcl/zcl.c index 51902c4..9afcba3 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Common/zcl/zcl.c +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Common/zcl/zcl.c @@ -47,6 +47,8 @@ #include "zcl.h" #include "zcl_general.h" +#include "osal_nv.h" + #if defined ( INTER_PAN ) || defined ( BDB_TL_INITIATOR ) || defined ( BDB_TL_TARGET ) #include "stub_aps.h" #endif @@ -4675,6 +4677,14 @@ static uint8_t zclProcessInWriteCmd( zclIncoming_t *pInMsg ) status = zclWriteAttrData( pInMsg->msg->endPoint, &(pInMsg->msg->srcAddr), &attrRec, statusRec ); } + + if((pInMsg->msg->clusterId == ZCL_CLUSTER_ID_GENERAL_BASIC) && (statusRec->attrID == ATTRID_BASIC_TRANSMIT_POWER)) + { + int8_t transmitPower; + OsalPort_memcpy((int8_t*)&transmitPower,statusRec->attrData,sizeof(int8_t)); + ZMacSetTransmitPower( (ZMacTransmitPower_t)transmitPower ); + osal_nv_write( ZCD_NV_TRANSMIT_POWER, sizeof( transmitPower ), &transmitPower ); + } } else // Use CB { diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/f8wrouter.opts b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/f8wrouter.opts index b841d60..ed396c2 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/f8wrouter.opts +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/f8wrouter.opts @@ -9,3 +9,5 @@ -DADDRMGR_NV_SINGLES -DBINDINGTABLE_NV_SINGLES -DASSOCLIST_NV_SINGLES + +-include preinclude.h \ No newline at end of file diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/preinclude.h b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/preinclude.h new file mode 100644 index 0000000..1ce7b56 --- /dev/null +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/Config/preinclude.h @@ -0,0 +1,33 @@ +// Increase MAC buffers +#undef MAC_CFG_TX_DATA_MAX +#define MAC_CFG_TX_DATA_MAX 20 +#undef MAC_CFG_TX_MAX +#define MAC_CFG_TX_MAX 32 +#undef MAC_CFG_RX_MAX +#define MAC_CFG_RX_MAX 20 + +// Increase NV pages to 3 to allow for bigger device tables +#undef NVOCMP_NVPAGES +#define NVOCMP_NVPAGES 3 + +// Increase the max number of boardcasts, the default broadcast delivery time is 3 seconds +// with the value below this will allow for 1 broadcast every 0.15 second +#define MAX_BCAST 30 + +#define ZCL_REPORT_DESTINATION_DEVICE +#define BDB_REPORTING +#define CUI_DISABLE +#define NWK_MAX_DEVICE_LIST 50 +#define MAX_NEIGHBOR_ENTRIES 50 +#define MAX_RTG_ENTRIES 150 +#define ZDO_API_ADVANCED + +#define ATTRID_BASIC_TRANSMIT_POWER 0x1337 + +// From https://www.ti.com/lit/an/swra650b/swra650b.pdf +#define LINK_DOWN_TRIGGER 12 +#define NWK_ROUTE_AGE_LIMIT 5 +#define DEF_NWK_RADIUS 15 +#define DEFAULT_ROUTE_REQUEST_RADIUS 8 +#define ZDNWKMGR_MIN_TRANSMISSIONS 0 +#define ROUTE_DISCOVERY_TIME 13 diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zcomdef.h b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zcomdef.h index 26c0b45..8a338c1 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zcomdef.h +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zcomdef.h @@ -123,6 +123,9 @@ extern "C" #define ZCD_NV_STARTUP_OPTION 0x0003 #define ZCD_NV_START_DELAY 0x0004 +// Custom transmit power NV item +#define ZCD_NV_TRANSMIT_POWER 0x0010 + // NWK Layer NV item IDs #define ZCD_NV_NIB 0x0021 #define ZCD_NV_DEVICE_LIST 0x0022 diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zglobals.c b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zglobals.c index 706736b..b63af7b 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zglobals.c +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/sys/zglobals.c @@ -225,7 +225,7 @@ uint8_t zgEndDeviceConfiguration = END_DEV_CONFIGURATION; // // NOTICE: Before enabling Child Aging make sure to review all the related // definitions in this file, especially zgNwkParentInformation. -uint8_t zgChildAgingEnable = TRUE; +uint8_t zgChildAgingEnable = FALSE; //========== TouchLink NWK configuration =============== // Values used by Router when starts a network as initiator diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/zdo/zd_app.c b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/zdo/zd_app.c index 1f30180..0fd57f5 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/zdo/zd_app.c +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/Stack/zdo/zd_app.c @@ -441,12 +441,11 @@ uint32_t ZDApp_event_loop( uint8_t task_id, uint32_t events ) ZDApp_ChangeState( DEV_ROUTER ); } - if ( zgChildAgingEnable == TRUE ) - { - // Once the device has changed its state to a ROUTER set the timer to send - // Parent annce - ZDApp_SetParentAnnceTimer(); - } + // As we cannot enable child aging as Xiaomi devices will drop off + // but we stil want to have the parent announces we always enable it here. + // Otherwise some end devices could be unreachable when they changed parent + // while the coordinator was powered off. + ZDApp_SetParentAnnceTimer(); } else { @@ -907,12 +906,11 @@ void ZDApp_NetworkStartEvt( void ) bdb_reportCommissioningState(BDB_INITIALIZATION,TRUE); } - if ( zgChildAgingEnable == TRUE ) - { - // Once the device has changed its state to a COORDINATOR set the timer to send - // Parent annce - ZDApp_SetParentAnnceTimer(); - } + // As we cannot enable child aging as Xiaomi devices will drop off + // but we stil want to have the parent announces we always enable it here. + // Otherwise some end devices could be unreachable when they changed parent + // while the coordinator was powered off. + ZDApp_SetParentAnnceTimer(); } else { diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd index da62af1..234ac56 100755 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/cc13x2_cc26x2_tirtos7_ticlang.cmd @@ -71,9 +71,9 @@ #endif #define FLASH_BASE 0x00000000 -#define FLASH_SIZE (0x56000 - (NVOCMP_NVPAGES * 0x2000)) -#define FLASH_NV_BASE (0x56000 - (NVOCMP_NVPAGES * 0x2000)) -#define FLASH_NV_SIZE (NVOCMP_NVPAGES * 0x2000) +#define FLASH_SIZE 0x50000 +#define FLASH_NV_BASE 0x50000 +#define FLASH_NV_SIZE 0x6000 #define FLASH_LAST_BASE 0x56000 #define FLASH_LAST_SIZE 0x2000 diff --git a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/zr_genericapp.syscfg b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/zr_genericapp.syscfg index 94e3ede..3d2f361 100644 --- a/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/zr_genericapp.syscfg +++ b/zr_genericapp_LP_CC2652RB_tirtos7_ticlang/zr_genericapp.syscfg @@ -63,6 +63,7 @@ CCFG.enableBootloaderBackdoor = true; CCFG.dioBootloaderBackdoor = 13; CCFG.levelBootloaderBackdoor = "Active low"; CCFG.srcClkLF = "Derived from HF XOSC"; +CCFG.enableDCDC = false; CCFG.ccfgTemplate.$name = "ti_devices_CCFG_CCFGCC26XXTemplate0"; Display1.$hardware = system.deviceData.board.components.XDS110UART; @@ -83,8 +84,8 @@ ECDSA1.$name = "CONFIG_ECDSA_0"; NVS1.$name = "CONFIG_NVSINTERNAL"; NVS1.internalFlash.$name = "ti_drivers_nvs_NVSCC26XX0"; -NVS1.internalFlash.regionSize = 0x4000; -NVS1.internalFlash.regionBase = 0x52000; +NVS1.internalFlash.regionBase = 0x50000; +NVS1.internalFlash.regionSize = 0x6000; NVS2.$name = "CONFIG_NVSEXTERNAL"; NVS2.nvsType = "External"; @@ -173,6 +174,8 @@ zstack.deviceTypeReadOnly = true; zstack.touchlink.$name = "ti_zstack_touchlink_zstack_touchlink0"; zstack.pm.$name = "ti_zstack_pm_zstack_pm0"; zstack.rf.$name = "ti_zstack_rf_zstack_rf0"; +zstack.rf.txPower = "5"; +zstack.rf.primaryChannels = [11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]; zstack.rf.radioConfig.$name = "ti_devices_radioconfig_settings_ieee_15_40"; zstack.rf.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0"; zstack.rf.coexSettings.$name = "ti_zstack_rf_zstack_coex_mod0"; -- 2.37.0