Skip to content

Commit

Permalink
move part of the CLI to microsd to free up space for COMPACT 0 builds
Browse files Browse the repository at this point in the history
CLI wrapper and idea by Willy-JL
  • Loading branch information
xMasterX committed Jun 15, 2024
1 parent dac9ff6 commit 5d4ed94
Show file tree
Hide file tree
Showing 18 changed files with 202 additions and 62 deletions.
11 changes: 10 additions & 1 deletion applications/main/ibutton/application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,20 @@ App(
fap_category="iButton",
)

App(
appid="ibutton_cli",
targets=["f7"],
apptype=FlipperAppType.PLUGIN,
entry_point="ibutton_cli_plugin_ep",
requires=["cli"],
sources=["ibutton_cli.c"],
)

App(
appid="ibutton_start",
apptype=FlipperAppType.STARTUP,
targets=["f7"],
entry_point="ibutton_on_system_start",
sources=["ibutton_cli.c"],
sources=["ibutton_start.c"],
order=60,
)
34 changes: 17 additions & 17 deletions applications/main/ibutton/ibutton_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,6 @@
#include <ibutton/ibutton_worker.h>
#include <ibutton/ibutton_protocols.h>

static void ibutton_cli(Cli* cli, FuriString* args, void* context);

// app cli function
void ibutton_on_system_start(void) {
#ifdef SRV_CLI
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "ikey", CliCommandFlagDefault, ibutton_cli, cli);
furi_record_close(RECORD_CLI);
#else
UNUSED(ibutton_cli);
#endif
}

static void ibutton_cli_print_usage(void) {
printf("Usage:\r\n");
printf("ikey read\r\n");
Expand All @@ -31,7 +18,7 @@ static void ibutton_cli_print_usage(void) {
printf("\tCyfral (2 bytes key_data)\r\n");
printf("\tMetakom (4 bytes key_data), must contain correct parity\r\n");
printf("\t<key_data> are hex-formatted\r\n");
};
}

static bool ibutton_cli_parse_key(iButtonProtocols* protocols, iButtonKey* key, FuriString* args) {
bool result = false;
Expand Down Expand Up @@ -124,7 +111,7 @@ static void ibutton_cli_read(Cli* cli) {
ibutton_protocols_free(protocols);

furi_event_flag_free(event);
};
}

typedef struct {
FuriEventFlag* event;
Expand Down Expand Up @@ -216,7 +203,7 @@ void ibutton_cli_emulate(Cli* cli, FuriString* args) {

while(!cli_cmd_interrupt_received(cli)) {
furi_delay_ms(100);
};
}

} while(false);

Expand All @@ -226,7 +213,7 @@ void ibutton_cli_emulate(Cli* cli, FuriString* args) {
ibutton_key_free(key);
ibutton_worker_free(worker);
ibutton_protocols_free(protocols);
};
}

void ibutton_cli(Cli* cli, FuriString* args, void* context) {
UNUSED(cli);
Expand All @@ -252,3 +239,16 @@ void ibutton_cli(Cli* cli, FuriString* args, void* context) {

furi_string_free(cmd);
}

#include <flipper_application/flipper_application.h>
#include <cli/cli_i.h>

static const FlipperAppPluginDescriptor plugin_descriptor = {
.appid = CLI_PLUGIN_APP_ID,
.ep_api_version = CLI_PLUGIN_API_VERSION,
.entry_point = &ibutton_cli,
};

const FlipperAppPluginDescriptor* ibutton_cli_plugin_ep(void) {
return &plugin_descriptor;
}
11 changes: 11 additions & 0 deletions applications/main/ibutton/ibutton_start.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include <cli/cli_i.h>

static void ibutton_cli_wrapper(Cli* cli, FuriString* args, void* context) {
cli_plugin_wrapper("ibutton", cli, args, context);
}

void ibutton_on_system_start(void) {
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "ikey", CliCommandFlagDefault, ibutton_cli_wrapper, cli);
furi_record_close(RECORD_CLI);
}
15 changes: 12 additions & 3 deletions applications/main/infrared/application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,23 @@ App(
)

App(
appid="infrared_start",
apptype=FlipperAppType.STARTUP,
appid="infrared_cli",
targets=["f7"],
entry_point="infrared_on_system_start",
apptype=FlipperAppType.PLUGIN,
entry_point="infrared_cli_plugin_ep",
requires=["cli"],
sources=[
"infrared_cli.c",
"infrared_brute_force.c",
"infrared_signal.c",
],
)

