我正在尝试修改多跳示波器程序,以便汇聚节点能够同时向UART和无线电介质发送数据。据研究,我发现同样的硬件也用于通过UART和无线电发送数据包。 在这种情况下,如何修改我的代码,以便我可以根据收到的条件将数据发送到UART或无线电。在示例文档中,我每收到10个数据包就通过无线电发送数据。
我的汇聚节点的接收模块是:
event message_t* Receive.receive(message_t* msg, void *payload, uint8_t len) {
oscilloscope_t* in = (oscilloscope_t*)payload;
counter++;
am_addr_t rec = call AMPacket.source(msg);
oscilloscope_t* out;
counter++;
call Leds.led0On();
if (uartbusy == FALSE) {
out = (oscilloscope_t*)call SerialSend.getPayload(&uartbuf, sizeof(oscilloscope_t));
if (len != sizeof(oscilloscope_t) || out == NULL) {
return msg;
}
else {
memcpy(out, in, sizeof(oscilloscope_t));
}
uartlen = sizeof(oscilloscope_t);
post uartSendTask();
} else {
message_t *newmsg = call UARTMessagePool.get();
if (newmsg == NULL) {
report_problem();
return msg;
}
//Serial port busy, so enqueue.
out = (oscilloscope_t*)call SerialSend.getPayload(newmsg, sizeof(oscilloscope_t));
if (out == NULL) {
return msg;
}
memcpy(out, in, sizeof(oscilloscope_t));
if (call UARTQueue.enqueue(newmsg) != SUCCESS) {
call UARTMessagePool.put(newmsg);
fatal_problem();
return msg;
}
}
if(counter % 10 == 0){
oscilloscope_t* btrpkt = (oscilloscope_t*)(call Packet.getPayload(&pkt, sizeof(oscilloscope_t)));
call Leds.led1On();
if (call AMSend.send(rec, &pkt, sizeof(oscilloscope_t)) == SUCCESS) {
call Leds.led0On();
sendbusy = TRUE;
}
}
return msg;
}
一旦数据发送回收到数据包的节点,它就无法再通过UART处理它。任何人都可以帮助我如何解决我的问题?
答案 0 :(得分:0)
根据问题和评论:
AMSenderC
。在这种情况下,AM_OSCILLOSCOPE
如果您希望消息由相同的代码处理。或者另一个id加上Receive
接口的新实现。btrpkt
。sendbusy
- 如果您在忙碌时尝试使用无线电堆栈,则会出现错误。