* Update protobuf definitions * Add Property subsystem entry point function * Key-based system info and power info function stubs * Remove unneeded functions * Working power info * Working system info * Replace #defines with string literals * Remove unneeded field * Simplify system info formatting * Refactor output callback handling * Handle the last info element correctly * Optimise power info, rename methods * Add comments * Add power debug * Remove unneeded definitions * Rename some files and functions * Update protobuf definitions * Implement App GetError and DataExchange APIs * Send GetErrorReply with correct command_id * Add RPC debug app stub * Add more scenes * Add warning, increase stack size * Add receive data exchange scene * Improve data exchange * Add notifications * Update application requirements * Bump format version for property-based infos * Correctly reset error text * RCP: sync protobuf repo to latest release tag Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
		
			
				
	
	
		
			34 lines
		
	
	
		
			856 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			856 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "property.h"
 | 
						|
 | 
						|
#include <core/check.h>
 | 
						|
 | 
						|
void property_value_out(PropertyValueContext* ctx, const char* fmt, unsigned int nparts, ...) {
 | 
						|
    furi_assert(ctx);
 | 
						|
    furi_string_reset(ctx->key);
 | 
						|
 | 
						|
    va_list args;
 | 
						|
    va_start(args, nparts);
 | 
						|
 | 
						|
    for(size_t i = 0; i < nparts; ++i) {
 | 
						|
        const char* keypart = va_arg(args, const char*);
 | 
						|
        furi_string_cat(ctx->key, keypart);
 | 
						|
        if(i < nparts - 1) {
 | 
						|
            furi_string_push_back(ctx->key, ctx->sep);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    const char* value_str;
 | 
						|
 | 
						|
    if(fmt) {
 | 
						|
        furi_string_vprintf(ctx->value, fmt, args);
 | 
						|
        value_str = furi_string_get_cstr(ctx->value);
 | 
						|
    } else {
 | 
						|
        // C string passthrough (no formatting)
 | 
						|
        value_str = va_arg(args, const char*);
 | 
						|
    }
 | 
						|
 | 
						|
    va_end(args);
 | 
						|
 | 
						|
    ctx->out(furi_string_get_cstr(ctx->key), value_str, ctx->last, ctx->context);
 | 
						|
}
 |