subghz_i.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "subghz_i.h"
  2. #include <math.h>
  3. #include <furi.h>
  4. #include <furi-hal.h>
  5. #include <input/input.h>
  6. #include <gui/elements.h>
  7. #include <notification/notification-messages.h>
  8. #include "file-worker.h"
  9. void subghz_begin(FuriHalSubGhzPreset preset) {
  10. furi_hal_subghz_reset();
  11. furi_hal_subghz_idle();
  12. furi_hal_subghz_load_preset(preset);
  13. hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
  14. }
  15. void subghz_rx(uint32_t frequency) {
  16. furi_hal_subghz_idle();
  17. furi_hal_subghz_set_frequency_and_path(frequency);
  18. hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
  19. furi_hal_subghz_flush_rx();
  20. furi_hal_subghz_rx();
  21. }
  22. void subghz_tx(uint32_t frequency) {
  23. furi_hal_subghz_idle();
  24. furi_hal_subghz_set_frequency_and_path(frequency);
  25. hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
  26. hal_gpio_write(&gpio_cc1101_g0, true);
  27. furi_hal_subghz_tx();
  28. }
  29. void subghz_idle(void) {
  30. furi_hal_subghz_idle();
  31. }
  32. void subghz_end(void) {
  33. furi_hal_subghz_sleep();
  34. }
  35. bool subghz_key_load(SubGhz* subghz, const char* file_path) {
  36. furi_assert(subghz);
  37. furi_assert(file_path);
  38. FileWorker* file_worker = file_worker_alloc(false);
  39. // Load device data
  40. bool loaded = false;
  41. string_t path;
  42. string_init_set_str(path, file_path);
  43. string_t temp_str;
  44. string_init(temp_str);
  45. do {
  46. if(!file_worker_open(file_worker, string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) {
  47. break;
  48. }
  49. // Read and parse name protocol from 1st line
  50. if(!file_worker_read_until(file_worker, temp_str, '\n')) {
  51. break;
  52. }
  53. // strlen("Protocol: ") = 10
  54. string_right(temp_str, 10);
  55. subghz->protocol_result =
  56. subghz_protocol_get_by_name(subghz->protocol, string_get_cstr(temp_str));
  57. if(subghz->protocol_result == NULL) {
  58. file_worker_show_error(file_worker, "Cannot parse\nfile");
  59. break;
  60. }
  61. if(!subghz->protocol_result->to_load_protocol(file_worker, subghz->protocol_result)) {
  62. file_worker_show_error(file_worker, "Cannot parse\nfile");
  63. break;
  64. }
  65. loaded = true;
  66. } while(0);
  67. string_clear(temp_str);
  68. string_clear(path);
  69. file_worker_close(file_worker);
  70. file_worker_free(file_worker);
  71. return loaded;
  72. }