Hi Every1,
I am trying to get the signal strength reading from the motes and so i
modified the TOSBase program with reference to the available source codes in
the net. the program is getting compiled but i am not getting any result
when i run the OscilloscopeRF program. Its getting struck,
[EMAIL PROTECTED]:57600resynchronising..... and its not printing anything.
Can any1 please verify the code and let me know what the mistake is. Since i
am very new to tinyOS, i need lot of help from you all.
Thanks All in advance.
#ifndef TOSBASE_BLINK_ON_DROP
#define TOSBASE_BLINK_ON_DROP
#endif
module TOSBaseM {
provides interface StdControl;
uses {
interface StdControl as UARTControl;
interface BareSendMsg as UARTSend;
interface ReceiveMsg as UARTReceive;
interface TokenReceiveMsg as UARTTokenReceive;
interface StdControl as RadioControl;
interface BareSendMsg as RadioSend;
interface ReceiveMsg as RadioReceive;
interface Leds;
}
}
implementation
{
enum {
UART_QUEUE_LEN = 12,
RADIO_QUEUE_LEN = 12,
QUEUE_SIZE = 5,
};
TOS_Msg uartQueueBufs[UART_QUEUE_LEN];
TOS_MsgPtr uartQueue[UART_QUEUE_LEN];
TOS_MsgPtr gRxBufPoolTbl[QUEUE_SIZE];
uint16_t gRxHeadIndex;
uint8_t uartIn, uartOut;
bool uartBusy, uartFull;
TOS_Msg radioQueueBufs[RADIO_QUEUE_LEN];
TOS_MsgPtr radioQueue[RADIO_QUEUE_LEN];
uint8_t radioIn, radioOut;
bool radioBusy, radioFull;
uint16_t strength;
task void UARTSendTask();
task void RadioSendTask();
task void RadioRcvdTask();
void failBlink();
void dropBlink();
command result_t StdControl.init() {
result_t ok1, ok2, ok3;
uint8_t i;
for (i = 0; i < UART_QUEUE_LEN; i++) {
uartQueue[i] = &uartQueueBufs[i];
}
uartIn = uartOut = 0;
uartBusy = FALSE;
uartFull = FALSE;
for (i = 0; i < RADIO_QUEUE_LEN; i++) {
radioQueue[i] = &radioQueueBufs[i];
}
radioIn = radioOut = 0;
radioBusy = FALSE;
radioFull = FALSE;
ok1 = call UARTControl.init ();
ok2 = call RadioControl.init();
ok3 = call Leds.init();
dbg(DBG_BOOT, "TOSBase initialized\n");
return rcombine3(ok1, ok2, ok3);
}
command result_t StdControl.start() {
result_t ok1, ok2;
ok1 = call UARTControl.start();
ok2 = call RadioControl.start();
return rcombine(ok1, ok2);
}
command result_t StdControl.stop() {
result_t ok1, ok2;
ok1 = call UARTControl.stop();
ok2 = call RadioControl.stop();
return rcombine(ok1, ok2);
}
event TOS_MsgPtr RadioReceive.receive(TOS_MsgPtr Msg) {
TOS_MsgPtr pBuf;
dbg(DBG_USR1, "TOSBase received radio packet.\n");
if (Msg->crc) {
if(Msg->group != TOS_AM_GROUP)
return Msg;
atomic {
pBuf = gRxBufPoolTbl[gRxHeadIndex];
if (pBuf->length == 0) {
gRxBufPoolTbl[gRxHeadIndex] = Msg;
gRxBufPoolTbl[gRxHeadIndex] ->data[20] = Msg->strength;
gRxHeadIndex++; gRxHeadIndex %= QUEUE_SIZE;
}
else{
pBuf = NULL;
}
}
if (pBuf){
post RadioRcvdTask();
}
else {
pBuf = Msg;
}
}
else {
pBuf = Msg;
}
return pBuf;
}
task void UARTSendTask() {
bool noWork = FALSE;
dbg (DBG_USR1, "TOSBase forwarding Radio packet to UART\n");
atomic {
if (uartIn == uartOut && uartFull == FALSE) {
uartBusy = FALSE;
noWork = TRUE;
}
}
if (noWork) {
return;
}
if (call UARTSend.send(uartQueue[uartOut]) == SUCCESS) {
call Leds.greenToggle();
} else {
failBlink();
post UARTSendTask();
}
}
event result_t UARTSend.sendDone(TOS_MsgPtr msg, result_t success) {
if (!success) {
failBlink();
} else {
atomic {
if (msg == uartQueue[uartOut]) {
if( ++uartOut >= UART_QUEUE_LEN ) uartOut = 0;
if (uartFull) {
uartFull = FALSE;
}
}
}
}
post UARTSendTask();
return SUCCESS;
}
event TOS_MsgPtr UARTReceive.receive(TOS_MsgPtr Msg) {
return Msg;
}
event TOS_MsgPtr UARTTokenReceive.receive(TOS_MsgPtr Msg, uint8_t Token) {
TOS_MsgPtr pBuf = Msg;
bool reflectToken = FALSE;
dbg(DBG_USR1, "TOSBase received UART token packet.\n");
atomic {
if (!radioFull) {
reflectToken = TRUE;
pBuf = radioQueue[radioIn];
radioQueue[radioIn] = Msg;
if( ++radioIn >= RADIO_QUEUE_LEN ) radioIn = 0;
if (radioIn == radioOut)
radioFull = TRUE;
if (!radioBusy) {
if (post RadioRcvdTask()) {
radioBusy = TRUE;
}
}
} else {
dropBlink();
}
}
if (reflectToken) {
call UARTTokenReceive.ReflectToken(Token);
}
return pBuf;
}
task void RadioRcvdTask() {
bool noWork = FALSE;
dbg (DBG_USR1, "TOSBase forwarding UART packet to Radio\n");
atomic {
if (radioIn == radioOut && radioFull == FALSE) {
radioBusy = FALSE;
noWork = TRUE;
}
}
if (noWork)
return;
radioQueue[radioOut]->group = TOS_AM_GROUP;
if (call RadioSend.send(radioQueue[radioOut]) == SUCCESS) {
call Leds.redToggle();
} else {
failBlink();
post RadioRcvdTask();
}
}
event result_t RadioSend.sendDone(TOS_MsgPtr msg, result_t success) {
if (!success) {
failBlink();
} else {
atomic {
if (msg == radioQueue[radioOut]) {
if( ++radioOut >= RADIO_QUEUE_LEN ) radioOut = 0;
if (radioFull)
radioFull = FALSE;
}
}
}
post RadioRcvdTask();
return SUCCESS;
}
void dropBlink() {
#ifdef TOSBASE_BLINK_ON_DROP
call Leds.yellowToggle();
#endif
}
void failBlink() {
#ifdef TOSBASE_BLINK_ON_FAIL
call Leds.yellowToggle();
#endif
}
}
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help