[FL-1491] Gui: input injection in screen stream (#573)
* Gui: input injection in screen stream * Cli: expose ASCII table in public header
This commit is contained in:
		
							parent
							
								
									fe3bedbd3c
								
							
						
					
					
						commit
						c3fda0c8c3
					
				| @ -6,6 +6,20 @@ extern "C" { | ||||
| 
 | ||||
| #include <m-string.h> | ||||
| 
 | ||||
| typedef enum { | ||||
|     CliSymbolAsciiSOH = 0x01, | ||||
|     CliSymbolAsciiETX = 0x03, | ||||
|     CliSymbolAsciiEOT = 0x04, | ||||
|     CliSymbolAsciiBell = 0x07, | ||||
|     CliSymbolAsciiBackspace = 0x08, | ||||
|     CliSymbolAsciiTab = 0x09, | ||||
|     CliSymbolAsciiCR = 0x0D, | ||||
|     CliSymbolAsciiEsc = 0x1B, | ||||
|     CliSymbolAsciiUS = 0x1F, | ||||
|     CliSymbolAsciiSpace = 0x20, | ||||
|     CliSymbolAsciiDel = 0x7F, | ||||
| } CliSymbols; | ||||
| 
 | ||||
| /* Cli type
 | ||||
|  * Anonymous structure. Use cli_i.h if you need to go deeper. | ||||
|  */ | ||||
|  | ||||
| @ -24,20 +24,6 @@ BPTREE_DEF2( | ||||
|     CliCommand, | ||||
|     M_POD_OPLIST) | ||||
| 
 | ||||
| typedef enum { | ||||
|     CliSymbolAsciiSOH = 0x01, | ||||
|     CliSymbolAsciiETX = 0x03, | ||||
|     CliSymbolAsciiEOT = 0x04, | ||||
|     CliSymbolAsciiBell = 0x07, | ||||
|     CliSymbolAsciiBackspace = 0x08, | ||||
|     CliSymbolAsciiTab = 0x09, | ||||
|     CliSymbolAsciiCR = 0x0D, | ||||
|     CliSymbolAsciiEsc = 0x1B, | ||||
|     CliSymbolAsciiUS = 0x1F, | ||||
|     CliSymbolAsciiSpace = 0x20, | ||||
|     CliSymbolAsciiDel = 0x7F, | ||||
| } CliSymbols; | ||||
| 
 | ||||
| struct Cli { | ||||
|     CliCommandTree_t commands; | ||||
|     osMutexId_t mutex; | ||||
|  | ||||
| @ -262,7 +262,24 @@ void gui_cli_screen_stream(Cli* cli, string_t args, void* context) { | ||||
|     gui_set_framebuffer_callback_context(gui, gui); | ||||
|     gui_set_framebuffer_callback(gui, gui_cli_screen_stream_callback); | ||||
|     gui_redraw(gui); | ||||
|     cli_getc(gui->cli); | ||||
| 
 | ||||
|     // Wait for control events
 | ||||
|     while(true) { | ||||
|         char c = cli_getc(gui->cli); | ||||
|         if(c == CliSymbolAsciiEsc) { | ||||
|             c = cli_getc(gui->cli); | ||||
|             if(c == 'i') { | ||||
|                 InputEvent input_event; | ||||
|                 input_event.key = cli_getc(gui->cli); | ||||
|                 input_event.type = cli_getc(gui->cli); | ||||
|                 osMessageQueuePut(gui->input_queue, &input_event, 0, osWaitForever); | ||||
|                 osThreadFlagsSet(gui->thread, GUI_THREAD_FLAG_INPUT); | ||||
|             } | ||||
|         } else { | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     gui_set_framebuffer_callback(gui, NULL); | ||||
|     gui_set_framebuffer_callback_context(gui, NULL); | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 あく
						あく