subghz_scene_transmitter.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "../subghz_i.h"
  2. #include "../views/subghz_transmitter.h"
  3. #include "lib/subghz/protocols/subghz_protocol_princeton.h"
  4. void subghz_scene_transmitter_tx(void* context) {
  5. SubGhz* subghz = context;
  6. SubGhzEncoderPrinceton* encoder = subghz_encoder_princeton_alloc();
  7. subghz_encoder_princeton_reset(encoder, subghz->protocol_result->code_last_found, 4);
  8. subghz_encoder_princeton_set_te(encoder, subghz->protocol_result);
  9. subghz_begin(FuriHalSubGhzPresetOokAsync);
  10. subghz_tx(433920000);
  11. furi_hal_subghz_start_async_tx(subghz_encoder_princeton_yield, encoder);
  12. while(!furi_hal_subghz_is_async_tx_complete()) {
  13. osDelay(20);
  14. }
  15. //Stop tx
  16. furi_hal_subghz_stop_async_tx();
  17. subghz_end();
  18. subghz_encoder_princeton_free(encoder);
  19. }
  20. void subghz_scene_transmitter_callback(SubghzTransmitterEvent event, void* context) {
  21. furi_assert(context);
  22. SubGhz* subghz = context;
  23. view_dispatcher_send_custom_event(subghz->view_dispatcher, event);
  24. }
  25. const void subghz_scene_transmitter_on_enter(void* context) {
  26. SubGhz* subghz = context;
  27. SubghzTransmitter* subghz_transmitter = subghz->subghz_transmitter;
  28. subghz_transmitter_set_callback(subghz_transmitter, subghz_scene_transmitter_callback, subghz);
  29. subghz_transmitter_set_protocol(subghz_transmitter, subghz->protocol_result);
  30. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewTransmitter);
  31. }
  32. const bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {
  33. SubGhz* subghz = context;
  34. if(event.type == SceneManagerEventTypeCustom) {
  35. if(event.event == SubghzTransmitterEventSend) {
  36. //scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName);
  37. subghz_scene_transmitter_tx(subghz);
  38. return true;
  39. } else if(event.event == SubghzTransmitterEventBack) {
  40. scene_manager_search_and_switch_to_previous_scene(
  41. subghz->scene_manager, SubGhzSceneStart);
  42. return true;
  43. }
  44. }
  45. return false;
  46. }
  47. const void subghz_scene_transmitter_on_exit(void* context) {
  48. SubGhz* subghz = context;
  49. SubghzTransmitter* subghz_transmitter = subghz->subghz_transmitter;
  50. subghz_transmitter_set_callback(subghz_transmitter, NULL, subghz);
  51. }