186 lines
4.1 KiB
C
186 lines
4.1 KiB
C
#include "ui_handlers.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "ble_hid.h"
|
|
#include "boot_button.h"
|
|
#include "esp_log.h"
|
|
#include "esp_system.h"
|
|
#include "screens/ui_Settings.h"
|
|
#include "settings/settings_store.h"
|
|
#include "settings/settings_tabs.h"
|
|
#include "ui_events.h"
|
|
|
|
static const char *TAG = "ui_handlers";
|
|
|
|
static void send_hid_combo_or_warn(uint8_t modifier, uint8_t keycode)
|
|
{
|
|
if (ble_hid_ready()) {
|
|
ble_hid_send_combo(modifier, keycode);
|
|
} else {
|
|
ESP_LOGW(TAG, "HID not ready");
|
|
}
|
|
}
|
|
|
|
static void send_consumer_or_warn(uint16_t usage)
|
|
{
|
|
if (ble_hid_ready()) {
|
|
ble_hid_send_consumer(usage);
|
|
} else {
|
|
ESP_LOGW(TAG, "HID not ready");
|
|
}
|
|
}
|
|
|
|
static void on_boot_press(void)
|
|
{
|
|
send_hid_combo_or_warn(0, HID_KEY_C);
|
|
}
|
|
|
|
void ui_handlers_init(void)
|
|
{
|
|
boot_button_init(on_boot_press);
|
|
}
|
|
|
|
void settings_on_tab_clicked(lv_event_t *e)
|
|
{
|
|
settings_tab_t tab = (settings_tab_t)(intptr_t)lv_event_get_user_data(e);
|
|
ui_Settings_switch_tab(tab);
|
|
}
|
|
|
|
void settings_on_save_clicked(lv_event_t *e)
|
|
{
|
|
(void)e;
|
|
settings_data_t buf = *settings_store_get();
|
|
settings_tabs_collect(ui_Settings_get_active_tab(), &buf);
|
|
settings_store_update(&buf);
|
|
esp_err_t err = settings_store_commit();
|
|
if (err == ESP_OK) {
|
|
settings_store_apply();
|
|
ESP_LOGI(TAG, "Settings saved");
|
|
} else {
|
|
ESP_LOGW(TAG, "Settings save failed");
|
|
}
|
|
}
|
|
|
|
void settings_on_factory_reset(lv_event_t *e)
|
|
{
|
|
(void)e;
|
|
ESP_LOGW(TAG, "Factory reset");
|
|
settings_store_factory_reset();
|
|
settings_store_apply();
|
|
esp_restart();
|
|
}
|
|
|
|
void settings_on_brightness_changed(lv_event_t *e)
|
|
{
|
|
lv_obj_t *slider = lv_event_get_target(e);
|
|
uint8_t pct = (uint8_t)lv_slider_get_value(slider);
|
|
|
|
settings_data_t buf = *settings_store_get();
|
|
buf.brightness_pct = pct;
|
|
settings_store_update(&buf);
|
|
settings_store_apply();
|
|
|
|
lv_obj_t *pct_label = lv_obj_get_user_data(slider);
|
|
if (pct_label != NULL) {
|
|
lv_label_set_text_fmt(pct_label, "%u%%", pct);
|
|
}
|
|
}
|
|
|
|
void settings_on_value_changed(lv_event_t *e)
|
|
{
|
|
settings_field_t field =
|
|
(settings_field_t)(intptr_t)lv_event_get_user_data(e);
|
|
lv_obj_t *target = lv_event_get_target(e);
|
|
settings_data_t buf = *settings_store_get();
|
|
|
|
switch (field) {
|
|
case SETTINGS_FIELD_NOTIFICATION:
|
|
buf.notification_enabled = lv_obj_has_state(target, LV_STATE_CHECKED);
|
|
break;
|
|
case SETTINGS_FIELD_VOLUME:
|
|
buf.volume_pct = (uint8_t)lv_slider_get_value(target);
|
|
break;
|
|
case SETTINGS_FIELD_MUTE:
|
|
buf.mute = lv_obj_has_state(target, LV_STATE_CHECKED);
|
|
break;
|
|
case SETTINGS_FIELD_SHAKE_NAV:
|
|
buf.shake_nav_enabled = lv_obj_has_state(target, LV_STATE_CHECKED);
|
|
break;
|
|
case SETTINGS_FIELD_SHAKE_SENS:
|
|
buf.shake_sensitivity = (shake_sensitivity_t)lv_dropdown_get_selected(target);
|
|
break;
|
|
default:
|
|
LV_ASSERT_MSG(false, "unexpected settings_field_t");
|
|
break;
|
|
}
|
|
|
|
settings_store_update(&buf);
|
|
}
|
|
|
|
void settings_on_network_scan_clicked(lv_event_t *e)
|
|
{
|
|
(void)e;
|
|
ESP_LOGI(TAG, "Not available");
|
|
}
|
|
|
|
void update_year_action(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
}
|
|
|
|
void click_button_two(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_hid_combo_or_warn(HID_MOD_LCTRL, HID_KEY_C);
|
|
}
|
|
|
|
void click_button_three(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_hid_combo_or_warn(HID_MOD_LCTRL, HID_KEY_V);
|
|
}
|
|
|
|
void click_button_one(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_hid_combo_or_warn(HID_MOD_LCTRL, HID_KEY_X);
|
|
}
|
|
|
|
void click_consumer_vol_up(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_consumer_or_warn(HID_CONSUMER_VOLUME_UP);
|
|
}
|
|
|
|
void click_consumer_vol_down(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_consumer_or_warn(HID_CONSUMER_VOLUME_DOWN);
|
|
}
|
|
|
|
void click_consumer_mute(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_consumer_or_warn(HID_CONSUMER_MUTE);
|
|
}
|
|
|
|
void click_consumer_play_pause(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_consumer_or_warn(HID_CONSUMER_PLAY_PAUSE);
|
|
}
|
|
|
|
void click_consumer_prev(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_consumer_or_warn(HID_CONSUMER_SCAN_PREVIOUS);
|
|
}
|
|
|
|
void click_consumer_next(lv_event_t * e)
|
|
{
|
|
(void)e;
|
|
send_consumer_or_warn(HID_CONSUMER_SCAN_NEXT);
|
|
}
|