subghz_protocol_common.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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_HIGTH()
  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. typedef struct SubGhzProtocolCommon SubGhzProtocolCommon;
  18. typedef void (*SubGhzProtocolCommonCallback)(SubGhzProtocolCommon* parser, void* context);
  19. typedef void (*SubGhzProtocolCommonToStr)(SubGhzProtocolCommon* instance, string_t output);
  20. //Save
  21. typedef void (*SubGhzProtocolCommonGetStrSave)(SubGhzProtocolCommon* instance, string_t output);
  22. //Load
  23. typedef bool (*SubGhzProtocolCommonLoad)(FileWorker* file_worker, SubGhzProtocolCommon* instance);
  24. struct SubGhzProtocolCommon {
  25. const char* name;
  26. uint16_t te_long;
  27. uint16_t te_shot;
  28. uint16_t te_delta;
  29. uint8_t code_count_bit;
  30. uint8_t code_last_count_bit;
  31. uint64_t code_found;
  32. uint64_t code_last_found;
  33. uint8_t code_min_count_bit_for_found;
  34. uint8_t parser_step;
  35. uint32_t te_last;
  36. uint8_t header_count;
  37. uint16_t cnt;
  38. uint32_t serial;
  39. uint8_t btn;
  40. /* Standard Callback for on rx complete event */
  41. SubGhzProtocolCommonCallback callback;
  42. void* context;
  43. /* Dump To String */
  44. SubGhzProtocolCommonToStr to_string;
  45. /* Get string to save */
  46. SubGhzProtocolCommonGetStrSave to_save_string;
  47. /*Load protocol by file*/
  48. SubGhzProtocolCommonLoad to_load_protocol;
  49. };
  50. /** Add data bit to code_found
  51. *
  52. * @param common - SubGhzProtocolCommon common
  53. * @param bit - add bit
  54. */
  55. void subghz_protocol_common_add_bit(SubGhzProtocolCommon* common, uint8_t bit);
  56. /** Checking that the duration is included in the interval
  57. *
  58. * @param common - SubGhzProtocolCommon common
  59. * @param duration duration reference
  60. * @param duration_check duration checked
  61. * @return true on success
  62. */
  63. bool subghz_protocol_common_check_interval(
  64. SubGhzProtocolCommon* common,
  65. uint32_t duration,
  66. uint16_t duration_check);
  67. /** Bit-by-bit data mirroring
  68. *
  69. * @param key - data to mirror
  70. * @param count_bit number of data bits
  71. * @return mirrored data
  72. */
  73. uint64_t subghz_protocol_common_reverse_key(uint64_t key, uint8_t count_bit);
  74. /** Callback protocol
  75. *
  76. * @param instance - SubGhzProtocolCommon* instance
  77. * @param callback
  78. * @param context
  79. */
  80. void subghz_protocol_common_set_callback(
  81. SubGhzProtocolCommon* instance,
  82. SubGhzProtocolCommonCallback callback,
  83. void* context);
  84. /** outputting information from the parser
  85. *
  86. * @param instance - SubGhzProtocolCommon* instance
  87. * @param output - output string
  88. */
  89. void subghz_protocol_common_to_str(SubGhzProtocolCommon* instance, string_t output);