shellmatta_transport.h 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /**
  2. * @file shellmatta_transport.h
  3. * @brief transport layer functions of shellmatta
  4. * @author Simon Fischer <fischer.simon.1991@gmail.com>
  5. */
  6. #ifndef _SHELLMATTA_TRANSPORT_H_
  7. #define _SHELLMATTA_TRANSPORT_H_
  8. #include "shellmatta.h"
  9. #define PROTOCOL_VERSION 0x01u
  10. /** @brief value of start-of-header character */
  11. #define SHELLMATTA_START_OF_HEADER 0x01u
  12. /** @brief max length of a request sequence counters payload */
  13. #define SHELLMATTA_PAYLOAD_LEN_SEQ_REQ ((uint8_t)(0))
  14. /** @brief max length of a respond sequence counters payload */
  15. #define SHELLMATTA_PAYLOAD_LEN_SEQ_RES ((uint8_t)(0))
  16. /** @brief max length of a request buffersize payload */
  17. #define SHELLMATTA_PAYLOAD_LEN_BUFSIZE_REQ ((uint8_t)(1))
  18. /** @brief max length of a respond buffersize payload */
  19. #define SHELLMATTA_PAYLOAD_LEN_BUFSIZE_RES ((uint8_t)(1))
  20. /* header field length defines */
  21. #define SHELLMATTA_HEADER_LENGTH ((uint8_t)(8))
  22. /** @brief length of headerfield: start of header */
  23. #define SHELLMATTA_LENGTH_SOH ((uint8_t)(1))
  24. /** @brief length of headerfield: protocol version */
  25. #define SHELLMATTA_LENGTH_PROT_VERSION ((uint8_t)(1))
  26. /** @brief length of headerfield: packet type */
  27. #define SHELLMATTA_LENGTH_PACKET_TYPE ((uint8_t)(1))
  28. /** @brief length of headerfield: payload length */
  29. #define SHELLMATTA_LENGTH_PAYLOAD_LENGTH ((uint8_t)(1))
  30. /** @brief length of headerfield: source */
  31. #define SHELLMATTA_LENGTH_SOURCE ((uint8_t)(1))
  32. /** @brief length of headerfield: destination */
  33. #define SHELLMATTA_LENGTH_DESTINATION ((uint8_t)(1))
  34. /** @brief length of headerfield: host to shell sequence counter */
  35. #define SHELLMATTA_LENGTH_H2S_SEQUENCE_CNT ((uint8_t)(1))
  36. /** @brief length of headerfield: shell to host sequence counter */
  37. #define SHELLMATTA_LENGTH_S2H_SEQUENCE_CNT ((uint8_t)(1))
  38. /** @brief length of headerfield: crc32 of header + payload without crc32 */
  39. #define SHELLMATTA_LENGTH_CRC ((uint8_t)(4))
  40. /* positional defines */
  41. #define SHELLMATTA_POS_SOH ((uint8_t)0)
  42. #define SHELLMATTA_POS_PROT_VER ((uint8_t)1)
  43. #define SHELLMATTA_POS_PACKET_TYPE ((uint8_t)2)
  44. #define SHELLMATTA_POS_PAYLOAD_LEN ((uint8_t)3)
  45. #define SHELLMATTA_POS_SRC ((uint8_t)4)
  46. #define SHELLMATTA_POS_DST ((uint8_t)5)
  47. #define SHELLMATTA_POS_CNT_H2S ((uint8_t)6)
  48. #define SHELLMATTA_POS_CNT_S2H ((uint8_t)7)
  49. #define SHELLMATTA_POS_PAYLOAD ((uint8_t)8)
  50. /* utility defines */
  51. #define SHELLMATTA_SHIFT_BY_1 ((uint8_t)(1))
  52. #define SHELLMATTA_SHIFT_BY_2 ((uint8_t)(2))
  53. #define SHELLMATTA_SHIFT_BY_3 ((uint8_t)(3))
  54. #define SHELLMATTA_SHIFT_BY_8 ((uint8_t)(8))
  55. #define SHELLMATTA_SHIFT_BY_16 ((uint8_t)(16))
  56. #define SHELLMATTA_SHIFT_BY_24 ((uint8_t)(24))
  57. shellmatta_retCode_t shellmatta_reset_transport(shellmatta_transport_layer_t *transportLayer);
  58. shellmatta_retCode_t shellmatta_init_transport_inst(shellmatta_transport_layer_t *transportLayer,
  59. shellmatta_write_t writeFct);
  60. shellmatta_retCode_t shellmatta_handle_transport_fsm(shellmatta_transport_layer_t *transportLayer,
  61. char *data);
  62. shellmatta_retCode_t shellmatta_write_transport(shellmatta_transport_layer_t *transportLayer,
  63. const char* data,
  64. uint32_t length);
  65. #endif /* _SHELLMATTA_TRANSPORT_H_ */