Cli: insomnia safe flags and better insomnia handling in cli (#587)
This commit is contained in:
		
							parent
							
								
									ddfdbc0530
								
							
						
					
					
						commit
						b6f6378628
					
				@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user