[FL-1239] CLI commands readable list #464
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									734820c137
								
							
						
					
					
						commit
						5000424c42
					
				| @ -5,7 +5,7 @@ | |||||||
| 
 | 
 | ||||||
| Cli* cli_alloc() { | Cli* cli_alloc() { | ||||||
|     Cli* cli = furi_alloc(sizeof(Cli)); |     Cli* cli = furi_alloc(sizeof(Cli)); | ||||||
|     CliCommandDict_init(cli->commands); |     CliCommandTree_init(cli->commands); | ||||||
| 
 | 
 | ||||||
|     cli->mutex = osMutexNew(NULL); |     cli->mutex = osMutexNew(NULL); | ||||||
|     furi_check(cli->mutex); |     furi_check(cli->mutex); | ||||||
| @ -126,7 +126,7 @@ void cli_enter(Cli* cli) { | |||||||
| 
 | 
 | ||||||
|     // Search for command
 |     // Search for command
 | ||||||
|     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); |     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); | ||||||
|     CliCommand* cli_command = CliCommandDict_get(cli->commands, command); |     CliCommand* cli_command = CliCommandTree_get(cli->commands, command); | ||||||
|     furi_check(osMutexRelease(cli->mutex) == osOK); |     furi_check(osMutexRelease(cli->mutex) == osOK); | ||||||
|     if(cli_command) { |     if(cli_command) { | ||||||
|         cli_nl(); |         cli_nl(); | ||||||
| @ -190,7 +190,7 @@ void cli_add_command(Cli* cli, const char* name, CliCallback callback, void* con | |||||||
|     c.context = context; |     c.context = context; | ||||||
| 
 | 
 | ||||||
|     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); |     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); | ||||||
|     CliCommandDict_set_at(cli->commands, name_str, c); |     CliCommandTree_set_at(cli->commands, name_str, c); | ||||||
|     furi_check(osMutexRelease(cli->mutex) == osOK); |     furi_check(osMutexRelease(cli->mutex) == osOK); | ||||||
| 
 | 
 | ||||||
|     string_clear(name_str); |     string_clear(name_str); | ||||||
| @ -207,7 +207,7 @@ void cli_delete_command(Cli* cli, const char* name) { | |||||||
|     } while(name_replace != STRING_FAILURE); |     } while(name_replace != STRING_FAILURE); | ||||||
| 
 | 
 | ||||||
|     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); |     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); | ||||||
|     CliCommandDict_erase(cli->commands, name_str); |     CliCommandTree_erase(cli->commands, name_str); | ||||||
|     furi_check(osMutexRelease(cli->mutex) == osOK); |     furi_check(osMutexRelease(cli->mutex) == osOK); | ||||||
| 
 | 
 | ||||||
|     string_clear(name_str); |     string_clear(name_str); | ||||||
|  | |||||||
| @ -10,11 +10,23 @@ void cli_command_help(string_t args, void* context) { | |||||||
|     printf("Commands we have:"); |     printf("Commands we have:"); | ||||||
| 
 | 
 | ||||||
|     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); |     furi_check(osMutexAcquire(cli->mutex, osWaitForever) == osOK); | ||||||
|     CliCommandDict_it_t it; |     // Get the middle element
 | ||||||
|     for(CliCommandDict_it(it, cli->commands); !CliCommandDict_end_p(it); CliCommandDict_next(it)) { |     CliCommandTree_it_t it_mid; | ||||||
|         CliCommandDict_itref_t* ref = CliCommandDict_ref(it); |     uint8_t cmd_num = CliCommandTree_size(cli->commands); | ||||||
|         printf(" "); |     uint8_t i = cmd_num / 2 + cmd_num % 2; | ||||||
|         printf(string_get_cstr(ref->key)); |     for(CliCommandTree_it(it_mid, cli->commands); i; --i, CliCommandTree_next(it_mid)) | ||||||
|  |         ; | ||||||
|  |     // Use 2 iterators from start and middle to show 2 columns
 | ||||||
|  |     CliCommandTree_it_t it_i; | ||||||
|  |     CliCommandTree_it_t it_j; | ||||||
|  |     for(CliCommandTree_it(it_i, cli->commands), CliCommandTree_it_set(it_j, it_mid); | ||||||
|  |         !CliCommandTree_it_equal_p(it_i, it_mid); | ||||||
|  |         CliCommandTree_next(it_i), CliCommandTree_next(it_j)) { | ||||||
|  |         CliCommandTree_itref_t* ref = CliCommandTree_ref(it_i); | ||||||
|  |         printf("\r\n"); | ||||||
|  |         printf("%-30s", string_get_cstr(ref->key_ptr[0])); | ||||||
|  |         ref = CliCommandTree_ref(it_j); | ||||||
|  |         printf(string_get_cstr(ref->key_ptr[0])); | ||||||
|     }; |     }; | ||||||
|     furi_check(osMutexRelease(cli->mutex) == osOK); |     furi_check(osMutexRelease(cli->mutex) == osOK); | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								applications/cli/cli_i.h
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										12
									
								
								applications/cli/cli_i.h
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @ -6,15 +6,23 @@ | |||||||
| #include <api-hal.h> | #include <api-hal.h> | ||||||
| 
 | 
 | ||||||
| #include <m-dict.h> | #include <m-dict.h> | ||||||
|  | #include <m-bptree.h> | ||||||
| 
 | 
 | ||||||
| #define CLI_LINE_SIZE_MAX | #define CLI_LINE_SIZE_MAX | ||||||
|  | #define CLI_COMMANDS_TREE_RANK 4 | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     CliCallback callback; |     CliCallback callback; | ||||||
|     void* context; |     void* context; | ||||||
| } CliCommand; | } CliCommand; | ||||||
| 
 | 
 | ||||||
| DICT_DEF2(CliCommandDict, string_t, STRING_OPLIST, CliCommand, M_POD_OPLIST) | BPTREE_DEF2( | ||||||
|  |     CliCommandTree, | ||||||
|  |     CLI_COMMANDS_TREE_RANK, | ||||||
|  |     string_t, | ||||||
|  |     STRING_OPLIST, | ||||||
|  |     CliCommand, | ||||||
|  |     M_POD_OPLIST) | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     CliSymbolAsciiSOH = 0x01, |     CliSymbolAsciiSOH = 0x01, | ||||||
| @ -31,7 +39,7 @@ typedef enum { | |||||||
| } CliSymbols; | } CliSymbols; | ||||||
| 
 | 
 | ||||||
| struct Cli { | struct Cli { | ||||||
|     CliCommandDict_t commands; |     CliCommandTree_t commands; | ||||||
|     osMutexId_t mutex; |     osMutexId_t mutex; | ||||||
|     string_t line; |     string_t line; | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 gornekich
						gornekich