2016-10-03 36 views
2

使用AMSend.send(AM_BROADCAST_ADDR,msg,len)通過無線電發送數據包。在receive.receive中,我可以檢查從哪個節點獲得消息。但是,如何將消息發送回我收到消息的同一節點。我有節點ID,我怎樣才能得到我收到數據的網絡地址併發回給它。不只是確認數據包。我需要在收到數據後發送數據。任何幫助將不勝感激。如何在使用tinyOS的傳感器節點中進行雙向通信?

回答

1

AMSend.send簽名是:

command error_t send(am_addr_t addr, message_t* msg, uint8_t len); 

其中addr記錄爲地址向其發送分組AM_BROADCAST_ADDR是一個常量,表示廣播地址:發送到該地址的數據包由無線電範圍內的所有節點接收。一旦您收到一個數據包並獲得了發件人的編號(由AMPacket.source提供),提供的編號爲addrAMSend.send。它具有相同的類型am_addr_t,它基本上是一個整數(8位或16位)。

請注意,在編譯或編程節點時,通常會分配一個id(請參見this presentation,幻燈片61),通常所有節點都默認使用相同的id,除非您明確指定了一個id。

+0

糾正我,如果我在這段代碼錯了。這是你的意思嗎? '使用接口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() }發送消息給源代碼' –

+0

是的,看起來不錯。 – maral