subghz_protocol_common.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #pragma once
  2. #include <m-string.h>
  3. #include <furi-hal.h>
  4. #include <stdint.h>
  5. #include "file-worker.h"
  6. #define bit_read(value, bit) (((value) >> (bit)) & 0x01)
  7. #define bit_set(value, bit) ((value) |= (1UL << (bit)))
  8. #define bit_clear(value, bit) ((value) &= ~(1UL << (bit)))
  9. #define bit_write(value, bit, bitvalue) (bitvalue ? bit_set(value, bit) : bit_clear(value, bit))
  10. #define SUBGHZ_TX_PIN_HIGH()
  11. #define SUBGHZ_TX_PIN_LOW()
  12. #define DURATION_DIFF(x, y) ((x < y) ? (y - x) : (x - y))
  13. //#define SUBGHZ_APP_PATH_FOLDER "/ext/subghz/saved"
  14. #define SUBGHZ_APP_FOLDER "/any/subghz"
  15. #define SUBGHZ_APP_PATH_FOLDER "/any/subghz/saved"
  16. #define SUBGHZ_APP_EXTENSION ".sub"
  17. #define SUBGHZ_ENCODER_UPLOAD_MAX_SIZE 512
  18. #define TYPE_PROTOCOL_STATIC 1u
  19. #define TYPE_PROTOCOL_DYNAMIC 2u
  20. typedef struct SubGhzProtocolCommon SubGhzProtocolCommon;
  21. typedef struct SubGhzProtocolEncoderCommon SubGhzProtocolEncoderCommon;
  22. typedef void (*SubGhzProtocolCommonCallback)(SubGhzProtocolCommon* parser, void* context);
  23. typedef void (*SubGhzProtocolCommonToStr)(SubGhzProtocolCommon* instance, string_t output);
  24. //Save
  25. typedef void (*SubGhzProtocolCommonGetStrSave)(SubGhzProtocolCommon* instance, string_t output);
  26. //Load
  27. typedef bool (*SubGhzProtocolCommonLoad)(FileWorker* file_worker, SubGhzProtocolCommon* instance);
  28. //Get upload encoder protocol
  29. typedef bool (*SubGhzProtocolEncoderCommonGetUpLoad)(SubGhzProtocolCommon* instance, SubGhzProtocolEncoderCommon* encoder);
  30. struct SubGhzProtocolCommon {
  31. const char* name;
  32. uint16_t te_long;
  33. uint16_t te_short;
  34. uint16_t te_delta;
  35. uint8_t code_count_bit;
  36. uint8_t code_last_count_bit;
  37. uint64_t code_found;
  38. uint64_t code_last_found;
  39. uint8_t code_min_count_bit_for_found;
  40. uint8_t parser_step;
  41. uint8_t type_protocol;
  42. uint32_t te_last;
  43. uint8_t header_count;
  44. uint16_t cnt;
  45. uint32_t serial;
  46. uint8_t btn;
  47. /* Standard Callback for on rx complete event */
  48. SubGhzProtocolCommonCallback callback;
  49. void* context;
  50. /* Dump To String */
  51. SubGhzProtocolCommonToStr to_string;
  52. /* Get string to save */
  53. SubGhzProtocolCommonGetStrSave to_save_string;
  54. /*Load protocol by file*/
  55. SubGhzProtocolCommonLoad to_load_protocol;
  56. /*Get upload encoder protocol*/
  57. SubGhzProtocolEncoderCommonGetUpLoad get_upload_protocol;
  58. };
  59. struct SubGhzProtocolEncoderCommon {
  60. bool start;
  61. size_t repeat;
  62. size_t front;
  63. size_t size_upload;
  64. LevelDuration* upload;
  65. };
  66. SubGhzProtocolEncoderCommon* subghz_protocol_encoder_common_alloc();
  67. void subghz_protocol_encoder_common_free(SubGhzProtocolEncoderCommon* instance);
  68. size_t subghz_encoder_common_get_repeat_left(SubGhzProtocolEncoderCommon* instance);
  69. LevelDuration subghz_protocol_encoder_common_yield(void* context);
  70. /** Add data bit to code_found
  71. *
  72. * @param common - SubGhzProtocolCommon common
  73. * @param bit - add bit
  74. */
  75. void subghz_protocol_common_add_bit(SubGhzProtocolCommon* common, uint8_t bit);
  76. /** Checking that the duration is included in the interval
  77. *
  78. * @param common - SubGhzProtocolCommon common
  79. * @param duration duration reference
  80. * @param duration_check duration checked
  81. * @return true on success
  82. */
  83. bool subghz_protocol_common_check_interval(
  84. SubGhzProtocolCommon* common,
  85. uint32_t duration,
  86. uint16_t duration_check);
  87. /** Bit-by-bit data mirroring
  88. *
  89. * @param key - data to mirror
  90. * @param count_bit number of data bits
  91. * @return mirrored data
  92. */
  93. uint64_t subghz_protocol_common_reverse_key(uint64_t key, uint8_t count_bit);
  94. /** Callback protocol
  95. *
  96. * @param instance - SubGhzProtocolCommon* instance
  97. * @param callback
  98. * @param context
  99. */
  100. void subghz_protocol_common_set_callback(
  101. SubGhzProtocolCommon* instance,
  102. SubGhzProtocolCommonCallback callback,
  103. void* context);
  104. /** outputting information from the parser
  105. *
  106. * @param instance - SubGhzProtocolCommon* instance
  107. * @param output - output string
  108. */
  109. void subghz_protocol_common_to_str(SubGhzProtocolCommon* instance, string_t output);
  110. bool subghz_protocol_common_read_hex(string_t str, uint8_t* buff, uint16_t len);