implementation
{
// send/receive page buffers, and state variables for buffers
- uint8_t pktsToSend[DELUGE_PKT_BITVEC_SIZE]; // bit vec of packets to send
- uint8_t pktsToReceive[DELUGE_PKT_BITVEC_SIZE]; // bit vec of packets to receive
+ uint8_t pktsToSend[DELUGET2_PKT_BITVEC_SIZE]; // bit vec of packets to send
+ uint8_t pktsToReceive[DELUGET2_PKT_BITVEC_SIZE]; // bit vec of packets to receive
DelugeDataMsg rxQueue[DELUGE_QSIZE];
uint8_t head, size;
void setupReqMsg()
{
- DelugeReqMsg *pReqMsg = (DelugeReqMsg *)(call SendReqMsg.getPayload(&pMsgBuf));
-
+ DelugeReqMsg *pReqMsg = (DelugeReqMsg *)(call SendReqMsg.getPayload(&pMsgBuf, sizeof(DelugeReqMsg)));
+ if (pReqMsg == NULL) {
+ return;
+ }
if (state == S_RX_LOCKING) {
if (isBusy_pMsgBuf) {
return;
// send req message
else {
uint32_t i;
- for (i = 0; i < DELUGE_PKT_BITVEC_SIZE; i++) {
+ for (i = 0; i < DELUGET2_PKT_BITVEC_SIZE; i++) {
pReqMsg->requestedPkts[i] = pktsToReceive[i];
}
//memcpy(pReqMsg->requestedPkts, pktsToReceive, DELUGE_PKT_BITVEC_SIZE);
storage_addr_t calcOffset(page_num_t pgNum, uint8_t pktNum)
{
- return (storage_addr_t)pgNum * (storage_addr_t)DELUGE_BYTES_PER_PAGE
- + (uint16_t)pktNum * (uint16_t)DELUGE_PKT_PAYLOAD_SIZE;
- //+ DELUGE_METADATA_SIZE;
+ return (storage_addr_t)pgNum * (storage_addr_t)DELUGET2_BYTES_PER_PAGE
+ + (uint16_t)pktNum * (uint16_t)DELUGET2_PKT_PAYLOAD_SIZE;
}
void setupDataMsg()
{
- DelugeDataMsg *pDataMsg = (DelugeDataMsg *)(call SendDataMsg.getPayload(&pMsgBuf));
+ DelugeDataMsg *pDataMsg = (DelugeDataMsg *)(call SendDataMsg.getPayload(&pMsgBuf, sizeof(DelugeDataMsg)));
uint16_t nextPkt;
if (state != S_SENDING && state != S_TX_LOCKING) {
pDataMsg->pktNum = 0;
}
- if (call BitVecUtils.indexOf(&nextPkt, pDataMsg->pktNum, pktsToSend, DELUGE_PKTS_PER_PAGE) != SUCCESS) {
+ if (call BitVecUtils.indexOf(&nextPkt, pDataMsg->pktNum, pktsToSend, DELUGET2_PKTS_PER_PAGE) != SUCCESS) {
// no more packets to send
- //dbg(DBG_USR1, "DELUGE: SEND_DONE\n");
changeState(S_IDLE);
} else {
pDataMsg->pktNum = nextPkt;
- if (call BlockRead.read[imgNum](calcOffset(pageToSend, nextPkt), pDataMsg->data, DELUGE_PKT_PAYLOAD_SIZE) != SUCCESS) {
+ if (call BlockRead.read[imgNum](calcOffset(pageToSend, nextPkt), pDataMsg->data, DELUGET2_PKT_PAYLOAD_SIZE) != SUCCESS) {
call Timer.startOneShot(DELUGE_FAILED_SEND_DELAY);
}
}
if (objid < objToSend || (objid == objToSend && pgNum < pageToSend)) {
uint32_t i;
changeState(S_IDLE);
- for (i = 0; i < DELUGE_PKT_BITVEC_SIZE; i++) {
+ for (i = 0; i < DELUGET2_PKT_BITVEC_SIZE; i++) {
pktsToSend[i] = 0x00;
}
//memset(pktsToSend, 0x00, DELUGE_PKT_BITVEC_SIZE);
void writeData()
{
if(call BlockWrite.write[imgNum](calcOffset(rxQueue[head].pgNum, rxQueue[head].pktNum),
- rxQueue[head].data, DELUGE_PKT_PAYLOAD_SIZE) != SUCCESS) {
+ rxQueue[head].data, DELUGET2_PKT_PAYLOAD_SIZE) != SUCCESS) {
size = 0;
}
}
workingObjid = DELUGE_INVALID_OBJID;
workingPgNum = DELUGE_INVALID_PGNUM;
- for (i = 0; i < DELUGE_PKT_BITVEC_SIZE; i++) {
+ for (i = 0; i < DELUGET2_PKT_BITVEC_SIZE; i++) {
pktsToReceive[i] = 0x00;
}
- for (i = 0; i < DELUGE_PKT_BITVEC_SIZE; i++) {
+ for (i = 0; i < DELUGET2_PKT_BITVEC_SIZE; i++) {
pktsToSend[i] = 0x00;
}
//memset(pktsToReceive, 0x00, DELUGE_PKT_BITVEC_SIZE);
workingObjid = new_objid;
workingPgNum = new_pgNum;
- for (i = 0; i < DELUGE_PKT_BITVEC_SIZE; i++) {
+ for (i = 0; i < DELUGET2_PKT_BITVEC_SIZE; i++) {
pktsToReceive[i] = 0xFF;
}
//memset(pktsToReceive, (nx_uint8_t)0xff, DELUGE_PKT_BITVEC_SIZE);
page_num_t pgNum;
int i;
- //dbg(DBG_USR1, "DELUGE: Received REQ_MSG(dest=%d,vNum=%d,imgNum=%d,pgNum=%d,pkts=%x)\n",
- // rxReqMsg->dest, rxReqMsg->vNum, rxReqMsg->imgNum, rxReqMsg->pgNum, rxReqMsg->requestedPkts[0]);
-
if (state == S_DISABLED) {
return msg;
}
&& objid == objToSend
&& pgNum == pageToSend)) {
// take union of packet bit vectors
- for (i = 0; i < DELUGE_PKT_BITVEC_SIZE; i++) {
+ for (i = 0; i < DELUGET2_PKT_BITVEC_SIZE; i++) {
pktsToSend[i] |= rxReqMsg->requestedPkts[i];
}
}
event void SendDataMsg.sendDone(message_t* msg, error_t error)
{
- DelugeDataMsg *pDataMsg = (DelugeDataMsg *)(call SendDataMsg.getPayload(&pMsgBuf));
+ DelugeDataMsg *pDataMsg = (DelugeDataMsg *)(call SendDataMsg.getPayload(&pMsgBuf, sizeof (DelugeDataMsg)));
+ if (pDataMsg == NULL) {
+ return;
+ }
BITVEC_CLEAR(pktsToSend, pDataMsg->pktNum);
call Timer.startOneShot(2);
return msg;
}
- //dbg(DBG_USR1, "DELUGE: Received DATA_MSG(vNum=%d,imgNum=%d,pgNum=%d,pktNum=%d)\n",
- // rxDataMsg->vNum, rxDataMsg->imgNum, rxDataMsg->pgNum, rxDataMsg->pktNum);
-
// check if need to suppress req or data messages
suppressMsgs(rxDataMsg->objid, rxDataMsg->pgNum);
// For collecting stats
if (rxDataMsg->pktNum == 0) {
//call StatsCollector.startRecvPageTransTime(0);
- dbg("Deluge", "%.3f 115 116 116 117 115 1 %d\n", ((float)((sim_time() * 1000) / sim_ticks_per_sec())) / 1000, CC2420_DEF_CHANNEL);
}
call Leds.led1Toggle();
//call Leds.set(rxDataMsg->pktNum);
- //dbg(DBG_USR1, "DELUGE: SAVING(pgNum=%d,pktNum=%d)\n",
- // rxDataMsg->pgNum, rxDataMsg->pktNum);
-
// copy data
memcpy(&rxQueue[head^size], rxDataMsg, sizeof(DelugeDataMsg));
if (++size == 1) {
event void BlockRead.readDone[uint8_t img_num](storage_addr_t addr, void* buf, storage_len_t len, error_t error)
{
- DelugeDataMsg *pDataMsg = (DelugeDataMsg *)(call SendDataMsg.getPayload(&pMsgBuf));
+ DelugeDataMsg *pDataMsg = (DelugeDataMsg *)(call SendDataMsg.getPayload(&pMsgBuf, sizeof(DelugeDataMsg)));
// make sure this event for us
if (buf != pDataMsg->data) {
return;
// failed to write
if (error != SUCCESS) {
uint32_t i;
- for (i = 0; i < DELUGE_PKT_BITVEC_SIZE; i++) {
+ for (i = 0; i < DELUGET2_PKT_BITVEC_SIZE; i++) {
pktsToReceive[i] = 0xFF;
}
size = 0;
head = (head + 1) % DELUGE_QSIZE;
size--;
- if (call BitVecUtils.indexOf(&tmp, 0, pktsToReceive, DELUGE_PKTS_PER_PAGE) != SUCCESS) {
+ if (call BitVecUtils.indexOf(&tmp, 0, pktsToReceive, DELUGET2_PKTS_PER_PAGE) != SUCCESS) {
// For collecting stats
//call StatsCollector.endRecvPageTransTime(publisher_addr);
-dbg("Deluge", "%.3f 115 116 116 117 115 2 %d\n", ((float)((sim_time() * 1000) / sim_ticks_per_sec())) / 1000, publisher_addr);
+call Leds.led1Off();
signal DelugePageTransfer.receivedPage(workingObjid, workingPgNum);
changeState(S_IDLE);
size = 0;
default command error_t BlockRead.read[uint8_t img_num](storage_addr_t addr, void* buf, storage_len_t len) { return FAIL; }
default command error_t BlockWrite.write[uint8_t img_num](storage_addr_t addr, void* buf, storage_len_t len) { return FAIL; }
+ default async command void Leds.led1Toggle() {}
+ default async command void Leds.led1Off() {}
}