📄 amdipp.nc
字号:
module AMDipP { provides interface Init; provides interface DipSend; provides interface DipReceive as DipDataReceive; provides interface DipReceive as DipVectorReceive; provides interface DipReceive as DipSummaryReceive; uses interface AMSend as NetAMSend; uses interface Receive as NetReceive; uses interface SplitControl as AMSplitControl; uses interface Boot;}implementation { message_t am_msg; bool busy; event void Boot.booted() { call AMSplitControl.start(); } event void AMSplitControl.startDone(error_t err) { if(err != SUCCESS) { call AMSplitControl.start(); return; } dbg("AMDipP", "ActiveMessageC started!\n"); } event void AMSplitControl.stopDone(error_t err) { } command error_t Init.init() { busy = FALSE; return SUCCESS; } command error_t DipSend.send(uint8_t len) { error_t err; dbg("AMDipP", "Attempting to send data in the air\n"); err = call NetAMSend.send(AM_BROADCAST_ADDR, &am_msg, len); if(err == SUCCESS) { busy = TRUE; } return err; } command void* DipSend.getPayloadPtr() { // returns NULL if message is busy if(busy) { return NULL; } return call NetAMSend.getPayload(&am_msg, 0); } command uint8_t DipSend.maxPayloadLength() { return call NetAMSend.maxPayloadLength(); } event void NetAMSend.sendDone(message_t* msg, error_t err) { dbg("AMDipP", "Data send successfully in the air\n"); if(msg == &am_msg) { busy = FALSE; } } event message_t* NetReceive.receive(message_t* msg, void* payload, uint8_t len) { dip_msg_t* dmsg; uint8_t type; dmsg = (dip_msg_t*) payload; type = dmsg->type; switch(type) { case ID_DIP_DATA: signal DipDataReceive.receive(dmsg->content, len); break; case ID_DIP_VECTOR: signal DipVectorReceive.receive(dmsg->content, len); break; case ID_DIP_SUMMARY: signal DipSummaryReceive.receive(dmsg->content, len); break; } return msg; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -