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:
Willy-JL
2023-07-06 02:42:43 +02:00
parent 1c7719f6b0
commit df7a39cc58
4 changed files with 11 additions and 114 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;