mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
Fix cli bridge "internal" definitions 🤡
Seriously. Who. THE FUCK. Thought this was a good idea??? You DO NOT keep a copy of memory structures. You import them. Definitions change, stop intentionally handicapping your code. Don't be a RogueMaster V2.
This commit is contained in:
14
applications/external/cli_bridge/cli_control.c
vendored
14
applications/external/cli_bridge/cli_control.c
vendored
@@ -3,6 +3,7 @@
|
||||
#include <cli/cli.h>
|
||||
#include <cli/cli_i.h>
|
||||
#include <cli/cli_vcp.h>
|
||||
#include <furi/core/thread_i.h>
|
||||
#include "cligui_main_i.h"
|
||||
#include <FreeRTOS.h>
|
||||
|
||||
@@ -33,11 +34,10 @@ static size_t real_rx_handler(uint8_t* buffer, size_t size, uint32_t timeout) {
|
||||
return rx_cnt;
|
||||
}
|
||||
|
||||
static CliCommand_internal* getInternalCliCommand(Cli* cli, const char* name) {
|
||||
static CliCommand* getCliCommand(Cli* cli, const char* name) {
|
||||
FuriString* target_command = furi_string_alloc();
|
||||
furi_string_set_str(target_command, name);
|
||||
CliCommand_internal* command =
|
||||
CliCommandTree_internal_get(((Cli_internal*)cli)->commands, target_command);
|
||||
CliCommand* command = CliCommandTree_get(cli->commands, target_command);
|
||||
furi_string_free(target_command);
|
||||
return command;
|
||||
}
|
||||
@@ -53,12 +53,12 @@ static CliSession session;
|
||||
void latch_tx_handler() {
|
||||
Cli* global_cli = furi_record_open(RECORD_CLI);
|
||||
|
||||
CliCommand_internal* help_command = getInternalCliCommand(global_cli, "help");
|
||||
CliCommand* help_command = getCliCommand(global_cli, "help");
|
||||
cliThread = help_command->context;
|
||||
|
||||
furi_thread_set_stdout_callback(tx_handler_stdout);
|
||||
if(cliThread != NULL) {
|
||||
((FuriThread_internal*)cliThread)->output.write_callback = &tx_handler_stdout;
|
||||
cliThread->output.write_callback = &tx_handler_stdout;
|
||||
}
|
||||
|
||||
rx_stream = furi_stream_buffer_alloc(128, 1);
|
||||
@@ -78,7 +78,7 @@ void unlatch_tx_handler(bool persist) {
|
||||
Cli* global_cli = furi_record_open(RECORD_CLI);
|
||||
// Stash cliThread if not null
|
||||
if(cliThread != NULL) {
|
||||
CliCommand_internal* help_command = getInternalCliCommand(global_cli, "help");
|
||||
CliCommand* help_command = getCliCommand(global_cli, "help");
|
||||
help_command->context = cliThread;
|
||||
}
|
||||
// Switch to new session
|
||||
@@ -96,7 +96,7 @@ void unlatch_tx_handler(bool persist) {
|
||||
furi_stream_buffer_send(rx_stream, "_", 1, FuriWaitForever);
|
||||
// Reconfigure stdout_callback to cli_vcp
|
||||
if(cliThread != NULL) {
|
||||
((FuriThread_internal*)cliThread)->output.write_callback = cli_vcp.tx_stdout;
|
||||
cliThread->output.write_callback = cli_vcp.tx_stdout;
|
||||
}
|
||||
// At this point, all cli_vcp functions should be back.
|
||||
furi_stream_buffer_free(rx_stream);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "text_input.h"
|
||||
#include "console_output.h"
|
||||
#include <loader/loader_i.h>
|
||||
#include <gui/view_dispatcher_i.h>
|
||||
|
||||
static bool cligui_custom_event_cb(void* context, uint32_t event) {
|
||||
UNUSED(event);
|
||||
@@ -83,11 +84,9 @@ int32_t cligui_main(void* p) {
|
||||
|
||||
cligui->gui = furi_record_open(RECORD_GUI);
|
||||
cligui->view_dispatcher = view_dispatcher_alloc();
|
||||
cligui->view_dispatcher_i = (ViewDispatcher_internal*)(cligui->view_dispatcher);
|
||||
prev_input_callback =
|
||||
((ViewPort_internal*)cligui->view_dispatcher_i->view_port)->input_callback;
|
||||
prev_input_callback = cligui->view_dispatcher->view_port->input_callback;
|
||||
view_port_input_callback_set(
|
||||
cligui->view_dispatcher_i->view_port, input_callback_wrapper, cligui);
|
||||
cligui->view_dispatcher->view_port, input_callback_wrapper, cligui);
|
||||
view_dispatcher_enable_queue(cligui->view_dispatcher);
|
||||
view_dispatcher_set_event_callback_context(cligui->view_dispatcher, cligui);
|
||||
view_dispatcher_set_custom_event_callback(cligui->view_dispatcher, cligui_custom_event_cb);
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
#include <gui/modules/text_input.h>
|
||||
#include <m-dict.h>
|
||||
#include <loader/loader.h>
|
||||
#include "internal_defs.h"
|
||||
|
||||
#define TEXT_BOX_STORE_SIZE (4096)
|
||||
#define TEXT_INPUT_STORE_SIZE (512)
|
||||
@@ -37,5 +36,4 @@ typedef struct {
|
||||
char text_input_store[TEXT_INPUT_STORE_SIZE + 1];
|
||||
TextInput* text_input;
|
||||
ViewDispatcher* view_dispatcher;
|
||||
ViewDispatcher_internal* view_dispatcher_i;
|
||||
} CliguiApp;
|
||||
} CliguiApp;
|
||||
|
||||
100
applications/external/cli_bridge/internal_defs.h
vendored
100
applications/external/cli_bridge/internal_defs.h
vendored
@@ -1,100 +0,0 @@
|
||||
#pragma once
|
||||
#include <furi.h>
|
||||
#include <furi_hal.h>
|
||||
#include <m-dict.h>
|
||||
#include <m-bptree.h>
|
||||
#include <m-array.h>
|
||||
#include <cli/cli.h>
|
||||
#include <gui/gui.h>
|
||||
#include <gui/view_dispatcher.h>
|
||||
#include <gui/modules/menu.h>
|
||||
#include <gui/modules/submenu.h>
|
||||
|
||||
typedef struct {
|
||||
FuriThreadStdoutWriteCallback write_callback;
|
||||
FuriString* buffer;
|
||||
} FuriThreadStdout_internal;
|
||||
|
||||
typedef struct {
|
||||
bool is_service;
|
||||
FuriThreadState state;
|
||||
int32_t ret;
|
||||
|
||||
FuriThreadCallback callback;
|
||||
void* context;
|
||||
|
||||
FuriThreadStateCallback state_callback;
|
||||
void* state_context;
|
||||
|
||||
char* name;
|
||||
configSTACK_DEPTH_TYPE stack_size;
|
||||
FuriThreadPriority priority;
|
||||
|
||||
TaskHandle_t task_handle;
|
||||
bool heap_trace_enabled;
|
||||
size_t heap_size;
|
||||
|
||||
FuriThreadStdout_internal output;
|
||||
} FuriThread_internal;
|
||||
|
||||
DICT_DEF2(ViewDict, uint32_t, M_DEFAULT_OPLIST, View*, M_PTR_OPLIST)
|
||||
typedef struct {
|
||||
FuriMessageQueue* queue;
|
||||
Gui* gui;
|
||||
ViewPort* view_port;
|
||||
ViewDict_t views;
|
||||
|
||||
View* current_view;
|
||||
|
||||
View* ongoing_input_view;
|
||||
uint8_t ongoing_input;
|
||||
|
||||
ViewDispatcherCustomEventCallback custom_event_callback;
|
||||
ViewDispatcherNavigationEventCallback navigation_event_callback;
|
||||
ViewDispatcherTickEventCallback tick_event_callback;
|
||||
uint32_t tick_period;
|
||||
void* event_context;
|
||||
} ViewDispatcher_internal;
|
||||
|
||||
typedef struct {
|
||||
Gui* gui;
|
||||
bool is_enabled;
|
||||
ViewPortOrientation orientation;
|
||||
|
||||
uint8_t width;
|
||||
uint8_t height;
|
||||
|
||||
ViewPortDrawCallback draw_callback;
|
||||
void* draw_callback_context;
|
||||
|
||||
ViewPortInputCallback input_callback;
|
||||
void* input_callback_context;
|
||||
} ViewPort_internal;
|
||||
|
||||
typedef struct {
|
||||
CliCallback callback;
|
||||
void* context;
|
||||
uint32_t flags;
|
||||
} CliCommand_internal;
|
||||
|
||||
#define CLI_COMMANDS_TREE_RANK 4
|
||||
BPTREE_DEF2(
|
||||
CliCommandTree_internal,
|
||||
CLI_COMMANDS_TREE_RANK,
|
||||
FuriString*,
|
||||
FURI_STRING_OPLIST,
|
||||
CliCommand_internal,
|
||||
M_POD_OPLIST)
|
||||
|
||||
#define M_OPL_CliCommandTree_internal_t() BPTREE_OPLIST(CliCommandTree_internal, M_POD_OPLIST)
|
||||
|
||||
typedef struct {
|
||||
CliCommandTree_internal_t commands;
|
||||
void* mutex;
|
||||
void* idle_sem;
|
||||
void* last_line;
|
||||
void* line;
|
||||
void* session;
|
||||
|
||||
size_t cursor_position;
|
||||
} Cli_internal;
|
||||
Reference in New Issue
Block a user