App(
appid="infrared_start",
apptype=FlipperAppType.STARTUP,
targets=["f7"],
entry_point="infrared_on_system_start",
sources=["infrared_start.c"],
order=20,
)
20 changes: 12 additions & 8 deletions applications/main/infrared/infrared_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -544,12 +544,16 @@ static void infrared_cli_start_ir(Cli* cli, FuriString* args, void* context) {

furi_string_free(command);
}
void infrared_on_system_start(void) {
#ifdef SRV_CLI
Cli* cli = (Cli*)furi_record_open(RECORD_CLI);
cli_add_command(cli, "ir", CliCommandFlagDefault, infrared_cli_start_ir, NULL);
furi_record_close(RECORD_CLI);
#else
UNUSED(infrared_cli_start_ir);
#endif

#include <flipper_application/flipper_application.h>
#include <cli/cli_i.h>

static const FlipperAppPluginDescriptor plugin_descriptor = {
.appid = CLI_PLUGIN_APP_ID,
.ep_api_version = CLI_PLUGIN_API_VERSION,
.entry_point = &infrared_cli_start_ir,
};

const FlipperAppPluginDescriptor* infrared_cli_plugin_ep(void) {
return &plugin_descriptor;
}
11 changes: 11 additions & 0 deletions applications/main/infrared/infrared_start.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include <cli/cli_i.h>

static void infrared_cli_start_ir_wrapper(Cli* cli, FuriString* args, void* context) {
cli_plugin_wrapper("infrared", cli, args, context);
}

void infrared_on_system_start(void) {
Cli* cli = (Cli*)furi_record_open(RECORD_CLI);
cli_add_command(cli, "ir", CliCommandFlagDefault, infrared_cli_start_ir_wrapper, NULL);
furi_record_close(RECORD_CLI);
}
11 changes: 10 additions & 1 deletion applications/main/lfrfid/application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,20 @@ App(
fap_category="RFID",
)

App(
appid="lfrfid_cli",
targets=["f7"],
apptype=FlipperAppType.PLUGIN,
entry_point="lfrfid_cli_plugin_ep",
requires=["cli"],
sources=["lfrfid_cli.c"],
)

App(
appid="lfrfid_start",
targets=["f7"],
apptype=FlipperAppType.STARTUP,
entry_point="lfrfid_on_system_start",
sources=["lfrfid_cli.c"],
sources=["lfrfid_start.c"],
order=50,
)
22 changes: 13 additions & 9 deletions applications/main/lfrfid/lfrfid_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,6 @@
#include <lfrfid/lfrfid_raw_file.h>
#include <toolbox/pulse_protocols/pulse_glue.h>

static void lfrfid_cli(Cli* cli, FuriString* args, void* context);

// app cli function
void lfrfid_on_system_start(void) {
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "rfid", CliCommandFlagDefault, lfrfid_cli, NULL);
furi_record_close(RECORD_CLI);
}

static void lfrfid_cli_print_usage(void) {
printf("Usage:\r\n");
printf("rfid read <optional: normal | indala> - read in ASK/PSK mode\r\n");
Expand Down Expand Up @@ -577,3 +568,16 @@ static void lfrfid_cli(Cli* cli, FuriString* args, void* context) {

furi_string_free(cmd);
}

#include <flipper_application/flipper_application.h>
#include <cli/cli_i.h>

static const FlipperAppPluginDescriptor plugin_descriptor = {
.appid = CLI_PLUGIN_APP_ID,
.ep_api_version = CLI_PLUGIN_API_VERSION,
.entry_point = &lfrfid_cli,
};

const FlipperAppPluginDescriptor* lfrfid_cli_plugin_ep(void) {
return &plugin_descriptor;
}
11 changes: 11 additions & 0 deletions applications/main/lfrfid/lfrfid_start.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include <cli/cli_i.h>

static void lfrfid_cli_wrapper(Cli* cli, FuriString* args, void* context) {
cli_plugin_wrapper("lfrfid", cli, args, context);
}

void lfrfid_on_system_start(void) {
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "rfid", CliCommandFlagDefault, lfrfid_cli_wrapper, NULL);
furi_record_close(RECORD_CLI);
}
11 changes: 10 additions & 1 deletion applications/main/nfc/application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -272,11 +272,20 @@ App(
sources=["plugins/supported_cards/skylanders.c"],
)

App(
appid="nfc_cli",
targets=["f7"],
apptype=FlipperAppType.PLUGIN,
entry_point="nfc_cli_plugin_ep",
requires=["cli"],
sources=["nfc_cli.c"],
)

App(
appid="nfc_start",
targets=["f7"],
apptype=FlipperAppType.STARTUP,
entry_point="nfc_on_system_start",
sources=["nfc_cli.c"],
sources=["nfc_start.c"],
order=30,
)
19 changes: 11 additions & 8 deletions applications/main/nfc/nfc_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,15 @@ static void nfc_cli(Cli* cli, FuriString* args, void* context) {
furi_string_free(cmd);
}

