diff options
Diffstat (limited to 'common/xprintf.h')
| -rw-r--r-- | common/xprintf.h | 103 | 
1 files changed, 103 insertions, 0 deletions
diff --git a/common/xprintf.h b/common/xprintf.h new file mode 100644 index 000000000..cddec9940 --- /dev/null +++ b/common/xprintf.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------------
 +   Extended itoa, puts and printf                    (C)ChaN, 2011
 +-----------------------------------------------------------------------------*/
 +
 +#ifndef XPRINTF_H
 +#define XPRINTF_H
 +
 +#include <inttypes.h>
 +#include <avr/pgmspace.h>
 +
 +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 prog_char *string);
 +
 +/*  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 prog_char *format, ...);	/* Send formatted string to the registered device */
 +void __xsprintf(char*, const prog_char *format, ...);	/* Put formatted string to the memory */
 +void __xfprintf(void(*func)(uint8_t), const prog_char *format, ...); /* 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
 +*/
 +
 +#endif
 +
  | 
