Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorあく <alleteam@gmail.com>2021-07-18 21:09:00 +0300
committerGitHub <noreply@github.com>2021-07-18 21:09:00 +0300
commit421a0f6b97dcfcfb1e5b990b3b9b1a453b13aaa3 (patch)
treeea12ff0aaa259b9a30cf03c1fde8fcc5f0e9f667 /applications/cli
parentfbb81483aecbec294f2d6c13316742e6ba5769d3 (diff)
[FL-1546, FL-1534, FL-1550] Drop F5, Certification preparation, Global application start lock (#585)
* Firmware: drop F5 target * Rename app-loader to loader * Update code owners file * Loader: global application start lock API, minor refactoring * Archive: update loader usage * Cli: Command flags, global application start lock * Apps: update cli API usage * Bootloader: minor refactoring * Firmware: minor build refactoring * SubGhz: GUI packet test * SubGhz: drop packet transmission and unused presets * Github: drop F5 from build * Archive: favorites * Archive: a little bit more of Favorites
Diffstat (limited to 'applications/cli')
-rw-r--r--applications/cli/cli.c34
-rw-r--r--applications/cli/cli.h13
-rw-r--r--applications/cli/cli_commands.c23
-rwxr-xr-xapplications/cli/cli_i.h1
4 files changed, 54 insertions, 17 deletions
diff --git a/applications/cli/cli.c b/applications/cli/cli.c
index cf61cff0..4929b528 100644
--- a/applications/cli/cli.c
+++ b/applications/cli/cli.c
@@ -1,7 +1,9 @@
#include "cli_i.h"
#include "cli_commands.h"
+
#include <version.h>
#include <api-hal-version.h>
+#include <loader/loader.h>
Cli* cli_alloc() {
Cli* cli = furi_alloc(sizeof(Cli));
@@ -166,10 +168,26 @@ static void cli_handle_enter(Cli* cli) {
CliCommand* cli_command = CliCommandTree_get(cli->commands, command);
if(cli_command) {
cli_nl(cli);
- // Execute command
- cli_command->callback(cli, args, cli_command->context);
- // Clear line
- cli_reset(cli);
+ // Ensure that we running alone
+ if(!(cli_command->flags & CliCommandFlagParallelSafe)) {
+ Loader* loader = furi_record_open("loader");
+ bool safety_lock = loader_lock(loader);
+ if(safety_lock) {
+ // Execute command
+ cli_command->callback(cli, args, cli_command->context);
+ loader_unlock(loader);
+ // Clear line
+ cli_reset(cli);
+ } else {
+ printf("Other application is running, close it first");
+ }
+ furi_record_close("loader");
+ } else {
+ // Execute command
+ cli_command->callback(cli, args, cli_command->context);
+ // Clear line
+ cli_reset(cli);
+ }
} else {
cli_nl(cli);
printf(
@@ -310,7 +328,12 @@ void cli_process_input(Cli* cli) {
}
}
-void cli_add_command(Cli* cli, const char* name, CliCallback callback, void* context) {
+void cli_add_command(
+ Cli* cli,
+ const char* name,
+ CliCommandFlag flags,
+ CliCallback callback,
+ void* context) {
string_t name_str;
string_init_set_str(name_str, name);
string_strim(name_str);
@@ -323,6 +346,7 @@ void cli_add_command(Cli* cli, const char* name, CliCallback callback, void* con
CliCommand c;
c.callback = callback;
c.context = context;
+ c.flags = flags;
furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK);
CliCommandTree_set_at(cli->commands, name_str, c);
diff --git a/applications/cli/cli.h b/applications/cli/cli.h
index 4d393620..5957cc37 100644
--- a/applications/cli/cli.h
+++ b/applications/cli/cli.h
@@ -20,6 +20,12 @@ typedef enum {
CliSymbolAsciiDel = 0x7F,
} CliSymbols;
+typedef enum {
+ CliCommandFlagDefault = 0, /** Default, loader lock is used */
+ CliCommandFlagParallelSafe =
+ (1 << 0), /** Safe to run in parallel with other apps, loader lock is not used */
+} CliCommandFlag;
+
/* Cli type
* Anonymous structure. Use cli_i.h if you need to go deeper.
*/
@@ -39,7 +45,12 @@ typedef void (*CliCallback)(Cli* cli, string_t args, void* context);
* @param callback - callback function
* @param context - pointer to whatever we need to pass to callback
*/
-void cli_add_command(Cli* cli, const char* name, CliCallback callback, void* context);
+void cli_add_command(
+ Cli* cli,
+ const char* name,
+ CliCommandFlag flags,
+ CliCallback callback,
+ void* context);
/* Print unified cmd usage tip
* @param cmd - cmd name
diff --git a/applications/cli/cli_commands.c b/applications/cli/cli_commands.c
index 90d5995d..89981384 100644
--- a/applications/cli/cli_commands.c
+++ b/applications/cli/cli_commands.c
@@ -376,17 +376,18 @@ void cli_command_free(Cli* cli, string_t args, void* context) {
}
void cli_commands_init(Cli* cli) {
- cli_add_command(cli, "!", cli_command_device_info, NULL);
- cli_add_command(cli, "device_info", cli_command_device_info, NULL);
+ cli_add_command(cli, "!", CliCommandFlagParallelSafe, cli_command_device_info, NULL);
+ cli_add_command(cli, "device_info", CliCommandFlagParallelSafe, cli_command_device_info, NULL);
- cli_add_command(cli, "?", cli_command_help, NULL);
- cli_add_command(cli, "help", cli_command_help, NULL);
+ cli_add_command(cli, "?", CliCommandFlagParallelSafe, cli_command_help, NULL);
+ cli_add_command(cli, "help", CliCommandFlagParallelSafe, cli_command_help, NULL);
- cli_add_command(cli, "date", cli_command_date, NULL);
- cli_add_command(cli, "log", cli_command_log, NULL);
- cli_add_command(cli, "vibro", cli_command_vibro, NULL);
- cli_add_command(cli, "led", cli_command_led, NULL);
- cli_add_command(cli, "gpio_set", cli_command_gpio_set, NULL);
- cli_add_command(cli, "ps", cli_command_ps, NULL);
- cli_add_command(cli, "free", cli_command_free, NULL);
+ cli_add_command(cli, "date", CliCommandFlagParallelSafe, cli_command_date, NULL);
+ cli_add_command(cli, "log", CliCommandFlagParallelSafe, cli_command_log, NULL);
+ cli_add_command(cli, "ps", CliCommandFlagParallelSafe, cli_command_ps, NULL);
+ cli_add_command(cli, "free", CliCommandFlagParallelSafe, cli_command_free, NULL);
+
+ cli_add_command(cli, "vibro", CliCommandFlagDefault, cli_command_vibro, NULL);
+ cli_add_command(cli, "led", CliCommandFlagDefault, cli_command_led, NULL);
+ cli_add_command(cli, "gpio_set", CliCommandFlagDefault, cli_command_gpio_set, NULL);
}
diff --git a/applications/cli/cli_i.h b/applications/cli/cli_i.h
index 943d6304..e60fa450 100755
--- a/applications/cli/cli_i.h
+++ b/applications/cli/cli_i.h
@@ -15,6 +15,7 @@
typedef struct {
CliCallback callback;
void* context;
+ uint32_t flags;
} CliCommand;
BPTREE_DEF2(