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 Oscilloscope 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

Reply via email to