1.1.2 amsenderc元件介面:packet
1.2 元件:amreceiverc
1.3 activemessagec
二、原始碼分析
虛擬化的活動訊息傳送抽象。 amsenderc的每個例項都有其自己的深度為1的佇列。 因此,它不必與佇列空間的其他amsenderc例項競爭。 基礎實現使用某種形式的公平共享佇列來排程這些佇列中的資料報。
cancel命令
getpayload命令
//inte***ce packet;
typedef nx_struct radio_count_msg radio_count_msg_t;
message_t packet;
radio_count_msg_t* rcm =
(radio_count_msg_t*
)call packet.
getpayload
(&packet,
sizeof
(radio_count_msg_t));
if(rcm ==
null
)rcm->counter = counter;
//修改payload的值
send命令
//inte***ce amsend;
typedef nx_struct radio_count_msg radio_count_msg_t;
message_t packet;
//定義packet
radio_count_msg_t* rcm =
(radio_count_msg_t*
)call packet.
getpayload
(&packet,
sizeof
(radio_count_msg_t));
//獲取指向packet中有效負載的指標
rcm->counter = counter;
//設定有效負載的值
if(call amsend.
send
(am_broadcast_addr,
&packet,
sizeof
(radio_count_msg_t)
)== success)
//傳送資料報packet
senddone事件
//inte***ce amsend;
message_t packet;
//省略了對packet的一些操作
event void amsend.
senddone
(message_t* bufptr, error_t error)
}maxpayloadlength命令簡介:基本訊息資料型別訪問器。 協議可以將附加的分組介面用於其協議特定的資料/元資料。
clear 命令 清理packet
getpayload命令 獲取有效負載
//inte***ce packet;
typedef nx_struct radio_count_msg radio_count_msg_t;
message_t packet;
radio_count_msg_t* rcm =
(radio_count_msg_t*
)call packet.
getpayload
(&packet,
sizeof
(radio_count_msg_t));
if(rcm ==
null
)rcm->counter = counter;
//修改payload的值
receive 事件event message_t* receive.
receive
(message_t* bufptr,
void
* payload, uint8_t len)
}
這是stdcontol介面的分相副本。 它應用於在提供它的元件的開啟和關閉電源狀態之間切換。 對於每個start()或stop()命令,如果該命令返回success,則必須發出相應的startdone()或stopdone()事件的訊號。
命令 start()
啟動此元件及其所有子元件。
命令 stop()
停用此元件及其所有子元件。
事件 startdone
事件 stopdone
略這裡面定義了頻段cflags += -dcc2420_def_channel=14
,設定自己的頻段避免與其他的裝置造成衝突干擾
cflags +
=-dcc2420_def_channel=
14include $(makerules)
#ifndef radio_count_to_leds_h
#define radio_count_to_leds_h
typedef nx_struct radio_count_msg radio_count_msg_t;
enum
;#endif
#include
"radiocounttoleds.h"
}implementation
傳送流程:
開機上電後,去開啟我們的無線通訊控制器
call amcontrol.start();
開啟無線通訊控制器成功後會開啟1s為週期的定時器,失敗則重新開啟無線通訊控制器。
定時器到達定時時間,廣播傳送乙個定義的不斷自增的計數器count的資料。
接收流程:
開機上電後,去開啟我們的無線通訊控制器
call amcontrol.start();
編寫接收事件函式
首先過濾有效負載長度不正確的資料
然後給有效負載的資料起個別名rcm,並轉化成我們定義的結構體型別。
最後根據rcm->counter 的方式讀出counter值,並根據counter執行相應操作。
#include
"timer.h"
#include
"radiocounttoleds.h"
module radiocounttoledsc @safe()
}implementation
event void amcontrol.
startdone
(error_t err)
else
} event void amcontrol.
stopdone
(error_t err)
event void millitimer.
fired()
else
rcm->counter = counter;
//am_broadcast_addr = 0xffff,表示廣播
// 0x0001,表示傳送給1號節點
if(call amsend.
send
(am_broadcast_addr,
&packet,
sizeof
(radio_count_msg_t)
)== success)}}
//傳送成功解鎖
event void amsend.
senddone
(message_t* bufptr, error_t error)
} event message_t* receive.
receive
(message_t* bufptr,
void
* payload, uint8_t len)
else
else
if(rcm->counter &
0x2)
else
if(rcm->counter &
0x4)
else
return bufptr;}}
}
點對點通訊
意義 乙個使用者給另外乙個使用者傳送訊息,給每個使用者存到dict中,username作為key,self作為value 這裡使用的是假username,vue中傳送的也是死資料,只是為了演示效果 實現 from channels.generic.websocket import websocket...
組通訊與點對點通訊
通訊子 communicator 是指一組可以相互傳送訊息的程序集合。集合通訊 collective communication 也叫組通訊,是指設計通訊子中所有程序的通訊函式。點對點通訊 point to point communication 函式對 兩個函式 之間的通訊。集合通訊和點對點通訊的...
用Visual Basic實現點對點通訊
使用tcp協議時,如果需要建立乙個客戶應用程式,就必須識別伺服器的名稱或ip位址。應用程式的通訊埠隨時都將仔細監測對方發出的訊息,這是系統進行可靠連線的保證。一旦連線發生,任何一方都可以通過senddata傳送和接收資料,並借助getdata把自己的資料分離出來。傳送資料時,需要先設定客戶機的loc...