123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #ifndef _SHELLMATTA_TRANSPORT_H_
- #define _SHELLMATTA_TRANSPORT_H_
- #include "shellmatta.h"
- #define PROTOCOL_VERSION 0x01u
- #define SHELLMATTA_START_OF_HEADER 0x01u
- #define SHELLMATTA_PAYLOAD_MAXLENGTH ((uint8_t)(255))
- #define SHELLMATTA_PAYLOAD_LEN_SEQ_REQ ((uint8_t)(0))
- #define SHELLMATTA_PAYLOAD_LEN_SEQ_RES ((uint8_t)(0))
- #define SHELLMATTA_PAYLOAD_LEN_BUFSIZE_REQ ((uint8_t)(1))
- #define SHELLMATTA_PAYLOAD_LEN_BUFSIZE_RES ((uint8_t)(1))
- #define SHELLMATTA_HEADER_LENGTH ((uint8_t)(8))
- #define SHELLMATTA_LENGTH_SOH ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_PROT_VERSION ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_PACKET_TYPE ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_PAYLOAD_LENGTH ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_SOURCE ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_DESTINATION ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_H2S_SEQUENCE_CNT ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_S2H_SEQUENCE_CNT ((uint8_t)(1))
- #define SHELLMATTA_LENGTH_CRC ((uint8_t)(4))
- #define SHELLMATTA_POS_SOH ((uint8_t)0)
- #define SHELLMATTA_POS_PROT_VER ((uint8_t)1)
- #define SHELLMATTA_POS_PACKET_TYPE ((uint8_t)2)
- #define SHELLMATTA_POS_PAYLOAD_LEN ((uint8_t)3)
- #define SHELLMATTA_POS_SRC ((uint8_t)4)
- #define SHELLMATTA_POS_DST ((uint8_t)5)
- #define SHELLMATTA_POS_CNT_H2S ((uint8_t)6)
- #define SHELLMATTA_POS_CNT_S2H ((uint8_t)7)
- #define SHELLMATTA_POS_PAYLOAD ((uint8_t)8)
- #define SHELLMATTA_SHIFT_BY_1 ((uint8_t)(1))
- #define SHELLMATTA_SHIFT_BY_2 ((uint8_t)(2))
- #define SHELLMATTA_SHIFT_BY_3 ((uint8_t)(3))
- #define SHELLMATTA_SHIFT_BY_8 ((uint8_t)(8))
- #define SHELLMATTA_SHIFT_BY_16 ((uint8_t)(16))
- #define SHELLMATTA_SHIFT_BY_24 ((uint8_t)(24))
- typedef enum
- {
- STATE_GET_SOH =0u,
- STATE_MANUAL_INPUT ,
- STATE_GET_PROTOCOL_VERSION ,
- STATE_GET_PACKET_TYPE ,
- STATE_GET_PAYLOAD_LENGTH ,
- STATE_GET_SOURCE ,
- STATE_GET_DESTINATION ,
- STATE_GET_H2S_SEQUENCE_CNT ,
- STATE_GET_S2H_SEQUENCE_CNT ,
- STATE_GET_PAYLOAD ,
- STATE_GET_CRC ,
- STATE_PROCESS_PAYLOAD
- } shellmatta_transport_state_t;
- typedef enum
- {
- PACKET_DATA = 0x00u,
- PACKET_SEQ_CNT_REQUEST = 0x01u,
- PACKET_SEQ_CNT_RESPOND = 0x81u,
- PACKET_MAX_BUFFERSIZE_REQUEST = 0x02u,
- PACKET_MAX_BUFFERSIZE_RESPOND = 0x82u,
- PACKET_SEARCH_DEVICE_REQUEST = 0x03u,
- PACKET_SEARCH_DEVICE_RESPOND = 0x83u,
- PACKET_SET_ADDRESS_REQUEST = 0x04u,
- PACKET_SET_ADDRESS_RESPOND = 0x84u
- } shellmatta_transport_packet_t;
- typedef struct
- {
- uint8_t h2s_sequenceCnt;
- uint8_t s2h_sequenceCnt;
- shellmatta_transport_state_t state;
- bool mandatory;
- bool active;
- bool continueStep;
- shellmatta_write_t originalWrite;
- } shellmatta_transport_layer_t;
- extern uint8_t protocolVersion;
- extern shellmatta_transport_packet_t packetType;
- extern uint32_t payloadLength;
- extern uint8_t source;
- extern uint8_t destination;
- extern uint32_t crc32;
- extern uint8_t payloadCounter;
- extern uint8_t crcCounter;
- extern uint8_t packetSequenceCounter_h2s;
- extern uint8_t packetSequenceCounter_s2h;
- extern char payloadBuffer[SHELLMATTA_PAYLOAD_MAXLENGTH];
- extern shellmatta_transport_layer_t transportLayerInst;
- shellmatta_retCode_t shellmatta_reset_transport(void);
- shellmatta_retCode_t shellmatta_init_transport_inst(void);
- shellmatta_retCode_t shellmatta_handle_transport_fsm(char *data);
- shellmatta_retCode_t shellmatta_write_transport(const char* data, uint32_t length);
- #endif
|