Hi all
Sorry for the length, but I thing that it was necessary to explain my concern. 
I've programmed a telosb acting as a transmitter that sends periodically a 
broadcast message to another telosb acting as a network coordinator (and also 
as a reciver). I am using the TKN154 libraries. The main network parameters 
are: 
RADIO CHANNEL is 26,PAN ID is 0x4927,COORDINATOR ADDRESS is 0x6287,DEVICE 
ADDRESS is 0x6245,TRANSMISSION is broadcast (daddr is 0xFFFF).
The payload contains two fields: 1) the device address (0x6287) and 2) four 
uint16_t values as network data (0x2301 0x2302 0x2303 0x2304)
The coordinator app is based on the packetsniffer app (apps/tests/tkn154) with 
some modifications. What I want is to send every data frame received by the 
coordinator through the serial port to my laptop. Thereby, here is the part of 
the code that conducts this issue: 
event message_t* MCPS_DATA.indication ( message_t* frame_ ){  call 
Leds.led1Toggle();  if (call Queue.enqueue(frame_) != SUCCESS) {    call 
Leds.led0On(); // overflow    return frame_;  } else {    post 
serialSendTask();    return call Pool.get();  }}  task void serialSendTask() {  
message_t* frame;  uint8_t headerLen;   uint8_t payloadLen;   uint8_t 
serialLen;   uint8_t *header;  uint8_t *payload;  uint8_t i;   if (call 
Queue.empty() || m_serialSendBusy)    return;        frame = call Queue.head(); 
   headerLen = call Frame.getHeaderLength(frame);  payloadLen = call 
Frame.getPayloadLength(frame);  header = call Frame.getHeader(frame);  payload 
= call Frame.getPayload(frame);     /*  // Test 1: printf  printf("MHRLen: 
%d\n", headerLen);  printf("MHR: ");  for (i=0; i<headerLen; i++){    
printf("0x%02X ", header[i]);  }  printf("\n");        printf("PayloadLen: 
%d\n", payloadLen);  printf("Payload: ");  for (i=0; i<payloadLen; i++){    
printf("0x%02X ", payload[i]);  }  printf("\n\n");  */    // Test 2: java 
Listen  serialLen = headerLen + payloadLen;  m_serialSendBusy = TRUE;  if (call 
SerialSend.send(frame, serialLen) != SUCCESS)    report_received();   //call 
Leds.led2Toggle();} 
As you can see, I carry out two tests: 1) by using the printf libraries, I 
represent the content of the header and the payload fields; and 2) I use the 
Listen java app to see what I receive from the serial port. The results are the 
following:
Test 1: PRINTF (only one data frame is depicted since the transmission 
conditions and network data are always the same)
$ java net.tinyos.tools.PrintfClient -comm serial@/dev/ttyUSB0:telosb
MHRLen: 9MHR: 0x41 0x88 0x90 0x27 0x49 0xFF 0xFF 0x45 0x62 PayloadLen: 
10Payload: 0x45 0x62 0x01 0x23 0x02 0x23 0x03 0x23 0x04 0x23 
I've not checked the header fields but, a priori, the result is what I 
expected. 

Test 2: LISTEN JAVA (5 data frames are depicted)
$ java net.tinyos.tools.Listen -comm serial@/dev/ttyUSB0:telosb
02 00 00 00 00 00 00 00 00 00 00 00 00 45 62 01 23 02 23 03 23 04 23 06 EA 00 
00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 45 62 00 00 02 23 03 
23 04 23 08 EB 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 45 
62 00 00 02 23 03 23 04 23 0C E9 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 
00 00 00 00 00 45 62 00 00 02 23 03 23 04 23 09 EA 00 00 00 00 00 00 00 02 00 
00 00 00 00 00 00 00 00 00 00 00 45 62 00 00 02 23 03 23 04 23 0C EB 00 00 00 
00 00 00 00
I am aware of that the first byte is the AM type (0x02). In addition, the 
payload is successfully received (45 62 01 23 02 23 03 23 04 23). However, 
where is the header? And the latest zeros? and what do "06 EA", "08 EB", "0C 
E9", "09 EA", "0C EB" mean?
I'd like to know what I am doing wrong. In this sense, all the help possible 
would be appreciated. 
Regards
David                                     
_______________________________________________
Tinyos-help mailing list
Tinyos-help@millennium.berkeley.edu
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to