luat_cmux.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #ifndef LUAT_CMUX_H
  2. #define LUAT_CMUX_H
  3. #include "luat_base.h"
  4. #include "luat_dbg.h"
  5. typedef struct luat_cmux
  6. {
  7. uint8_t state;
  8. uint8_t main_state;
  9. uint8_t shell_state;
  10. uint8_t log_state;
  11. uint8_t dbg_state;
  12. uint8_t download_state;
  13. }luat_cmux_t;
  14. #define LUAT_CMUX_CH_MAIN 0
  15. #define LUAT_CMUX_CH_SHELL 1
  16. #define LUAT_CMUX_CH_LOG 2
  17. #define LUAT_CMUX_CH_DBG 3
  18. #define LUAT_CMUX_CH_DOWNLOAD 4
  19. #define CMUX_HEAD_FLAG_BASIC (unsigned char)0xF9
  20. #define CMUX_HEAD_FLAG_ADV (unsigned char)0x7E
  21. #define CMUX_CONTROL_PF 16
  22. #define CMUX_ADDRESS_CR 2
  23. #define CMUX_ADDRESS_EA 1
  24. #define CMUX_FRAME_SABM 47
  25. #define CMUX_FRAME_UA 99
  26. #define CMUX_FRAME_DM 15
  27. #define CMUX_FRAME_DISC 67
  28. #define CMUX_FRAME_UIH 239
  29. #define CMUX_FRAME_UI 3
  30. #define CMUX_DHCL_MASK 63 /* DLCI number is port number, 63 is the mask of DLCI; C/R bit is 1 when we send data */
  31. #define CMUX_DATA_MASK 127 /* when data length is out of 127( 0111 1111 ), we must use two bytes to describe data length in the cmux frame */
  32. #define CMUX_HIGH_DATA_MASK 32640 /* 32640 (‭ 0111 1111 1000 0000 ‬), the mask of high data bits */
  33. #define CMUX_ADDRESS(buff) (buff[1])
  34. #define CMUX_ADDRESS_DLC(buff) (buff[1]>>2)
  35. #define CMUX_CONTROL(buff) (buff[2])
  36. #define CMUX_CONTROL_ISSABM(buff) (buff[2]==(CMUX_FRAME_SABM | CMUX_CONTROL_PF))
  37. #define CMUX_CONTROL_ISUA(buff) (buff[2]==(CMUX_FRAME_UA & ~CMUX_CONTROL_PF))
  38. #define CMUX_CONTROL_ISDM(buff) (buff[2]==(CMUX_FRAME_DM & ~CMUX_CONTROL_PF))
  39. #define CMUX_CONTROL_ISDISC(buff) (buff[2]==(CMUX_FRAME_DISC | CMUX_CONTROL_PF))
  40. #define CMUX_CONTROL_ISUIH(buff) (buff[2]==(CMUX_FRAME_UIH & ~CMUX_CONTROL_PF))
  41. #define CMUX_CONTROL_ISUI(buff) (buff[2]==(CMUX_FRAME_UI & ~CMUX_CONTROL_PF))
  42. #define CMUX_BUFFER_SIZE 1024
  43. extern uint8_t echo_enable;
  44. extern uint8_t cmux_state;
  45. extern uint8_t cmux_main_state;
  46. extern uint8_t cmux_shell_state;
  47. extern uint8_t cmux_log_state;
  48. extern uint8_t cmux_dbg_state;
  49. extern uint8_t cmux_download_state;
  50. void luat_cmux_write(int port, uint8_t control,char* buff, size_t len);
  51. void luat_cmux_read(unsigned char* buff,size_t len);
  52. #endif