void nfc_on_system_start(void) {
#ifdef SRV_CLI
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "nfc", CliCommandFlagDefault, nfc_cli, NULL);
furi_record_close(RECORD_CLI);
#else
UNUSED(nfc_cli);
#endif
#include <flipper_application/flipper_application.h>
#include <cli/cli_i.h>

static const FlipperAppPluginDescriptor plugin_descriptor = {
.appid = CLI_PLUGIN_APP_ID,
.ep_api_version = CLI_PLUGIN_API_VERSION,
.entry_point = &nfc_cli,
};

const FlipperAppPluginDescriptor* nfc_cli_plugin_ep(void) {
return &plugin_descriptor;
}
11 changes: 11 additions & 0 deletions applications/main/nfc/nfc_start.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include <cli/cli_i.h>

static void nfc_cli_wrapper(Cli* cli, FuriString* args, void* context) {
cli_plugin_wrapper("nfc", cli, args, context);
}

void nfc_on_system_start(void) {
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "nfc", CliCommandFlagDefault, nfc_cli_wrapper, NULL);
furi_record_close(RECORD_CLI);
}
10 changes: 10 additions & 0 deletions applications/main/onewire/application.fam
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
App(
appid="onewire_cli",
targets=["f7"],
apptype=FlipperAppType.PLUGIN,
entry_point="onewire_cli_plugin_ep",
requires=["cli"],
sources=["onewire_cli.c"],
)

App(
appid="onewire_start",
apptype=FlipperAppType.STARTUP,
entry_point="onewire_on_system_start",
sources=["onewire_start.c"],
order=60,
)
27 changes: 14 additions & 13 deletions applications/main/onewire/onewire_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,10 @@

#include <one_wire/one_wire_host.h>

static void onewire_cli(Cli* cli, FuriString* args, void* context);

void onewire_on_system_start(void) {
#ifdef SRV_CLI
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "onewire", CliCommandFlagDefault, onewire_cli, cli);
furi_record_close(RECORD_CLI);
#else
UNUSED(onewire_cli);
#endif
}

static void onewire_cli_print_usage(void) {
printf("Usage:\r\n");
printf("onewire search\r\n");
};
}

static void onewire_cli_search(Cli* cli) {
UNUSED(cli);
Expand Down Expand Up @@ -70,3 +58,16 @@ void onewire_cli(Cli* cli, FuriString* args, void* context) {

furi_string_free(cmd);
}

#include <flipper_application/flipper_application.h>
#include <cli/cli_i.h>

static const FlipperAppPluginDescriptor plugin_descriptor = {
.appid = CLI_PLUGIN_APP_ID,
.ep_api_version = CLI_PLUGIN_API_VERSION,
.entry_point = &onewire_cli,
};

const FlipperAppPluginDescriptor* onewire_cli_plugin_ep(void) {
return &plugin_descriptor;
}
11 changes: 11 additions & 0 deletions applications/main/onewire/onewire_start.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include <cli/cli_i.h>

static void onewire_cli_wrapper(Cli* cli, FuriString* args, void* context) {
cli_plugin_wrapper("onewire", cli, args, context);
}

void onewire_on_system_start(void) {
Cli* cli = furi_record_open(RECORD_CLI);
cli_add_command(cli, "onewire", CliCommandFlagDefault, onewire_cli_wrapper, cli);
furi_record_close(RECORD_CLI);
}
20 changes: 20 additions & 0 deletions applications/services/cli/cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
#include <furi_hal_version.h>
#include <loader/loader.h>

#include <flipper_application/plugins/plugin_manager.h>
#include <loader/firmware_api/firmware_api.h>
#include <inttypes.h>

#define TAG "CliSrv"

#define CLI_INPUT_LEN_LIMIT 256
Expand Down Expand Up @@ -482,3 +486,19 @@ int32_t cli_srv(void* p) {

return 0;
}

void cli_plugin_wrapper(const char* name, Cli* cli, FuriString* args, void* context) {
PluginManager* manager =
plugin_manager_alloc(CLI_PLUGIN_APP_ID, CLI_PLUGIN_API_VERSION, firmware_api_interface);
FuriString* path =
furi_string_alloc_printf(EXT_PATH("apps_data/cli/plugins/%s_cli.fal"), name);
PluginManagerError error = plugin_manager_load_single(manager, furi_string_get_cstr(path));
if(error == PluginManagerErrorNone) {
const CliCallback handler = plugin_manager_get_ep(manager, 0);
handler(cli, args, context);
} else {
printf("CLI plugin failed (code %" PRIu16 "), update firmware or check logs\r\n", error);
}
furi_string_free(path);
plugin_manager_free(manager);
}
Loading

0 comments on commit 5d4ed94

Please sign in to comment.