Hi,
First of all sorry for english..
I am Ibrahim Abbas. I am doing graduation from NUST Pakistan. I am having
the following problem in TinyOS.
I am trying to send two different types of packets from node 1 to node 2 ,
where timers for both sendings fire at different intervals, but it is only
sending one type, when I try to send another type of packet then Data2.send
not returns success.
Please see the code below...
In module file..
module RadioCountToLedsC {
uses {
interface Leds;
interface Boot;
interface Receive as Data1;
interface AMSend as data1;
//interface Receive as Data2;
interface AMSend as data2;
interface Timer<TMilli> as MilliTimer;
interface Timer<TMilli> as MilliTimer2;
interface SplitControl as AMControl;
interface Packet as Packet1;
interface Packet as Packet2;
interface Random;
interface LocalTime<TMilli>;
}
}
implementation {
message_t packet;
message_t packet2;
bool locked = FALSE;
bool locked2 = FALSE;
uint16_t i=0;
uint16_t j=0;
event void Boot.booted()
{
call AMControl.start();
}
event void AMControl.startDone(error_t err)
{
if (err == SUCCESS)
{
/* call MilliTimer2.startPeriodic(25);*/
call MilliTimer.startPeriodic(250);
call MilliTimer2.startOneShot((call Random.rand32() %
SEND_INTERVAL)+(SEND_INTERVAL >> 1));
printf("Timers are Started \n");
}
else
{
call AMControl.start();
}
}
event void AMControl.stopDone(error_t err)
{
// do nothing
}
event void MilliTimer2.fired()
{
if(TOS_NODE_ID==1)
{
dbg("2","MilliTimer2 is Fired After If and Time is %d\n",call
LocalTime.get());
if (locked2)
{
return;
}
else
{
///I think some where here is the problem it does not return
success
other_msg_t* rcm = (other_msg_t*)call Packet2.getPayload(&packet2,
NULL);
call MilliTimer2.startOneShot((call Random.rand32() %
SEND_INTERVAL)+(SEND_INTERVAL >> 1));
dbg("3","MilliTimer2 is Fired After If After If \n");
j = j+2;
rcm->seq = j;
printf("Sending.................\n\n");
if (call data2.send(2, &packet2, sizeof(other_msg_t)) == SUCCESS)
{
dbg("Send2","Sending Data2 Packet To 2 %hhu.\n",rcm->seq);
locked2 = TRUE;
}
}
}
}
event void MilliTimer.fired()
{
if(TOS_NODE_ID==1)
{
printf("MilliTimer is and Time is %d\n",call LocalTime.get());
if (locked)
{
return;
}
else
{
radio_count_msg_t* rcm = (radio_count_msg_t*)call
Packet1.getPayload(&packet, NULL);
i++;
rcm->seq_num = i;
rcm->data = 10;
if (call data1.send(2, &packet, sizeof(radio_count_msg_t)) == SUCCESS)
{
dbg("Send1","Sending Data1 Packet To 2 %hhu.\n",rcm->seq_num);
locked = TRUE;
}
}
}
}
/*event message_t* Data2.receive(message_t* bufPtr, void* payload, uint8_t
len)
{
if(TOS_NODE_ID==2)
{
other_msg_t* rcm = (other_msg_t*)payload;
dbg("Rcvd2","Received Data2 %hhu.\n\n", rcm->seq);
}
return bufPtr;
}
*/
event message_t* Data1.receive(message_t* bufPtr, void* payload, uint8_t
len)
{
if(TOS_NODE_ID==2)
{
radio_count_msg_t* rcm = (radio_count_msg_t*)payload;
dbg("Rcvd1","Received Data1 packet %hhu.\n\n", rcm->seq_num);
}
return bufPtr;
}
event void data1.sendDone(message_t* bufPtr, error_t error)
{
if (&packet == bufPtr)
{
locked = FALSE;
}
}
event void data2.sendDone(message_t* bufPtr, error_t error)
{
if (&packet2 == bufPtr)
{
locked2 = FALSE;
}
}
}
/////////////////////////////////////////in header file
#ifndef RADIO_COUNT_TO_LEDS_H
#define RADIO_COUNT_TO_LEDS_H
typedef nx_struct radio_count_msg
{
nx_uint16_t seq_num;
nx_uint16_t data;
} radio_count_msg_t;
typedef nx_struct other_msg
{
nx_uint16_t seq;
} other_msg_t;
enum {
AM_RADIO_COUNT_MSG = 6,
SEND_INTERVAL = 8000
};
Please help me .. I am stuck here..
--
Regards
Ibrahim Abbas
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help