kiss.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * tnc_kiss.h
  3. *
  4. * Created on: Jun 12, 2019
  5. * Author: curiousmuch
  6. */
  7. #ifndef MAIN_KISS_H_
  8. #define MAIN_KISS_H_
  9. // Logging Tag
  10. #define TNC_TAG "KISS"
  11. // Frame Buffer
  12. #define FRAME_BUFFER_SIZE 512
  13. // KISS Specific Characters
  14. #define KISS_FEND 0xC0
  15. #define KISS_FESC 0xDB
  16. #define KISS_TFEND 0xDC
  17. #define KISS_TFESC 0xDD
  18. // KISS Commands
  19. // command Structure: [ 4 bits ][ 4 bits ]
  20. // [ TNC # ][ cmd ]
  21. #define KISS_DATAFRAME 0x00 // data to be send on HDLC channel
  22. #define KISS_CMD_TXDELAY 0x01 // keyup delay in 10ms units. default is 50ms.
  23. #define KISS_CMD_P 0x02
  24. #define KISS_CMD_SLOTTIME 0x03
  25. #define KISS_CMD_TXTAIL 0x04
  26. #define KISS_CMD_FULLDUPLEX 0x05
  27. #define KISS_CMD_SETHARDWARE 0x06
  28. #define KISS_CMD_RETURN 0xFF
  29. // TXDELAY: TX keyup delay in 10 ms units. Default = 50 (500ms)
  30. // P: Persistence scaled 0 - 255. P = p *256 -1. Default = 63 (p = 0.25)
  31. // SlotTime: Slot interval in 10ms units. Default = 10 (100ms)
  32. // TXTail: Time to hold TX after FCS has been sent in 10ms units. Default = 0
  33. // FullDuplex: 0 = Half Duplex. >0 = Full Duplex. Default = 0
  34. // SetHardware: Custom
  35. // Return: Exit Kiss
  36. typedef void (*tnc_cb_t)(uint8_t *, uint32_t);
  37. typedef struct {
  38. uint8_t tx_delay;
  39. uint8_t persistence;
  40. uint8_t slot_time;
  41. uint8_t tx_tail;
  42. uint8_t full_duplex;
  43. uint32_t spp_handle;
  44. tnc_cb_t rx_callback;
  45. tnc_cb_t tx_callback;
  46. } tnc_settings_t;
  47. typedef enum {
  48. ESC_MODE = 0,
  49. FRAME_ASS,
  50. FRAME_END,
  51. } KISS_STATE_t;
  52. typedef enum {
  53. FRAME_INVALID = 0,
  54. FRAME_INCOMPLETE,
  55. FRAME_COMPLETE,
  56. } FRAME_STATUS_t;
  57. typedef struct {
  58. uint8_t buf[FRAME_BUFFER_SIZE];
  59. uint32_t max_len;
  60. uint32_t index;
  61. FRAME_STATUS_t status;
  62. } kiss_buffer_t;
  63. typedef struct {
  64. uint8_t *data;
  65. uint16_t len;
  66. } raw_kiss_frame_t;
  67. typedef struct {
  68. uint8_t *data;
  69. uint16_t len;
  70. } raw_ax25_frame_t;
  71. /* Public Functions */
  72. void kiss_receive(uint8_t *data, uint16_t len);
  73. void kiss_init(void);
  74. void kiss_configure(void);
  75. void kiss_transmit(uint8_t type, uint8_t *data, uint32_t len);
  76. #endif /* MAIN_TNC_KISS_H_ */