Просмотр исходного кода

[FL-1100] Input dump: Handle all input events and dump them to console (#401)

あく 4 лет назад
Родитель
Сommit
33a461e97b
1 измененных файлов с 51 добавлено и 10 удалено
  1. 51 10
      applications/examples/input_dump.c

+ 51 - 10
applications/examples/input_dump.c

@@ -23,6 +23,42 @@ void input_dump_input_callback(InputEvent* input_event, void* ctx) {
     osMessageQueuePut(event_queue, &event, 0, 0);
 }
 
+static const char* input_dump_get_key_name(InputKey key) {
+    switch(key) {
+    case InputKeyOk:
+        return "Ok";
+    case InputKeyBack:
+        return "Back";
+    case InputKeyLeft:
+        return "Left";
+    case InputKeyRight:
+        return "Right";
+    case InputKeyUp:
+        return "Up";
+    case InputKeyDown:
+        return "Down";
+    default:
+        return "Unknown";
+    }
+}
+
+static const char* input_dump_get_type_name(InputType type) {
+    switch(type) {
+    case InputTypePress:
+        return "Press";
+    case InputTypeRelease:
+        return "Release";
+    case InputTypeShort:
+        return "Short";
+    case InputTypeLong:
+        return "Long";
+    case InputTypeRepeat:
+        return "Repeat";
+    default:
+        return "Unknown";
+    }
+}
+
 int32_t application_input_dump(void* p) {
     osMessageQueueId_t event_queue = osMessageQueueNew(8, sizeof(InputDumpEvent), NULL);
 
@@ -36,23 +72,28 @@ int32_t application_input_dump(void* p) {
     Gui* gui = furi_record_open("gui");
     gui_add_view_port(gui, view_port, GuiLayerFullscreen);
 
-    printf("Example app [input dump]\r\n");
+    printf("[input_dump] waiting for input events\r\n");
     InputDumpEvent event;
 
     while(1) {
         furi_check(osMessageQueueGet(event_queue, &event, NULL, osWaitForever) == osOK);
+
+        printf(
+            "[input_dump] key: %s type: %s\r\n",
+            input_dump_get_key_name(event.input.key),
+            input_dump_get_type_name(event.input.type));
+
         if(event.input.type == InputTypeLong && event.input.key == InputKeyBack) {
-            view_port_enabled_set(view_port, false);
-            gui_remove_view_port(gui, view_port);
-            view_port_free(view_port);
-            osMessageQueueDelete(event_queue);
-
-            return 0;
-        } else if(event.input.type == InputTypePress || event.input.type == InputTypeRelease) {
-            printf(
-                "event: %02x %s\r\n", event.input.key, event.input.type ? "pressed" : "released");
+            break;
         }
     }
 
+    printf("[input_dump] shutting down, byebye!\r\n");
+
+    view_port_enabled_set(view_port, false);
+    gui_remove_view_port(gui, view_port);
+    view_port_free(view_port);
+    osMessageQueueDelete(event_queue);
+
     return 0;
 }