| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include <stdint.h>
- #include <gui/modules/loading.h>
- #include <gui/view_stack.h>
- #include "infrared/scene/infrared_app_scene.h"
- #include "infrared/infrared_app.h"
- void InfraredAppSceneUniversalTV::on_enter(InfraredApp* app) {
- InfraredAppViewManager* view_manager = app->get_view_manager();
- ButtonPanel* button_panel = view_manager->get_button_panel();
- button_panel_reserve(button_panel, 2, 3);
- int i = 0;
- button_panel_add_item(
- button_panel,
- i,
- 0,
- 0,
- 3,
- 19,
- &I_Power_25x27,
- &I_Power_hvr_25x27,
- infrared_app_item_callback,
- app);
- brute_force.add_record(i, "POWER");
- ++i;
- button_panel_add_item(
- button_panel,
- i,
- 1,
- 0,
- 36,
- 19,
- &I_Mute_25x27,
- &I_Mute_hvr_25x27,
- infrared_app_item_callback,
- app);
- brute_force.add_record(i, "MUTE");
- ++i;
- button_panel_add_item(
- button_panel,
- i,
- 0,
- 1,
- 3,
- 66,
- &I_Vol_up_25x27,
- &I_Vol_up_hvr_25x27,
- infrared_app_item_callback,
- app);
- brute_force.add_record(i, "VOL+");
- ++i;
- button_panel_add_item(
- button_panel,
- i,
- 1,
- 1,
- 36,
- 66,
- &I_Up_25x27,
- &I_Up_hvr_25x27,
- infrared_app_item_callback,
- app);
- brute_force.add_record(i, "CH+");
- ++i;
- button_panel_add_item(
- button_panel,
- i,
- 0,
- 2,
- 3,
- 98,
- &I_Vol_down_25x27,
- &I_Vol_down_hvr_25x27,
- infrared_app_item_callback,
- app);
- brute_force.add_record(i, "VOL-");
- ++i;
- button_panel_add_item(
- button_panel,
- i,
- 1,
- 2,
- 36,
- 98,
- &I_Down_25x27,
- &I_Down_hvr_25x27,
- infrared_app_item_callback,
- app);
- brute_force.add_record(i, "CH-");
- button_panel_add_label(button_panel, 6, 11, FontPrimary, "TV remote");
- button_panel_add_label(button_panel, 9, 64, FontSecondary, "Vol");
- button_panel_add_label(button_panel, 43, 64, FontSecondary, "Ch");
- view_manager->switch_to(InfraredAppViewManager::ViewId::UniversalRemote);
- auto stack_view = app->get_view_manager()->get_universal_view_stack();
- auto loading_view = app->get_view_manager()->get_loading();
- view_stack_add_view(stack_view, loading_get_view(loading_view));
- /**
- * Problem: Update events are not handled in Loading View, because:
- * 1) Timer task has least prio
- * 2) Storage service uses drivers that capture whole CPU time
- * to handle SD communication
- *
- * Ugly workaround, but it works for current situation:
- * raise timer task prio for DB scanning period.
- */
- TaskHandle_t timer_task = xTaskGetHandle(configTIMER_SERVICE_TASK_NAME);
- TaskHandle_t storage_task = xTaskGetHandle("StorageSrv");
- uint32_t timer_prio = uxTaskPriorityGet(timer_task);
- uint32_t storage_prio = uxTaskPriorityGet(storage_task);
- vTaskPrioritySet(timer_task, storage_prio + 1);
- bool result = brute_force.calculate_messages();
- vTaskPrioritySet(timer_task, timer_prio);
- view_stack_remove_view(stack_view, loading_get_view(loading_view));
- if(!result) {
- app->switch_to_previous_scene();
- }
- }
|