Make printf great again (#1438)
* Printf lib: wrap *printf* functions * Printf lib, FW: drop sprintf. Dolphin: dump timestamp as is, wo asctime. * FW: remove sniprintf, wrap assert functions * Printf lib: wrap putc, puts, putchar * Printf: a working but not thread-safe concept. * Poorly wrap fflush * stdglue: buffers * Core: thread local buffers * Core: move stdglue to thread api, add ability to get FuriThread instance of current thread. * RPC tests: replace sprintf with snprintf * Applications: use new stdout api * Printf lib: wrap more printf-like and stdout functions * Documentation * Apps: snprintf size fixes Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		@@ -42,6 +42,12 @@ typedef void* FuriThreadId;
 | 
			
		||||
 */
 | 
			
		||||
typedef int32_t (*FuriThreadCallback)(void* context);
 | 
			
		||||
 | 
			
		||||
/** Write to stdout callback
 | 
			
		||||
 * @param      data     pointer to data
 | 
			
		||||
 * @param      size     data size @warning your handler must consume everything
 | 
			
		||||
 */
 | 
			
		||||
typedef void (*FuriThreadStdoutWriteCallback)(const char* data, size_t size);
 | 
			
		||||
 | 
			
		||||
/** FuriThread state change calback called upon thread state change
 | 
			
		||||
 * @param      state    new thread state
 | 
			
		||||
 * @param      context  callback context
 | 
			
		||||
@@ -177,6 +183,12 @@ int32_t furi_thread_get_return_code(FuriThread* thread);
 | 
			
		||||
 */
 | 
			
		||||
FuriThreadId furi_thread_get_current_id();
 | 
			
		||||
 | 
			
		||||
/** Get FuriThread instance for current thread
 | 
			
		||||
 * 
 | 
			
		||||
 * @return FuriThread* 
 | 
			
		||||
 */
 | 
			
		||||
FuriThread* furi_thread_get_current();
 | 
			
		||||
 | 
			
		||||
/** Return control to scheduler */
 | 
			
		||||
void furi_thread_yield();
 | 
			
		||||
 | 
			
		||||
@@ -194,6 +206,29 @@ const char* furi_thread_get_name(FuriThreadId thread_id);
 | 
			
		||||
 | 
			
		||||
uint32_t furi_thread_get_stack_space(FuriThreadId thread_id);
 | 
			
		||||
 | 
			
		||||
/** Set STDOUT callback for thread
 | 
			
		||||
 * 
 | 
			
		||||
 * @param      callback  callback or NULL to clear
 | 
			
		||||
 * 
 | 
			
		||||
 * @return     true on success, otherwise fail
 | 
			
		||||
 */
 | 
			
		||||
bool furi_thread_set_stdout_callback(FuriThreadStdoutWriteCallback callback);
 | 
			
		||||
 | 
			
		||||
/** Write data to buffered STDOUT
 | 
			
		||||
 * 
 | 
			
		||||
 * @param data input data
 | 
			
		||||
 * @param size input data size
 | 
			
		||||
 * 
 | 
			
		||||
 * @return size_t written data size
 | 
			
		||||
 */
 | 
			
		||||
size_t furi_thread_stdout_write(const char* data, size_t size);
 | 
			
		||||
 | 
			
		||||
/** Flush data to STDOUT
 | 
			
		||||
 * 
 | 
			
		||||
 * @return int32_t error code
 | 
			
		||||
 */
 | 
			
		||||
int32_t furi_thread_stdout_flush();
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user