100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <furi.h>
 | 
						|
#include <api-hal.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <gui/gui.h>
 | 
						|
#include <input/input.h>
 | 
						|
 | 
						|
typedef struct {
 | 
						|
    InputEvent input;
 | 
						|
} InputDumpEvent;
 | 
						|
 | 
						|
void input_dump_draw_callback(Canvas* canvas, void* ctx) {
 | 
						|
    canvas_clear(canvas);
 | 
						|
    canvas_set_font(canvas, FontPrimary);
 | 
						|
    canvas_draw_str(canvas, 2, 10, "Input dump application");
 | 
						|
    canvas_set_font(canvas, FontSecondary);
 | 
						|
    canvas_draw_str(canvas, 2, 22, "Press long back to exit");
 | 
						|
}
 | 
						|
 | 
						|
void input_dump_input_callback(InputEvent* input_event, void* ctx) {
 | 
						|
    furi_assert(ctx);
 | 
						|
    osMessageQueueId_t event_queue = ctx;
 | 
						|
    InputDumpEvent event = {.input = *input_event};
 | 
						|
    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);
 | 
						|
 | 
						|
    // Configure view port
 | 
						|
    ViewPort* view_port = view_port_alloc();
 | 
						|
    furi_check(view_port);
 | 
						|
    view_port_draw_callback_set(view_port, input_dump_draw_callback, NULL);
 | 
						|
    view_port_input_callback_set(view_port, input_dump_input_callback, event_queue);
 | 
						|
 | 
						|
    // Register view port in GUI
 | 
						|
    Gui* gui = furi_record_open("gui");
 | 
						|
    gui_add_view_port(gui, view_port, GuiLayerFullscreen);
 | 
						|
 | 
						|
    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) {
 | 
						|
            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;
 | 
						|
}
 |