seader_bridge.h 989 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #pragma once
  2. #include <stdlib.h> // malloc
  3. #include <stdint.h> // uint32_t
  4. #include <stdarg.h> // __VA_ARGS__
  5. #include <string.h>
  6. #include <stdio.h>
  7. #include <furi.h>
  8. #include <furi_hal.h>
  9. // https://ww1.microchip.com/downloads/en/DeviceDoc/00001561C.pdf
  10. #define SEADER_UART_RX_BUF_SIZE (261)
  11. typedef struct {
  12. uint8_t uart_ch;
  13. uint8_t flow_pins;
  14. uint8_t baudrate_mode;
  15. uint32_t baudrate;
  16. } SeaderUartConfig;
  17. typedef struct {
  18. uint32_t rx_cnt;
  19. uint32_t tx_cnt;
  20. uint8_t protocol;
  21. } SeaderUartState;
  22. struct SeaderUartBridge {
  23. SeaderUartConfig cfg;
  24. SeaderUartConfig cfg_new;
  25. FuriThread* thread;
  26. FuriThread* tx_thread;
  27. FuriStreamBuffer* rx_stream;
  28. FuriHalSerialHandle* serial_handle;
  29. FuriSemaphore* tx_sem;
  30. SeaderUartState st;
  31. uint8_t rx_buf[SEADER_UART_RX_BUF_SIZE];
  32. uint8_t tx_buf[SEADER_UART_RX_BUF_SIZE];
  33. size_t tx_len;
  34. // T=0 or T=1
  35. uint8_t T;
  36. };
  37. typedef struct SeaderUartBridge SeaderUartBridge;