subghz_cli.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "subghz_cli.h"
  2. #include <furi.h>
  3. #include <api-hal.h>
  4. void subghz_cli_init() {
  5. Cli* cli = furi_record_open("cli");
  6. cli_add_command(cli, "subghz_tx_carrier", subghz_cli_command_tx_carrier, NULL);
  7. cli_add_command(cli, "subghz_rx_carrier", subghz_cli_command_rx_carrier, NULL);
  8. cli_add_command(cli, "subghz_tx_pt", subghz_cli_command_tx_pt, NULL);
  9. cli_add_command(cli, "subghz_rx_pt", subghz_cli_command_rx_pt, NULL);
  10. furi_record_close("cli");
  11. }
  12. void subghz_cli_command_tx_carrier(Cli* cli, string_t args, void* context) {
  13. uint32_t frequency;
  14. int ret = sscanf(string_get_cstr(args), "%lu", &frequency);
  15. if(ret != 1) {
  16. printf("sscanf returned %d, frequency: %lu\r\n", ret, frequency);
  17. cli_print_usage("subghz_tx_carrier", "<Frequency in HZ>", string_get_cstr(args));
  18. return;
  19. }
  20. if(frequency < 300000000 || frequency > 925000000) {
  21. printf("Frequency must be in 300000000...925000000 range, not %lu\r\n", frequency);
  22. return;
  23. }
  24. api_hal_subghz_reset();
  25. api_hal_subghz_load_preset(ApiHalSubGhzPresetOokAsync);
  26. frequency = api_hal_subghz_set_frequency(frequency);
  27. printf("Transmitting at frequency %lu Hz\r\n", frequency);
  28. printf("Press CTRL+C to stop\r\n");
  29. if(frequency < 400) {
  30. api_hal_subghz_set_path(ApiHalSubGhzPath315);
  31. } else if(frequency < 500) {
  32. api_hal_subghz_set_path(ApiHalSubGhzPath433);
  33. } else {
  34. api_hal_subghz_set_path(ApiHalSubGhzPath868);
  35. }
  36. hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
  37. hal_gpio_write(&gpio_cc1101_g0, false);
  38. api_hal_subghz_tx();
  39. while(!cli_cmd_interrupt_received(cli)) {
  40. osDelay(250);
  41. }
  42. api_hal_subghz_reset();
  43. api_hal_subghz_set_path(ApiHalSubGhzPathIsolate);
  44. hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
  45. }
  46. void subghz_cli_command_rx_carrier(Cli* cli, string_t args, void* context) {
  47. uint32_t frequency;
  48. int ret = sscanf(string_get_cstr(args), "%lu", &frequency);
  49. if(ret != 1) {
  50. printf("sscanf returned %d, frequency: %lu\r\n", ret, frequency);
  51. cli_print_usage("subghz_tx_carrier", "<Frequency in HZ>", string_get_cstr(args));
  52. return;
  53. }
  54. if(frequency < 300000000 || frequency > 925000000) {
  55. printf("Frequency must be in 300000000...925000000 range, not %lu\r\n", frequency);
  56. return;
  57. }
  58. api_hal_subghz_reset();
  59. api_hal_subghz_load_preset(ApiHalSubGhzPresetOokAsync);
  60. frequency = api_hal_subghz_set_frequency(frequency);
  61. printf("Receiving at frequency %lu Hz\r\n", frequency);
  62. printf("Press CTRL+C to stop\r\n");
  63. if(frequency < 400) {
  64. api_hal_subghz_set_path(ApiHalSubGhzPath315);
  65. } else if(frequency < 500) {
  66. api_hal_subghz_set_path(ApiHalSubGhzPath433);
  67. } else {
  68. api_hal_subghz_set_path(ApiHalSubGhzPath868);
  69. }
  70. hal_gpio_init(&gpio_cc1101_g0, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
  71. api_hal_subghz_rx();
  72. while(!cli_cmd_interrupt_received(cli)) {
  73. osDelay(250);
  74. printf("RSSI: %03.1fdbm\r", api_hal_subghz_get_rssi());
  75. fflush(stdout);
  76. }
  77. api_hal_subghz_reset();
  78. api_hal_subghz_set_path(ApiHalSubGhzPathIsolate);
  79. }
  80. void subghz_cli_command_tx_pt(Cli* cli, string_t args, void* context) {
  81. printf("Not implemented\r\n");
  82. }
  83. void subghz_cli_command_rx_pt(Cli* cli, string_t args, void* context) {
  84. printf("Not implemented\r\n");
  85. }