2
使用AMSend.send(AM_BROADCAST_ADDR,msg,len)通過無線電發送數據包。在receive.receive中,我可以檢查從哪個節點獲得消息。但是,如何將消息發送回我收到消息的同一節點。我有節點ID,我怎樣才能得到我收到數據的網絡地址併發回給它。不只是確認數據包。我需要在收到數據後發送數據。任何幫助將不勝感激。如何在使用tinyOS的傳感器節點中進行雙向通信?
使用AMSend.send(AM_BROADCAST_ADDR,msg,len)通過無線電發送數據包。在receive.receive中,我可以檢查從哪個節點獲得消息。但是,如何將消息發送回我收到消息的同一節點。我有節點ID,我怎樣才能得到我收到數據的網絡地址併發回給它。不只是確認數據包。我需要在收到數據後發送數據。任何幫助將不勝感激。如何在使用tinyOS的傳感器節點中進行雙向通信?
的AMSend.send
簽名是:
command error_t send(am_addr_t addr, message_t* msg, uint8_t len);
其中addr
記錄爲地址向其發送分組。 AM_BROADCAST_ADDR
是一個常量,表示廣播地址:發送到該地址的數據包由無線電範圍內的所有節點接收。一旦您收到一個數據包並獲得了發件人的編號(由AMPacket.source
提供),提供的編號爲addr
至AMSend.send
。它具有相同的類型am_addr_t
,它基本上是一個整數(8位或16位)。
請注意,在編譯或編程節點時,通常會分配一個id(請參見this presentation,幻燈片61),通常所有節點都默認使用相同的id,除非您明確指定了一個id。
糾正我,如果我在這段代碼錯了。這是你的意思嗎? '使用接口AMSend; 接口SplitControl爲AMControl; 接口數據包; 接口AMPacket; }' 'Receive.receive(msg_t * msg,void * payload,uint8_t len){' 'msg_t * data =(msg_t *)payload; am_addr_t addr =調用AMPacket.source(msg); send_message(addr); //其餘代碼 } void send_message(addr){ //現在使用AMSend.send() }發送消息給源代碼' –
是的,看起來不錯。 – maral