From 39a3422b4517cd7138f600a91dfb551e0614a28e Mon Sep 17 00:00:00 2001 From: WillyJL <49810075+Willy-JL@users.noreply.github.com> Date: Tue, 29 Oct 2024 23:16:27 +0000 Subject: [PATCH] RPC: Add ASCII event support (#284) * RPC: SendAsciiEventRequest support * GUI: Ascii input for ByteInput * Sync protobuf submodule * Update changelog --- CHANGELOG.md | 1 + applications/services/rpc/rpc_gui.c | 34 +++++++++++++++++++++++++++++ assets/protobuf | 2 +- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f47d67abb..b9cba5555 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -82,6 +82,7 @@ - JS: - New `i2c` module (#259 by @jamisonderek) - New `spi` module (#272 by @jamisonderek) +- RPC: Added ASCII event support (#284 by @Willy-JL) - BadKB: - OFW: Add linux/gnome badusb demo files (by @thomasnemer) - Add older qFlipper install demos for windows and macos (by @DXVVAY & @grugnoymeme) diff --git a/applications/services/rpc/rpc_gui.c b/applications/services/rpc/rpc_gui.c index 447156bc9..70c5f1463 100644 --- a/applications/services/rpc/rpc_gui.c +++ b/applications/services/rpc/rpc_gui.c @@ -269,6 +269,37 @@ static void rpc_send_and_release_empty(session, request->command_id, PB_CommandStatus_OK); } +static void + rpc_system_gui_send_ascii_event_request_process(const PB_Main* request, void* context) { + furi_assert(request); + furi_assert(request->which_content == PB_Main_gui_send_ascii_event_request_tag); + furi_assert(context); + + FURI_LOG_D(TAG, "SendAsciiEvent"); + + RpcGuiSystem* rpc_gui = context; + RpcSession* session = rpc_gui->session; + furi_assert(session); + + bool is_valid = (request->content.gui_send_ascii_event_request.value <= 0xFF); + + if(!is_valid) { + rpc_send_and_release_empty( + session, request->command_id, PB_CommandStatus_ERROR_INVALID_PARAMETERS); + return; + } + + AsciiEvent event = { + .value = request->content.gui_send_ascii_event_request.value, + }; + + // Submit event + FuriPubSub* ascii_events = furi_record_open(RECORD_ASCII_EVENTS); + furi_pubsub_publish(ascii_events, &event); + furi_record_close(RECORD_ASCII_EVENTS); + rpc_send_and_release_empty(session, request->command_id, PB_CommandStatus_OK); +} + static void rpc_system_gui_virtual_display_render_callback(Canvas* canvas, void* context) { furi_assert(canvas); furi_assert(context); @@ -459,6 +490,9 @@ void* rpc_system_gui_alloc(RpcSession* session) { rpc_handler.message_handler = rpc_system_gui_send_input_event_request_process; rpc_add_handler(session, PB_Main_gui_send_input_event_request_tag, &rpc_handler); + rpc_handler.message_handler = rpc_system_gui_send_ascii_event_request_process; + rpc_add_handler(session, PB_Main_gui_send_ascii_event_request_tag, &rpc_handler); + rpc_handler.message_handler = rpc_system_gui_start_virtual_display_process; rpc_add_handler(session, PB_Main_gui_start_virtual_display_request_tag, &rpc_handler); diff --git a/assets/protobuf b/assets/protobuf index b7d588169..c255d71a9 160000 --- a/assets/protobuf +++ b/assets/protobuf @@ -1 +1 @@ -Subproject commit b7d5881690298de836df6305d4c71f96d5d34c61 +Subproject commit c255d71a90af202515deb7aaa51685d45a196152