infrared_scene_learn_enter_name.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "../infrared_i.h"
  2. #include <dolphin/dolphin.h>
  3. void infrared_scene_learn_enter_name_on_enter(void* context) {
  4. Infrared* infrared = context;
  5. TextInput* text_input = infrared->text_input;
  6. InfraredSignal* signal = infrared->received_signal;
  7. if(infrared_signal_is_raw(signal)) {
  8. InfraredRawSignal* raw = infrared_signal_get_raw_signal(signal);
  9. infrared_text_store_set(infrared, 0, "RAW_%d", raw->timings_size);
  10. } else {
  11. InfraredMessage* message = infrared_signal_get_message(signal);
  12. infrared_text_store_set(
  13. infrared,
  14. 0,
  15. "%.4s_%0*lX",
  16. infrared_get_protocol_name(message->protocol),
  17. ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4),
  18. message->command);
  19. }
  20. text_input_set_header_text(text_input, "Name the button");
  21. text_input_set_result_callback(
  22. text_input,
  23. infrared_text_input_callback,
  24. context,
  25. infrared->text_store[0],
  26. INFRARED_MAX_BUTTON_NAME_LENGTH,
  27. true);
  28. view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewTextInput);
  29. }
  30. bool infrared_scene_learn_enter_name_on_event(void* context, SceneManagerEvent event) {
  31. Infrared* infrared = context;
  32. InfraredSignal* signal = infrared->received_signal;
  33. SceneManager* scene_manager = infrared->scene_manager;
  34. bool consumed = false;
  35. if(event.type == SceneManagerEventTypeCustom) {
  36. if(event.event == InfraredCustomEventTypeTextEditDone) {
  37. bool success = false;
  38. if(infrared->app_state.is_learning_new_remote) {
  39. success =
  40. infrared_add_remote_with_button(infrared, infrared->text_store[0], signal);
  41. } else {
  42. success =
  43. infrared_remote_add_button(infrared->remote, infrared->text_store[0], signal);
  44. }
  45. if(success) {
  46. scene_manager_next_scene(scene_manager, InfraredSceneLearnDone);
  47. DOLPHIN_DEED(DolphinDeedIrSave);
  48. } else {
  49. dialog_message_show_storage_error(infrared->dialogs, "Failed to save file");
  50. const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart};
  51. scene_manager_search_and_switch_to_previous_scene_one_of(
  52. scene_manager, possible_scenes, COUNT_OF(possible_scenes));
  53. }
  54. consumed = true;
  55. }
  56. }
  57. return consumed;
  58. }
  59. void infrared_scene_learn_enter_name_on_exit(void* context) {
  60. Infrared* infrared = context;
  61. UNUSED(infrared);
  62. }