HID App: Update to scene based startscreen

This commit is contained in:
Willy-JL
2024-05-18 08:24:29 +01:00
parent 0ae78dfcdd
commit 276feac73f
3 changed files with 180 additions and 117 deletions

View File

@@ -8,23 +8,6 @@
#define TAG "HidApp" #define TAG "HidApp"
enum HidDebugSubmenuIndex {
HidSubmenuIndexKeynote,
HidSubmenuIndexKeynoteVertical,
HidSubmenuIndexKeyboard,
HidSubmenuIndexNumpad,
HidSubmenuIndexMedia,
HidSubmenuIndexMusicMacOs,
HidSubmenuIndexMovie,
HidSubmenuIndexTikTok,
HidSubmenuIndexMouse,
HidSubmenuIndexMouseClicker,
HidSubmenuIndexMouseJiggler,
HidSubmenuIndexMouseJigglerStealth,
HidSubmenuIndexPushToTalk,
HidSubmenuIndexRemovePairing,
};
bool hid_custom_event_callback(void* context, uint32_t event) { bool hid_custom_event_callback(void* context, uint32_t event) {
furi_assert(context); furi_assert(context);
Hid* app = context; Hid* app = context;
@@ -34,9 +17,7 @@ bool hid_custom_event_callback(void* context, uint32_t event) {
bool hid_back_event_callback(void* context) { bool hid_back_event_callback(void* context) {
furi_assert(context); furi_assert(context);
Hid* app = context; Hid* app = context;
FURI_LOG_D("HID", "Back event"); return scene_manager_handle_back_event(app->scene_manager);
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewSubmenu);
return true;
} }
void bt_hid_remove_pairing(Hid* app) { void bt_hid_remove_pairing(Hid* app) {
@@ -53,53 +34,12 @@ void bt_hid_remove_pairing(Hid* app) {
furi_hal_bt_start_advertising(); furi_hal_bt_start_advertising();
} }
static void hid_submenu_callback(void* context, uint32_t index) {
furi_assert(context);
Hid* app = context;
if(index == HidSubmenuIndexKeynote) {
hid_keynote_set_orientation(app->hid_keynote, false);
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewKeynote);
} else if(index == HidSubmenuIndexKeynoteVertical) {
hid_keynote_set_orientation(app->hid_keynote, true);
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewKeynote);
} else if(index == HidSubmenuIndexKeyboard) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewKeyboard);
} else if(index == HidSubmenuIndexNumpad) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewNumpad);
} else if(index == HidSubmenuIndexMedia) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewMedia);
} else if(index == HidSubmenuIndexMusicMacOs) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewMusicMacOs);
} else if(index == HidSubmenuIndexMovie) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewMovie);
} else if(index == HidSubmenuIndexMouse) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewMouse);
} else if(index == HidSubmenuIndexTikTok) {
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewTikTok);
} else if(index == HidSubmenuIndexMouseClicker) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewMouseClicker);
} else if(index == HidSubmenuIndexMouseJiggler) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewMouseJiggler);
} else if(index == HidSubmenuIndexMouseJigglerStealth) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewMouseJigglerStealth);
} else if(index == HidSubmenuIndexPushToTalk) {
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewPushToTalkMenu);
} else if(index == HidSubmenuIndexRemovePairing) {
scene_manager_next_scene(app->scene_manager, HidSceneUnpair);
}
}
static void bt_hid_connection_status_changed_callback(BtStatus status, void* context) { static void bt_hid_connection_status_changed_callback(BtStatus status, void* context) {
furi_assert(context); furi_assert(context);
Hid* hid = context; Hid* hid = context;
bool connected = (status == BtStatusConnected); const bool connected = (status == BtStatusConnected);
#ifdef HID_TRANSPORT_BLE notification_internal_message(
if(connected) { hid->notifications, connected ? &sequence_set_blue_255 : &sequence_reset_blue);
notification_internal_message(hid->notifications, &sequence_set_blue_255);
} else {
notification_internal_message(hid->notifications, &sequence_reset_blue);
}
#endif
hid_keynote_set_connected_status(hid->hid_keynote, connected); hid_keynote_set_connected_status(hid->hid_keynote, connected);
hid_keyboard_set_connected_status(hid->hid_keyboard, connected); hid_keyboard_set_connected_status(hid->hid_keyboard, connected);
hid_numpad_set_connected_status(hid->hid_numpad, connected); hid_numpad_set_connected_status(hid->hid_numpad, connected);
@@ -114,11 +54,6 @@ static void bt_hid_connection_status_changed_callback(BtStatus status, void* con
hid_tiktok_set_connected_status(hid->hid_tiktok, connected); hid_tiktok_set_connected_status(hid->hid_tiktok, connected);
} }
static uint32_t hid_exit(void* context) {
UNUSED(context);
return VIEW_NONE;
}
static uint32_t hid_ptt_menu_view(void* context) { static uint32_t hid_ptt_menu_view(void* context) {
UNUSED(context); UNUSED(context);
return HidViewPushToTalkMenu; return HidViewPushToTalkMenu;
@@ -139,55 +74,18 @@ Hid* hid_alloc(void) {
// View dispatcher // View dispatcher
app->view_dispatcher = view_dispatcher_alloc(); app->view_dispatcher = view_dispatcher_alloc();
view_dispatcher_enable_queue(app->view_dispatcher); view_dispatcher_enable_queue(app->view_dispatcher);
view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
view_dispatcher_set_navigation_event_callback(app->view_dispatcher, hid_back_event_callback);
view_dispatcher_set_event_callback_context(app->view_dispatcher, app); view_dispatcher_set_event_callback_context(app->view_dispatcher, app);
view_dispatcher_set_custom_event_callback(app->view_dispatcher, hid_custom_event_callback);
view_dispatcher_set_navigation_event_callback(app->view_dispatcher, hid_back_event_callback);
view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
// Scene Manager // Scene Manager
app->scene_manager = scene_manager_alloc(&hid_scene_handlers, app); app->scene_manager = scene_manager_alloc(&hid_scene_handlers, app);
// Device Type Submenu view // Device Type Submenu view
app->submenu = submenu_alloc(); app->submenu = submenu_alloc();
submenu_add_item(app->submenu, "Keynote", HidSubmenuIndexKeynote, hid_submenu_callback, app);
submenu_add_item(
app->submenu,
"Keynote Vertical",
HidSubmenuIndexKeynoteVertical,
hid_submenu_callback,
app);
submenu_add_item(app->submenu, "Keyboard", HidSubmenuIndexKeyboard, hid_submenu_callback, app);
submenu_add_item(app->submenu, "Numpad", HidSubmenuIndexNumpad, hid_submenu_callback, app);
submenu_add_item(app->submenu, "Media", HidSubmenuIndexMedia, hid_submenu_callback, app);
submenu_add_item(
app->submenu, "Apple Music macOS", HidSubmenuIndexMusicMacOs, hid_submenu_callback, app);
submenu_add_item(app->submenu, "Movie", HidSubmenuIndexMovie, hid_submenu_callback, app);
submenu_add_item(app->submenu, "Mouse", HidSubmenuIndexMouse, hid_submenu_callback, app);
submenu_add_item(
app->submenu, "TikTok / YT Shorts", HidSubmenuIndexTikTok, hid_submenu_callback, app);
submenu_add_item(
app->submenu, "Mouse Clicker", HidSubmenuIndexMouseClicker, hid_submenu_callback, app);
submenu_add_item(
app->submenu, "Mouse Jiggler", HidSubmenuIndexMouseJiggler, hid_submenu_callback, app);
submenu_add_item(
app->submenu,
"Mouse Jiggler Stealth",
HidSubmenuIndexMouseJigglerStealth,
hid_submenu_callback,
app);
submenu_add_item(
app->submenu, "PushToTalk", HidSubmenuIndexPushToTalk, hid_submenu_callback, app);
#ifdef HID_TRANSPORT_BLE
submenu_add_item(
app->submenu, "Remove Pairing", HidSubmenuIndexRemovePairing, hid_submenu_callback, app);
#endif
view_set_previous_callback(submenu_get_view(app->submenu), hid_exit);
view_dispatcher_add_view(app->view_dispatcher, HidViewSubmenu, submenu_get_view(app->submenu));
return app;
}
Hid* hid_app_alloc_view(void* context) { view_dispatcher_add_view(app->view_dispatcher, HidViewSubmenu, submenu_get_view(app->submenu));
furi_assert(context);
Hid* app = context;
// Dialog view // Dialog view
app->dialog = dialog_ex_alloc(); app->dialog = dialog_ex_alloc();
@@ -327,18 +225,16 @@ void hid_free(Hid* app) {
int32_t hid_usb_app(void* p) { int32_t hid_usb_app(void* p) {
UNUSED(p); UNUSED(p);
Hid* app = hid_alloc(); Hid* app = hid_alloc();
app = hid_app_alloc_view(app);
FURI_LOG_D("HID", "Starting as USB app"); FURI_LOG_D("HID", "Starting as USB app");
FuriHalUsbInterface* usb_mode_prev = furi_hal_usb_get_config(); FuriHalUsbInterface* usb_mode_prev = furi_hal_usb_get_config();
furi_hal_usb_unlock(); furi_hal_usb_unlock();
furi_check(furi_hal_usb_set_config(&usb_hid, NULL) == true); furi_check(furi_hal_usb_set_config(&usb_hid, NULL) == true);
bt_hid_connection_status_changed_callback(BtStatusConnected, app);
dolphin_deed(DolphinDeedPluginStart); dolphin_deed(DolphinDeedPluginStart);
scene_manager_next_scene(app->scene_manager, HidSceneMain); scene_manager_next_scene(app->scene_manager, HidSceneStart);
view_dispatcher_run(app->view_dispatcher); view_dispatcher_run(app->view_dispatcher);
@@ -352,7 +248,6 @@ int32_t hid_usb_app(void* p) {
int32_t hid_ble_app(void* p) { int32_t hid_ble_app(void* p) {
UNUSED(p); UNUSED(p);
Hid* app = hid_alloc(); Hid* app = hid_alloc();
app = hid_app_alloc_view(app);
FURI_LOG_D("HID", "Starting as BLE app"); FURI_LOG_D("HID", "Starting as BLE app");
@@ -382,7 +277,7 @@ int32_t hid_ble_app(void* p) {
dolphin_deed(DolphinDeedPluginStart); dolphin_deed(DolphinDeedPluginStart);
scene_manager_next_scene(app->scene_manager, HidSceneMain); scene_manager_next_scene(app->scene_manager, HidSceneStart);
view_dispatcher_run(app->view_dispatcher); view_dispatcher_run(app->view_dispatcher);

View File

@@ -1,2 +1,3 @@
ADD_SCENE(hid, start, Start)
ADD_SCENE(hid, main, Main) ADD_SCENE(hid, main, Main)
ADD_SCENE(hid, unpair, Unpair) ADD_SCENE(hid, unpair, Unpair)

View File

@@ -0,0 +1,167 @@
#include "../hid.h"
#include "../views.h"
enum HidSubmenuIndex {
HidSubmenuIndexKeynote,
HidSubmenuIndexKeynoteVertical,
HidSubmenuIndexKeyboard,
HidSubmenuIndexNumpad,
HidSubmenuIndexMedia,
HidSubmenuIndexMusicMacOs,
HidSubmenuIndexMovie,
HidSubmenuIndexTikTok,
HidSubmenuIndexMouse,
HidSubmenuIndexMouseClicker,
HidSubmenuIndexMouseJiggler,
HidSubmenuIndexMouseJigglerStealth,
HidSubmenuIndexPushToTalk,
HidSubmenuIndexRemovePairing,
};
static void hid_scene_start_submenu_callback(void* context, uint32_t index) {
furi_assert(context);
Hid* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, index);
}
void hid_scene_start_on_enter(void* context) {
Hid* app = context;
submenu_add_item(
app->submenu, "Keynote", HidSubmenuIndexKeynote, hid_scene_start_submenu_callback, app);
submenu_add_item(
app->submenu,
"Keynote Vertical",
HidSubmenuIndexKeynoteVertical,
hid_scene_start_submenu_callback,
app);
submenu_add_item(
app->submenu, "Keyboard", HidSubmenuIndexKeyboard, hid_scene_start_submenu_callback, app);
submenu_add_item(
app->submenu, "Numpad", HidSubmenuIndexNumpad, hid_scene_start_submenu_callback, app);
submenu_add_item(
app->submenu, "Media", HidSubmenuIndexMedia, hid_scene_start_submenu_callback, app);
submenu_add_item(
app->submenu,
"Apple Music macOS",
HidSubmenuIndexMusicMacOs,
hid_scene_start_submenu_callback,
app);
submenu_add_item(
app->submenu, "Movie", HidSubmenuIndexMovie, hid_scene_start_submenu_callback, app);
submenu_add_item(
app->submenu, "Mouse", HidSubmenuIndexMouse, hid_scene_start_submenu_callback, app);
submenu_add_item(
app->submenu,
"TikTok / YT Shorts",
HidSubmenuIndexTikTok,
hid_scene_start_submenu_callback,
app);
submenu_add_item(
app->submenu,
"Mouse Clicker",
HidSubmenuIndexMouseClicker,
hid_scene_start_submenu_callback,
app);
submenu_add_item(
app->submenu,
"Mouse Jiggler",
HidSubmenuIndexMouseJiggler,
hid_scene_start_submenu_callback,
app);
submenu_add_item(
app->submenu,
"Mouse Jiggler Stealth",
HidSubmenuIndexMouseJigglerStealth,
hid_scene_start_submenu_callback,
app);
submenu_add_item(
app->submenu,
"PushToTalk",
HidSubmenuIndexPushToTalk,
hid_scene_start_submenu_callback,
app);
#ifdef HID_TRANSPORT_BLE
submenu_add_item(
app->submenu,
"Bluetooth Unpairing",
HidSubmenuIndexRemovePairing,
hid_scene_start_submenu_callback,
app);
#endif
submenu_set_selected_item(
app->submenu, scene_manager_get_scene_state(app->scene_manager, HidSceneStart));
view_dispatcher_switch_to_view(app->view_dispatcher, HidViewSubmenu);
}
bool hid_scene_start_on_event(void* context, SceneManagerEvent event) {
Hid* app = context;
bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == HidSubmenuIndexRemovePairing) {
scene_manager_next_scene(app->scene_manager, HidSceneUnpair);
} else {
HidView view_id;
switch(event.event) {
case HidSubmenuIndexKeynote:
view_id = HidViewKeynote;
hid_keynote_set_orientation(app->hid_keynote, false);
break;
case HidSubmenuIndexKeynoteVertical:
view_id = HidViewKeynote;
hid_keynote_set_orientation(app->hid_keynote, true);
break;
case HidSubmenuIndexKeyboard:
view_id = HidViewKeyboard;
break;
case HidSubmenuIndexNumpad:
view_id = HidViewNumpad;
break;
case HidSubmenuIndexMedia:
view_id = HidViewMedia;
break;
case HidSubmenuIndexMusicMacOs:
view_id = HidViewMusicMacOs;
break;
case HidSubmenuIndexMovie:
view_id = HidViewMovie;
break;
case HidSubmenuIndexTikTok:
view_id = BtHidViewTikTok;
break;
case HidSubmenuIndexMouse:
view_id = HidViewMouse;
break;
case HidSubmenuIndexMouseClicker:
view_id = HidViewMouseClicker;
break;
case HidSubmenuIndexMouseJiggler:
view_id = HidViewMouseJiggler;
break;
case HidSubmenuIndexMouseJigglerStealth:
view_id = HidViewMouseJigglerStealth;
break;
case HidSubmenuIndexPushToTalk:
view_id = HidViewPushToTalkMenu;
break;
default:
furi_crash();
}
scene_manager_set_scene_state(app->scene_manager, HidSceneMain, view_id);
scene_manager_next_scene(app->scene_manager, HidSceneMain);
}
scene_manager_set_scene_state(app->scene_manager, HidSceneStart, event.event);
consumed = true;
}
return consumed;
}
void hid_scene_start_on_exit(void* context) {
Hid* app = context;
submenu_reset(app->submenu);
}