X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=apps%2FBaseStation%2FBaseStationP.nc;h=2e647c7f83c6429b89f9c2ab7de285cc82cd507f;hb=d30405c532321fd306f685545094c57132123e94;hp=a918a6db87437fd9ecb53e5d3383ffb54da3fd14;hpb=d69d775a421ae907addefb6a3494610c0da2ab39;p=tinyos-2.x.git diff --git a/apps/BaseStation/BaseStationP.nc b/apps/BaseStation/BaseStationP.nc index a918a6db..2e647c7f 100644 --- a/apps/BaseStation/BaseStationP.nc +++ b/apps/BaseStation/BaseStationP.nc @@ -46,7 +46,7 @@ #include "AM.h" #include "Serial.h" -module BaseStationP { +module BaseStationP @safe() { uses { interface Boot; interface SplitControl as SerialControl; @@ -75,12 +75,12 @@ implementation }; message_t uartQueueBufs[UART_QUEUE_LEN]; - message_t *uartQueue[UART_QUEUE_LEN]; + message_t * ONE_NOK uartQueue[UART_QUEUE_LEN]; uint8_t uartIn, uartOut; bool uartBusy, uartFull; message_t radioQueueBufs[RADIO_QUEUE_LEN]; - message_t *radioQueue[RADIO_QUEUE_LEN]; + message_t * ONE_NOK radioQueue[RADIO_QUEUE_LEN]; uint8_t radioIn, radioOut; bool radioBusy, radioFull; @@ -131,7 +131,7 @@ implementation uint8_t count = 0; - message_t* receive(message_t* msg, void* payload, uint8_t len); + message_t* ONE receive(message_t* ONE msg, void* payload, uint8_t len); event message_t *RadioSnoop.receive[am_id_t id](message_t *msg, void *payload, @@ -177,7 +177,7 @@ implementation task void uartSendTask() { uint8_t len; am_id_t id; - am_addr_t addr; + am_addr_t addr, src; message_t* msg; atomic if (uartIn == uartOut && !uartFull) @@ -190,6 +190,9 @@ implementation tmpLen = len = call RadioPacket.payloadLength(msg); id = call RadioAMPacket.type(msg); addr = call RadioAMPacket.destination(msg); + src = call RadioAMPacket.source(msg); + call UartPacket.clear(msg); + call UartAMPacket.setSource(msg, src); if (call UartSend.send[id](addr, uartQueue[uartOut], len) == SUCCESS) call Leds.led1Toggle(); @@ -251,7 +254,7 @@ implementation task void radioSendTask() { uint8_t len; am_id_t id; - am_addr_t addr; + am_addr_t addr,source; message_t* msg; atomic @@ -264,7 +267,12 @@ implementation msg = radioQueue[radioOut]; len = call UartPacket.payloadLength(msg); addr = call UartAMPacket.destination(msg); + source = call UartAMPacket.source(msg); id = call UartAMPacket.type(msg); + + call RadioPacket.clear(msg); + call RadioAMPacket.setSource(msg, source); + if (call RadioSend.send[id](addr, msg, len) == SUCCESS) call Leds.led0Toggle(); else