|
@@ -0,0 +1,92 @@
|
|
|
|
+/**
|
|
|
|
+ * @file shellmatta_transport.h
|
|
|
|
+ * @brief transport layer functions of shellmatta
|
|
|
|
+ * @author Simon Fischer <fischer.simon.1991@gmail.com>
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#ifndef _SHELLMATTA_TRANSPORT_H_
|
|
|
|
+#define _SHELLMATTA_TRANSPORT_H_
|
|
|
|
+
|
|
|
|
+#include "shellmatta.h"
|
|
|
|
+
|
|
|
|
+/** @brief value of start-of-header character */
|
|
|
|
+#define SHELLMATTA_START_OF_HEADER 0x01u
|
|
|
|
+
|
|
|
|
+/* payload length defines */
|
|
|
|
+/** @brief max length of a plain data payload */
|
|
|
|
+#define SHELLMATTA_PAYLOAD_MAXLENGTH (uint8_t(255))
|
|
|
|
+/** @brief max length of a request sequence counters payload */
|
|
|
|
+#define SHELLMATTA_PAYLOAD_LEN_SEQ_REQ (uint8_t(0))
|
|
|
|
+/** @brief max length of a respond sequence counters payload */
|
|
|
|
+#define SHELLMATTA_PAYLOAD_LEN_SEQ_RES (uint8_t(0))
|
|
|
|
+/** @brief max length of a request buffersize payload */
|
|
|
|
+#define SHELLMATTA_PAYLOAD_LEN_BUFSIZE_REQ (uint8_t(1))
|
|
|
|
+/** @brief max length of a respond buffersize payload */
|
|
|
|
+#define SHELLMATTA_PAYLOAD_LEN_BUFSIZE_RES (uint8_t(1))
|
|
|
|
+
|
|
|
|
+/* header field length defines */
|
|
|
|
+/** @brief length of headerfield: start of header */
|
|
|
|
+#define SHELLMATTA_LENGTH_SOH (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: protocol version */
|
|
|
|
+#define SHELLMATTA_LENGTH_PROT_VERSION (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: packet type */
|
|
|
|
+#define SHELLMATTA_LENGTH_PACKET_TYPE (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: payload length */
|
|
|
|
+#define SHELLMATTA_LENGTH_PAYLOAD_LENGTH (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: source */
|
|
|
|
+#define SHELLMATTA_LENGTH_SOURCE (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: destination */
|
|
|
|
+#define SHELLMATTA_LENGTH_DESTINATION (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: host to shell sequence counter */
|
|
|
|
+#define SHELLMATTA_LENGTH_H2S_SEQUENCE_CNT (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: shell to host sequence counter */
|
|
|
|
+#define SHELLMATTA_LENGTH_S2H_SEQUENCE_CNT (uint8_t(1))
|
|
|
|
+/** @brief length of headerfield: crc32 of header + payload without crc32 */
|
|
|
|
+#define SHELLMATTA_LENGTH_CRC (uint8_t(4))
|
|
|
|
+/** @} */
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @brief definition of shellmatta transport layer states
|
|
|
|
+ */
|
|
|
|
+typedef enum
|
|
|
|
+{
|
|
|
|
+ STATE_IDLE = 0u, /**< idle state of transport layer */
|
|
|
|
+ STATE_SOH , /**< start of header state of transport layer */
|
|
|
|
+ STATE_PROTOCOL_VERSION , /**< protocol version state of transport layer */
|
|
|
|
+ STATE_PACKET_TYPE , /**< packet type state of transport layer */
|
|
|
|
+ STATE_PAYLOAD_LENGTH , /**< payload length state of transport layer */
|
|
|
|
+ STATE_SOURCE , /**< source state of transport layer */
|
|
|
|
+ STATE_DESTINATION , /**< destination state of transport layer */
|
|
|
|
+ STATE_H2S_SEQUENCE_CNT , /**< host to shellmatta sequence counter state of transport layer */
|
|
|
|
+ STATE_S2H_SEQUENCE_CNT , /**< shellmatta to host sequence counter state of transport layer */
|
|
|
|
+ STATE_PAYLOAD , /**< payload state of transport layer */
|
|
|
|
+ STATE_CRC , /**< crc state of transport layer */
|
|
|
|
+} shellmatta_transport_state_t;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @brief definition of shellmatta transport layer packet types
|
|
|
|
+ */
|
|
|
|
+typedef enum
|
|
|
|
+{
|
|
|
|
+ PACKET_DATA = 0x00u, /**< packet type to send plain data */
|
|
|
|
+ PACKET_SEQ_CNT_REQUEST = 0x01u, /**< packet type to request sequence counters */
|
|
|
|
+ PACKET_SEQ_CNT_RESPOND = 0x81u, /**< packet type to respond with sequence counters */
|
|
|
|
+ PACKET_MAX_BUFFERSIZE_REQUEST = 0x02u, /**< packet type to set and request max buffersize */
|
|
|
|
+ PACKET_MAX_BUFFERSIZE_RESPOND = 0x82u, /**< packet type to respond with max buffersize */
|
|
|
|
+ PACKET_SEARCH_DEVICE_REQUEST = 0x03u, /**< UNUSED: packet type to request search for a device by unique id */
|
|
|
|
+ PACKET_SEARCH_DEVICE_RESPOND = 0x83u, /**< UNUSED: packet type to respond with search results */
|
|
|
|
+ PACKET_SET_ADDRESS_REQUEST = 0x04u, /**< UNUSED: packet type to set and request an address */
|
|
|
|
+ PACKET_SET_ADDRESS_RESPOND = 0x84u /**< UNUSED: packet type to respond with a set address */
|
|
|
|
+} shellmatta_transport_packet_t;
|
|
|
|
+
|
|
|
|
+typedef struct
|
|
|
|
+{
|
|
|
|
+ uint32_t h2s_sequenceCnt; /**< */
|
|
|
|
+ uint32_t s2h_sequenceCnt; /**< */
|
|
|
|
+ shellmatta_transport_state_t state; /**< */
|
|
|
|
+ bool mandatory; /**< */
|
|
|
|
+} shellmatta_transport_layer_t;
|
|
|
|
+
|
|
|
|
+shellmatta_retCode_t shellmatta_handle_transport_fsm(shellmatta_transport_layer_t *transportLayer, char *data);
|
|
|
|
+
|
|
|
|
+#endif /* _SHELLMATTA_TRANSPORT_H_ */
|