Difference between revisions of "How to use serial forwarder on testbed"

From Cyber-Physical Systems Laboratory
Jump to navigationJump to search
Line 68: Line 68:
 
'''Example''':
 
'''Example''':
  
 +
'''Step 1'''
 
Suppose you want to send some information to node 155, then according to the '''tospacket.py''', you need to set up the local packet as bellow:
 
Suppose you want to send some information to node 155, then according to the '''tospacket.py''', you need to set up the local packet as bellow:
  
Line 104: Line 105:
 
The array view of local packet:
 
The array view of local packet:
  
['''0x00, 0x00, 0x9B, 0x00, 0x00, 0x08, 0x00, 0x67,  0x00, 0x95, 0x00, 0x00, 0x9B, 0x00, 0x03, 0x00, 0x0C''']
+
['''0x00, 0x00, 0x9B, 0x00, 0x00, 0x08, 0x00, 0x67,  0x00, 0x95, 0x00, 0x9B, 0x00, 0x03, 0x00, 0x0C''']
 +
 
 +
'''Step 2'''
 +
 
 +
We can get the length of the local packet, it is '''16'''
 +
 
 +
'''Step 3'''
 +
 
 +
Create the socket, connect the socket to server at port 9002 using TCP, send ['''0x55, 0x20'''] first as hand shake signal
 +
 
 +
'''Step 4'''
 +
 
 +
Still using that connected socket, send the length of the local packet '''16'''
 +
 
 +
'''Step 5'''
 +
 
 +
Use the socket to send the local packet
 +
 
 +
So the final data sent to the serial forwarder is:
 +
 
 +
['''0x55, 0x20, 0x10, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x08, 0x00, 0x67,  0x00, 0x95, 0x00, 0x9B, 0x00, 0x03, 0x00, 0x0C''']
 +
 
 +
'''Step 6'''
 +
 
 +
When the serial forwarder server received all the stuff, it will do the calculation, and add essential information for the packet, calculate the CRC
 +
 
 +
Suppose we get:
 +
 
 +
protocol type as PACKET_ACK('''0x44''')
 +
 
 +
sequence number as 48('''0x30''')
 +
 
 +
the CRC as 246 130('''0xF6 0x82''')
 +
 
 +
The final forward packet that received by the mote would be
 +
 
 +
['''0x7E, 0x44, 0x30, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x08, 0x00, 0x67,  0x00, 0x95, 0x00, 0x9B, 0x00, 0x03, 0x00, 0x0C, 0xF6, 0x82, 0x7E''']

Revision as of 06:24, 31 August 2017

How to use the serial forwarder on testbed?

1. To open the serial forwarder on testbed, run the command

forwarder.py -2 -a telosb

2. We can get the packet format used by the serial forwarder in tospacket.py:

byte 0: Delimiter (0x7E)

byte 1: Protocol: ACK (0x43), PACKET_ACK (0x44) or PACKET_NOACK (0x45)

byte 2: Sequence number (omitted if protocol is PACKET_NOACK)

byte 3: Packet type (0x00, omitted if protocol is ACK)

byte 4: Destination high byte (omitted if protocol is ACK)

byte 5: Destination low byte (omitted if protocol is ACK)

byte 6: Source high byte (omitted if protocol is ACK)

byte 7: Source low byte (omitted if protocol is ACK)

byte 8: Payload length (omitted if protocol is ACK)

byte 9: Destination PAN group (omitted if protocol is ACK)

byte 10: Packet AM type (omitted if protocol is ACK)

byte 11 .. n-4: Payload (omitted if protocol is ACK)

byte n-3: CRC-16 low byte

byte n-2: CRC-16 high byte

byte n-1: Delimiter (0x7E)


3. In tinyos standard, the delimiter character is 0x7E, the escape character is 0x7D

4. But we don't need the whole Tos packet as above to use the serial forwarder, the serial forwarder will do a lot of things for us.

5. what we don't need to send to the serial forwarder:

byte 0 and byte n-1: Delimiter(added by serial forwarder server)

byte 1 : Protocol Type(this byte should be given by the serial forwarder server)

byte 2 : Sequence Number(this byte should be given by the serial forwarder server)

byte n-2 and n-3 : the two-byte-CRC is calculated by the serial forwarder

6. Next we will name the packet we sent to the serial forwarder server as local packet, and the packet sent by serial forwarder server to the mote as forward packet

7. The process of using the serial forwarder

7.1 First create a socket, and connect the socket to the server at port 9002

7.2 Send [0x55, 0x20] to the server. This is a handshake signal used by the serial forwarder. The handshake signal for Tos2 is 'U ', it is uppercase U followed by a whitespace.

7.3 Calculate the length of the local packet, send the length to the server(should be one byte, so the maximum length of the serial packet won't exceed 256 byte)

7.4 Send the local packet to server

Note: The handshake signal, the length of the local packet, and the local packet itself don't need to be escaped, the serial forwarder will do the escaping itself

Example:

Step 1 Suppose you want to send some information to node 155, then according to the tospacket.py, you need to set up the local packet as bellow:

byte 0: Delimiter, no need, given by the serial forwarder server

byte 1: Protocol, no need, given by the serial forwarder server

byte 2: Sequence Number, no need, given by the serial forwarder server

byte 3: Packet type, 0x00

byte 4: Destination high byte, 0x00

byte 5: Destination low byte, 0x9B

byte 6: Source high byte, 0x00

byte 7: Source low byte, 0x00

byte 8: Payload length, 0x08

byte 9: Destination PAN group, 0x00

byte 10: Packet AM type, 0x67

byte 11 .. n-4: Payload, give some example payload here:

0x00, 0x95, 0x00,0x9B, 0x00, 0x03, 0x00, 0x0C

byte n-3: CRC-16 low byte, no need, calculated by server

byte n-2: CRC-16 high byte, no need, calculated by server

byte n-1: Delimiter (0x7E), no need, given by server

The array view of local packet:

[0x00, 0x00, 0x9B, 0x00, 0x00, 0x08, 0x00, 0x67, 0x00, 0x95, 0x00, 0x9B, 0x00, 0x03, 0x00, 0x0C]

Step 2

We can get the length of the local packet, it is 16

Step 3

Create the socket, connect the socket to server at port 9002 using TCP, send [0x55, 0x20] first as hand shake signal

Step 4

Still using that connected socket, send the length of the local packet 16

Step 5

Use the socket to send the local packet

So the final data sent to the serial forwarder is:

[0x55, 0x20, 0x10, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x08, 0x00, 0x67, 0x00, 0x95, 0x00, 0x9B, 0x00, 0x03, 0x00, 0x0C]

Step 6

When the serial forwarder server received all the stuff, it will do the calculation, and add essential information for the packet, calculate the CRC

Suppose we get:

protocol type as PACKET_ACK(0x44)

sequence number as 48(0x30)

the CRC as 246 130(0xF6 0x82)

The final forward packet that received by the mote would be

[0x7E, 0x44, 0x30, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x08, 0x00, 0x67, 0x00, 0x95, 0x00, 0x9B, 0x00, 0x03, 0x00, 0x0C, 0xF6, 0x82, 0x7E]