CC1310: possible/how to increase the size of out going message queue in TI-15.4 stack?

Part Number: CC1310


We have a project based on Collector/Sensor example code. The collector node receives data from multiple sensor nodes, and periodically sends application layer heart heat data packets to all connected sensor nodes. When testing, we found that those application layer heart-beat will be delayed by 1 or 2 polling interval occasionally. The delay is eventually tracked down to:

ApiMac_status_t ApiMac_mcpsDataReq(ApiMac_mcpsDataReq_t *pData)
    return (ApiMac_status_t) MAC_McpsDataReq(pData);

When data traffic is higher than usual, that when all/many of sensor nodes start to send at 1 data packet per minute instead of 1/minute, ~ 20% of those heart-beat packets will fail to send at 1st attempt.

My question is, how can we know the cause of failure to send data by collector? I can see two reasons: 1) the out going message queue in collector is full; 2) Collector cannot take control of airwave because many sensor nodes are also trying to send data.

Update: I tend to think the cause is that out going message queue is full, because there is no failure to send data in sensor nodes around the same time. So the question becomes how we can increase the outgoing message queue in collector nodes.

Please advise. Thanks. 

  • It seems we can change the tx data queue size in mac_cfg.c

    My follow up question is where is memory allocated for this queue? After I change the size from default 2 to 25, while the max limit is 255, I don't see any change in memory allocation in CCS.

  • Hi Zhiyong,

    Just for my curiosity, what kind of reporting/polling interval are you using? And what PHY?

    Increasing the queue in mac_cfg might help. This data is allocated dynamically. You can use e.g. ROV to profile the heap. 

    You can also try increasing the transaction persistence time. This indicates how long a message will stay in the queue before being discarded.

  • Hi Marie,

    Thanks for the information. The baseline reporting interval is 30 seconds, burst reporting interval is 1 second. 915MHz, FH enabled, 50Kbps.

    Collector node sends out application layer heart beat packet to each sensor nodes upon polling every 5 minutes.

    With 8 sensor nodes, and tx data queue, tx queue set at 25 and 50, I don't see any failure at first attempt to send those heart beat packets by collector node.

  • A follow up question: what is the consequence of large(r) tx data queue? I can see if CC1310 resets, all tx frames in the queue will be lost.

  • Hi Zhiyong,

    The main disadvantage is the heap/RAM occupation. If this is not an issue in your application I don't see any downsides.

    Since the Tx queue is stored in RAM it will be lost if the device is powered off.