Cli: insomnia safe flags and better insomnia handling in cli (#587)
This commit is contained in:
		| @@ -142,6 +142,37 @@ static void cli_normalize_line(Cli* cli) { | |||||||
|     cli->cursor_position = string_size(cli->line); |     cli->cursor_position = string_size(cli->line); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void cli_execute_command(Cli* cli, CliCommand* command, string_t args) { | ||||||
|  |     if(!(command->flags & CliCommandFlagInsomniaSafe)) { | ||||||
|  |         api_hal_power_insomnia_enter(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Ensure that we running alone | ||||||
|  |     if(!(command->flags & CliCommandFlagParallelSafe)) { | ||||||
|  |         Loader* loader = furi_record_open("loader"); | ||||||
|  |         bool safety_lock = loader_lock(loader); | ||||||
|  |         if(safety_lock) { | ||||||
|  |             // Execute command | ||||||
|  |             command->callback(cli, args, 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 | ||||||
|  |         command->callback(cli, args, command->context); | ||||||
|  |         // Clear line | ||||||
|  |         cli_reset(cli); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if(!(command->flags & CliCommandFlagInsomniaSafe)) { | ||||||
|  |         api_hal_power_insomnia_exit(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| static void cli_handle_enter(Cli* cli) { | static void cli_handle_enter(Cli* cli) { | ||||||
|     cli_normalize_line(cli); |     cli_normalize_line(cli); | ||||||
|  |  | ||||||
| @@ -171,26 +202,7 @@ static void cli_handle_enter(Cli* cli) { | |||||||
|     CliCommand* cli_command = CliCommandTree_get(cli->commands, command); |     CliCommand* cli_command = CliCommandTree_get(cli->commands, command); | ||||||
|     if(cli_command) { |     if(cli_command) { | ||||||
|         cli_nl(cli); |         cli_nl(cli); | ||||||
|         // Ensure that we running alone |         cli_execute_command(cli, cli_command, args); | ||||||
|         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 { |     } else { | ||||||
|         cli_nl(cli); |         cli_nl(cli); | ||||||
|         printf( |         printf( | ||||||
|   | |||||||
| @@ -24,6 +24,7 @@ typedef enum { | |||||||
|     CliCommandFlagDefault = 0, /** Default, loader lock is used */ |     CliCommandFlagDefault = 0, /** Default, loader lock is used */ | ||||||
|     CliCommandFlagParallelSafe = |     CliCommandFlagParallelSafe = | ||||||
|         (1 << 0), /** Safe to run in parallel with other apps, loader lock is not used */ |         (1 << 0), /** Safe to run in parallel with other apps, loader lock is not used */ | ||||||
|  |     CliCommandFlagInsomniaSafe = (1 << 1), /** Safe to run with insomnia mode on */ | ||||||
| } CliCommandFlag; | } CliCommandFlag; | ||||||
|  |  | ||||||
| /* Cli type | /* Cli type | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user