RPC: Screen streaming & Input injection (#794)

* RPC: Screen stream
* Move callback to rpc_screen, implement graceful stop
* RPC: Implement input injection
* Update protobuf submodule
* Gui: thread safe frame buffer callback setter.
* RPC: Keep gui record open

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Anna Prosvetova
2021-11-01 19:26:37 +03:00
committed by GitHub
parent 22a4bac448
commit 86bced5b2c
17 changed files with 564 additions and 50 deletions

View File

@@ -258,8 +258,7 @@ void gui_cli_screen_stream_callback(uint8_t* data, size_t size, void* context) {
void gui_cli_screen_stream(Cli* cli, string_t args, void* context) {
furi_assert(context);
Gui* gui = context;
gui_set_framebuffer_callback_context(gui, gui);
gui_set_framebuffer_callback(gui, gui_cli_screen_stream_callback);
gui_set_framebuffer_callback(gui, gui_cli_screen_stream_callback, gui);
gui_redraw(gui);
// Wait for control events
@@ -279,8 +278,7 @@ void gui_cli_screen_stream(Cli* cli, string_t args, void* context) {
}
}
gui_set_framebuffer_callback(gui, NULL);
gui_set_framebuffer_callback_context(gui, NULL);
gui_set_framebuffer_callback(gui, NULL, NULL);
}
void gui_add_view_port(Gui* gui, ViewPort* view_port, GuiLayer layer) {
@@ -387,14 +385,12 @@ void gui_view_port_send_to_back(Gui* gui, ViewPort* view_port) {
gui_unlock(gui);
}
void gui_set_framebuffer_callback(Gui* gui, GuiCanvasCommitCallback callback) {
void gui_set_framebuffer_callback(Gui* gui, GuiCanvasCommitCallback callback, void* context) {
furi_assert(gui);
gui_lock(gui);
gui->canvas_callback = callback;
}
void gui_set_framebuffer_callback_context(Gui* gui, void* context) {
furi_assert(gui);
gui->canvas_callback_context = context;
gui_unlock(gui);
}
Gui* gui_alloc() {

View File

@@ -73,15 +73,9 @@ void gui_view_port_send_to_back(Gui* gui, ViewPort* view_port);
*
* @param gui Gui instance
* @param callback GuiCanvasCommitCallback
* @param context GuiCanvasCommitCallback context
*/
void gui_set_framebuffer_callback(Gui* gui, GuiCanvasCommitCallback callback);
/** Set gui canvas commit callback context
*
* @param gui Gui instance
* @param context pointer to context
*/
void gui_set_framebuffer_callback_context(Gui* gui, void* context);
void gui_set_framebuffer_callback(Gui* gui, GuiCanvasCommitCallback callback, void* context);
#ifdef __cplusplus
}