aprs_decoder.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * aprs_decoder.h
  3. *
  4. * Created on: Sep 1, 2019
  5. * Author: curiousmuch
  6. */
  7. #ifndef APRS_DECODER_H_
  8. #define APRS_DECODER_H_
  9. #include <stdio.h>
  10. #include "freertos/FreeRTOS.h"
  11. //#define uint8_t unsigned int
  12. //#define uint32_t unsigned int
  13. typedef enum {
  14. NORMAL,
  15. FRAME_DECODED,
  16. ERROR_FCS_MISMATCH,
  17. ERROR_PACKET_FORMAT,
  18. ERROR_BUFFER_OVERFLOW
  19. } decoder_output_t;
  20. typedef enum {
  21. NONE,
  22. BUFFER_OVERFLOW,
  23. BIT_STUFFING_FAILURE,
  24. FCS_MISMATCH,
  25. } decoder_error_t;
  26. typedef enum {
  27. FLAG_SEARCH,
  28. FLAG_FOUND,
  29. FRAME_START,
  30. FRAME_BREAK,
  31. ABORT,
  32. } decoder_state_t;
  33. typedef struct {
  34. decoder_state_t decoder_state;
  35. uint8_t *frame_buffer;
  36. uint32_t frame_buffer_index;
  37. uint32_t frame_buffer_len;
  38. uint32_t frame_len;
  39. uint8_t flag_buffer;
  40. uint8_t flag_buffer_index;
  41. uint8_t byte_buffer;
  42. uint8_t byte_buffer_index;
  43. uint8_t current_nrzi_bit;
  44. uint8_t previous_nrzi_bit;
  45. uint8_t current_bit;
  46. uint8_t one_count;
  47. uint8_t skip_bit_flag;
  48. uint8_t packet_rx;
  49. } decoder_varibles_t;
  50. uint8_t get_rx_status(void);
  51. void frame_buffer_init(uint8_t *buf, uint32_t len);
  52. void aprs_decoder_init(void);
  53. decoder_output_t aprs_decoder_feed_bit(uint8_t nrzi_bit);
  54. #endif /* APRS_DECODER_H_ */