subghz_i.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #pragma once
  2. #include "subghz.h"
  3. #include "views/subghz_receiver.h"
  4. #include "views/subghz_transmitter.h"
  5. #include "views/subghz_frequency_analyzer.h"
  6. #include "views/subghz_read_raw.h"
  7. #include "views/subghz_test_static.h"
  8. #include "views/subghz_test_carrier.h"
  9. #include "views/subghz_test_packet.h"
  10. #include <furi.h>
  11. #include <furi-hal.h>
  12. #include <gui/gui.h>
  13. #include <dialogs/dialogs.h>
  14. #include <gui/scene_manager.h>
  15. #include <notification/notification-messages.h>
  16. #include <gui/view_dispatcher.h>
  17. #include <gui/modules/submenu.h>
  18. #include <gui/modules/popup.h>
  19. #include <gui/modules/text_input.h>
  20. #include <gui/modules/widget.h>
  21. #include <subghz/scenes/subghz_scene.h>
  22. #include <lib/subghz/subghz_worker.h>
  23. #include <lib/subghz/subghz_parser.h>
  24. #include <lib/subghz/protocols/subghz_protocol_common.h>
  25. #include "subghz_history.h"
  26. #include <gui/modules/variable-item-list.h>
  27. #define SUBGHZ_TEXT_STORE_SIZE 40
  28. extern const char* const subghz_frequencies_text[];
  29. extern const uint32_t subghz_frequencies[];
  30. extern const uint32_t subghz_hopper_frequencies[];
  31. extern const uint32_t subghz_frequencies_count;
  32. extern const uint32_t subghz_hopper_frequencies_count;
  33. extern const uint32_t subghz_frequencies_433_92;
  34. /** SubGhzNotification state */
  35. typedef enum {
  36. SubGhzNotificationStateStarting,
  37. SubGhzNotificationStateIDLE,
  38. SubGhzNotificationStateTX,
  39. SubGhzNotificationStateRX,
  40. } SubGhzNotificationState;
  41. /** SubGhzTxRx state */
  42. typedef enum {
  43. SubGhzTxRxStateIDLE,
  44. SubGhzTxRxStateRx,
  45. SubGhzTxRxStateTx,
  46. SubGhzTxRxStateSleep,
  47. } SubGhzTxRxState;
  48. /** SubGhzHopperState state */
  49. typedef enum {
  50. SubGhzHopperStateOFF,
  51. SubGhzHopperStateRunnig,
  52. SubGhzHopperStatePause,
  53. SubGhzHopperStateRSSITimeOut,
  54. } SubGhzHopperState;
  55. /** SubGhzRxKeyState state */
  56. typedef enum {
  57. SubGhzRxKeyStateIDLE,
  58. SubGhzRxKeyStateNoSave,
  59. SubGhzRxKeyStateNeedSave,
  60. SubGhzRxKeyStateBack,
  61. SubGhzRxKeyStateAddKey,
  62. SubGhzRxKeyStateExit,
  63. SubGhzRxKeyStateRAWLoad,
  64. SubGhzRxKeyStateRAWSave,
  65. } SubGhzRxKeyState;
  66. struct SubGhzTxRx {
  67. SubGhzWorker* worker;
  68. SubGhzParser* parser;
  69. SubGhzProtocolCommon* protocol_result;
  70. SubGhzProtocolCommonEncoder* encoder;
  71. uint32_t frequency;
  72. FuriHalSubGhzPreset preset;
  73. SubGhzHistory* history;
  74. uint16_t idx_menu_chosen;
  75. SubGhzTxRxState txrx_state;
  76. SubGhzHopperState hopper_state;
  77. uint8_t hopper_timeout;
  78. uint8_t hopper_idx_frequency;
  79. SubGhzRxKeyState rx_key_state;
  80. };
  81. typedef struct SubGhzTxRx SubGhzTxRx;
  82. struct SubGhz {
  83. Gui* gui;
  84. NotificationApp* notifications;
  85. SubGhzTxRx* txrx;
  86. SceneManager* scene_manager;
  87. ViewDispatcher* view_dispatcher;
  88. Submenu* submenu;
  89. Popup* popup;
  90. TextInput* text_input;
  91. Widget* widget;
  92. DialogsApp* dialogs;
  93. char file_name[SUBGHZ_TEXT_STORE_SIZE + 1];
  94. char file_name_tmp[SUBGHZ_TEXT_STORE_SIZE + 1];
  95. SubGhzNotificationState state_notifications;
  96. SubghzReceiver* subghz_receiver;
  97. SubghzTransmitter* subghz_transmitter;
  98. VariableItemList* variable_item_list;
  99. SubghzFrequencyAnalyzer* subghz_frequency_analyzer;
  100. SubghzReadRAW* subghz_read_raw;
  101. SubghzTestStatic* subghz_test_static;
  102. SubghzTestCarrier* subghz_test_carrier;
  103. SubghzTestPacket* subghz_test_packet;
  104. string_t error_str;
  105. };
  106. typedef enum {
  107. SubGhzViewMenu,
  108. SubGhzViewReceiver,
  109. SubGhzViewPopup,
  110. SubGhzViewTextInput,
  111. SubGhzViewWidget,
  112. SubGhzViewTransmitter,
  113. SubGhzViewVariableItemList,
  114. SubGhzViewFrequencyAnalyzer,
  115. SubGhzViewReadRAW,
  116. SubGhzViewStatic,
  117. SubGhzViewTestCarrier,
  118. SubGhzViewTestPacket,
  119. } SubGhzView;
  120. bool subghz_set_pteset(SubGhz* subghz, const char* preset);
  121. bool subghz_get_preset_name(SubGhz* subghz, string_t preset);
  122. void subghz_get_frequency_modulation(SubGhz* subghz, string_t frequency, string_t modulation);
  123. void subghz_begin(SubGhz* subghz, FuriHalSubGhzPreset preset);
  124. uint32_t subghz_rx(SubGhz* subghz, uint32_t frequency);
  125. void subghz_rx_end(SubGhz* subghz);
  126. void subghz_sleep(SubGhz* subghz);
  127. bool subghz_tx_start(SubGhz* subghz);
  128. void subghz_tx_stop(SubGhz* subghz);
  129. bool subghz_key_load(SubGhz* subghz, const char* file_path);
  130. bool subghz_get_next_name_file(SubGhz* subghz);
  131. bool subghz_save_protocol_to_file(SubGhz* subghz, const char* dev_name);
  132. bool subghz_load_protocol_from_file(SubGhz* subghz);
  133. bool subghz_rename_file(SubGhz* subghz);
  134. bool subghz_delete_file(SubGhz* subghz);
  135. void subghz_file_name_clear(SubGhz* subghz);
  136. uint32_t subghz_random_serial(void);
  137. void subghz_hopper_update(SubGhz* subghz);