| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #include "../seos_i.h"
- #define TAG "SceneStart"
- enum SubmenuIndex {
- SubmenuIndexSaved,
- SubmenuIndexRead,
- SubmenuIndexBLEReader,
- SubmenuIndexScannerMenu,
- SubmenuIndexBLECredInterrogate,
- SubmenuIndexAbout,
- };
- static SeosHci* seos_hci = NULL;
- static int8_t ble_checks;
- void seos_scene_start_submenu_callback(void* context, uint32_t index) {
- Seos* seos = context;
- view_dispatcher_send_custom_event(seos->view_dispatcher, index);
- }
- void seos_scene_start_on_update(void* context) {
- Seos* seos = context;
- Submenu* submenu = seos->submenu;
- submenu_reset(submenu);
- submenu_add_item(submenu, "Saved", SubmenuIndexSaved, seos_scene_start_submenu_callback, seos);
- submenu_add_item(
- submenu, "Read NFC", SubmenuIndexRead, seos_scene_start_submenu_callback, seos);
- if(seos->has_ble) {
- submenu_add_item(
- submenu,
- "Start BLE Reader",
- SubmenuIndexBLEReader,
- seos_scene_start_submenu_callback,
- seos);
- submenu_add_item(
- submenu,
- "Scanners >",
- SubmenuIndexScannerMenu,
- seos_scene_start_submenu_callback,
- seos);
- submenu_add_item(
- submenu,
- "BLE Cred Interrogate",
- SubmenuIndexBLECredInterrogate,
- seos_scene_start_submenu_callback,
- seos);
- }
- submenu_add_item(submenu, "About", SubmenuIndexAbout, seos_scene_start_submenu_callback, seos);
- submenu_set_selected_item(
- seos->submenu, scene_manager_get_scene_state(seos->scene_manager, SeosSceneStart));
- view_dispatcher_switch_to_view(seos->view_dispatcher, SeosViewMenu);
- }
- void seos_scene_start_on_enter(void* context) {
- Seos* seos = context;
- // Dont' check if we've checked before
- if(seos->has_ble == false) {
- ble_checks = 3;
- seos_hci = seos_hci_alloc(seos);
- seos_hci_start(seos_hci, BLE_PERIPHERAL, FLOW_TEST);
- }
- seos_scene_start_on_update(context);
- }
- bool seos_scene_start_on_event(void* context, SceneManagerEvent event) {
- Seos* seos = context;
- bool consumed = false;
- if(event.type == SceneManagerEventTypeCustom) {
- if(event.event == SubmenuIndexRead) {
- scene_manager_set_scene_state(seos->scene_manager, SeosSceneStart, SubmenuIndexRead);
- scene_manager_next_scene(seos->scene_manager, SeosSceneRead);
- consumed = true;
- } else if(event.event == SubmenuIndexBLEReader) {
- scene_manager_set_scene_state(
- seos->scene_manager, SeosSceneStart, SubmenuIndexBLEReader);
- seos->flow_mode = FLOW_READER;
- scene_manager_next_scene(seos->scene_manager, SeosSceneBlePeripheral);
- consumed = true;
- } else if(event.event == SubmenuIndexScannerMenu) {
- scene_manager_set_scene_state(
- seos->scene_manager, SeosSceneStart, SubmenuIndexScannerMenu);
- scene_manager_next_scene(seos->scene_manager, SeosSceneScannerMenu);
- consumed = true;
- } else if(event.event == SubmenuIndexBLECredInterrogate) {
- scene_manager_set_scene_state(
- seos->scene_manager, SeosSceneStart, SubmenuIndexBLECredInterrogate);
- seos->flow_mode = FLOW_READER;
- scene_manager_next_scene(seos->scene_manager, SeosSceneBleDevice);
- consumed = true;
- } else if(event.event == SubmenuIndexSaved) {
- scene_manager_set_scene_state(seos->scene_manager, SeosSceneStart, SubmenuIndexSaved);
- scene_manager_next_scene(seos->scene_manager, SeosSceneFileSelect);
- consumed = true;
- } else if(event.event == SubmenuIndexAbout) {
- scene_manager_set_scene_state(seos->scene_manager, SeosSceneStart, SubmenuIndexAbout);
- scene_manager_next_scene(seos->scene_manager, SeosSceneAbout);
- consumed = true;
- } else if(event.event == SeosCustomEventHCIInit) {
- seos->has_ble = true;
- FURI_LOG_I(TAG, "HCI Init");
- if(seos_hci) {
- seos_hci_stop(seos_hci);
- seos_hci_free(seos_hci);
- seos_hci = NULL;
- }
- }
- } else if(event.type == SceneManagerEventTypeTick) {
- if(ble_checks > 0) {
- FURI_LOG_D(TAG, "ble check %d has_ble %d", ble_checks, seos->has_ble);
- ble_checks--;
- if(seos->has_ble) {
- ble_checks = 0;
- seos_scene_start_on_update(context);
- }
- }
- }
- return consumed;
- }
- void seos_scene_start_on_exit(void* context) {
- Seos* seos = context;
- if(seos_hci) {
- seos_hci_stop(seos_hci);
- seos_hci_free(seos_hci);
- seos_hci = NULL;
- }
- submenu_reset(seos->submenu);
- }
|