mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-03 23:02:34 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*---------------------------------------------------------------------------
 | 
						|
   Extended itoa, puts and printf                    (C)ChaN, 2011
 | 
						|
-----------------------------------------------------------------------------*/
 | 
						|
 | 
						|
#ifndef XPRINTF_H
 | 
						|
#define XPRINTF_H
 | 
						|
 | 
						|
#include <inttypes.h>
 | 
						|
#include <avr/pgmspace.h>
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
extern void (*xfunc_out)(uint8_t);
 | 
						|
#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func)
 | 
						|
 | 
						|
/* This is a pointer to user defined output function. It must be initialized
 | 
						|
   before using this modle.
 | 
						|
*/
 | 
						|
 | 
						|
void xputc(char chr);
 | 
						|
 | 
						|
/* This is a stub function to forward outputs to user defined output function.
 | 
						|
   All outputs from this module are output via this function.
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
void xputs(const char *string_p);
 | 
						|
 | 
						|
/*  The string placed in the ROM is forwarded to xputc() directly.
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
void xitoa(long value, char radix, char width);
 | 
						|
 | 
						|
/* Extended itoa().
 | 
						|
 | 
						|
      value  radix  width   output
 | 
						|
        100     10      6   "   100"
 | 
						|
        100     10     -6   "000100"
 | 
						|
        100     10      0   "100"
 | 
						|
 4294967295     10      0   "4294967295"
 | 
						|
 4294967295    -10      0   "-1"
 | 
						|
     655360     16     -8   "000A0000"
 | 
						|
       1024     16      0   "400"
 | 
						|
       0x55      2     -8   "01010101"
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
#define xprintf(format, ...)            __xprintf(PSTR(format), ##__VA_ARGS__)
 | 
						|
#define xsprintf(str, format, ...)      __xsprintf(str, PSTR(format), ##__VA_ARGS__)
 | 
						|
#define xfprintf(func, format, ...)     __xfprintf(func, PSTR(format), ##__VA_ARGS__)
 | 
						|
 | 
						|
void __xprintf(const char *format_p, ...);	/* Send formatted string to the registered device */
 | 
						|
void __xsprintf(char*, const char *format_p, ...);	/* Put formatted string to the memory */
 | 
						|
void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */
 | 
						|
 | 
						|
/* Format string is placed in the ROM. The format flags is similar to printf().
 | 
						|
 | 
						|
   %[flag][width][size]type
 | 
						|
 | 
						|
   flag
 | 
						|
     A '0' means filled with '0' when output is shorter than width.
 | 
						|
     ' ' is used in default. This is effective only numeral type.
 | 
						|
   width
 | 
						|
     Minimum width in decimal number. This is effective only numeral type.
 | 
						|
     Default width is zero.
 | 
						|
   size
 | 
						|
     A 'l' means the argument is long(32bit). Default is short(16bit).
 | 
						|
     This is effective only numeral type.
 | 
						|
   type
 | 
						|
     'c' : Character, argument is the value
 | 
						|
     's' : String placed on the RAM, argument is the pointer
 | 
						|
     'S' : String placed on the ROM, argument is the pointer
 | 
						|
     'd' : Signed decimal, argument is the value
 | 
						|
     'u' : Unsigned decimal, argument is the value
 | 
						|
     'X' : Hexdecimal, argument is the value
 | 
						|
     'b' : Binary, argument is the value
 | 
						|
     '%' : '%'
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/*-----------------------------------------------------------------------------*/
 | 
						|
char xatoi(char **str, long *ret);
 | 
						|
 | 
						|
/* Get value of the numeral string. 
 | 
						|
 | 
						|
  str
 | 
						|
    Pointer to pointer to source string
 | 
						|
 | 
						|
    "0b11001010" binary
 | 
						|
    "0377" octal
 | 
						|
    "0xff800" hexdecimal
 | 
						|
    "1250000" decimal
 | 
						|
    "-25000" decimal
 | 
						|
 | 
						|
  ret
 | 
						|
    Pointer to return value
 | 
						|
*/
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 | 
						|
 |