Implement transparent printf support
This commit is contained in:
		
							parent
							
								
									0727e1560a
								
							
						
					
					
						commit
						d39d2265e3
					
				| @ -1,3 +1,5 @@ | |||||||
|  | #define _GNU_SOURCE | ||||||
|  | #include <stdio.h> | ||||||
| #include "furi.h" | #include "furi.h" | ||||||
| #include "main.h" | #include "main.h" | ||||||
| 
 | 
 | ||||||
| @ -7,6 +9,26 @@ void handle_uart_write(const void* data, size_t size, void* ctx) { | |||||||
| 	HAL_UART_Transmit(&DEBUG_UART, (uint8_t*)data, (uint16_t)size, HAL_MAX_DELAY); | 	HAL_UART_Transmit(&DEBUG_UART, (uint8_t*)data, (uint16_t)size, HAL_MAX_DELAY); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static ssize_t stdout_write(void *_cookie, const char *buf, size_t n) { | ||||||
|  |     FuriRecordSubscriber *log = pvTaskGetThreadLocalStoragePointer(NULL, 0); | ||||||
|  |     if (log == NULL) { | ||||||
|  |         log = furi_open("tty", false, false, NULL, NULL, NULL); | ||||||
|  |         vTaskSetThreadLocalStoragePointer(NULL, 0, log); | ||||||
|  |     } | ||||||
|  |     if (buf == 0) { | ||||||
|  |         /*
 | ||||||
|  |          * This means that we should flush internal buffers.  Since we | ||||||
|  |          * don't we just return.  (Remember, "handle" == -1 means that all | ||||||
|  |          * handles should be flushed.) | ||||||
|  |          */ | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     furi_write(log, buf, n); | ||||||
|  | 
 | ||||||
|  |     return n; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool register_tty_uart() { | bool register_tty_uart() { | ||||||
| 	if(!furi_create("tty", NULL, 0)) { | 	if(!furi_create("tty", NULL, 0)) { | ||||||
| 		return false; | 		return false; | ||||||
| @ -16,5 +38,14 @@ bool register_tty_uart() { | |||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |     FILE* fp = fopencookie(NULL, "w+", (cookie_io_functions_t) { | ||||||
|  |         .read = NULL, | ||||||
|  |         .write = stdout_write, | ||||||
|  |         .seek = NULL, | ||||||
|  |         .close = NULL, | ||||||
|  |     }); | ||||||
|  |     setvbuf(fp, NULL, _IONBF, 0); | ||||||
|  |     stdout = fp; | ||||||
|  | 
 | ||||||
| 	return true; | 	return true; | ||||||
| } | } | ||||||
| @ -68,6 +68,7 @@ | |||||||
| #define configQUEUE_REGISTRY_SIZE                8 | #define configQUEUE_REGISTRY_SIZE                8 | ||||||
| #define configUSE_PORT_OPTIMISED_TASK_SELECTION  1 | #define configUSE_PORT_OPTIMISED_TASK_SELECTION  1 | ||||||
| #define configUSE_COUNTING_SEMAPHORES			 1 | #define configUSE_COUNTING_SEMAPHORES			 1 | ||||||
|  | #define configNUM_THREAD_LOCAL_STORAGE_POINTERS  1 | ||||||
| 
 | 
 | ||||||
| /* Co-routine definitions. */ | /* Co-routine definitions. */ | ||||||
| #define configUSE_CO_ROUTINES                    0 | #define configUSE_CO_ROUTINES                    0 | ||||||
|  | |||||||
| @ -68,6 +68,7 @@ | |||||||
| #define configQUEUE_REGISTRY_SIZE                8 | #define configQUEUE_REGISTRY_SIZE                8 | ||||||
| #define configUSE_PORT_OPTIMISED_TASK_SELECTION  1 | #define configUSE_PORT_OPTIMISED_TASK_SELECTION  1 | ||||||
| #define configUSE_COUNTING_SEMAPHORES			 1 | #define configUSE_COUNTING_SEMAPHORES			 1 | ||||||
|  | #define configNUM_THREAD_LOCAL_STORAGE_POINTERS  1 | ||||||
| 
 | 
 | ||||||
| /* Co-routine definitions. */ | /* Co-routine definitions. */ | ||||||
| #define configUSE_CO_ROUTINES                    0 | #define configUSE_CO_ROUTINES                    0 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Vadim Kaushan
						Vadim Kaushan