⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dipdatap.nc

📁 tinyos2.0版本驱动
💻 NC
字号:
#include <Dip.h>module DipDataP {  provides interface DipDecision;  uses interface DipSend as DataSend;  uses interface DipReceive as DataReceive;  uses interface DisseminationUpdate<dip_data_t>[dip_key_t key];  uses interface DisseminationValue<dip_data_t>[dip_key_t key];  uses interface DipHelp;  uses interface DipEstimates;  uses interface Leds;}implementation {  uint8_t commRate = 0;  command uint8_t DipDecision.getCommRate() {    return commRate;  }  command void DipDecision.resetCommRate() {    commRate = 0;  }  command error_t DipDecision.send() {    // Scan all estimates and send the highest estimate in deterministic order    dip_index_t i;    dip_index_t high_i;    dip_index_t high_est;    dip_key_t key;    dip_version_t ver;    dip_estimate_t* ests;    dip_msg_t* dmsg;    dip_data_msg_t* ddmsg;    const dip_data_t* data;    ests = call DipEstimates.getEstimates();    high_i = 0;    high_est = 0;    for(i = 0; i < UQCOUNT_DIP; i++) {      if(ests[i] > high_est) {	high_i = i;	high_est = ests[i];      }    }    key = call DipHelp.indexToKey(high_i);    ver = call DipHelp.keyToVersion(key);    data = call DisseminationValue.get[key]();    dmsg = (dip_msg_t*) call DataSend.getPayloadPtr();    if(dmsg == NULL) {      return FAIL;    }    ddmsg = (dip_data_msg_t*) dmsg->content;    dmsg->type = ID_DIP_DATA;    ddmsg->key = key;    ddmsg->version = ver;    ddmsg->size = sizeof(dip_data_t);    memcpy(ddmsg->data, data, sizeof(dip_data_t));    call DipEstimates.decEstimateByKey(key);    dbg("DipDataP", "Data sent with key %x and version %08x\n", key, ver);    return call DataSend.send(sizeof(dip_data_msg_t) + sizeof(dip_msg_t) + sizeof(dip_data_t));  }    event void DataReceive.receive(void* payload, uint8_t len) {    dip_key_t key;    dip_version_t myVer;    dip_version_t msgVer;    dip_data_msg_t* ddmsg;    commRate = commRate + 1;    ddmsg = (dip_data_msg_t*) payload;    key = ddmsg->key;    msgVer = ddmsg->version;    myVer = call DipHelp.keyToVersion(key);    dbg("DipDataP", "Data rcved with key %x and version %08x\n", key, msgVer);    // TODO: handle the invalid versions    if(myVer < msgVer) {      call DisseminationUpdate.change[key]((dip_data_t*)ddmsg->data);      call DipHelp.setVersion(key, msgVer);      call DipEstimates.setDataEstimate(key);    }    else if (myVer > msgVer) {      call DipEstimates.setDataEstimate(key);    }    else {      call DipEstimates.decEstimateByKey(key);    }  }    event void DisseminationValue.changed[dip_key_t key]() {  }   default command const dip_data_t* DisseminationValue.get[dip_key_t key]() {   return NULL; } default command void DisseminationUpdate.change[dip_key_t key](dip_data_t* val) { }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -