logic_general.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #ifndef LOGIC_HEADERS
  2. #define LOGIC_HEADERS
  3. #include <stdint.h>
  4. #define MINUTE 60
  5. #define BUFFER 32
  6. #define MIN_INTERRUPT 3
  7. typedef enum {
  8. BitZero,
  9. BitOne,
  10. BitChecksum,
  11. BitChecksumError,
  12. BitConstant,
  13. BitConstantError,
  14. BitEndMinute,
  15. BitUnknown,
  16. BitEndSync,
  17. BitStartEmpty,
  18. BitStartWeather,
  19. BitStartDUT,
  20. BitStartTimezone,
  21. BitStartMinute,
  22. BitStartHour,
  23. BitStartDayOfMonth,
  24. BitStartDayOfWeek,
  25. BitStartMonth,
  26. BitStartYear,
  27. } Bit;
  28. typedef enum {
  29. DecodingUnknown,
  30. DecodingIrrelevant,
  31. DecodingWeather,
  32. DecodingDUT,
  33. DecodingTime,
  34. DecodingDate,
  35. DecodingMeta
  36. } DecodingPhase;
  37. typedef enum {
  38. DecodingNoTime,
  39. DecodingTimeTimezone,
  40. DecodingTimeMinutes,
  41. DecodingTimeMinutes10s,
  42. DecodingTimeMinutes1s,
  43. DecodingTimeHours,
  44. DecodingTimeHours10s,
  45. DecodingTimeHours1s,
  46. DecodingTimeSeconds,
  47. DecodingTimeConstant,
  48. DecodingTimeChecksum
  49. } DecodingTimePhase;
  50. typedef enum {
  51. DecodingNoDate,
  52. DecodingDateDayOfMonth1s,
  53. DecodingDateDayOfMonth10s,
  54. DecodingDateDayOfMonth,
  55. DecodingDateDayOfWeek,
  56. DecodingDateMonth1s,
  57. DecodingDateMonth10s,
  58. DecodingDateMonth,
  59. DecodingDateYear1s,
  60. DecodingDateYear10s,
  61. DecodingDateYear,
  62. DecodingDateCentury,
  63. DecodingDateDate,
  64. DecodingDateConstant,
  65. DecodingDateInYearChecksum,
  66. DecodingDateYearChecksum,
  67. DecodingDateDayOfWeekChecksum
  68. } DecodingDatePhase;
  69. typedef enum {
  70. UnknownTimezone,
  71. UTCTimezone,
  72. CETTimezone,
  73. CESTTimezone
  74. } Timezone;
  75. typedef struct {
  76. int index;
  77. int half_seconds;
  78. int error_count;
  79. int buffer[MINUTE * 2];
  80. int max;
  81. } MinuteData;
  82. typedef enum {
  83. MinuteDataErrorNone,
  84. MinuteDataErrorUnknownBit,
  85. MinuteDataErrorDesync
  86. } MinuteDataError;
  87. void minute_data_start_minute(MinuteData* minute_data);
  88. MinuteDataError minute_data_500ms_passed(MinuteData* minute_data);
  89. void minute_data_add_bit(MinuteData* minute_data, int bit);
  90. int minute_data_get_length(MinuteData* minute_data);
  91. int minute_data_get_bit(MinuteData* minute_data, int position);
  92. int get_power2_number(MinuteData* minute_data, int start_index, int stop_index, int increment);
  93. int get_checksum(MinuteData* minute_data, int start_index, int stop_index, int increment);
  94. int add_to_checksum(MinuteData* minute_data, int index, int current_checksum);
  95. void minute_data_reset(MinuteData* minute_data);
  96. int get_if_single_digit(int value);
  97. MinuteData* minute_data_alloc(int max);
  98. void minute_data_free(MinuteData* minute_data);
  99. typedef struct {
  100. MinuteData* minute_data;
  101. DecodingPhase decoding;
  102. DecodingTimePhase decoding_time;
  103. DecodingDatePhase decoding_date;
  104. int8_t year_10s;
  105. int8_t year_1s;
  106. int8_t month_10s;
  107. int8_t month_1s;
  108. int8_t day_of_month_1s;
  109. int8_t day_of_month_10s;
  110. int8_t day_of_week;
  111. int8_t hours_10s;
  112. int8_t hours_1s;
  113. int8_t minutes_10s;
  114. int8_t minutes_1s;
  115. int8_t seconds;
  116. Timezone timezone;
  117. uint8_t received_interrupt;
  118. uint8_t received_count;
  119. uint8_t last_received;
  120. Bit buffer[BUFFER];
  121. } LWCViewModel;
  122. #endif