aboutsummaryrefslogtreecommitdiff
path: root/platforms/avr/xprintf.h
diff options
context:
space:
mode:
Diffstat (limited to 'platforms/avr/xprintf.h')
-rw-r--r--platforms/avr/xprintf.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/platforms/avr/xprintf.h b/platforms/avr/xprintf.h
new file mode 100644
index 000000000..80834f171
--- /dev/null
+++ b/platforms/avr/xprintf.h
@@ -0,0 +1,103 @@
1/*---------------------------------------------------------------------------
2 Extended itoa, puts and printf (C)ChaN, 2011
3-----------------------------------------------------------------------------*/
4
5#pragma once
6
7#include <inttypes.h>
8#include <avr/pgmspace.h>
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14extern void (*xfunc_out)(uint8_t);
15#define xdev_out(func) xfunc_out = (void (*)(uint8_t))(func)
16
17/* This is a pointer to user defined output function. It must be initialized
18 before using this modle.
19*/
20
21void xputc(char chr);
22
23/* This is a stub function to forward outputs to user defined output function.
24 All outputs from this module are output via this function.
25*/
26
27/*-----------------------------------------------------------------------------*/
28void xputs(const char *string_p);
29
30/* The string placed in the ROM is forwarded to xputc() directly.
31 */
32
33/*-----------------------------------------------------------------------------*/
34void xitoa(long value, char radix, char width);
35
36/* Extended itoa().
37
38 value radix width output
39 100 10 6 " 100"
40 100 10 -6 "000100"
41 100 10 0 "100"
42 4294967295 10 0 "4294967295"
43 4294967295 -10 0 "-1"
44 655360 16 -8 "000A0000"
45 1024 16 0 "400"
46 0x55 2 -8 "01010101"
47*/
48
49/*-----------------------------------------------------------------------------*/
50#define xprintf(format, ...) __xprintf(PSTR(format), ##__VA_ARGS__)
51#define xsprintf(str, format, ...) __xsprintf(str, PSTR(format), ##__VA_ARGS__)
52#define xfprintf(func, format, ...) __xfprintf(func, PSTR(format), ##__VA_ARGS__)
53
54void __xprintf(const char *format_p, ...); /* Send formatted string to the registered device */
55// void __xsprintf(char*, const char *format_p, ...); /* Put formatted string to the memory */
56// void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */
57
58/* Format string is placed in the ROM. The format flags is similar to printf().
59
60 %[flag][width][size]type
61
62 flag
63 A '0' means filled with '0' when output is shorter than width.
64 ' ' is used in default. This is effective only numeral type.
65 width
66 Minimum width in decimal number. This is effective only numeral type.
67 Default width is zero.
68 size
69 A 'l' means the argument is long(32bit). Default is short(16bit).
70 This is effective only numeral type.
71 type
72 'c' : Character, argument is the value
73 's' : String placed on the RAM, argument is the pointer
74 'S' : String placed on the ROM, argument is the pointer
75 'd' : Signed decimal, argument is the value
76 'u' : Unsigned decimal, argument is the value
77 'X' : Hexdecimal, argument is the value
78 'b' : Binary, argument is the value
79 '%' : '%'
80
81*/
82
83/*-----------------------------------------------------------------------------*/
84char xatoi(char **str, long *ret);
85
86/* Get value of the numeral string.
87
88 str
89 Pointer to pointer to source string
90
91 "0b11001010" binary
92 "0377" octal
93 "0xff800" hexdecimal
94 "1250000" decimal
95 "-25000" decimal
96
97 ret
98 Pointer to return value
99*/
100
101#ifdef __cplusplus
102}
103#endif