|
@@ -0,0 +1,97 @@
|
|
|
|
+/**
|
|
|
|
+
|
|
|
|
+ @page shellmatta_transport_layer Shellmatta Transport Layer
|
|
|
|
+
|
|
|
|
+ To be able to use the shellmatta directly on an unsecured interface like
|
|
|
|
+ raw UART a simple connectionless transport layer has been implemented.
|
|
|
|
+
|
|
|
|
+ The transport layer is optional and can be removed during compile time as
|
|
|
|
+ well as deactivated during runtime.
|
|
|
|
+ The transport layer intends to be used in machine to machine interfaces.
|
|
|
|
+
|
|
|
|
+ @warning As the transport layer is connectionless there is no way to
|
|
|
|
+ determine wether a packet is received properly.
|
|
|
|
+ To check if all packets have been received by the shellmatta
|
|
|
|
+ the sequence counters included in any packet can be used.
|
|
|
|
+
|
|
|
|
+ @section shellmatta_transport_layer_sequence Basic sequence
|
|
|
|
+
|
|
|
|
+ @startuml
|
|
|
|
+ loop until command is sent
|
|
|
|
+ Host -> Shellmatta: send packet
|
|
|
|
+ Shellmatta -> Shellmatta: validate packet
|
|
|
|
+ end
|
|
|
|
+
|
|
|
|
+ loop until response is sent
|
|
|
|
+ Shellmatta -> Host: send return packet
|
|
|
|
+ Host -> Host: validate packet
|
|
|
|
+ end
|
|
|
|
+ @enduml
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @section shellmatta_transport_layer_protocol Protocol
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ | Offset | Length | Description |
|
|
|
|
+ |--------|----------|---------------------------------------------|
|
|
|
|
+ | 0 | 1 | Start of header (\SOH) |
|
|
|
|
+ | 1 | 1 | Protocol version |
|
|
|
|
+ | 2 | 1 | Packet type |
|
|
|
|
+ | 3 | 1 | Payload Length |
|
|
|
|
+ | 4 | 1 | Source |
|
|
|
|
+ | 5 | 1 | Destination |
|
|
|
|
+ | 6 | 1 | Sequence counter host to shellmatta |
|
|
|
|
+ | 7 | 1 | Sequence counter shellmatta to host |
|
|
|
|
+ | 8 | 4 | CRC32 of header + payload without CRC32 |
|
|
|
|
+ | 12 | 0 .. 255 | Payload |
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @subsection shellmatta_transport_layer_protocol_packet_Types Packet types
|
|
|
|
+
|
|
|
|
+ The type codes are divided into request and respond codes using the MSB.
|
|
|
|
+ The MSB indicates a response.
|
|
|
|
+
|
|
|
|
+ | type | Description | Payload length | Payload |
|
|
|
|
+ |------|--------------------------------|----------------|------------------------|
|
|
|
|
+ | 0x00 | Plain Data | 0 .. 255 | User data |
|
|
|
|
+ | 0x01 | Request Sequence counters | 0 | - |
|
|
|
|
+ | 0x81 | Respond Sequence counters | 0 | - |
|
|
|
|
+ | 0x02 | Request and set max buffersize | 1 | Hosts buffersize |
|
|
|
|
+ | 0x82 | Respond max buffersize | 1 | Shellmattas buffersize |
|
|
|
|
+ | 0x03 | Search device by unique ID | 32 | UUID Range 2x 16 byte |
|
|
|
|
+ | 0x83 | Respond to search | 16 | UUID of Shellmatta |
|
|
|
|
+ | 0x04 | Set address | 16 | UUID of Shellmatta |
|
|
|
|
+ | 0x84 | Respond to set address | 16 | UUID of Shellmatta |
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @section shellmatta_transport_layer_sequence_counters Sequence counters
|
|
|
|
+
|
|
|
|
+ The sequence counters are included in the header of every packet to enable
|
|
|
|
+ the host to check for any dropped packets.
|
|
|
|
+ This is a quite nasty workaround as the host has no chance to determine
|
|
|
|
+ which packet has dropped - but better than nothing.
|
|
|
|
+
|
|
|
|
+ If no response is received from the shellmatta the sequence counters can be
|
|
|
|
+ requested explicitly.
|
|
|
|
+
|
|
|
|
+ The sequence counter host to shellmatta will increment on every successfully
|
|
|
|
+ received packet.
|
|
|
|
+
|
|
|
|
+ The sequence counter shellmatta to host will increment on every packet the
|
|
|
|
+ shellmatta sends to the host.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @section shellmatta_transport_layer_buffersize Buffer sizes
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @section shellmatta_transport_layer_addressing Addressing and Search
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @section shellmatta_transport_layer_crc CRC calculation
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @section shellmatta_transport_layer_control Controlling the transport layer
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+*/
|