工具/软件:
您好、
我尝试将代码从 15.4 FH 模式移植到 FH 低延时广播 (FH-LLB) 模式。 到目前为止、我能够加入网络、将数据从传感器发送到收集器以便正常工作、但在尝试将数据从收集器发送到特定传感器节点时遇到了问题。
根据 此处提供的文档、收集器通过广播将数据发送到传感器、每个传感器节点都会接收消息副本、并在没有匹配地址的情况下丢弃消息。 编程 WISE、我们如何做到这一点?
我假设我们可以在`collector.c`中使用与在其他网络模式中相同的函数
// collector.c
static bool sendMsg(Smsgs_cmdIds_t type, uint16_t dstShortAddr, bool rxOnIdle,
uint16_t len,
uint8_t *pData,
uint8_t *frameIdPtr);
到目前为止、通过该函数发送的任何消息都不会被传感器节点接收。
还有一个广播消息的功能:
static void sendBroadcastMsg(Smsgs_cmdIds_t type, uint16_t len,
uint8_t *pData)
这似乎是示例收集器工程在 FH-LLB 模式下将数据发送到传感器节点所使用的函数。 目标地址会手动汇编到有效载荷中、然后传感器节点会执行手动检查目标地址是否与其自身地址匹配。
/*
Collector generate a broadcast command message for FH mode
*/
if(Collector_events & COLLECTOR_BROADCAST_TIMEOUT_EVT)
{
/* Clear the event */
Util_clearEvent(&Collector_events, COLLECTOR_BROADCAST_TIMEOUT_EVT);
if(FH_BROADCAST_INTERVAL > 0 && (!CERTIFICATION_TEST_MODE))
{
#ifdef FH_LOW_LATENCY_BROADCAST
if(broadcastQueue < 1)
{
uint8_t buffer[SMSGS_BROADCAST_CMD_LENGTH];
uint8_t *pBuf = buffer;
/* Build the message */
if(sendCamCmd)
{
*pBuf++ = (uint8_t)Smgs_cmdIds_broadcastCtrlMsg;
*pBuf++ = Util_loUint16(destDevAddr);
*pBuf++ = Util_hiUint16(destDevAddr);
*pBuf = 0x1;
sendCamCmd -= 1;
}
else
{
*pBuf++ = (uint8_t)Smgs_cmdIds_broadcastCtrlMsg;
*pBuf++ = 0xF;
*pBuf++ = 0xF;
*pBuf = 0xF;
}
broadcastQueue += 1;
sendBroadcastMsg(Smgs_cmdIds_broadcastCtrlMsg, SMSGS_BROADCAST_CMD_LENGTH,
buffer);
}
/* set clock for next broadcast command */
Csf_setBroadcastClock(FH_BROADCAST_INTERVAL / 2);
#else // FH_LOW_LATENCY_BROADCAST
generateBroadcastCmd();
/* set clock for next broadcast command */
Csf_setBroadcastClock(FH_BROADCAST_INTERVAL);
#endif // FH_LOW_LATENCY_BROADCAST
}
}
我的问题是、地址检查是否可以由 MAC 层完成? 还是有不同的方法来实现?
谢谢、
ZL


