This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2652RB: Periodic timer reset unsuccessfull

Part Number: CC2652RB

Tool/software:

Hello. I have a Zigbee temperature sensor end device and have been encountering communication issues which I assume might be resolved with a board reset.

The issue: the board would randomly disconnect from the coordinator, but remain powered-on and unable to send any data. 

My attempt to fix this: should the board disconnect, no more messages should reach the Zigbee stack. Thus, I could use a timer that would trigger a board reset and hope that, upon booting up again, the connection will be restored and things will work again.

However, it seems that I cannot get the timer to correctly reset and it triggers constantly.

I've created a UtilTimer with a period of 5 minutes (in milliseconds) inside zclSampleTemperatureSensor_initializeClocks .

Fullscreen
1
2
3
4
5
communicationClkHandle = UtilTimer_construct(
&communicationClkStruct,
communicationTimeoutCallback,
communicationResetDuration,
communicationResetDuration, true, 0);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

I want it to be reset every stack message I get, thus never trigger the callback (which only lights up an LED for now, so nothing interesting). I've picked zclSampleTemperatureSensor_processZStackMsgs for this and tried a couple of ways to get the timer reset.

Fullscreen
1
2
3
4
5
6
7
8
9
static void zclSampleTemperatureSensor_processZStackMsgs(
zstackmsg_genericReq_t *pMsg)
{
UtilTimer_setTimeout(&communicationClkHandle, communicationResetDuration); // does not do anything, callback triggers constantly
switch (pMsg->hdr.event)
...
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Fullscreen
1
2
3
4
5
6
7
8
9
10
static void zclSampleTemperatureSensor_processZStackMsgs(
zstackmsg_genericReq_t *pMsg)
{
UtilTimer_stop(&communicationClkStruct);
UtilTimer_start(&communicationClkStruct); // same behaviour
switch (pMsg->hdr.event)
...
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Looking through util_timer.h, I cannot see any other function that seems useful.

How can I reset a timer so that it would only trigger were the board disconnected?