On Jul 8, 2007, at 11:32 AM, Pedro Almeida wrote:

Hello all;

Some weeks ago I asked about the exact contents of a frame I was receiving through the serial port, of which I couldn't decode whatsoever (first mail here: http://mail.millennium.berkeley.edu/ pipermail/tinyos-help/2007-June/025739.html). With the help of some people (Alexander Becher, Steve McKown, David Moss and Benjamin Madore), we managed to make some sense out of it. However, I am reaching that time period where it would be really handy to have the rest cleared.

So summing it all up, I receive this in the serial port (example frame):

7E 45 00 FF FF 00 00 13 00 EE 00 01 00 00 00 07 80 EE 00 07 00 80 00 00 00 00 20 00 00 53 63 7E

and the sent structure is like this:

typedef nx_struct TestNetworkMsg {
nx_am_addr_t source;
nx_uint16_t seqno;
nx_am_addr_t parent;
nx_uint16_t metric;
nx_uint8_t datah;
nx_uint8_t datal;
nx_uint8_t hopcount;
nx_uint16_t sendCount;
nx_uint16_t sendSuccessCount;
} TestNetworkMsg;

the platform is the MicaZ and the app is the TestNetwork.

we've went this far on the decoding process (* marks confirmed field):

*7E : Framing byte, denoting start of packet
*45 : Protocol Byte (NO_ACK)
*00 : Packet Format Dispatch Byte
*FF FF : destination address (from UART)
*00 00 : source address (root node)
13 : length
00 EE : Collection ID (from CTP) ?? / Type ?? / Destination PAN Identifier (from MAC Header)
00 : ????
01 : hopcount (seems out of place, but sure looks like it!!!) ????
00 00 : Destination Address (root ID=0) (from MAC Header) ???
00 07 : Source Address (from the MAC Header) ????
80 : sendCount ??? (this field increments like the seqno below)
EE : Collection ID (from CTP) ?? / Type ??
*00 07 : source
*00 80 : seqno
*00 00 : parent
*00 00 : metric
*20 00 : data
00 : ???
*53 63:two byte CRC
*7E : Framing byte, denoting end of packet

Can you help me?
Thank you for the (once again) inconvenience;


The three structures you care about are, in this order:

The serial header (tos/lib/Serial.h)
The CTP data header (tos/lib/net/ctp/Ctp.h)
The TestNetwork packet (apps/tests/TestNetwork/TestNetwork.h)

If you put them in order, this is what you get:

typedef nx_struct serial_header {
  nx_am_addr_t dest;
  nx_am_addr_t src;
  nx_uint8_t length;
  nx_am_group_t group;
  nx_am_id_t type;
} serial_header_t;

typedef nx_struct {
  nx_ctp_options_t    options;
  nx_uint8_t          thl;
  nx_uint16_t         etx;
  nx_am_addr_t        origin;
  nx_uint8_t          originSeqNo;
  nx_collection_id_t  type;
  nx_uint8_t          data[0];
} ctp_data_header_t;

typedef nx_struct TestNetworkMsg {
  nx_am_addr_t source;
  nx_uint16_t seqno;
  nx_am_addr_t parent;
  nx_uint16_t metric;
  nx_uint16_t data;
  nx_uint8_t hopcount;
  nx_uint16_t sendCount;
  nx_uint16_t sendSuccessCount;
} TestNetworkMsg;

So if you laid this out as one big packet, you'd see:

typedef nx_struct {
  nx_am_addr_t dest;
  nx_am_addr_t src;
  nx_uint8_t length;
  nx_am_group_t group;
  nx_am_id_t type;

  nx_ctp_options_t    options;
  nx_uint8_t          thl;
  nx_uint16_t         etx;
  nx_am_addr_t        origin;
  nx_uint8_t          originSeqNo;
  nx_collection_id_t  type;

  nx_am_addr_t source;
  nx_uint16_t seqno;
  nx_am_addr_t parent;
  nx_uint16_t metric;
  nx_uint16_t data;
  nx_uint8_t hopcount;
  nx_uint16_t sendCount;
  nx_uint16_t sendSuccessCount;
} msg_format_t;

Then all you need to do is consider the serial framing, dispatch, and CRC bytes (which your breakdown above does):

typedef nx_struct {
  nx_uint8_t serialDelimiter;
  nx_uint8_t serialProto;
  nx_uint8_t serialDispatch;

  nx_am_addr_t dest;
  nx_am_addr_t src;
  nx_uint8_t length;
  nx_am_group_t group;
  nx_am_id_t type;

  nx_ctp_options_t    options;
  nx_uint8_t          thl;
  nx_uint16_t         etx;
  nx_am_addr_t        origin;
  nx_uint8_t          originSeqNo;
  nx_collection_id_t  type;

  nx_am_addr_t source;
  nx_uint16_t seqno;
  nx_am_addr_t parent;
  nx_uint16_t metric;
  nx_uint16_t data;
  nx_uint8_t hopcount;
  nx_uint16_t sendCount;
  nx_uint16_t sendSuccessCount;

  nx_uint16_t serialCrc;
  nx_uint8_t serialDelimiter;
} msg_format_t;

Phil
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to