#include "AM.h"
#include "Serial.h"
-module BaseStationP {
+module BaseStationP @safe() {
uses {
interface Boot;
interface SplitControl as SerialControl;
};
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;
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,
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)
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();
task void radioSendTask() {
uint8_t len;
am_id_t id;
- am_addr_t addr;
+ am_addr_t addr,source;
message_t* msg;
atomic
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