[Tinyos-help] sendDone not signalled when i send packet over radio

Bhavish Aggarwal bhavishaggarwal at gmail.com
Fri Apr 11 01:58:10 PDT 2008


I am writing an application to bridge packets from UART to radio in
tinyos 1. The send command on the radio returns a success but the
senddone event is not signalled. Could anyone please help me with this
issue. The code is as below.

Thanks,

Bhavish

module UARTToRadioM{
	provides{
		interface StdControl;
	}
	uses{
		interface StdControl as UARTControl;
		interface ReceiveMsg as UARTReceive;
	    interface BareSendMsg as UARTSend;
	    interface TokenReceiveMsg as UARTTokenReceive;

		interface StdControl as RadioControl;
		interface BareSendMsg as RadioSend;
		interface ReceiveMsg as RadioReceive;

		interface Leds;
	}
}

implementation{

  void failBlink();

  command result_t StdControl.init() {
    result_t ok1, ok2, ok3;

    ok1 = call UARTControl.init();
    ok2 = call RadioControl.init();
    ok3 = call Leds.init();

    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 result_t UARTSend.sendDone(TOS_MsgPtr msg, result_t success) {
	if (!success) {
      failBlink();
    }

    return SUCCESS;
  }

  event TOS_MsgPtr UARTReceive.receive(TOS_MsgPtr Msg) {
	if (call RadioSend.send(&Msg) == SUCCESS) {
		call Leds.redToggle();
	}
	else{
		failBlink();
    }
	
	return Msg;
  }

  event TOS_MsgPtr UARTTokenReceive.receive(TOS_MsgPtr Msg, uint8_t Token) {
	if (call RadioSend.send(Msg) == SUCCESS) {
		call Leds.redToggle();
	}
	else{
		call Leds.redToggle();
//		failBlink();
    }
	
	return Msg;
  }

  event TOS_MsgPtr RadioReceive.receive(TOS_MsgPtr Msg) {
    if ((!Msg->crc))
      return Msg;
	
	if (call UARTSend.send(&Msg) == SUCCESS) {
		call Leds.greenToggle();
    }
	else {
		failBlink();
    }

    return Msg;
  }


  event result_t RadioSend.sendDone(TOS_MsgPtr msg, result_t success) {
    if (!success) {
         call Leds.greenToggle();
		//failBlink();
    }
    call Leds.yellowToggle();
    return SUCCESS;
  }

  void failBlink() {
    call Leds.yellowToggle();
  }
}

configuration UARTToRadioC {
}
implementation {
  components Main, UARTToRadioM, RadioCRCPacket as Comm, FramerM, UART, LedsC;

  Main.StdControl -> UARTToRadioM;

  UARTToRadioM.UARTControl -> FramerM;
  UARTToRadioM.UARTReceive -> FramerM;
  UARTToRadioM.UARTSend -> FramerM;
  UARTToRadioM.UARTTokenReceive -> FramerM;

  UARTToRadioM.RadioControl -> Comm;
  UARTToRadioM.RadioSend -> Comm;
  UARTToRadioM.RadioReceive -> Comm;

  UARTToRadioM.Leds -> LedsC;

  FramerM.ByteControl -> UART;
  FramerM.ByteComm -> UART;
}


More information about the Tinyos-help mailing list