mirror of
https://github.com/Koenkk/Z-Stack-firmware.git
synced 2024-11-05 01:59:31 +01:00
3402 lines
123 KiB
Diff
3402 lines
123 KiB
Diff
From fad3180b73f7c8a913ca9473100395c05718bc27 Mon Sep 17 00:00:00 2001
|
|
From: Koen Kanters <koenkanters94@gmail.com>
|
|
Date: Fri, 13 Nov 2020 14:36:02 +0100
|
|
Subject: [PATCH 1/1] Own changes
|
|
|
|
---
|
|
.../Application/mt/mt.h | 2 +
|
|
.../Application/mt/mt_util.c | 64 +
|
|
.../Application/mt/mt_version.c | 8 +-
|
|
.../Stack/Config/preinclude.h | 65 +
|
|
.../Stack/Config/znp_cnf.opts | 2 +
|
|
.../Stack/af/af.c | 18 +-
|
|
.../Stack/nwk/nwk_globals.c | 8 +-
|
|
.../Stack/sys/zglobals.c | 6 +-
|
|
.../Stack/zdo/zd_app.c | 30 +-
|
|
.../cc13x2_cc26x2.cmd | 6 +-
|
|
.../syscfg/ti_devices_config.c | 103 ++
|
|
.../syscfg/ti_drivers_config.c | 1060 +++++++++++++++++
|
|
.../syscfg/ti_drivers_config.h | 283 +++++
|
|
.../syscfg/ti_radio_config.c | 340 ++++++
|
|
.../syscfg/ti_radio_config.h | 77 ++
|
|
.../syscfg/ti_utils_build_linker.cmd.genlibs | 35 +
|
|
.../syscfg/ti_zstack_config.h | 226 ++++
|
|
.../Application/mt/mt.h | 2 +
|
|
.../Application/mt/mt_util.c | 64 +
|
|
.../Application/mt/mt_version.c | 8 +-
|
|
.../Stack/Config/preinclude.h | 52 +
|
|
.../Stack/Config/znp_cnf.opts | 2 +
|
|
.../Stack/af/af.c | 18 +-
|
|
.../Stack/nwk/nwk_globals.c | 8 +-
|
|
.../Stack/sys/zglobals.c | 6 +-
|
|
.../Stack/zdo/zd_app.c | 30 +-
|
|
.../cc13x2_cc26x2.cmd | 6 +-
|
|
znp_CC2652RB_LAUNCHXL_tirtos_ccs/znp.syscfg | 31 +-
|
|
.../Application/mt/mt.h | 2 +
|
|
.../Application/mt/mt_util.c | 64 +
|
|
.../Application/mt/mt_version.c | 8 +-
|
|
.../Stack/Config/preinclude.h | 52 +
|
|
.../Stack/Config/znp_cnf.opts | 2 +
|
|
.../Stack/af/af.c | 18 +-
|
|
.../Stack/nwk/nwk_globals.c | 8 +-
|
|
.../Stack/sys/zglobals.c | 6 +-
|
|
.../Stack/zdo/zd_app.c | 30 +-
|
|
.../cc13x2_cc26x2.cmd | 6 +-
|
|
znp_CC26X2R1_LAUNCHXL_tirtos_ccs/znp.syscfg | 31 +-
|
|
39 files changed, 2681 insertions(+), 106 deletions(-)
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_devices_config.c
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.c
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.h
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.c
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.h
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_utils_build_linker.cmd.genlibs
|
|
create mode 100644 znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_zstack_config.h
|
|
create mode 100644 znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
create mode 100644 znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt.h b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
index 2c5073c..8732c65 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
@@ -441,6 +441,8 @@ extern "C"
|
|
#define MT_UTIL_SRNG_GENERATE 0x4C
|
|
#endif
|
|
#define MT_UTIL_BIND_ADD_ENTRY 0x4D
|
|
+#define MT_UTIL_ASSOC_REMOVE 0x63 // Custom command
|
|
+#define MT_UTIL_ASSOC_ADD 0x64 // Custom command
|
|
|
|
#define MT_UTIL_ZCL_KEY_EST_INIT_EST 0x80
|
|
#define MT_UTIL_ZCL_KEY_EST_SIGN 0x81
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
index 90d6d4a..4d50083 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
@@ -128,6 +128,8 @@ static void MT_UtilAPSME_LinkKeyNvIdGet(uint8_t *pBuf);
|
|
#endif //MT_SYS_KEY_MANAGEMENT
|
|
static void MT_UtilAPSME_RequestKeyCmd(uint8_t *pBuf);
|
|
static void MT_UtilAssocCount(uint8_t *pBuf);
|
|
+static void MT_UtilAssocRemove(uint8_t *pBuf);
|
|
+static void MT_UtilAssocAdd(uint8_t *pBuf);
|
|
static void MT_UtilAssocFindDevice(uint8_t *pBuf);
|
|
static void MT_UtilAssocGetWithAddress(uint8_t *pBuf);
|
|
static void MT_UtilBindAddEntry(uint8_t *pBuf);
|
|
@@ -272,6 +274,14 @@ uint8_t MT_UtilCommandProcessing(uint8_t *pBuf)
|
|
MT_UtilBindAddEntry(pBuf);
|
|
break;
|
|
|
|
+ case MT_UTIL_ASSOC_REMOVE:
|
|
+ MT_UtilAssocRemove(pBuf);
|
|
+ break;
|
|
+
|
|
+ case MT_UTIL_ASSOC_ADD:
|
|
+ MT_UtilAssocAdd(pBuf);
|
|
+ break;
|
|
+
|
|
case MT_UTIL_SYNC_REQ:
|
|
MT_UtilSync();
|
|
break;
|
|
@@ -1375,6 +1385,60 @@ static void MT_UtilAssocCount(uint8_t *pBuf)
|
|
MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 2, pBuf);
|
|
}
|
|
|
|
+/***************************************************************************************************
|
|
+ * @fn MT_UtilAssocRemove
|
|
+ *
|
|
+ * @brief Proxy the AssocRemove() function.
|
|
+ *
|
|
+ * @param pBuf - pointer to the received buffer
|
|
+ *
|
|
+ * @return void
|
|
+ ***************************************************************************************************/
|
|
+static void MT_UtilAssocRemove(uint8_t *pBuf)
|
|
+{
|
|
+ uint8_t cmdId;
|
|
+ uint8_t ieeeAddr[Z_EXTADDR_LEN];
|
|
+ uint8_t retValue = 0;
|
|
+
|
|
+ // parse header
|
|
+ cmdId = pBuf[MT_RPC_POS_CMD1];
|
|
+ pBuf += MT_RPC_FRAME_HDR_SZ;
|
|
+
|
|
+ /* IeeAddress */
|
|
+ OsalPort_memcpy(ieeeAddr, pBuf, Z_EXTADDR_LEN);
|
|
+
|
|
+ AssocRemove(ieeeAddr);
|
|
+
|
|
+ MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
|
|
+}
|
|
+
|
|
+/***************************************************************************************************
|
|
+ * @fn MT_UtilAssocAdd
|
|
+ *
|
|
+ * @brief Proxy the AssocAdd() function.
|
|
+ *
|
|
+ * @param pBuf - pointer to the received buffer
|
|
+ *
|
|
+ * @return void
|
|
+ ***************************************************************************************************/
|
|
+static void MT_UtilAssocAdd(uint8_t *pBuf)
|
|
+{
|
|
+ uint8_t cmdId;
|
|
+ uint8_t retValue = 0;
|
|
+
|
|
+ // parse header
|
|
+ cmdId = pBuf[MT_RPC_POS_CMD1];
|
|
+ pBuf += MT_RPC_FRAME_HDR_SZ;
|
|
+
|
|
+ AssocAddNew(
|
|
+ BUILD_UINT16(pBuf[Z_EXTADDR_LEN], pBuf[Z_EXTADDR_LEN + 1]),
|
|
+ pBuf,
|
|
+ pBuf[Z_EXTADDR_LEN + 2]
|
|
+ );
|
|
+
|
|
+ MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
|
|
+}
|
|
+
|
|
/***************************************************************************************************
|
|
* @fn MT_UtilAssocFindDevice
|
|
*
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
index 63c143b..11325fd 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
@@ -43,15 +43,21 @@
|
|
#include "zcomdef.h"
|
|
#include "mt_version.h"
|
|
|
|
+#define CODE_REVISION_NUMBER 20210120
|
|
+
|
|
/******************************************************************************
|
|
* CONSTANTS
|
|
*****************************************************************************/
|
|
const uint8_t MTVersionString[] = {
|
|
2, /* Transport protocol revision */
|
|
- 0, /* Product ID */
|
|
+ 1, /* Product ID */
|
|
2, /* Software major release number */
|
|
7, /* Software minor release number */
|
|
1, /* Software maintenance release number */
|
|
+ ((CODE_REVISION_NUMBER >> 0) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 8) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 16) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 24) & 0xFF),
|
|
};
|
|
|
|
/******************************************************************************
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
new file mode 100644
|
|
index 0000000..3332194
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
@@ -0,0 +1,65 @@
|
|
+#define MT_SYS_KEY_MANAGEMENT 1
|
|
+#define FEATURE_NVEXID 1
|
|
+
|
|
+// Save memory
|
|
+#undef NWK_MAX_BINDING_ENTRIES
|
|
+#define NWK_MAX_BINDING_ENTRIES 1
|
|
+#undef APS_MAX_GROUPS
|
|
+#define APS_MAX_GROUPS 1
|
|
+
|
|
+// Increase NV pages to 3 to allow for bigger device tables
|
|
+#undef NVOCMP_NVPAGES
|
|
+#define NVOCMP_NVPAGES 3
|
|
+
|
|
+// Disabling MULTICAST is required in order for proper group support.
|
|
+// If MULTICAST is not disabled, the group adress is not included in the APS header
|
|
+#define MULTICAST_ENABLED FALSE
|
|
+
|
|
+// 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
|
|
+
|
|
+/**
|
|
+ * Enable MTO routing
|
|
+ */
|
|
+#define CONCENTRATOR_ENABLE TRUE
|
|
+#define CONCENTRATOR_DISCOVERY_TIME 100
|
|
+#define CONCENTRATOR_ROUTE_CACHE TRUE
|
|
+#define MAX_RTG_SRC_ENTRIES 200
|
|
+#define SRC_RTG_EXPIRY_TIME 2
|
|
+
|
|
+/**
|
|
+ * Scale other device tables appropriately
|
|
+ */
|
|
+#define NWK_MAX_DEVICE_LIST 50
|
|
+#define ZDSECMGR_TC_DEVICE_MAX 200
|
|
+#define MAX_NEIGHBOR_ENTRIES 20
|
|
+#define MAX_RTG_ENTRIES 100
|
|
+
|
|
+/**
|
|
+ * Reduce the APS ack wait duration from 6000 ms to 1000 ms (value * 2 = value in ms).
|
|
+ * This will make requests timeout quicker, in pratice the default timeout of 6000ms is too long.
|
|
+ */
|
|
+#define APSC_ACK_WAIT_DURATION_POLLED 500
|
|
+
|
|
+// 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
|
|
+#define MTO_RREQ_LIMIT_TIME 5000
|
|
+
|
|
+// 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/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
index 6e3cb6a..1f90cc6 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
@@ -32,3 +32,5 @@
|
|
-DMT_GP_CB_FUNC
|
|
|
|
-DMT_APP_CNF_FUNC
|
|
+
|
|
+--preinclude=preinclude.h
|
|
\ No newline at end of file
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/af/af.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
index 3a7afa3..e3a2706 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
@@ -407,10 +407,18 @@ void afIncomingData( aps_FrameFormat_t *aff, zAddrType_t *SrcAddress, uint16_t S
|
|
#if !defined ( APS_NO_GROUPS )
|
|
// Find the first endpoint for this group
|
|
grpEp = aps_FindGroupForEndpoint( aff->GroupID, APS_GROUPS_FIND_FIRST );
|
|
- if ( grpEp == APS_GROUPS_EP_NOT_FOUND )
|
|
- return; // No endpoint found
|
|
+ if ( grpEp == APS_GROUPS_EP_NOT_FOUND ) {
|
|
+ // No endpoint found, default to endpoint 1.
|
|
+ // In the original source code there is a return here.
|
|
+ // This prevent the messags from being forwarded.
|
|
+ // For our use-case we want to capture all messages.
|
|
+ // Even if the coordinator is not in the group.
|
|
+ epDesc = afFindEndPointDesc( 1 );
|
|
+ }
|
|
+ else {
|
|
+ epDesc = afFindEndPointDesc( grpEp );
|
|
+ }
|
|
|
|
- epDesc = afFindEndPointDesc( grpEp );
|
|
if ( epDesc == NULL )
|
|
return; // Endpoint descriptor not found
|
|
|
|
@@ -457,7 +465,9 @@ void afIncomingData( aps_FrameFormat_t *aff, zAddrType_t *SrcAddress, uint16_t S
|
|
// if the Wildcard ProfileID is received the message should not be sent to ZDO endpoint
|
|
if ( (aff->ProfileID == epProfileID) ||
|
|
((epDesc->endPoint == ZDO_EP) && (aff->ProfileID == ZDO_PROFILE_ID)) ||
|
|
- ((epDesc->endPoint != ZDO_EP) && ( aff->ProfileID == ZDO_WILDCARD_PROFILE_ID )) )
|
|
+ ((epDesc->endPoint != ZDO_EP) && ( aff->ProfileID == ZDO_WILDCARD_PROFILE_ID )) ||
|
|
+ // Fix below is to support PGC410EU: https://github.com/Koenkk/zigbee2mqtt/issues/4055
|
|
+ ((epDesc->endPoint == 2) && ( aff->ProfileID == 0xFC01 )) )
|
|
{
|
|
// Save original endpoint
|
|
uint8_t endpoint = aff->DstEndPoint;
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
index a78ad3c..bfe7884 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
@@ -65,10 +65,10 @@
|
|
* CONSTANTS
|
|
*/
|
|
// Maximums for the data buffer queue
|
|
-#define NWK_MAX_DATABUFS_WAITING 8 // Waiting to be sent to MAC
|
|
-#define NWK_MAX_DATABUFS_SCHEDULED 5 // Timed messages to be sent
|
|
-#define NWK_MAX_DATABUFS_CONFIRMED 5 // Held after MAC confirms
|
|
-#define NWK_MAX_DATABUFS_TOTAL 12 // Total number of buffers
|
|
+#define NWK_MAX_DATABUFS_WAITING 16 // Waiting to be sent to MAC
|
|
+#define NWK_MAX_DATABUFS_SCHEDULED 10 // Timed messages to be sent
|
|
+#define NWK_MAX_DATABUFS_CONFIRMED 10 // Held after MAC confirms
|
|
+#define NWK_MAX_DATABUFS_TOTAL 24 // Total number of buffers
|
|
|
|
// 1-255 (0 -> 256) X RTG_TIMER_INTERVAL
|
|
// A known shortcoming is that when a message is enqueued as "hold" for a
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
index 8ea2ac3..4879330 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
@@ -104,7 +104,7 @@ uint8_t zgSecurePermitJoin = TRUE;
|
|
// TC Link Key. In this scenario, if this flag is TRUE, the Trust Center will
|
|
// encrypt the outgoing NWK Key with the default TC Link Key (ZigbeeAlliance09).
|
|
// If this flag is FALSE (default), the Trust Center will not send the NWK Key at all.
|
|
-uint8_t zgAllowRejoinsWithWellKnownKey = FALSE;
|
|
+uint8_t zgAllowRejoinsWithWellKnownKey = TRUE; // https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/p/882650/3265311#3265311
|
|
|
|
//allowInstallCodes
|
|
uint8_t zgAllowInstallCodes = ZG_IC_SUPPORTED_NOT_REQUIRED;
|
|
@@ -198,7 +198,9 @@ 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;
|
|
+
|
|
+// Disable child aging, otherwise Xiaomi devices are being kicked off the network.
|
|
+uint8_t zgChildAgingEnable = FALSE;
|
|
|
|
//========== TouchLink NWK configuration ===============
|
|
// Values used by Router when starts a network as initiator
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
index 1f807ca..b935b6a 100644
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
@@ -419,12 +419,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
|
|
{
|
|
@@ -885,12 +884,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
|
|
{
|
|
@@ -3132,6 +3130,14 @@ void ZDO_NetworkStatusCB( uint16_t nwkDstAddr, uint8_t statusCode, uint16_t dstA
|
|
// Routing error for dstAddr, this is informational and a Route
|
|
// Request should happen automatically.
|
|
}
|
|
+
|
|
+ if ( (nwkDstAddr == NLME_GetShortAddr())
|
|
+ && (statusCode == NWKSTAT_SOURCE_ROUTE_FAILURE) )
|
|
+ {
|
|
+ // Received a source route failure, remove route and rediscover.
|
|
+ RTG_RemoveRtgEntry( dstAddr, 0 );
|
|
+ NLME_RouteDiscoveryRequest( dstAddr, 0, 30 );
|
|
+ }
|
|
}
|
|
|
|
/******************************************************************************
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
index 2dcc711..2c23e66 100755
|
|
--- a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
@@ -70,9 +70,9 @@
|
|
/* must be located at the beginning of the application. */
|
|
|
|
#define FLASH_BASE 0x00000000
|
|
-#define FLASH_SIZE 0x52000
|
|
-#define FLASH_NV_BASE 0x52000
|
|
-#define FLASH_NV_SIZE 0x4000
|
|
+#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/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_devices_config.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_devices_config.c
|
|
new file mode 100644
|
|
index 0000000..b66a3f9
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_devices_config.c
|
|
@@ -0,0 +1,103 @@
|
|
+/*
|
|
+ * ======== 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
|
|
+// #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
|
|
+
|
|
+
|
|
+//#####################################
|
|
+// Debug access settings
|
|
+//#####################################
|
|
+
|
|
+// Disable unlocking of TI FA option.
|
|
+#define SET_CCFG_CCFG_TI_OPTIONS_TI_FA_ENABLE 0x00
|
|
+
|
|
+// 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 <ti/devices/DeviceFamily.h>
|
|
+#include DeviceFamily_constructPath(startup_files/ccfg.c)
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.c
|
|
new file mode 100644
|
|
index 0000000..db9821f
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.c
|
|
@@ -0,0 +1,1060 @@
|
|
+/*
|
|
+ * ======== ti_drivers_config.c ========
|
|
+ * Configured TI-Drivers module definitions
|
|
+ *
|
|
+ * DO NOT EDIT - This file is generated for the CC1352P_2_LAUNCHXL
|
|
+ * by the SysConfig tool.
|
|
+ */
|
|
+
|
|
+#include <stddef.h>
|
|
+#include <stdint.h>
|
|
+
|
|
+#ifndef DeviceFamily_CC13X2
|
|
+#define DeviceFamily_CC13X2
|
|
+#endif
|
|
+
|
|
+#include <ti/devices/DeviceFamily.h>
|
|
+
|
|
+#include "ti_drivers_config.h"
|
|
+
|
|
+/*
|
|
+ * =============================== AESCBC ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/AESCBC.h>
|
|
+#include <ti/drivers/aescbc/AESCBCCC26XX.h>
|
|
+
|
|
+#define CONFIG_AESCBC_COUNT 1
|
|
+AESCBCCC26XX_Object aescbcCC26XXObjects[CONFIG_AESCBC_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== aescbcCC26XXHWAttrs ========
|
|
+ */
|
|
+const AESCBCCC26XX_HWAttrs aescbcCC26XXHWAttrs[CONFIG_AESCBC_COUNT] = {
|
|
+ {
|
|
+ .intPriority = (~0),
|
|
+ },
|
|
+};
|
|
+
|
|
+const AESCBC_Config AESCBC_config[CONFIG_AESCBC_COUNT] = {
|
|
+ { /* CONFIG_AESCBC_0 */
|
|
+ .object = &aescbcCC26XXObjects[CONFIG_AESCBC_0],
|
|
+ .hwAttrs = &aescbcCC26XXHWAttrs[CONFIG_AESCBC_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_AESCBC_0_CONST = CONFIG_AESCBC_0;
|
|
+const uint_least8_t AESCBC_count = CONFIG_AESCBC_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== AESCCM ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/AESCCM.h>
|
|
+#include <ti/drivers/aesccm/AESCCMCC26XX.h>
|
|
+
|
|
+#define CONFIG_AESCCM_COUNT 1
|
|
+AESCCMCC26XX_Object aesccmCC26XXObjects[CONFIG_AESCCM_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== aesccmCC26XXHWAttrs ========
|
|
+ */
|
|
+const AESCCMCC26XX_HWAttrs aesccmCC26XXHWAttrs[CONFIG_AESCCM_COUNT] = {
|
|
+ {
|
|
+ .intPriority = 0x40,
|
|
+ },
|
|
+};
|
|
+
|
|
+const AESCCM_Config AESCCM_config[CONFIG_AESCCM_COUNT] = {
|
|
+ { /* CONFIG_AESCCM_0 */
|
|
+ .object = &aesccmCC26XXObjects[CONFIG_AESCCM_0],
|
|
+ .hwAttrs = &aesccmCC26XXHWAttrs[CONFIG_AESCCM_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_AESCCM_0_CONST = CONFIG_AESCCM_0;
|
|
+const uint_least8_t AESCCM_count = CONFIG_AESCCM_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== AESECB ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/AESECB.h>
|
|
+#include <ti/drivers/aesecb/AESECBCC26XX.h>
|
|
+
|
|
+#define CONFIG_AESECB_COUNT 1
|
|
+AESECBCC26XX_Object aesecbCC26XXObjects[CONFIG_AESECB_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== aesecbCC26XXHWAttrs ========
|
|
+ */
|
|
+const AESECBCC26XX_HWAttrs aesecbCC26XXHWAttrs[CONFIG_AESECB_COUNT] = {
|
|
+ {
|
|
+ .intPriority = 0x20,
|
|
+ },
|
|
+};
|
|
+
|
|
+const AESECB_Config AESECB_config[CONFIG_AESECB_COUNT] = {
|
|
+ { /* CONFIG_AESECB_0 */
|
|
+ .object = &aesecbCC26XXObjects[CONFIG_AESECB_0],
|
|
+ .hwAttrs = &aesecbCC26XXHWAttrs[CONFIG_AESECB_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+
|
|
+const uint_least8_t CONFIG_AESECB_0_CONST = CONFIG_AESECB_0;
|
|
+const uint_least8_t AESECB_count = CONFIG_AESECB_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== DMA ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/dma/UDMACC26XX.h>
|
|
+#include <ti/devices/cc13x2_cc26x2/driverlib/udma.h>
|
|
+#include <ti/devices/cc13x2_cc26x2/inc/hw_memmap.h>
|
|
+
|
|
+UDMACC26XX_Object udmaCC26XXObject;
|
|
+
|
|
+const UDMACC26XX_HWAttrs udmaCC26XXHWAttrs = {
|
|
+ .baseAddr = UDMA0_BASE,
|
|
+ .powerMngrId = PowerCC26XX_PERIPH_UDMA,
|
|
+ .intNum = INT_DMA_ERR,
|
|
+ .intPriority = (~0)
|
|
+};
|
|
+
|
|
+const UDMACC26XX_Config UDMACC26XX_config[1] = {
|
|
+ {
|
|
+ .object = &udmaCC26XXObject,
|
|
+ .hwAttrs = &udmaCC26XXHWAttrs,
|
|
+ },
|
|
+};
|
|
+
|
|
+/*
|
|
+ * =============================== ECDH ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/ECDH.h>
|
|
+#include <ti/drivers/ecdh/ECDHCC26X2.h>
|
|
+
|
|
+#define CONFIG_ECDH_COUNT 1
|
|
+
|
|
+ECDHCC26X2_Object ecdhCC26X2Objects[CONFIG_ECDH_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== ecdhCC26X2HWAttrs ========
|
|
+ */
|
|
+const ECDHCC26X2_HWAttrs ecdhCC26X2HWAttrs[CONFIG_ECDH_COUNT] = {
|
|
+ {
|
|
+ .intPriority = (~0),
|
|
+ },
|
|
+};
|
|
+
|
|
+const ECDH_Config ECDH_config[CONFIG_ECDH_COUNT] = {
|
|
+ { /* CONFIG_ECDH_0 */
|
|
+ .object = &ecdhCC26X2Objects[CONFIG_ECDH_0],
|
|
+ .hwAttrs = &ecdhCC26X2HWAttrs[CONFIG_ECDH_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_ECDH_0_CONST = CONFIG_ECDH_0;
|
|
+const uint_least8_t ECDH_count = CONFIG_ECDH_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== ECDSA ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/ECDSA.h>
|
|
+#include <ti/drivers/ecdsa/ECDSACC26X2.h>
|
|
+
|
|
+#define CONFIG_ECDSA_COUNT 1
|
|
+ECDSACC26X2_Object ecdsaCC26X2Objects[CONFIG_ECDSA_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== ecdsaCC26X2HWAttrs ========
|
|
+ */
|
|
+const ECDSACC26X2_HWAttrs ecdsaCC26X2HWAttrs[CONFIG_ECDSA_COUNT] = {
|
|
+ {
|
|
+ .intPriority = (~0),
|
|
+ .trngIntPriority = (~0),
|
|
+ },
|
|
+};
|
|
+
|
|
+const ECDSA_Config ECDSA_config[CONFIG_ECDSA_COUNT] = {
|
|
+ { /* CONFIG_ECDSA_0 */
|
|
+ .object = &ecdsaCC26X2Objects[CONFIG_ECDSA_0],
|
|
+ .hwAttrs = &ecdsaCC26X2HWAttrs[CONFIG_ECDSA_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_ECDSA_0_CONST = CONFIG_ECDSA_0;
|
|
+const uint_least8_t ECDSA_count = CONFIG_ECDSA_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== ECJPAKE ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/ECJPAKE.h>
|
|
+#include <ti/drivers/ecjpake/ECJPAKECC26X2.h>
|
|
+
|
|
+#define CONFIG_ECJPAKE_COUNT 1
|
|
+ECJPAKECC26X2_Object ecjpakeCC26X2Objects[CONFIG_ECJPAKE_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== ecjpakeCC26X2HWAttrs ========
|
|
+ */
|
|
+const ECJPAKECC26X2_HWAttrs ecjpakeCC26X2HWAttrs[CONFIG_ECJPAKE_COUNT] = {
|
|
+ {
|
|
+ .intPriority = (~0),
|
|
+ },
|
|
+};
|
|
+
|
|
+const ECJPAKE_Config ECJPAKE_config[CONFIG_ECJPAKE_COUNT] = {
|
|
+ { /* CONFIG_ECJPAKE_0 */
|
|
+ .object = &ecjpakeCC26X2Objects[CONFIG_ECJPAKE_0],
|
|
+ .hwAttrs = &ecjpakeCC26X2HWAttrs[CONFIG_ECJPAKE_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_ECJPAKE_0_CONST = CONFIG_ECJPAKE_0;
|
|
+const uint_least8_t ECJPAKE_count = CONFIG_ECJPAKE_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== GPIO ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/GPIO.h>
|
|
+#include <ti/drivers/gpio/GPIOCC26XX.h>
|
|
+
|
|
+#define CONFIG_GPIO_COUNT 5
|
|
+
|
|
+/*
|
|
+ * ======== gpioPinConfigs ========
|
|
+ * Array of Pin configurations
|
|
+ */
|
|
+GPIO_PinConfig gpioPinConfigs[] = {
|
|
+ /* CONFIG_GPIO_BTN1 : LaunchPad Button BTN-1 (Left) */
|
|
+ GPIOCC26XX_DIO_15 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING,
|
|
+ /* CONFIG_GPIO_BTN2 : LaunchPad Button BTN-2 (Right) */
|
|
+ GPIOCC26XX_DIO_14 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING,
|
|
+ /* CONFIG_GPIO_RLED : LaunchPad LED Red */
|
|
+ GPIOCC26XX_DIO_06 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_MED | GPIO_CFG_OUT_LOW,
|
|
+ /* CONFIG_GPIO_GLED : LaunchPad LED Green */
|
|
+ GPIOCC26XX_DIO_07 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_MED | GPIO_CFG_OUT_LOW,
|
|
+ /* SPI Flash Slave Select GPIO Instance */
|
|
+ GPIOCC26XX_DIO_20 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_MED | GPIO_CFG_OUT_HIGH,
|
|
+};
|
|
+
|
|
+/*
|
|
+ * ======== gpioCallbackFunctions ========
|
|
+ * Array of callback function pointers
|
|
+ *
|
|
+ * NOTE: Unused callback entries can be omitted from the callbacks array to
|
|
+ * reduce memory usage by enabling callback table optimization
|
|
+ * (GPIO.optimizeCallbackTableSize = true)
|
|
+ */
|
|
+GPIO_CallbackFxn gpioCallbackFunctions[] = {
|
|
+ /* CONFIG_GPIO_BTN1 : LaunchPad Button BTN-1 (Left) */
|
|
+ NULL,
|
|
+ /* CONFIG_GPIO_BTN2 : LaunchPad Button BTN-2 (Right) */
|
|
+ NULL,
|
|
+ /* CONFIG_GPIO_RLED : LaunchPad LED Red */
|
|
+ NULL,
|
|
+ /* CONFIG_GPIO_GLED : LaunchPad LED Green */
|
|
+ NULL,
|
|
+ /* SPI Flash Slave Select GPIO Instance */
|
|
+ NULL,
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_GPIO_BTN1_CONST = CONFIG_GPIO_BTN1;
|
|
+const uint_least8_t CONFIG_GPIO_BTN2_CONST = CONFIG_GPIO_BTN2;
|
|
+const uint_least8_t CONFIG_GPIO_RLED_CONST = CONFIG_GPIO_RLED;
|
|
+const uint_least8_t CONFIG_GPIO_GLED_CONST = CONFIG_GPIO_GLED;
|
|
+const uint_least8_t CONFIG_GPIO_0_CONST = CONFIG_GPIO_0;
|
|
+
|
|
+/*
|
|
+ * ======== GPIOCC26XX_config ========
|
|
+ */
|
|
+const GPIOCC26XX_Config GPIOCC26XX_config = {
|
|
+ .pinConfigs = (GPIO_PinConfig *)gpioPinConfigs,
|
|
+ .callbacks = (GPIO_CallbackFxn *)gpioCallbackFunctions,
|
|
+ .numberOfPinConfigs = 5,
|
|
+ .numberOfCallbacks = 5,
|
|
+ .intPriority = (~0)
|
|
+};
|
|
+
|
|
+/*
|
|
+ * =============================== NVS ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/NVS.h>
|
|
+#include <ti/drivers/nvs/NVSCC26XX.h>
|
|
+
|
|
+/*
|
|
+ * NVSCC26XX Internal NVS flash region definitions
|
|
+ *
|
|
+ * Place uninitialized char arrays at addresses
|
|
+ * corresponding to the 'regionBase' addresses defined in
|
|
+ * the configured NVS regions. These arrays are used as
|
|
+ * place holders so that the linker will not place other
|
|
+ * content there.
|
|
+ *
|
|
+ * For GCC targets, the char arrays are each placed into
|
|
+ * the shared ".nvs" section. The user must add content to
|
|
+ * their GCC linker command file to place the .nvs section
|
|
+ * at the lowest 'regionBase' address specified in their NVS
|
|
+ * regions.
|
|
+ */
|
|
+
|
|
+#if defined(__TI_COMPILER_VERSION__) || defined(__clang__)
|
|
+
|
|
+static char flashBuf0[0x6000] __attribute__ ((retain, noinit, location(0x50000)));
|
|
+
|
|
+#elif defined(__IAR_SYSTEMS_ICC__)
|
|
+
|
|
+__no_init static char flashBuf0[0x6000] @ 0x50000;
|
|
+
|
|
+#elif defined(__GNUC__)
|
|
+
|
|
+__attribute__ ((section (".nvs")))
|
|
+static char flashBuf0[0x6000];
|
|
+
|
|
+#endif
|
|
+
|
|
+NVSCC26XX_Object nvsCC26XXObjects[1];
|
|
+
|
|
+static const NVSCC26XX_HWAttrs nvsCC26XXHWAttrs[1] = {
|
|
+ /* CONFIG_NVSINTERNAL */
|
|
+ {
|
|
+ .regionBase = (void *) flashBuf0,
|
|
+ .regionSize = 0x6000
|
|
+ },
|
|
+};
|
|
+
|
|
+#include <ti/drivers/nvs/NVSSPI25X.h>
|
|
+
|
|
+/*
|
|
+ * NVSSPI25X External NVS flash region definitions
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Provide write verification buffer whose size is
|
|
+ * the largest specified Verification Buffer Size
|
|
+ */
|
|
+
|
|
+static uint8_t verifyBuf[64];
|
|
+
|
|
+NVSSPI25X_Object nvsSPI25XObjects[1];
|
|
+
|
|
+static const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = {
|
|
+ /* CONFIG_NVSEXTERNAL */
|
|
+ /* MX25R8035F SPI Flash */
|
|
+ {
|
|
+ .regionBaseOffset = 0x0,
|
|
+ .regionSize = 0x256000,
|
|
+ .sectorSize = 0x1000,
|
|
+ .verifyBuf = verifyBuf,
|
|
+ .verifyBufSize = 64,
|
|
+ /* NVS opens SPI */
|
|
+ .spiHandle = NULL,
|
|
+ /* SPI driver index */
|
|
+ .spiIndex = CONFIG_SPI_0,
|
|
+ .spiBitRate = 4000000,
|
|
+ /* GPIO driver pin index */
|
|
+ .spiCsnGpioIndex = CONFIG_GPIO_0,
|
|
+ .statusPollDelayUs = 100
|
|
+ },
|
|
+};
|
|
+
|
|
+#define CONFIG_NVS_COUNT 2
|
|
+
|
|
+const NVS_Config NVS_config[CONFIG_NVS_COUNT] = {
|
|
+ /* CONFIG_NVSINTERNAL */
|
|
+ {
|
|
+ .fxnTablePtr = &NVSCC26XX_fxnTable,
|
|
+ .object = &nvsCC26XXObjects[0],
|
|
+ .hwAttrs = &nvsCC26XXHWAttrs[0],
|
|
+ },
|
|
+ /* CONFIG_NVSEXTERNAL */
|
|
+ /* MX25R8035F SPI Flash */
|
|
+ {
|
|
+ .fxnTablePtr = &NVSSPI25X_fxnTable,
|
|
+ .object = &nvsSPI25XObjects[0],
|
|
+ .hwAttrs = &nvsSPI25XHWAttrs[0],
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_NVSINTERNAL_CONST = CONFIG_NVSINTERNAL;
|
|
+const uint_least8_t CONFIG_NVSEXTERNAL_CONST = CONFIG_NVSEXTERNAL;
|
|
+const uint_least8_t NVS_count = CONFIG_NVS_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== PIN ===============================
|
|
+ */
|
|
+#include <ti/drivers/PIN.h>
|
|
+#include <ti/drivers/pin/PINCC26XX.h>
|
|
+
|
|
+#define CONFIG_PIN_COUNT 13
|
|
+
|
|
+const PIN_Config BoardGpioInitTable[CONFIG_PIN_COUNT + 1] = {
|
|
+ /* XDS110 UART, Parent Signal: CONFIG_DISPLAY_UART TX, (DIO13) */
|
|
+ CONFIG_PIN_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
|
|
+ /* XDS110 UART, Parent Signal: CONFIG_DISPLAY_UART RX, (DIO12) */
|
|
+ CONFIG_PIN_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN | PIN_IRQ_DIS,
|
|
+ /* SKY13317-373LF RF Antenna Switch, Parent Signal: /ti/drivers/RF RF Antenna Pin 0, (DIO28) */
|
|
+ CONFIG_RF_24GHZ | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
|
|
+ /* SKY13317-373LF RF Antenna Switch, Parent Signal: /ti/drivers/RF RF Antenna Pin 1, (DIO29) */
|
|
+ CONFIG_RF_HIGH_PA | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
|
|
+ /* SKY13317-373LF RF Antenna Switch, Parent Signal: /ti/drivers/RF RF Antenna Pin 2, (DIO30) */
|
|
+ CONFIG_RF_SUB1GHZ | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
|
|
+ /* LaunchPad Button BTN-1 (Left), Parent Signal: CONFIG_GPIO_BTN1 GPIO Pin, (DIO15) */
|
|
+ CONFIG_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS,
|
|
+ /* LaunchPad Button BTN-2 (Right), Parent Signal: CONFIG_GPIO_BTN2 GPIO Pin, (DIO14) */
|
|
+ CONFIG_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS,
|
|
+ /* LaunchPad LED Red, Parent Signal: CONFIG_GPIO_RLED GPIO Pin, (DIO6) */
|
|
+ CONFIG_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
|
|
+ /* LaunchPad LED Green, Parent Signal: CONFIG_GPIO_GLED GPIO Pin, (DIO7) */
|
|
+ CONFIG_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
|
|
+ /* MX25R8035F SPI Flash Slave Select, Parent Signal: CONFIG_GPIO_0 GPIO Pin, (DIO20) */
|
|
+ CONFIG_PIN_0 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MED,
|
|
+ /* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_0 SCLK, (DIO10) */
|
|
+ CONFIG_PIN_SPI_SCLK | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
|
|
+ /* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_0 MISO, (DIO8) */
|
|
+ CONFIG_PIN_SPI_MISO | PIN_INPUT_EN | PIN_NOPULL | PIN_IRQ_DIS,
|
|
+ /* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_0 MOSI, (DIO9) */
|
|
+ CONFIG_PIN_SPI_MOSI | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,
|
|
+
|
|
+ PIN_TERMINATE
|
|
+};
|
|
+
|
|
+const PINCC26XX_HWAttrs PINCC26XX_hwAttrs = {
|
|
+ .intPriority = (~0),
|
|
+ .swiPriority = 0
|
|
+};
|
|
+
|
|
+/*
|
|
+ * =============================== Power ===============================
|
|
+ */
|
|
+#include <ti/drivers/Power.h>
|
|
+#include <ti/drivers/power/PowerCC26X2.h>
|
|
+#include "ti_drivers_config.h"
|
|
+
|
|
+extern void PowerCC26XX_standbyPolicy(void);
|
|
+extern bool PowerCC26XX_calibrate(unsigned int);
|
|
+
|
|
+const PowerCC26X2_Config PowerCC26X2_config = {
|
|
+ .enablePolicy = true,
|
|
+ .policyInitFxn = NULL,
|
|
+ .policyFxn = PowerCC26XX_standbyPolicy,
|
|
+ .calibrateFxn = PowerCC26XX_calibrate,
|
|
+ .calibrateRCOSC_LF = true,
|
|
+ .calibrateRCOSC_HF = true,
|
|
+ .enableTCXOFxn = NULL
|
|
+};
|
|
+
|
|
+
|
|
+/*
|
|
+ * =============================== RF Driver ===============================
|
|
+ */
|
|
+#include <ti/drivers/rf/RF.h>
|
|
+
|
|
+/*
|
|
+ * RF driver callback function, called by the driver on global driver events.
|
|
+ */
|
|
+static void RF_globalCallbackFunction (RF_Handle client, RF_GlobalEvent events, void* arg);
|
|
+
|
|
+/*
|
|
+ * Callback function to handle custom / application specific behavior
|
|
+ */
|
|
+extern void __attribute__((weak)) rfDriverCallback (RF_Handle client, RF_GlobalEvent events, void *arg);
|
|
+
|
|
+/*
|
|
+ * Callback function to handle antenna switching
|
|
+ */
|
|
+extern void __attribute__((weak)) rfDriverCallbackAntennaSwitching (RF_Handle client, RF_GlobalEvent events, void *arg);
|
|
+
|
|
+/*
|
|
+ * Platform-specific driver configuration
|
|
+ */
|
|
+const RFCC26XX_HWAttrsV2 RFCC26XX_hwAttrs = {
|
|
+ .hwiPriority = (~0),
|
|
+ .swiPriority = (uint8_t)0,
|
|
+ .xoscHfAlwaysNeeded = true,
|
|
+ .globalCallback = &RF_globalCallbackFunction,
|
|
+ .globalEventMask = RF_GlobalEventInit | RF_GlobalEventRadioPowerDown | RF_GlobalEventRadioSetup
|
|
+};
|
|
+
|
|
+/*
|
|
+ * ======== RF_globalCallbackFunction ========
|
|
+ * This function is called by the driver on global driver events.
|
|
+ * It will call specific callback functions to further handle the triggering events.
|
|
+ */
|
|
+static void RF_globalCallbackFunction(RF_Handle client, RF_GlobalEvent events, void *arg)
|
|
+{
|
|
+ rfDriverCallback(client, events, arg);
|
|
+ rfDriverCallbackAntennaSwitching(client, events, arg);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * ======== rfDriverCallback ========
|
|
+ * Handle events triggered by the RF driver for custom / application specific behavior.
|
|
+ */
|
|
+void __attribute__((weak)) rfDriverCallback(RF_Handle client, RF_GlobalEvent events, void *arg)
|
|
+{
|
|
+ /* ======== PLEASE READ THIS ========
|
|
+ *
|
|
+ * This function is declared weak for the application to override it.
|
|
+ * A new definition of 'rfDriverCallback' is required if you want to
|
|
+ * handle the events listed in '.globalEventMask'.
|
|
+ *
|
|
+ * Please copy this function definition to create your own, but make
|
|
+ * sure to remove '__attribute__((weak))' for your definition.
|
|
+ *
|
|
+ * According to '.globalEventMask', this function will be triggered by:
|
|
+ * - RF_GlobalEventInit
|
|
+ * - RF_GlobalEventRadioPowerDown
|
|
+ * - RF_GlobalEventRadioSetup
|
|
+ *
|
|
+ * An example of how to handle these events would be:
|
|
+ *
|
|
+ * --- Code snippet begin ---
|
|
+ *
|
|
+ * if(events & RF_GlobalEventInit) {
|
|
+ * // Perform action for this event
|
|
+ * }
|
|
+ * else if (events & RF_GlobalEventRadioPowerDown) {
|
|
+ * // Perform action for this event
|
|
+ * }
|
|
+ * else if (events & RF_GlobalEventRadioSetup) {
|
|
+ * // Perform action for this event
|
|
+ * }
|
|
+ *
|
|
+ * --- Code snippet end ---
|
|
+ */
|
|
+}
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== Antenna switching ========
|
|
+ */
|
|
+static PIN_Handle antennaPins;
|
|
+static PIN_State antennaState;
|
|
+
|
|
+static void initAntennaSwitch()
|
|
+{
|
|
+ PIN_Config antennaConfig[] = {
|
|
+ CONFIG_RF_24GHZ | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* Path disabled */
|
|
+ CONFIG_RF_HIGH_PA | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* Path disabled */
|
|
+ CONFIG_RF_SUB1GHZ | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* Path disabled */
|
|
+ PIN_TERMINATE
|
|
+ };
|
|
+ antennaPins = PIN_open(&antennaState, antennaConfig);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * ======== rfDriverCallbackAntennaSwitching ========
|
|
+ * Sets up the antenna switch depending on the current PHY configuration.
|
|
+ *
|
|
+ * Truth table:
|
|
+ *
|
|
+ * Path DIO28 DIO29 DIO30
|
|
+ * =========== ===== ===== =====
|
|
+ * Off 0 0 0
|
|
+ * Sub-1 GHz 0 0 1
|
|
+ * 2.4 GHz 1 0 0
|
|
+ * 20 dBm TX 0 1 0
|
|
+ */
|
|
+void __attribute__((weak)) rfDriverCallbackAntennaSwitching(RF_Handle client, RF_GlobalEvent events, void *arg)
|
|
+{
|
|
+ /* Protect against repeated RF_init */
|
|
+ static bool initialized = false;
|
|
+
|
|
+ /* Local variable. */
|
|
+ bool sub1GHz = false;
|
|
+ uint8_t loDivider = 0;
|
|
+
|
|
+ if (!initialized && events & RF_GlobalEventInit) {
|
|
+ /* Don't do it again */
|
|
+ initialized = true;
|
|
+ initAntennaSwitch();
|
|
+ }
|
|
+ else if (events & RF_GlobalEventRadioSetup) {
|
|
+ /* Switch off all paths. */
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_24GHZ, 0);
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_HIGH_PA, 0);
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_SUB1GHZ, 0);
|
|
+
|
|
+ /* Decode the current PA configuration. */
|
|
+ RF_TxPowerTable_PAType paType = (RF_TxPowerTable_PAType)RF_getTxPower(client).paType;
|
|
+
|
|
+ /* Decode the generic argument as a setup command. */
|
|
+ RF_RadioSetup* setupCommand = (RF_RadioSetup*)arg;
|
|
+
|
|
+ switch (setupCommand->common.commandNo) {
|
|
+ case (CMD_RADIO_SETUP):
|
|
+ case (CMD_BLE5_RADIO_SETUP):
|
|
+ loDivider = RF_LODIVIDER_MASK & setupCommand->common.loDivider;
|
|
+
|
|
+ /* Sub-1GHz front-end. */
|
|
+ if (loDivider != 0) {
|
|
+ sub1GHz = true;
|
|
+ }
|
|
+ break;
|
|
+ case (CMD_PROP_RADIO_DIV_SETUP):
|
|
+ loDivider = RF_LODIVIDER_MASK & setupCommand->prop_div.loDivider;
|
|
+
|
|
+ /* Sub-1GHz front-end. */
|
|
+ if (loDivider != 0) {
|
|
+ sub1GHz = true;
|
|
+ }
|
|
+ break;
|
|
+ default:break;
|
|
+ }
|
|
+
|
|
+ if (sub1GHz) {
|
|
+ /* Sub-1 GHz */
|
|
+ if (paType == RF_TxPowerTable_HighPA) {
|
|
+ /* PA enable --> HIGH PA
|
|
+ * LNA enable --> Sub-1 GHz
|
|
+ */
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_24GHZ, PINCC26XX_MUX_GPIO);
|
|
+ /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
|
|
+ de-asserted on CC1352 Rev A. */
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_HIGH_PA, PINCC26XX_MUX_RFC_GPO3);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_SUB1GHZ, PINCC26XX_MUX_RFC_GPO0);
|
|
+ } else {
|
|
+ /* RF core active --> Sub-1 GHz */
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_24GHZ, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_HIGH_PA, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_SUB1GHZ, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_SUB1GHZ, 1);
|
|
+ }
|
|
+ } else {
|
|
+ /* 2.4 GHz */
|
|
+ if (paType == RF_TxPowerTable_HighPA)
|
|
+ {
|
|
+ /* PA enable --> HIGH PA
|
|
+ * LNA enable --> 2.4 GHz
|
|
+ */
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_24GHZ, PINCC26XX_MUX_RFC_GPO0);
|
|
+ /* Note: RFC_GPO3 is a work-around because the RFC_GPO1 (PA enable signal) is sometimes not
|
|
+ de-asserted on CC1352 Rev A. */
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_HIGH_PA, PINCC26XX_MUX_RFC_GPO3);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_SUB1GHZ, PINCC26XX_MUX_GPIO);
|
|
+ } else {
|
|
+ /* RF core active --> 2.4 GHz */
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_24GHZ, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_HIGH_PA, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_SUB1GHZ, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_24GHZ, 1);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ else if (events & RF_GlobalEventRadioPowerDown) {
|
|
+ /* Switch off all paths. */
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_24GHZ, 0);
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_HIGH_PA, 0);
|
|
+ PINCC26XX_setOutputValue(CONFIG_RF_SUB1GHZ, 0);
|
|
+
|
|
+ /* Reset the IO multiplexer to GPIO functionality */
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_24GHZ, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_HIGH_PA, PINCC26XX_MUX_GPIO);
|
|
+ PINCC26XX_setMux(antennaPins, CONFIG_RF_SUB1GHZ, PINCC26XX_MUX_GPIO);
|
|
+ }
|
|
+}
|
|
+
|
|
+/*
|
|
+ * =============================== SHA2 ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/SHA2.h>
|
|
+#include <ti/drivers/sha2/SHA2CC26X2.h>
|
|
+
|
|
+#define CONFIG_SHA2_COUNT 1
|
|
+
|
|
+SHA2CC26X2_Object sha2CC26X2Objects[CONFIG_SHA2_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== sha2CC26X2HWAttrs ========
|
|
+ */
|
|
+const SHA2CC26X2_HWAttrs sha2CC26X2HWAttrs[CONFIG_SHA2_COUNT] = {
|
|
+ {
|
|
+ .intPriority = (~0),
|
|
+ },
|
|
+};
|
|
+
|
|
+const SHA2_Config SHA2_config[CONFIG_SHA2_COUNT] = {
|
|
+ { /* CONFIG_SHA2_0 */
|
|
+ .object = &sha2CC26X2Objects[CONFIG_SHA2_0],
|
|
+ .hwAttrs = &sha2CC26X2HWAttrs[CONFIG_SHA2_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_SHA2_0_CONST = CONFIG_SHA2_0;
|
|
+const uint_least8_t SHA2_count = CONFIG_SHA2_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== SPI DMA ===============================
|
|
+ */
|
|
+#include <ti/drivers/SPI.h>
|
|
+#include <ti/drivers/spi/SPICC26X2DMA.h>
|
|
+
|
|
+#define CONFIG_SPI_COUNT 1
|
|
+
|
|
+/*
|
|
+ * ======== spiCC26X2DMAObjects ========
|
|
+ */
|
|
+SPICC26X2DMA_Object spiCC26X2DMAObjects[CONFIG_SPI_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== spiCC26X2DMAHWAttrs ========
|
|
+ */
|
|
+const SPICC26X2DMA_HWAttrs spiCC26X2DMAHWAttrs[CONFIG_SPI_COUNT] = {
|
|
+ /* CONFIG_SPI_0 */
|
|
+ /* LaunchPad SPI Bus */
|
|
+ {
|
|
+ .baseAddr = SSI0_BASE,
|
|
+ .intNum = INT_SSI0_COMB,
|
|
+ .intPriority = (~0),
|
|
+ .swiPriority = 0,
|
|
+ .powerMngrId = PowerCC26XX_PERIPH_SSI0,
|
|
+ .defaultTxBufValue = ~0,
|
|
+ .rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
|
|
+ .txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
|
|
+ .minDmaTransferSize = 10,
|
|
+ .mosiPin = IOID_9,
|
|
+ .misoPin = IOID_8,
|
|
+ .clkPin = IOID_10,
|
|
+ .csnPin = PIN_UNASSIGNED
|
|
+ },
|
|
+};
|
|
+
|
|
+/*
|
|
+ * ======== SPI_config ========
|
|
+ */
|
|
+const SPI_Config SPI_config[CONFIG_SPI_COUNT] = {
|
|
+ /* CONFIG_SPI_0 */
|
|
+ /* LaunchPad SPI Bus */
|
|
+ {
|
|
+ .fxnTablePtr = &SPICC26X2DMA_fxnTable,
|
|
+ .object = &spiCC26X2DMAObjects[CONFIG_SPI_0],
|
|
+ .hwAttrs = &spiCC26X2DMAHWAttrs[CONFIG_SPI_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_SPI_0_CONST = CONFIG_SPI_0;
|
|
+const uint_least8_t SPI_count = CONFIG_SPI_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== TRNG ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/TRNG.h>
|
|
+#include <ti/drivers/trng/TRNGCC26XX.h>
|
|
+
|
|
+#define CONFIG_TRNG_COUNT 1
|
|
+
|
|
+TRNGCC26XX_Object trngCC26XXObjects[CONFIG_TRNG_COUNT];
|
|
+
|
|
+/*
|
|
+ * ======== trngCC26XXHWAttrs ========
|
|
+ */
|
|
+static const TRNGCC26XX_HWAttrs trngCC26XXHWAttrs[CONFIG_TRNG_COUNT] = {
|
|
+ {
|
|
+ .intPriority = (~0),
|
|
+ .swiPriority = 0,
|
|
+ .samplesPerCycle = 240000
|
|
+ },
|
|
+};
|
|
+
|
|
+const TRNG_Config TRNG_config[CONFIG_TRNG_COUNT] = {
|
|
+ { /* CONFIG_TRNG_0 */
|
|
+ .object = &trngCC26XXObjects[CONFIG_TRNG_0],
|
|
+ .hwAttrs = &trngCC26XXHWAttrs[CONFIG_TRNG_0]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_TRNG_0_CONST = CONFIG_TRNG_0;
|
|
+const uint_least8_t TRNG_count = CONFIG_TRNG_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== Temperature ===============================
|
|
+ */
|
|
+#include <ti/drivers/Temperature.h>
|
|
+#include <ti/drivers/temperature/TemperatureCC26X2.h>
|
|
+
|
|
+const TemperatureCC26X2_Config TemperatureCC26X2_config = {
|
|
+ .intPriority = (~0),
|
|
+};
|
|
+
|
|
+/*
|
|
+ * =============================== UART ===============================
|
|
+ */
|
|
+
|
|
+#include <ti/drivers/UART.h>
|
|
+#include <ti/drivers/uart/UARTCC26XX.h>
|
|
+#include <ti/drivers/Power.h>
|
|
+#include <ti/drivers/power/PowerCC26X2.h>
|
|
+#include <ti/devices/cc13x2_cc26x2/inc/hw_memmap.h>
|
|
+#include <ti/devices/cc13x2_cc26x2/inc/hw_ints.h>
|
|
+
|
|
+#define CONFIG_UART_COUNT 1
|
|
+
|
|
+UARTCC26XX_Object uartCC26XXObjects[CONFIG_UART_COUNT];
|
|
+
|
|
+static unsigned char uartCC26XXRingBuffer0[32];
|
|
+
|
|
+static const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CONFIG_UART_COUNT] = {
|
|
+ {
|
|
+ .baseAddr = UART0_BASE,
|
|
+ .intNum = INT_UART0_COMB,
|
|
+ .intPriority = (~0),
|
|
+ .swiPriority = 0,
|
|
+ .powerMngrId = PowerCC26XX_PERIPH_UART0,
|
|
+ .ringBufPtr = uartCC26XXRingBuffer0,
|
|
+ .ringBufSize = sizeof(uartCC26XXRingBuffer0),
|
|
+ .rxPin = IOID_12,
|
|
+ .txPin = IOID_13,
|
|
+ .ctsPin = PIN_UNASSIGNED,
|
|
+ .rtsPin = PIN_UNASSIGNED,
|
|
+ .txIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_1_8,
|
|
+ .rxIntFifoThr = UARTCC26XX_FIFO_THRESHOLD_4_8,
|
|
+ .errorFxn = NULL
|
|
+ },
|
|
+};
|
|
+
|
|
+const UART_Config UART_config[CONFIG_UART_COUNT] = {
|
|
+ { /* CONFIG_DISPLAY_UART */
|
|
+ .fxnTablePtr = &UARTCC26XX_fxnTable,
|
|
+ .object = &uartCC26XXObjects[CONFIG_DISPLAY_UART],
|
|
+ .hwAttrs = &uartCC26XXHWAttrs[CONFIG_DISPLAY_UART]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_DISPLAY_UART_CONST = CONFIG_DISPLAY_UART;
|
|
+const uint_least8_t UART_count = CONFIG_UART_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== Button ===============================
|
|
+ */
|
|
+#include <ti/drivers/apps/Button.h>
|
|
+
|
|
+#define CONFIG_BUTTON_COUNT 2
|
|
+Button_Object ButtonObjects[CONFIG_BUTTON_COUNT];
|
|
+
|
|
+static const Button_HWAttrs ButtonHWAttrs[CONFIG_BUTTON_COUNT] = {
|
|
+ /* CONFIG_BTN_LEFT */
|
|
+ /* LaunchPad Button BTN-1 (Left) */
|
|
+ {
|
|
+ .gpioIndex = CONFIG_GPIO_BTN1
|
|
+ },
|
|
+ /* CONFIG_BTN_RIGHT */
|
|
+ /* LaunchPad Button BTN-2 (Right) */
|
|
+ {
|
|
+ .gpioIndex = CONFIG_GPIO_BTN2
|
|
+ },
|
|
+};
|
|
+
|
|
+const Button_Config Button_config[CONFIG_BUTTON_COUNT] = {
|
|
+ /* CONFIG_BTN_LEFT */
|
|
+ /* LaunchPad Button BTN-1 (Left) */
|
|
+ {
|
|
+ .object = &ButtonObjects[CONFIG_BTN_LEFT],
|
|
+ .hwAttrs = &ButtonHWAttrs[CONFIG_BTN_LEFT]
|
|
+ },
|
|
+ /* CONFIG_BTN_RIGHT */
|
|
+ /* LaunchPad Button BTN-2 (Right) */
|
|
+ {
|
|
+ .object = &ButtonObjects[CONFIG_BTN_RIGHT],
|
|
+ .hwAttrs = &ButtonHWAttrs[CONFIG_BTN_RIGHT]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_BTN_LEFT_CONST = CONFIG_BTN_LEFT;
|
|
+const uint_least8_t CONFIG_BTN_RIGHT_CONST = CONFIG_BTN_RIGHT;
|
|
+const uint_least8_t Button_count = CONFIG_BUTTON_COUNT;
|
|
+
|
|
+/*
|
|
+ * =============================== LED ===============================
|
|
+ */
|
|
+#include <ti/drivers/apps/LED.h>
|
|
+
|
|
+#define CONFIG_LED_COUNT 2
|
|
+LED_Object LEDObjects[CONFIG_LED_COUNT];
|
|
+
|
|
+static const LED_HWAttrs LEDHWAttrs[CONFIG_LED_COUNT] = {
|
|
+ /* CONFIG_LED_RED */
|
|
+ /* LaunchPad LED Red */
|
|
+ {
|
|
+ .type = LED_GPIO_CONTROLLED,
|
|
+ .index = CONFIG_GPIO_RLED,
|
|
+ },
|
|
+ /* CONFIG_LED_GREEN */
|
|
+ /* LaunchPad LED Green */
|
|
+ {
|
|
+ .type = LED_GPIO_CONTROLLED,
|
|
+ .index = CONFIG_GPIO_GLED,
|
|
+ },
|
|
+};
|
|
+
|
|
+const LED_Config LED_config[CONFIG_LED_COUNT] = {
|
|
+ /* CONFIG_LED_RED */
|
|
+ /* LaunchPad LED Red */
|
|
+ {
|
|
+ .object = &LEDObjects[CONFIG_LED_RED],
|
|
+ .hwAttrs = &LEDHWAttrs[CONFIG_LED_RED]
|
|
+ },
|
|
+ /* CONFIG_LED_GREEN */
|
|
+ /* LaunchPad LED Green */
|
|
+ {
|
|
+ .object = &LEDObjects[CONFIG_LED_GREEN],
|
|
+ .hwAttrs = &LEDHWAttrs[CONFIG_LED_GREEN]
|
|
+ },
|
|
+};
|
|
+
|
|
+const uint_least8_t CONFIG_LED_RED_CONST = CONFIG_LED_RED;
|
|
+const uint_least8_t CONFIG_LED_GREEN_CONST = CONFIG_LED_GREEN;
|
|
+const uint_least8_t LED_count = CONFIG_LED_COUNT;
|
|
+
|
|
+#include <stdbool.h>
|
|
+
|
|
+#include <ti/devices/cc13x2_cc26x2/driverlib/ioc.h>
|
|
+#include <ti/devices/cc13x2_cc26x2/driverlib/cpu.h>
|
|
+
|
|
+#include <ti/drivers/pin/PINCC26XX.h>
|
|
+
|
|
+/*
|
|
+ * ======== Board_sendExtFlashByte ========
|
|
+ */
|
|
+void Board_sendExtFlashByte(PIN_Handle pinHandle, uint8_t byte)
|
|
+{
|
|
+ uint8_t i;
|
|
+
|
|
+ /* SPI Flash CS */
|
|
+ PIN_setOutputValue(pinHandle, IOID_20, 0);
|
|
+
|
|
+ for (i = 0; i < 8; i++) {
|
|
+ PIN_setOutputValue(pinHandle, IOID_10, 0); /* SPI Flash CLK */
|
|
+
|
|
+ /* SPI Flash MOSI */
|
|
+ PIN_setOutputValue(pinHandle, IOID_9, (byte >> (7 - i)) & 0x01);
|
|
+ PIN_setOutputValue(pinHandle, IOID_10, 1); /* SPI Flash CLK */
|
|
+
|
|
+ /*
|
|
+ * Waste a few cycles to keep the CLK high for at
|
|
+ * least 45% of the period.
|
|
+ * 3 cycles per loop: 8 loops @ 48 Mhz = 0.5 us.
|
|
+ */
|
|
+ CPUdelay(8);
|
|
+ }
|
|
+
|
|
+ PIN_setOutputValue(pinHandle, IOID_10, 0); /* CLK */
|
|
+ PIN_setOutputValue(pinHandle, IOID_20, 1); /* CS */
|
|
+
|
|
+ /*
|
|
+ * Keep CS high at least 40 us
|
|
+ * 3 cycles per loop: 700 loops @ 48 Mhz ~= 44 us
|
|
+ */
|
|
+ CPUdelay(700);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * ======== Board_wakeUpExtFlash ========
|
|
+ */
|
|
+void Board_wakeUpExtFlash(void)
|
|
+{
|
|
+ PIN_Config extFlashPinTable[] = {
|
|
+ /* SPI Flash CS */
|
|
+ IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
|
|
+ PIN_INPUT_DIS | PIN_DRVSTR_MED,
|
|
+ PIN_TERMINATE
|
|
+ };
|
|
+ PIN_State extFlashPinState;
|
|
+ PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
|
|
+
|
|
+ /*
|
|
+ * To wake up we need to toggle the chip select at
|
|
+ * least 20 ns and ten wait at least 35 us.
|
|
+ */
|
|
+
|
|
+ /* Toggle chip select for ~20ns to wake ext. flash */
|
|
+ PIN_setOutputValue(extFlashPinHandle, IOID_20, 0);
|
|
+ /* 3 cycles per loop: 1 loop @ 48 Mhz ~= 62 ns */
|
|
+ CPUdelay(1);
|
|
+ PIN_setOutputValue(extFlashPinHandle, IOID_20, 1);
|
|
+ /* 3 cycles per loop: 560 loops @ 48 Mhz ~= 35 us */
|
|
+ CPUdelay(560);
|
|
+
|
|
+ PIN_close(extFlashPinHandle);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * ======== Board_shutDownExtFlash ========
|
|
+ */
|
|
+void Board_shutDownExtFlash(void)
|
|
+{
|
|
+ /*
|
|
+ * To be sure we are putting the flash into sleep and not waking it,
|
|
+ * we first have to make a wake up call
|
|
+ */
|
|
+ Board_wakeUpExtFlash();
|
|
+
|
|
+ PIN_Config extFlashPinTable[] = {
|
|
+ /* SPI Flash CS*/
|
|
+ IOID_20 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL |
|
|
+ PIN_INPUT_DIS | PIN_DRVSTR_MED,
|
|
+ /* SPI Flash CLK */
|
|
+ IOID_10 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
|
|
+ PIN_INPUT_DIS | PIN_DRVSTR_MED,
|
|
+ /* SPI Flash MOSI */
|
|
+ IOID_9 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL |
|
|
+ PIN_INPUT_DIS | PIN_DRVSTR_MED,
|
|
+ /* SPI Flash MISO */
|
|
+ IOID_8 | PIN_INPUT_EN | PIN_PULLDOWN,
|
|
+ PIN_TERMINATE
|
|
+ };
|
|
+ PIN_State extFlashPinState;
|
|
+ PIN_Handle extFlashPinHandle = PIN_open(&extFlashPinState, extFlashPinTable);
|
|
+
|
|
+ uint8_t extFlashShutdown = 0xB9;
|
|
+
|
|
+ Board_sendExtFlashByte(extFlashPinHandle, extFlashShutdown);
|
|
+
|
|
+ PIN_close(extFlashPinHandle);
|
|
+}
|
|
+
|
|
+
|
|
+#include <ti/drivers/Board.h>
|
|
+
|
|
+/*
|
|
+ * ======== Board_initHook ========
|
|
+ * Perform any board-specific initialization needed at startup. This
|
|
+ * function is declared weak to allow applications to override it if needed.
|
|
+ */
|
|
+void __attribute__((weak)) Board_initHook(void)
|
|
+{
|
|
+}
|
|
+
|
|
+/*
|
|
+ * ======== Board_init ========
|
|
+ * Perform any initialization needed before using any board APIs
|
|
+ */
|
|
+void Board_init(void)
|
|
+{
|
|
+ /* ==== /ti/drivers/Power initialization ==== */
|
|
+ Power_init();
|
|
+
|
|
+ /* ==== /ti/devices/CCFGTemplate initialization ==== */
|
|
+
|
|
+ /* ==== /ti/drivers/PIN initialization ==== */
|
|
+ if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) {
|
|
+ /* Error with PIN_init */
|
|
+ while (1);
|
|
+ }
|
|
+ /* ==== /ti/drivers/RF initialization ==== */
|
|
+
|
|
+
|
|
+ Board_shutDownExtFlash();
|
|
+
|
|
+ Board_initHook();
|
|
+}
|
|
+
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.h b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.h
|
|
new file mode 100644
|
|
index 0000000..abf128f
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_drivers_config.h
|
|
@@ -0,0 +1,283 @@
|
|
+/*
|
|
+ * ======== 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 <ti/devices/DeviceFamily.h>
|
|
+
|
|
+#include <stdint.h>
|
|
+
|
|
+/* 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
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== ECJPAKE ========
|
|
+ */
|
|
+
|
|
+extern const uint_least8_t CONFIG_ECJPAKE_0_CONST;
|
|
+#define CONFIG_ECJPAKE_0 0
|
|
+#define CONFIG_TI_DRIVERS_ECJPAKE_COUNT 1
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== GPIO ========
|
|
+ */
|
|
+
|
|
+/* DIO15, LaunchPad Button BTN-1 (Left) */
|
|
+extern const uint_least8_t CONFIG_GPIO_BTN1_CONST;
|
|
+#define CONFIG_GPIO_BTN1 0
|
|
+/* DIO14, LaunchPad Button BTN-2 (Right) */
|
|
+extern const uint_least8_t CONFIG_GPIO_BTN2_CONST;
|
|
+#define CONFIG_GPIO_BTN2 1
|
|
+/* DIO6, LaunchPad LED Red */
|
|
+extern const uint_least8_t CONFIG_GPIO_RLED_CONST;
|
|
+#define CONFIG_GPIO_RLED 2
|
|
+/* DIO7, LaunchPad LED Green */
|
|
+extern const uint_least8_t CONFIG_GPIO_GLED_CONST;
|
|
+#define CONFIG_GPIO_GLED 3
|
|
+/* DIO20, MX25R8035F SPI Flash Slave Select */
|
|
+extern const uint_least8_t CONFIG_GPIO_0_CONST;
|
|
+#define CONFIG_GPIO_0 4
|
|
+#define CONFIG_TI_DRIVERS_GPIO_COUNT 5
|
|
+
|
|
+/* 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: DIO20, MX25R8035F SPI Flash Slave Select
|
|
+ */
|
|
+extern const uint_least8_t CONFIG_NVSEXTERNAL_CONST;
|
|
+#define CONFIG_NVSEXTERNAL 1
|
|
+#define CONFIG_TI_DRIVERS_NVS_COUNT 2
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== PIN ========
|
|
+ */
|
|
+#include <ti/drivers/PIN.h>
|
|
+
|
|
+extern const PIN_Config BoardGpioInitTable[];
|
|
+
|
|
+/* XDS110 UART, Parent Signal: CONFIG_DISPLAY_UART TX, (DIO13) */
|
|
+#define CONFIG_PIN_UART_TX 0x0000000d
|
|
+/* XDS110 UART, Parent Signal: CONFIG_DISPLAY_UART RX, (DIO12) */
|
|
+#define CONFIG_PIN_UART_RX 0x0000000c
|
|
+/* SKY13317-373LF RF Antenna Switch, Parent Signal: /ti/drivers/RF RF Antenna Pin 0, (DIO28) */
|
|
+// #define CONFIG_RF_24GHZ 0x0000001c
|
|
+/* SKY13317-373LF RF Antenna Switch, Parent Signal: /ti/drivers/RF RF Antenna Pin 1, (DIO29) */
|
|
+// #define CONFIG_RF_HIGH_PA 0x0000001d
|
|
+/* SKY13317-373LF RF Antenna Switch, Parent Signal: /ti/drivers/RF RF Antenna Pin 2, (DIO30) */
|
|
+#define CONFIG_RF_SUB1GHZ 0x0000001e
|
|
+/* LaunchPad Button BTN-1 (Left), Parent Signal: CONFIG_GPIO_BTN1 GPIO Pin, (DIO15) */
|
|
+#define CONFIG_PIN_BTN1 0x0000000f
|
|
+/* LaunchPad Button BTN-2 (Right), Parent Signal: CONFIG_GPIO_BTN2 GPIO Pin, (DIO14) */
|
|
+#define CONFIG_PIN_BTN2 0x0000000e
|
|
+/* LaunchPad LED Red, Parent Signal: CONFIG_GPIO_RLED GPIO Pin, (DIO6) */
|
|
+#define CONFIG_PIN_RLED 0x00000006
|
|
+/* LaunchPad LED Green, Parent Signal: CONFIG_GPIO_GLED GPIO Pin, (DIO7) */
|
|
+#define CONFIG_PIN_GLED 0x00000007
|
|
+/* MX25R8035F SPI Flash Slave Select, Parent Signal: CONFIG_GPIO_0 GPIO Pin, (DIO20) */
|
|
+#define CONFIG_PIN_0 0x00000014
|
|
+/* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_0 SCLK, (DIO10) */
|
|
+#define CONFIG_PIN_SPI_SCLK 0x0000000a
|
|
+/* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_0 MISO, (DIO8) */
|
|
+#define CONFIG_PIN_SPI_MISO 0x00000008
|
|
+/* LaunchPad SPI Bus, Parent Signal: CONFIG_SPI_0 MOSI, (DIO9) */
|
|
+#define CONFIG_PIN_SPI_MOSI 0x00000009
|
|
+#define CONFIG_TI_DRIVERS_PIN_COUNT 13
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== 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
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== UART ========
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * TX: DIO13
|
|
+ * RX: DIO12
|
|
+ * XDS110 UART
|
|
+ */
|
|
+extern const uint_least8_t CONFIG_DISPLAY_UART_CONST;
|
|
+#define CONFIG_DISPLAY_UART 0
|
|
+#define CONFIG_TI_DRIVERS_UART_COUNT 1
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== Button ========
|
|
+ */
|
|
+
|
|
+/* DIO15, LaunchPad Button BTN-1 (Left) */
|
|
+extern const uint_least8_t CONFIG_BTN_LEFT_CONST;
|
|
+#define CONFIG_BTN_LEFT 0
|
|
+/* DIO14, LaunchPad Button BTN-2 (Right) */
|
|
+extern const uint_least8_t CONFIG_BTN_RIGHT_CONST;
|
|
+#define CONFIG_BTN_RIGHT 1
|
|
+#define CONFIG_TI_DRIVERS_BUTTON_COUNT 2
|
|
+
|
|
+
|
|
+/*
|
|
+ * ======== LED ========
|
|
+ */
|
|
+
|
|
+/* DIO6, LaunchPad LED Red */
|
|
+extern const uint_least8_t CONFIG_LED_RED_CONST;
|
|
+#define CONFIG_LED_RED 0
|
|
+/* DIO7, LaunchPad LED Green */
|
|
+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 <Driver>_init() for only where specific drivers
|
|
+ * are explicitly referenced by the application. <Driver>_init() functions
|
|
+ * are idempotent.
|
|
+ */
|
|
+#define Board_initGeneral Board_init
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
+
|
|
+#endif /* include guard */
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.c b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.c
|
|
new file mode 100644
|
|
index 0000000..ac1e16f
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.c
|
|
@@ -0,0 +1,340 @@
|
|
+/*
|
|
+ * ======== 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.8
|
|
+ * SmartRF Studio data version : 2.20.0
|
|
+ */
|
|
+
|
|
+#include <ti/devices/DeviceFamily.h>
|
|
+#include DeviceFamily_constructPath(driverlib/rf_mailbox.h)
|
|
+#include DeviceFamily_constructPath(driverlib/rf_common_cmd.h)
|
|
+#include DeviceFamily_constructPath(driverlib/rf_ieee_cmd.h)
|
|
+#include <ti/drivers/rf/RF.h>
|
|
+#include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_ieee_802_15_4.h)
|
|
+#include "ti_radio_config.h"
|
|
+
|
|
+
|
|
+// *********************************************************************************
|
|
+// RF Frontend configuration
|
|
+// *********************************************************************************
|
|
+// RF design based on: LAUNCHXL-CC1352P-2 (CC1352PEM-XD4251-XD24-PA24_10dBm)
|
|
+
|
|
+// 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) },
|
|
+ {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(1, 3, 0, 3) },
|
|
+ {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(2, 3, 0, 5) },
|
|
+ {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(4, 3, 0, 5) },
|
|
+ {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 8) },
|
|
+ {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(9, 3, 0, 9) },
|
|
+ {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 9) },
|
|
+ {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(11, 3, 0, 10) },
|
|
+ {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(13, 3, 0, 11) },
|
|
+ {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(14, 3, 0, 14) },
|
|
+ {6, RF_TxPowerTable_DEFAULT_PA_ENTRY(17, 3, 0, 16) },
|
|
+ {7, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 19) },
|
|
+ {8, RF_TxPowerTable_DEFAULT_PA_ENTRY(24, 3, 0, 22) },
|
|
+ {9, RF_TxPowerTable_DEFAULT_PA_ENTRY(28, 3, 0, 31) },
|
|
+ {10, RF_TxPowerTable_DEFAULT_PA_ENTRY(18, 2, 0, 31) },
|
|
+ {11, RF_TxPowerTable_DEFAULT_PA_ENTRY(26, 2, 0, 51) },
|
|
+ {12, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 0, 0, 82) },
|
|
+ // The original PA value (12.5 dBm) has been rounded to an integer value.
|
|
+ {13, RF_TxPowerTable_DEFAULT_PA_ENTRY(36, 0, 0, 89) },
|
|
+ // This setting requires CCFG_FORCE_VDDR_HH = 1.
|
|
+ {14, RF_TxPowerTable_DEFAULT_PA_ENTRY(63, 0, 1, 0) },
|
|
+ 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) },
|
|
+ {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) },
|
|
+ {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) },
|
|
+ {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) },
|
|
+ {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) },
|
|
+ {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) },
|
|
+ {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) },
|
|
+ {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) },
|
|
+ {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) },
|
|
+ {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) },
|
|
+ {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) },
|
|
+ {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) },
|
|
+ {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) },
|
|
+ {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) },
|
|
+ {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) },
|
|
+ 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) },
|
|
+ {-18, RF_TxPowerTable_DEFAULT_PA_ENTRY(8, 3, 0, 3) },
|
|
+ {-15, RF_TxPowerTable_DEFAULT_PA_ENTRY(10, 3, 0, 3) },
|
|
+ {-12, RF_TxPowerTable_DEFAULT_PA_ENTRY(12, 3, 0, 5) },
|
|
+ {-10, RF_TxPowerTable_DEFAULT_PA_ENTRY(15, 3, 0, 5) },
|
|
+ {-9, RF_TxPowerTable_DEFAULT_PA_ENTRY(16, 3, 0, 5) },
|
|
+ {-6, RF_TxPowerTable_DEFAULT_PA_ENTRY(20, 3, 0, 8) },
|
|
+ {-5, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 3, 0, 9) },
|
|
+ {-3, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 2, 0, 12) },
|
|
+ {0, RF_TxPowerTable_DEFAULT_PA_ENTRY(19, 1, 0, 20) },
|
|
+ {1, RF_TxPowerTable_DEFAULT_PA_ENTRY(22, 1, 0, 20) },
|
|
+ {2, RF_TxPowerTable_DEFAULT_PA_ENTRY(25, 1, 0, 25) },
|
|
+ {3, RF_TxPowerTable_DEFAULT_PA_ENTRY(29, 1, 0, 28) },
|
|
+ {4, RF_TxPowerTable_DEFAULT_PA_ENTRY(35, 1, 0, 39) },
|
|
+ {5, RF_TxPowerTable_DEFAULT_PA_ENTRY(23, 0, 0, 57) },
|
|
+ {14, RF_TxPowerTable_HIGH_PA_ENTRY(22, 3, 1, 19, 27) },
|
|
+ {15, RF_TxPowerTable_HIGH_PA_ENTRY(26, 3, 1, 23, 27) },
|
|
+ {16, RF_TxPowerTable_HIGH_PA_ENTRY(30, 3, 1, 28, 27) },
|
|
+ {17, RF_TxPowerTable_HIGH_PA_ENTRY(37, 3, 1, 39, 27) },
|
|
+ {18, RF_TxPowerTable_HIGH_PA_ENTRY(32, 3, 1, 35, 48) },
|
|
+ {19, RF_TxPowerTable_HIGH_PA_ENTRY(34, 3, 1, 48, 63) },
|
|
+ {20, RF_TxPowerTable_HIGH_PA_ENTRY(53, 3, 1, 58, 63) },
|
|
+ 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): 5
|
|
+
|
|
+// 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
|
|
+};
|
|
+
|
|
+
|
|
+
|
|
+// 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,
|
|
+ .txPower = 0x7217,
|
|
+ .pRegOverride = pOverrides_ieee154,
|
|
+ .pRegOverrideTxStd = 0,
|
|
+ .pRegOverrideTx20 = 0
|
|
+};
|
|
+
|
|
+// 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/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.h b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.h
|
|
new file mode 100644
|
|
index 0000000..1e63c91
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_radio_config.h
|
|
@@ -0,0 +1,77 @@
|
|
+/*
|
|
+ * ======== 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.8
|
|
+ * SmartRF Studio data version : 2.20.0
|
|
+ */
|
|
+#ifndef _TI_RADIO_CONFIG_H_
|
|
+#define _TI_RADIO_CONFIG_H_
|
|
+
|
|
+#include <ti/devices/DeviceFamily.h>
|
|
+#include DeviceFamily_constructPath(driverlib/rf_mailbox.h)
|
|
+#include DeviceFamily_constructPath(driverlib/rf_common_cmd.h)
|
|
+#include DeviceFamily_constructPath(driverlib/rf_ieee_cmd.h)
|
|
+#include <ti/drivers/rf/RF.h>
|
|
+
|
|
+// *********************************************************************************
|
|
+// RF Frontend configuration
|
|
+// *********************************************************************************
|
|
+// RF design based on: LAUNCHXL-CC1352P-2 (CC1352PEM-XD4251-XD24-PA24_10dBm)
|
|
+#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 20 // 868 MHz, 13 dBm
|
|
+#define TXPOWERTABLE_2400_PA5_SIZE 16 // 2400 MHz, 5 dBm
|
|
+#define TXPOWERTABLE_2400_PA5_20_SIZE 23 // 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_SIZE
|
|
+
|
|
+#define txPowerTable_ieee154 txPowerTable_2400_pa5
|
|
+
|
|
+// 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[];
|
|
+
|
|
+#endif // _TI_RADIO_CONFIG_H_
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_utils_build_linker.cmd.genlibs b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_utils_build_linker.cmd.genlibs
|
|
new file mode 100644
|
|
index 0000000..fa697e6
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_utils_build_linker.cmd.genlibs
|
|
@@ -0,0 +1,35 @@
|
|
+/*
|
|
+ * ======== ti_utils_build_linker.cmd.genlibs ========
|
|
+ * Libraries needed to link this application's configuration
|
|
+ *
|
|
+ * NOTE, this feature requires software components configured in your
|
|
+ * system to correctly indicate their dependencies and report the
|
|
+ * libraries needed for your specific configuration. If you find
|
|
+ * errors, please report them on TI's E2E forums
|
|
+ * (https://e2e.ti.com/) so they can be addressed in a future
|
|
+ * release.
|
|
+ *
|
|
+ * This file allows one to portably link applications that use SysConfig
|
|
+ * _without_ having to make changes to build rules when moving to a new
|
|
+ * device OR when upgrading to a new version of a SysConfig enabled
|
|
+ * product.
|
|
+ *
|
|
+ * DO NOT EDIT - This file is generated by the SysConfig tool for the
|
|
+ * TI C/C++ toolchain
|
|
+ */
|
|
+
|
|
+/* libraries required for /third_party/spiffs */
|
|
+-l"third_party/spiffs/lib/ccs/m4f/spiffs.a"
|
|
+
|
|
+/* libraries required for /ti/drivers/RF */
|
|
+-l"ti/drivers/rf/lib/rf_multiMode_cc13x2.aem4f"
|
|
+
|
|
+/* libraries required for /ti/drivers */
|
|
+-l"ti/drivers/lib/ccs/m4f/drivers_cc13x2.a"
|
|
+-l"ti/grlib/lib/ccs/m4f/grlib.a"
|
|
+-l"ti/dpl/lib/ccs/m4f/dpl_cc13x2.a"
|
|
+
|
|
+/* libraries required for /ti/zstack */
|
|
+-l"ti/ti154stack/library/tirtos/ccs/bin/maclib_nosecure_cc13x2_2_4g.a"
|
|
+-l"ti/zstack/lib/ccs/libZStack_nwk_all_ccs.a"
|
|
+
|
|
diff --git a/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_zstack_config.h b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_zstack_config.h
|
|
new file mode 100644
|
|
index 0000000..69447c1
|
|
--- /dev/null
|
|
+++ b/znp_CC1352P_2_LAUNCHXL_tirtos_ccs/syscfg/ti_zstack_config.h
|
|
@@ -0,0 +1,226 @@
|
|
+/*
|
|
+ * 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.
|
|
+ *
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * ti_zstack_config.h
|
|
+ *
|
|
+ * DO NOT EDIT - This file was generated by the SysConfig tool.
|
|
+ *
|
|
+ * Macros used to define a TI Z-Stack ZigBee device. New user defined
|
|
+ * options may be added to this file, as necessary.
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef TI_ZSTACK_CONFIG_H
|
|
+#define TI_ZSTACK_CONFIG_H
|
|
+
|
|
+/* Default (primary) and secondary channel masks. Secondary mask is used when the
|
|
+ * default channels fail.
|
|
+ * Channels are defined in the following:
|
|
+ * 11 - 26 : 2.4 GHz 0x07FFF800
|
|
+ */
|
|
+#ifndef DEFAULT_CHANLIST
|
|
+#define DEFAULT_CHANLIST 0x00000800
|
|
+#endif
|
|
+
|
|
+#ifndef SECONDARY_CHANLIST
|
|
+#define SECONDARY_CHANLIST 0x00000000
|
|
+#endif
|
|
+
|
|
+/* Define the default PAN ID.
|
|
+ *
|
|
+ * Setting this to a value other than 0xFFFF causes
|
|
+ * ZDO_COORD to use this value as its PAN ID and
|
|
+ * Routers and end devices to join PAN with this ID
|
|
+ */
|
|
+#ifndef ZDAPP_CONFIG_PAN_ID
|
|
+#define ZDAPP_CONFIG_PAN_ID 0xFFFF
|
|
+#endif
|
|
+
|
|
+/* Specifiy whether to set the EPID to the Extended Address, or to use the
|
|
+ * custom Extended Pan ID (EPID) defined by ZDAPP_CONFIG_EPID
|
|
+ */
|
|
+#ifndef SET_EPID_AS_EXT_ADDR
|
|
+#define SET_EPID_AS_EXT_ADDR TRUE
|
|
+#endif
|
|
+
|
|
+/* Define the default Extended Pan ID (EPID)
|
|
+ * ZDAPP_CONFIG_EPID is only used if SET_EPID_AS_EXT_ADDR is FALSE. Otherwise,
|
|
+ * the EPID is set to the Extended Address.
|
|
+ */
|
|
+#ifndef ZDAPP_CONFIG_EPID
|
|
+#define ZDAPP_CONFIG_EPID {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}
|
|
+#endif
|
|
+
|
|
+/* in seconds; set to 255 to turn off route expiry */
|
|
+#ifndef ROUTE_EXPIRY_TIME
|
|
+#define ROUTE_EXPIRY_TIME 30
|
|
+#endif
|
|
+
|
|
+/* Default indirect message holding timeout value:
|
|
+ * 1-65535 (0 -> 65536) X CNT_RTG_TIMER X RTG_TIMER_INTERVAL
|
|
+ */
|
|
+#ifndef NWK_INDIRECT_MSG_TIMEOUT
|
|
+#define NWK_INDIRECT_MSG_TIMEOUT 7
|
|
+#endif
|
|
+
|
|
+/* The number of simultaneous route discoveries in network */
|
|
+#ifndef MAX_RREQ_ENTRIES
|
|
+#define MAX_RREQ_ENTRIES 8
|
|
+#endif
|
|
+
|
|
+/* The maximum number of MAC frame transmission attempts allowed */
|
|
+#ifndef ZMAC_MAX_FRAME_RETRIES
|
|
+#define ZMAC_MAX_FRAME_RETRIES 3
|
|
+#endif
|
|
+
|
|
+/* Max number of times attempts looking for the next hop address of a message */
|
|
+#ifndef NWK_MAX_DATA_RETRIES
|
|
+#define NWK_MAX_DATA_RETRIES 2
|
|
+#endif
|
|
+
|
|
+/* The maximum number of times APS frames are retried after not receiving an APS ACK */
|
|
+#ifndef APSC_MAX_FRAME_RETRIES
|
|
+#define APSC_MAX_FRAME_RETRIES 3
|
|
+#endif
|
|
+
|
|
+/* This number is used by polled devices, since the spec'd formula
|
|
+ * doesn't work for sleeping end devices. For non-polled devices,
|
|
+ * a formula is used. Value is in 2 milliseconds periods
|
|
+ */
|
|
+#ifndef APSC_ACK_WAIT_DURATION_POLLED
|
|
+#define APSC_ACK_WAIT_DURATION_POLLED 3000
|
|
+#endif
|
|
+
|
|
+/* The maximum number of groups in the groups table */
|
|
+#ifndef APS_MAX_GROUPS
|
|
+#define APS_MAX_GROUPS 16
|
|
+#endif
|
|
+
|
|
+/* Number of entries in the regular routing table plus additional
|
|
+ * entries for route repair
|
|
+ */
|
|
+#ifndef MAX_RTG_ENTRIES
|
|
+#define MAX_RTG_ENTRIES 40
|
|
+#endif
|
|
+
|
|
+/* Maximum number of entries in the Binding table. */
|
|
+#ifndef NWK_MAX_BINDING_ENTRIES
|
|
+#define NWK_MAX_BINDING_ENTRIES 4
|
|
+#endif
|
|
+
|
|
+/* Default security key. */
|
|
+#ifndef DEFAULT_KEY
|
|
+#define DEFAULT_KEY {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
|
|
+#endif
|
|
+
|
|
+/* ZigBee Alliance Pre-configured Distributed Link Key (for Distributed networks) */
|
|
+#ifndef DISTRIBUTED_GLOBAL_LINK_KEY
|
|
+#define DISTRIBUTED_GLOBAL_LINK_KEY {0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF}
|
|
+#endif
|
|
+
|
|
+/* ZigBee Alliance Pre-configured TC Link Key - 'ZigBeeAlliance09' (for Centralized networks) */
|
|
+#ifndef DEFAULT_TC_LINK_KEY
|
|
+#define DEFAULT_TC_LINK_KEY {0x5a,0x69,0x67,0x42,0x65,0x65,0x41,0x6c,0x6c,0x69,0x61,0x6e,0x63,0x65,0x30,0x39}
|
|
+#endif
|
|
+
|
|
+/* The number of milliseconds to wait between data request polls to the coordinator. */
|
|
+#ifndef TXPOWER
|
|
+#define TXPOWER 5
|
|
+#endif
|
|
+
|
|
+/****************************************
|
|
+ * The following are for End Devices only
|
|
+ ***************************************/
|
|
+
|
|
+/* Determine whether the radio on an End Device is always on */
|
|
+#ifndef RFD_RX_ALWAYS_ON_CAPABLE
|
|
+#define RFD_RX_ALWAYS_ON_CAPABLE TRUE
|
|
+#endif
|
|
+
|
|
+#ifndef RFD_RX_ALWAYS_ON
|
|
+#define RFD_RX_ALWAYS_ON FALSE
|
|
+#endif
|
|
+
|
|
+/* The minimum poll rate. */
|
|
+#ifndef MINIMUM_APP_POLL_RATE
|
|
+#define MINIMUM_APP_POLL_RATE 100
|
|
+#endif
|
|
+
|
|
+/* The number of milliseconds to wait between data request polls to the coordinator. */
|
|
+#ifndef POLL_RATE
|
|
+#define POLL_RATE 3000
|
|
+#endif
|
|
+
|
|
+/* This is used after receiving a data indication to poll immediately
|
|
+ * for queued messages...in milliseconds.
|
|
+ */
|
|
+#ifndef QUEUED_POLL_RATE
|
|
+#define QUEUED_POLL_RATE 100
|
|
+#endif
|
|
+
|
|
+/* This is used after receiving a data confirmation to poll immediately
|
|
+ * for response messages...in milliseconds
|
|
+ */
|
|
+#ifndef RESPONSE_POLL_RATE
|
|
+#define RESPONSE_POLL_RATE 100
|
|
+#endif
|
|
+
|
|
+/* This is used as an alternate response poll rate only for rejoin request.
|
|
+ * This rate is determined by the response time of the parent that the device
|
|
+ * is trying to join.
|
|
+ */
|
|
+#ifndef REJOIN_POLL_RATE
|
|
+#define REJOIN_POLL_RATE 440
|
|
+#endif
|
|
+
|
|
+/* Maximum number of devices in the Assoc/Device list. */
|
|
+#ifndef NWK_MAX_DEVICE_LIST
|
|
+#define NWK_MAX_DEVICE_LIST 20
|
|
+#endif
|
|
+
|
|
+/* Total Number of APS keys that a TC can manage. This is equal to the number of devices a ZC can allow to join the network */
|
|
+#ifndef ZDSECMGR_TC_DEVICE_MAX
|
|
+#define ZDSECMGR_TC_DEVICE_MAX 40
|
|
+#endif
|
|
+
|
|
+/* Value used by end device when sending End Device Timeout Request */
|
|
+/* This is an index into table timeoutValue[] defined in nwk_globals.c */
|
|
+#ifndef END_DEV_TIMEOUT_VALUE
|
|
+#define END_DEV_TIMEOUT_VALUE 8
|
|
+#endif
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+#endif /* TI_ZSTACK_CONFIG_H */
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt.h b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
index 2c5073c..8732c65 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
@@ -441,6 +441,8 @@ extern "C"
|
|
#define MT_UTIL_SRNG_GENERATE 0x4C
|
|
#endif
|
|
#define MT_UTIL_BIND_ADD_ENTRY 0x4D
|
|
+#define MT_UTIL_ASSOC_REMOVE 0x63 // Custom command
|
|
+#define MT_UTIL_ASSOC_ADD 0x64 // Custom command
|
|
|
|
#define MT_UTIL_ZCL_KEY_EST_INIT_EST 0x80
|
|
#define MT_UTIL_ZCL_KEY_EST_SIGN 0x81
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
index 90d6d4a..4d50083 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
@@ -128,6 +128,8 @@ static void MT_UtilAPSME_LinkKeyNvIdGet(uint8_t *pBuf);
|
|
#endif //MT_SYS_KEY_MANAGEMENT
|
|
static void MT_UtilAPSME_RequestKeyCmd(uint8_t *pBuf);
|
|
static void MT_UtilAssocCount(uint8_t *pBuf);
|
|
+static void MT_UtilAssocRemove(uint8_t *pBuf);
|
|
+static void MT_UtilAssocAdd(uint8_t *pBuf);
|
|
static void MT_UtilAssocFindDevice(uint8_t *pBuf);
|
|
static void MT_UtilAssocGetWithAddress(uint8_t *pBuf);
|
|
static void MT_UtilBindAddEntry(uint8_t *pBuf);
|
|
@@ -272,6 +274,14 @@ uint8_t MT_UtilCommandProcessing(uint8_t *pBuf)
|
|
MT_UtilBindAddEntry(pBuf);
|
|
break;
|
|
|
|
+ case MT_UTIL_ASSOC_REMOVE:
|
|
+ MT_UtilAssocRemove(pBuf);
|
|
+ break;
|
|
+
|
|
+ case MT_UTIL_ASSOC_ADD:
|
|
+ MT_UtilAssocAdd(pBuf);
|
|
+ break;
|
|
+
|
|
case MT_UTIL_SYNC_REQ:
|
|
MT_UtilSync();
|
|
break;
|
|
@@ -1375,6 +1385,60 @@ static void MT_UtilAssocCount(uint8_t *pBuf)
|
|
MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 2, pBuf);
|
|
}
|
|
|
|
+/***************************************************************************************************
|
|
+ * @fn MT_UtilAssocRemove
|
|
+ *
|
|
+ * @brief Proxy the AssocRemove() function.
|
|
+ *
|
|
+ * @param pBuf - pointer to the received buffer
|
|
+ *
|
|
+ * @return void
|
|
+ ***************************************************************************************************/
|
|
+static void MT_UtilAssocRemove(uint8_t *pBuf)
|
|
+{
|
|
+ uint8_t cmdId;
|
|
+ uint8_t ieeeAddr[Z_EXTADDR_LEN];
|
|
+ uint8_t retValue = 0;
|
|
+
|
|
+ // parse header
|
|
+ cmdId = pBuf[MT_RPC_POS_CMD1];
|
|
+ pBuf += MT_RPC_FRAME_HDR_SZ;
|
|
+
|
|
+ /* IeeAddress */
|
|
+ OsalPort_memcpy(ieeeAddr, pBuf, Z_EXTADDR_LEN);
|
|
+
|
|
+ AssocRemove(ieeeAddr);
|
|
+
|
|
+ MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
|
|
+}
|
|
+
|
|
+/***************************************************************************************************
|
|
+ * @fn MT_UtilAssocAdd
|
|
+ *
|
|
+ * @brief Proxy the AssocAdd() function.
|
|
+ *
|
|
+ * @param pBuf - pointer to the received buffer
|
|
+ *
|
|
+ * @return void
|
|
+ ***************************************************************************************************/
|
|
+static void MT_UtilAssocAdd(uint8_t *pBuf)
|
|
+{
|
|
+ uint8_t cmdId;
|
|
+ uint8_t retValue = 0;
|
|
+
|
|
+ // parse header
|
|
+ cmdId = pBuf[MT_RPC_POS_CMD1];
|
|
+ pBuf += MT_RPC_FRAME_HDR_SZ;
|
|
+
|
|
+ AssocAddNew(
|
|
+ BUILD_UINT16(pBuf[Z_EXTADDR_LEN], pBuf[Z_EXTADDR_LEN + 1]),
|
|
+ pBuf,
|
|
+ pBuf[Z_EXTADDR_LEN + 2]
|
|
+ );
|
|
+
|
|
+ MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
|
|
+}
|
|
+
|
|
/***************************************************************************************************
|
|
* @fn MT_UtilAssocFindDevice
|
|
*
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
index 63c143b..11325fd 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
@@ -43,15 +43,21 @@
|
|
#include "zcomdef.h"
|
|
#include "mt_version.h"
|
|
|
|
+#define CODE_REVISION_NUMBER 20210120
|
|
+
|
|
/******************************************************************************
|
|
* CONSTANTS
|
|
*****************************************************************************/
|
|
const uint8_t MTVersionString[] = {
|
|
2, /* Transport protocol revision */
|
|
- 0, /* Product ID */
|
|
+ 1, /* Product ID */
|
|
2, /* Software major release number */
|
|
7, /* Software minor release number */
|
|
1, /* Software maintenance release number */
|
|
+ ((CODE_REVISION_NUMBER >> 0) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 8) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 16) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 24) & 0xFF),
|
|
};
|
|
|
|
/******************************************************************************
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
new file mode 100644
|
|
index 0000000..7017d6f
|
|
--- /dev/null
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
@@ -0,0 +1,52 @@
|
|
+#define MT_SYS_KEY_MANAGEMENT 1
|
|
+#define FEATURE_NVEXID 1
|
|
+
|
|
+// Save memory
|
|
+#undef NWK_MAX_BINDING_ENTRIES
|
|
+#define NWK_MAX_BINDING_ENTRIES 1
|
|
+#undef APS_MAX_GROUPS
|
|
+#define APS_MAX_GROUPS 1
|
|
+
|
|
+// Increase NV pages to 3 to allow for bigger device tables
|
|
+#undef NVOCMP_NVPAGES
|
|
+#define NVOCMP_NVPAGES 3
|
|
+
|
|
+// Disabling MULTICAST is required in order for proper group support.
|
|
+// If MULTICAST is not disabled, the group adress is not included in the APS header
|
|
+#define MULTICAST_ENABLED FALSE
|
|
+
|
|
+// 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
|
|
+
|
|
+/**
|
|
+ * Enable MTO routing
|
|
+ */
|
|
+#define CONCENTRATOR_ENABLE TRUE
|
|
+#define CONCENTRATOR_DISCOVERY_TIME 100
|
|
+#define CONCENTRATOR_ROUTE_CACHE TRUE
|
|
+#define MAX_RTG_SRC_ENTRIES 200
|
|
+#define SRC_RTG_EXPIRY_TIME 2
|
|
+
|
|
+/**
|
|
+ * Scale other device tables appropriately
|
|
+ */
|
|
+#define NWK_MAX_DEVICE_LIST 50
|
|
+#define ZDSECMGR_TC_DEVICE_MAX 200
|
|
+#define MAX_NEIGHBOR_ENTRIES 20
|
|
+#define MAX_RTG_ENTRIES 100
|
|
+
|
|
+/**
|
|
+ * Reduce the APS ack wait duration from 6000 ms to 1000 ms (value * 2 = value in ms).
|
|
+ * This will make requests timeout quicker, in pratice the default timeout of 6000ms is too long.
|
|
+ */
|
|
+#define APSC_ACK_WAIT_DURATION_POLLED 500
|
|
+
|
|
+// 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
|
|
+#define MTO_RREQ_LIMIT_TIME 5000
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
index 6e3cb6a..1f90cc6 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
@@ -32,3 +32,5 @@
|
|
-DMT_GP_CB_FUNC
|
|
|
|
-DMT_APP_CNF_FUNC
|
|
+
|
|
+--preinclude=preinclude.h
|
|
\ No newline at end of file
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/af/af.c b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
index 3a7afa3..e3a2706 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
@@ -407,10 +407,18 @@ void afIncomingData( aps_FrameFormat_t *aff, zAddrType_t *SrcAddress, uint16_t S
|
|
#if !defined ( APS_NO_GROUPS )
|
|
// Find the first endpoint for this group
|
|
grpEp = aps_FindGroupForEndpoint( aff->GroupID, APS_GROUPS_FIND_FIRST );
|
|
- if ( grpEp == APS_GROUPS_EP_NOT_FOUND )
|
|
- return; // No endpoint found
|
|
+ if ( grpEp == APS_GROUPS_EP_NOT_FOUND ) {
|
|
+ // No endpoint found, default to endpoint 1.
|
|
+ // In the original source code there is a return here.
|
|
+ // This prevent the messags from being forwarded.
|
|
+ // For our use-case we want to capture all messages.
|
|
+ // Even if the coordinator is not in the group.
|
|
+ epDesc = afFindEndPointDesc( 1 );
|
|
+ }
|
|
+ else {
|
|
+ epDesc = afFindEndPointDesc( grpEp );
|
|
+ }
|
|
|
|
- epDesc = afFindEndPointDesc( grpEp );
|
|
if ( epDesc == NULL )
|
|
return; // Endpoint descriptor not found
|
|
|
|
@@ -457,7 +465,9 @@ void afIncomingData( aps_FrameFormat_t *aff, zAddrType_t *SrcAddress, uint16_t S
|
|
// if the Wildcard ProfileID is received the message should not be sent to ZDO endpoint
|
|
if ( (aff->ProfileID == epProfileID) ||
|
|
((epDesc->endPoint == ZDO_EP) && (aff->ProfileID == ZDO_PROFILE_ID)) ||
|
|
- ((epDesc->endPoint != ZDO_EP) && ( aff->ProfileID == ZDO_WILDCARD_PROFILE_ID )) )
|
|
+ ((epDesc->endPoint != ZDO_EP) && ( aff->ProfileID == ZDO_WILDCARD_PROFILE_ID )) ||
|
|
+ // Fix below is to support PGC410EU: https://github.com/Koenkk/zigbee2mqtt/issues/4055
|
|
+ ((epDesc->endPoint == 2) && ( aff->ProfileID == 0xFC01 )) )
|
|
{
|
|
// Save original endpoint
|
|
uint8_t endpoint = aff->DstEndPoint;
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
index a78ad3c..bfe7884 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
@@ -65,10 +65,10 @@
|
|
* CONSTANTS
|
|
*/
|
|
// Maximums for the data buffer queue
|
|
-#define NWK_MAX_DATABUFS_WAITING 8 // Waiting to be sent to MAC
|
|
-#define NWK_MAX_DATABUFS_SCHEDULED 5 // Timed messages to be sent
|
|
-#define NWK_MAX_DATABUFS_CONFIRMED 5 // Held after MAC confirms
|
|
-#define NWK_MAX_DATABUFS_TOTAL 12 // Total number of buffers
|
|
+#define NWK_MAX_DATABUFS_WAITING 16 // Waiting to be sent to MAC
|
|
+#define NWK_MAX_DATABUFS_SCHEDULED 10 // Timed messages to be sent
|
|
+#define NWK_MAX_DATABUFS_CONFIRMED 10 // Held after MAC confirms
|
|
+#define NWK_MAX_DATABUFS_TOTAL 24 // Total number of buffers
|
|
|
|
// 1-255 (0 -> 256) X RTG_TIMER_INTERVAL
|
|
// A known shortcoming is that when a message is enqueued as "hold" for a
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
index 8ea2ac3..4879330 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
@@ -104,7 +104,7 @@ uint8_t zgSecurePermitJoin = TRUE;
|
|
// TC Link Key. In this scenario, if this flag is TRUE, the Trust Center will
|
|
// encrypt the outgoing NWK Key with the default TC Link Key (ZigbeeAlliance09).
|
|
// If this flag is FALSE (default), the Trust Center will not send the NWK Key at all.
|
|
-uint8_t zgAllowRejoinsWithWellKnownKey = FALSE;
|
|
+uint8_t zgAllowRejoinsWithWellKnownKey = TRUE; // https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/p/882650/3265311#3265311
|
|
|
|
//allowInstallCodes
|
|
uint8_t zgAllowInstallCodes = ZG_IC_SUPPORTED_NOT_REQUIRED;
|
|
@@ -198,7 +198,9 @@ 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;
|
|
+
|
|
+// Disable child aging, otherwise Xiaomi devices are being kicked off the network.
|
|
+uint8_t zgChildAgingEnable = FALSE;
|
|
|
|
//========== TouchLink NWK configuration ===============
|
|
// Values used by Router when starts a network as initiator
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
index 1f807ca..b935b6a 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
@@ -419,12 +419,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
|
|
{
|
|
@@ -885,12 +884,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
|
|
{
|
|
@@ -3132,6 +3130,14 @@ void ZDO_NetworkStatusCB( uint16_t nwkDstAddr, uint8_t statusCode, uint16_t dstA
|
|
// Routing error for dstAddr, this is informational and a Route
|
|
// Request should happen automatically.
|
|
}
|
|
+
|
|
+ if ( (nwkDstAddr == NLME_GetShortAddr())
|
|
+ && (statusCode == NWKSTAT_SOURCE_ROUTE_FAILURE) )
|
|
+ {
|
|
+ // Received a source route failure, remove route and rediscover.
|
|
+ RTG_RemoveRtgEntry( dstAddr, 0 );
|
|
+ NLME_RouteDiscoveryRequest( dstAddr, 0, 30 );
|
|
+ }
|
|
}
|
|
|
|
/******************************************************************************
|
|
diff --git a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
index 2dcc711..2c23e66 100755
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
@@ -70,9 +70,9 @@
|
|
/* must be located at the beginning of the application. */
|
|
|
|
#define FLASH_BASE 0x00000000
|
|
-#define FLASH_SIZE 0x52000
|
|
-#define FLASH_NV_BASE 0x52000
|
|
-#define FLASH_NV_SIZE 0x4000
|
|
+#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/znp_CC2652RB_LAUNCHXL_tirtos_ccs/znp.syscfg b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/znp.syscfg
|
|
index 6c98f84..d43aefe 100644
|
|
--- a/znp_CC2652RB_LAUNCHXL_tirtos_ccs/znp.syscfg
|
|
+++ b/znp_CC2652RB_LAUNCHXL_tirtos_ccs/znp.syscfg
|
|
@@ -50,6 +50,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_CCFGTemplate0";
|
|
|
|
AESCBC1.$name = "CONFIG_AESCBC_0";
|
|
@@ -68,8 +69,8 @@ ECJPAKE1.$name = "CONFIG_ECJPAKE_0";
|
|
|
|
NVS1.$name = "CONFIG_NVSINTERNAL";
|
|
NVS1.internalFlash.$name = "ti_drivers_nvs_NVSCC26XX0";
|
|
-NVS1.internalFlash.regionBase = 0x52000;
|
|
-NVS1.internalFlash.regionSize = 0x4000;
|
|
+NVS1.internalFlash.regionBase = 0x50000;
|
|
+NVS1.internalFlash.regionSize = 0x6000;
|
|
|
|
NVS2.$name = "CONFIG_NVSEXTERNAL";
|
|
NVS2.nvsType = "External";
|
|
@@ -122,18 +123,20 @@ SPI1.sclkPinInstance.$name = "CONFIG_PIN_SPI_SCLK";
|
|
SPI1.misoPinInstance.$name = "CONFIG_PIN_SPI_MISO";
|
|
SPI1.mosiPinInstance.$name = "CONFIG_PIN_SPI_MOSI";
|
|
|
|
-zstack.deviceType = "znp";
|
|
-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.radioConfig.$name = "ti_devices_radioconfig_settings_ieee_15_40";
|
|
-zstack.rf.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0";
|
|
-zstack.network.$name = "ti_zstack_network_zstack_network0";
|
|
-zstack.advanced.$name = "ti_zstack_advanced_zstack_advanced0";
|
|
-zstack.advanced.routing.$name = "ti_zstack_advanced_zstack_routing0";
|
|
-zstack.advanced.packetSending.$name = "ti_zstack_advanced_zstack_packet_sending0";
|
|
-zstack.advanced.tableSize.$name = "ti_zstack_advanced_zstack_table_size0";
|
|
+zstack.deviceType = "znp";
|
|
+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.radioConfig.$name = "ti_devices_radioconfig_settings_ieee_15_40";
|
|
+zstack.rf.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0";
|
|
+zstack.network.$name = "ti_zstack_network_zstack_network0";
|
|
+zstack.advanced.$name = "ti_zstack_advanced_zstack_advanced0";
|
|
+zstack.advanced.routing.$name = "ti_zstack_advanced_zstack_routing0";
|
|
+zstack.advanced.packetSending.$name = "ti_zstack_advanced_zstack_packet_sending0";
|
|
+zstack.advanced.packetSending.apsAckWaitDurationPolled = 1000;
|
|
+zstack.advanced.tableSize.$name = "ti_zstack_advanced_zstack_table_size0";
|
|
|
|
/**
|
|
* Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt.h b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
index 2c5073c..8732c65 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt.h
|
|
@@ -441,6 +441,8 @@ extern "C"
|
|
#define MT_UTIL_SRNG_GENERATE 0x4C
|
|
#endif
|
|
#define MT_UTIL_BIND_ADD_ENTRY 0x4D
|
|
+#define MT_UTIL_ASSOC_REMOVE 0x63 // Custom command
|
|
+#define MT_UTIL_ASSOC_ADD 0x64 // Custom command
|
|
|
|
#define MT_UTIL_ZCL_KEY_EST_INIT_EST 0x80
|
|
#define MT_UTIL_ZCL_KEY_EST_SIGN 0x81
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
index 90d6d4a..4d50083 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_util.c
|
|
@@ -128,6 +128,8 @@ static void MT_UtilAPSME_LinkKeyNvIdGet(uint8_t *pBuf);
|
|
#endif //MT_SYS_KEY_MANAGEMENT
|
|
static void MT_UtilAPSME_RequestKeyCmd(uint8_t *pBuf);
|
|
static void MT_UtilAssocCount(uint8_t *pBuf);
|
|
+static void MT_UtilAssocRemove(uint8_t *pBuf);
|
|
+static void MT_UtilAssocAdd(uint8_t *pBuf);
|
|
static void MT_UtilAssocFindDevice(uint8_t *pBuf);
|
|
static void MT_UtilAssocGetWithAddress(uint8_t *pBuf);
|
|
static void MT_UtilBindAddEntry(uint8_t *pBuf);
|
|
@@ -272,6 +274,14 @@ uint8_t MT_UtilCommandProcessing(uint8_t *pBuf)
|
|
MT_UtilBindAddEntry(pBuf);
|
|
break;
|
|
|
|
+ case MT_UTIL_ASSOC_REMOVE:
|
|
+ MT_UtilAssocRemove(pBuf);
|
|
+ break;
|
|
+
|
|
+ case MT_UTIL_ASSOC_ADD:
|
|
+ MT_UtilAssocAdd(pBuf);
|
|
+ break;
|
|
+
|
|
case MT_UTIL_SYNC_REQ:
|
|
MT_UtilSync();
|
|
break;
|
|
@@ -1375,6 +1385,60 @@ static void MT_UtilAssocCount(uint8_t *pBuf)
|
|
MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 2, pBuf);
|
|
}
|
|
|
|
+/***************************************************************************************************
|
|
+ * @fn MT_UtilAssocRemove
|
|
+ *
|
|
+ * @brief Proxy the AssocRemove() function.
|
|
+ *
|
|
+ * @param pBuf - pointer to the received buffer
|
|
+ *
|
|
+ * @return void
|
|
+ ***************************************************************************************************/
|
|
+static void MT_UtilAssocRemove(uint8_t *pBuf)
|
|
+{
|
|
+ uint8_t cmdId;
|
|
+ uint8_t ieeeAddr[Z_EXTADDR_LEN];
|
|
+ uint8_t retValue = 0;
|
|
+
|
|
+ // parse header
|
|
+ cmdId = pBuf[MT_RPC_POS_CMD1];
|
|
+ pBuf += MT_RPC_FRAME_HDR_SZ;
|
|
+
|
|
+ /* IeeAddress */
|
|
+ OsalPort_memcpy(ieeeAddr, pBuf, Z_EXTADDR_LEN);
|
|
+
|
|
+ AssocRemove(ieeeAddr);
|
|
+
|
|
+ MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
|
|
+}
|
|
+
|
|
+/***************************************************************************************************
|
|
+ * @fn MT_UtilAssocAdd
|
|
+ *
|
|
+ * @brief Proxy the AssocAdd() function.
|
|
+ *
|
|
+ * @param pBuf - pointer to the received buffer
|
|
+ *
|
|
+ * @return void
|
|
+ ***************************************************************************************************/
|
|
+static void MT_UtilAssocAdd(uint8_t *pBuf)
|
|
+{
|
|
+ uint8_t cmdId;
|
|
+ uint8_t retValue = 0;
|
|
+
|
|
+ // parse header
|
|
+ cmdId = pBuf[MT_RPC_POS_CMD1];
|
|
+ pBuf += MT_RPC_FRAME_HDR_SZ;
|
|
+
|
|
+ AssocAddNew(
|
|
+ BUILD_UINT16(pBuf[Z_EXTADDR_LEN], pBuf[Z_EXTADDR_LEN + 1]),
|
|
+ pBuf,
|
|
+ pBuf[Z_EXTADDR_LEN + 2]
|
|
+ );
|
|
+
|
|
+ MT_BuildAndSendZToolResponse(((uint8_t)MT_RPC_CMD_SRSP | (uint8_t)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
|
|
+}
|
|
+
|
|
/***************************************************************************************************
|
|
* @fn MT_UtilAssocFindDevice
|
|
*
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
index 63c143b..11325fd 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Application/mt/mt_version.c
|
|
@@ -43,15 +43,21 @@
|
|
#include "zcomdef.h"
|
|
#include "mt_version.h"
|
|
|
|
+#define CODE_REVISION_NUMBER 20210120
|
|
+
|
|
/******************************************************************************
|
|
* CONSTANTS
|
|
*****************************************************************************/
|
|
const uint8_t MTVersionString[] = {
|
|
2, /* Transport protocol revision */
|
|
- 0, /* Product ID */
|
|
+ 1, /* Product ID */
|
|
2, /* Software major release number */
|
|
7, /* Software minor release number */
|
|
1, /* Software maintenance release number */
|
|
+ ((CODE_REVISION_NUMBER >> 0) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 8) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 16) & 0xFF),
|
|
+ ((CODE_REVISION_NUMBER >> 24) & 0xFF),
|
|
};
|
|
|
|
/******************************************************************************
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
new file mode 100644
|
|
index 0000000..7017d6f
|
|
--- /dev/null
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/preinclude.h
|
|
@@ -0,0 +1,52 @@
|
|
+#define MT_SYS_KEY_MANAGEMENT 1
|
|
+#define FEATURE_NVEXID 1
|
|
+
|
|
+// Save memory
|
|
+#undef NWK_MAX_BINDING_ENTRIES
|
|
+#define NWK_MAX_BINDING_ENTRIES 1
|
|
+#undef APS_MAX_GROUPS
|
|
+#define APS_MAX_GROUPS 1
|
|
+
|
|
+// Increase NV pages to 3 to allow for bigger device tables
|
|
+#undef NVOCMP_NVPAGES
|
|
+#define NVOCMP_NVPAGES 3
|
|
+
|
|
+// Disabling MULTICAST is required in order for proper group support.
|
|
+// If MULTICAST is not disabled, the group adress is not included in the APS header
|
|
+#define MULTICAST_ENABLED FALSE
|
|
+
|
|
+// 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
|
|
+
|
|
+/**
|
|
+ * Enable MTO routing
|
|
+ */
|
|
+#define CONCENTRATOR_ENABLE TRUE
|
|
+#define CONCENTRATOR_DISCOVERY_TIME 100
|
|
+#define CONCENTRATOR_ROUTE_CACHE TRUE
|
|
+#define MAX_RTG_SRC_ENTRIES 200
|
|
+#define SRC_RTG_EXPIRY_TIME 2
|
|
+
|
|
+/**
|
|
+ * Scale other device tables appropriately
|
|
+ */
|
|
+#define NWK_MAX_DEVICE_LIST 50
|
|
+#define ZDSECMGR_TC_DEVICE_MAX 200
|
|
+#define MAX_NEIGHBOR_ENTRIES 20
|
|
+#define MAX_RTG_ENTRIES 100
|
|
+
|
|
+/**
|
|
+ * Reduce the APS ack wait duration from 6000 ms to 1000 ms (value * 2 = value in ms).
|
|
+ * This will make requests timeout quicker, in pratice the default timeout of 6000ms is too long.
|
|
+ */
|
|
+#define APSC_ACK_WAIT_DURATION_POLLED 500
|
|
+
|
|
+// 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
|
|
+#define MTO_RREQ_LIMIT_TIME 5000
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
index 6e3cb6a..1f90cc6 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/Config/znp_cnf.opts
|
|
@@ -32,3 +32,5 @@
|
|
-DMT_GP_CB_FUNC
|
|
|
|
-DMT_APP_CNF_FUNC
|
|
+
|
|
+--preinclude=preinclude.h
|
|
\ No newline at end of file
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/af/af.c b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
index 3a7afa3..e3a2706 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/af/af.c
|
|
@@ -407,10 +407,18 @@ void afIncomingData( aps_FrameFormat_t *aff, zAddrType_t *SrcAddress, uint16_t S
|
|
#if !defined ( APS_NO_GROUPS )
|
|
// Find the first endpoint for this group
|
|
grpEp = aps_FindGroupForEndpoint( aff->GroupID, APS_GROUPS_FIND_FIRST );
|
|
- if ( grpEp == APS_GROUPS_EP_NOT_FOUND )
|
|
- return; // No endpoint found
|
|
+ if ( grpEp == APS_GROUPS_EP_NOT_FOUND ) {
|
|
+ // No endpoint found, default to endpoint 1.
|
|
+ // In the original source code there is a return here.
|
|
+ // This prevent the messags from being forwarded.
|
|
+ // For our use-case we want to capture all messages.
|
|
+ // Even if the coordinator is not in the group.
|
|
+ epDesc = afFindEndPointDesc( 1 );
|
|
+ }
|
|
+ else {
|
|
+ epDesc = afFindEndPointDesc( grpEp );
|
|
+ }
|
|
|
|
- epDesc = afFindEndPointDesc( grpEp );
|
|
if ( epDesc == NULL )
|
|
return; // Endpoint descriptor not found
|
|
|
|
@@ -457,7 +465,9 @@ void afIncomingData( aps_FrameFormat_t *aff, zAddrType_t *SrcAddress, uint16_t S
|
|
// if the Wildcard ProfileID is received the message should not be sent to ZDO endpoint
|
|
if ( (aff->ProfileID == epProfileID) ||
|
|
((epDesc->endPoint == ZDO_EP) && (aff->ProfileID == ZDO_PROFILE_ID)) ||
|
|
- ((epDesc->endPoint != ZDO_EP) && ( aff->ProfileID == ZDO_WILDCARD_PROFILE_ID )) )
|
|
+ ((epDesc->endPoint != ZDO_EP) && ( aff->ProfileID == ZDO_WILDCARD_PROFILE_ID )) ||
|
|
+ // Fix below is to support PGC410EU: https://github.com/Koenkk/zigbee2mqtt/issues/4055
|
|
+ ((epDesc->endPoint == 2) && ( aff->ProfileID == 0xFC01 )) )
|
|
{
|
|
// Save original endpoint
|
|
uint8_t endpoint = aff->DstEndPoint;
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
index a78ad3c..bfe7884 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/nwk/nwk_globals.c
|
|
@@ -65,10 +65,10 @@
|
|
* CONSTANTS
|
|
*/
|
|
// Maximums for the data buffer queue
|
|
-#define NWK_MAX_DATABUFS_WAITING 8 // Waiting to be sent to MAC
|
|
-#define NWK_MAX_DATABUFS_SCHEDULED 5 // Timed messages to be sent
|
|
-#define NWK_MAX_DATABUFS_CONFIRMED 5 // Held after MAC confirms
|
|
-#define NWK_MAX_DATABUFS_TOTAL 12 // Total number of buffers
|
|
+#define NWK_MAX_DATABUFS_WAITING 16 // Waiting to be sent to MAC
|
|
+#define NWK_MAX_DATABUFS_SCHEDULED 10 // Timed messages to be sent
|
|
+#define NWK_MAX_DATABUFS_CONFIRMED 10 // Held after MAC confirms
|
|
+#define NWK_MAX_DATABUFS_TOTAL 24 // Total number of buffers
|
|
|
|
// 1-255 (0 -> 256) X RTG_TIMER_INTERVAL
|
|
// A known shortcoming is that when a message is enqueued as "hold" for a
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
index 8ea2ac3..4879330 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/sys/zglobals.c
|
|
@@ -104,7 +104,7 @@ uint8_t zgSecurePermitJoin = TRUE;
|
|
// TC Link Key. In this scenario, if this flag is TRUE, the Trust Center will
|
|
// encrypt the outgoing NWK Key with the default TC Link Key (ZigbeeAlliance09).
|
|
// If this flag is FALSE (default), the Trust Center will not send the NWK Key at all.
|
|
-uint8_t zgAllowRejoinsWithWellKnownKey = FALSE;
|
|
+uint8_t zgAllowRejoinsWithWellKnownKey = TRUE; // https://e2e.ti.com/support/wireless-connectivity/zigbee-and-thread/f/158/p/882650/3265311#3265311
|
|
|
|
//allowInstallCodes
|
|
uint8_t zgAllowInstallCodes = ZG_IC_SUPPORTED_NOT_REQUIRED;
|
|
@@ -198,7 +198,9 @@ 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;
|
|
+
|
|
+// Disable child aging, otherwise Xiaomi devices are being kicked off the network.
|
|
+uint8_t zgChildAgingEnable = FALSE;
|
|
|
|
//========== TouchLink NWK configuration ===============
|
|
// Values used by Router when starts a network as initiator
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
index 1f807ca..b935b6a 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/Stack/zdo/zd_app.c
|
|
@@ -419,12 +419,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
|
|
{
|
|
@@ -885,12 +884,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
|
|
{
|
|
@@ -3132,6 +3130,14 @@ void ZDO_NetworkStatusCB( uint16_t nwkDstAddr, uint8_t statusCode, uint16_t dstA
|
|
// Routing error for dstAddr, this is informational and a Route
|
|
// Request should happen automatically.
|
|
}
|
|
+
|
|
+ if ( (nwkDstAddr == NLME_GetShortAddr())
|
|
+ && (statusCode == NWKSTAT_SOURCE_ROUTE_FAILURE) )
|
|
+ {
|
|
+ // Received a source route failure, remove route and rediscover.
|
|
+ RTG_RemoveRtgEntry( dstAddr, 0 );
|
|
+ NLME_RouteDiscoveryRequest( dstAddr, 0, 30 );
|
|
+ }
|
|
}
|
|
|
|
/******************************************************************************
|
|
diff --git a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
index 2dcc711..2c23e66 100755
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/cc13x2_cc26x2.cmd
|
|
@@ -70,9 +70,9 @@
|
|
/* must be located at the beginning of the application. */
|
|
|
|
#define FLASH_BASE 0x00000000
|
|
-#define FLASH_SIZE 0x52000
|
|
-#define FLASH_NV_BASE 0x52000
|
|
-#define FLASH_NV_SIZE 0x4000
|
|
+#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/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/znp.syscfg b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/znp.syscfg
|
|
index e7dd877..2b49fcc 100644
|
|
--- a/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/znp.syscfg
|
|
+++ b/znp_CC26X2R1_LAUNCHXL_tirtos_ccs/znp.syscfg
|
|
@@ -49,6 +49,7 @@ CCFG.enableBootloader = true;
|
|
CCFG.enableBootloaderBackdoor = true;
|
|
CCFG.dioBootloaderBackdoor = 13;
|
|
CCFG.levelBootloaderBackdoor = "Active low";
|
|
+CCFG.enableDCDC = false;
|
|
CCFG.ccfgTemplate.$name = "ti_devices_CCFGTemplate0";
|
|
|
|
AESCBC1.$name = "CONFIG_AESCBC_0";
|
|
@@ -67,8 +68,8 @@ ECJPAKE1.$name = "CONFIG_ECJPAKE_0";
|
|
|
|
NVS1.$name = "CONFIG_NVSINTERNAL";
|
|
NVS1.internalFlash.$name = "ti_drivers_nvs_NVSCC26XX0";
|
|
-NVS1.internalFlash.regionBase = 0x52000;
|
|
-NVS1.internalFlash.regionSize = 0x4000;
|
|
+NVS1.internalFlash.regionBase = 0x50000;
|
|
+NVS1.internalFlash.regionSize = 0x6000;
|
|
|
|
NVS2.$name = "CONFIG_NVSEXTERNAL";
|
|
NVS2.nvsType = "External";
|
|
@@ -121,18 +122,20 @@ SPI1.sclkPinInstance.$name = "CONFIG_PIN_SPI_SCLK";
|
|
SPI1.misoPinInstance.$name = "CONFIG_PIN_SPI_MISO";
|
|
SPI1.mosiPinInstance.$name = "CONFIG_PIN_SPI_MOSI";
|
|
|
|
-zstack.deviceType = "znp";
|
|
-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.radioConfig.$name = "ti_devices_radioconfig_settings_ieee_15_40";
|
|
-zstack.rf.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0";
|
|
-zstack.network.$name = "ti_zstack_network_zstack_network0";
|
|
-zstack.advanced.$name = "ti_zstack_advanced_zstack_advanced0";
|
|
-zstack.advanced.routing.$name = "ti_zstack_advanced_zstack_routing0";
|
|
-zstack.advanced.packetSending.$name = "ti_zstack_advanced_zstack_packet_sending0";
|
|
-zstack.advanced.tableSize.$name = "ti_zstack_advanced_zstack_table_size0";
|
|
+zstack.deviceType = "znp";
|
|
+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.radioConfig.$name = "ti_devices_radioconfig_settings_ieee_15_40";
|
|
+zstack.rf.radioConfig.codeExportConfig.$name = "ti_devices_radioconfig_code_export_param0";
|
|
+zstack.network.$name = "ti_zstack_network_zstack_network0";
|
|
+zstack.advanced.$name = "ti_zstack_advanced_zstack_advanced0";
|
|
+zstack.advanced.routing.$name = "ti_zstack_advanced_zstack_routing0";
|
|
+zstack.advanced.packetSending.$name = "ti_zstack_advanced_zstack_packet_sending0";
|
|
+zstack.advanced.packetSending.apsAckWaitDurationPolled = 1000;
|
|
+zstack.advanced.tableSize.$name = "ti_zstack_advanced_zstack_table_size0";
|
|
|
|
/**
|
|
* Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
|
|
--
|
|
2.24.3 (Apple Git-128)
|
|
|