/* * Copyright 2025 NXP * NXP Proprietary. This software is owned or controlled by NXP and may only be used strictly in * accordance with the applicable license terms. By expressly accepting such terms or by downloading, installing, * activating and/or otherwise using the software, you are agreeing that you have read, and that you agree to * comply with and are bound by, such license terms. If you do not agree to be bound by the applicable license * terms, then you may not retain, install, activate or otherwise use the software. */ #include #include "events_init.h" #include #include "lvgl.h" #include "log.h" #if LV_USE_GUIDER_SIMULATOR && LV_USE_FREEMASTER #include "freemaster_client.h" #endif extern struct keyboard_state hid_keyboard_state; typedef struct { uint8_t key_code; // Physical keycode uint8_t hid_code; // HID keycode } key_mapping_t; extern key_mapping_t key_mapping_table[4]; extern int hid_kbd_state_key_set(uint8_t key); extern int hid_kbd_state_key_clear(uint8_t key); extern void key_report_send(uint8_t *data, uint16_t size); #define HID_SET(key) hid_kbd_state_key_set(key) #define HID_CLEAR(key) hid_kbd_state_key_clear(key) #define HID_SEND() key_report_send((uint8_t *)&hid_keyboard_state, 8) static void screen_btn_W_event_handler (lv_event_t *e) { lv_event_code_t code = lv_event_get_code(e); switch (code) { case LV_EVENT_PRESSING: { LOG_I("Touched!\r\n"); HID_SET(key_mapping_table[0].hid_code); HID_SEND(); HID_CLEAR(key_mapping_table[0].hid_code); HID_SEND(); rt_thread_mdelay(100); break; } case LV_EVENT_RELEASED: { LOG_I("Released!\r\n"); HID_CLEAR(key_mapping_table[0].hid_code); HID_SEND(); break; } default: break; } } static void screen_btn_A_event_handler (lv_event_t *e) { lv_event_code_t code = lv_event_get_code(e); switch (code) { case LV_EVENT_PRESSING: { LOG_I("Touched!\r\n"); HID_SET(key_mapping_table[1].hid_code); HID_SEND(); HID_CLEAR(key_mapping_table[1].hid_code); HID_SEND(); rt_thread_mdelay(100); break; } case LV_EVENT_RELEASED: { LOG_I("Released!\r\n"); HID_CLEAR(key_mapping_table[1].hid_code); HID_SEND(); break; } default: break; } } static void screen_btn_S_event_handler (lv_event_t *e) { lv_event_code_t code = lv_event_get_code(e); switch (code) { case LV_EVENT_PRESSING: { LOG_I("Touched!\r\n"); HID_SET(key_mapping_table[2].hid_code); HID_SEND(); HID_CLEAR(key_mapping_table[2].hid_code); HID_SEND(); rt_thread_mdelay(100); break; } case LV_EVENT_RELEASED: { LOG_I("Released!\r\n"); HID_CLEAR(key_mapping_table[2].hid_code); HID_SEND(); break; } default: break; } } static void screen_btn_D_event_handler (lv_event_t *e) { lv_event_code_t code = lv_event_get_code(e); switch (code) { case LV_EVENT_PRESSING: { LOG_I("Touched!\r\n"); HID_SET(key_mapping_table[3].hid_code); HID_SEND(); HID_CLEAR(key_mapping_table[3].hid_code); HID_SEND(); rt_thread_mdelay(100); break; } case LV_EVENT_RELEASED: { LOG_I("Released!\r\n"); HID_CLEAR(key_mapping_table[3].hid_code); HID_SEND(); break; } default: break; } } void events_init_screen (lv_ui *ui) { lv_obj_add_event_cb(ui->screen_btn_W, screen_btn_W_event_handler, LV_EVENT_ALL, ui); lv_obj_add_event_cb(ui->screen_btn_A, screen_btn_A_event_handler, LV_EVENT_ALL, ui); lv_obj_add_event_cb(ui->screen_btn_S, screen_btn_S_event_handler, LV_EVENT_ALL, ui); lv_obj_add_event_cb(ui->screen_btn_D, screen_btn_D_event_handler, LV_EVENT_ALL, ui); } void events_init(lv_ui *ui) { }