xref: /DragonOS/kernel/src/common/printk.h (revision 5b59005f930266d0e9c0092373e894826150f862)
1*2813126eSlogin //
2*2813126eSlogin // Created by longjin on 2022/1/21.
3*2813126eSlogin //
4*2813126eSlogin #pragma once
5*2813126eSlogin #pragma GCC push_options
6*2813126eSlogin #pragma GCC optimize("O0")
7*2813126eSlogin #define PAD_ZERO 1 // 0填充
8*2813126eSlogin #define LEFT 2     // 靠左对齐
9*2813126eSlogin #define RIGHT 4    // 靠右对齐
10*2813126eSlogin #define PLUS 8     // 在正数前面显示加号
11*2813126eSlogin #define SPACE 16
12*2813126eSlogin #define SPECIAL 32 // 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X'
13*2813126eSlogin #define SMALL 64   // 十进制以上数字显示小写字母
14*2813126eSlogin #define SIGN 128   // 显示符号位
15*2813126eSlogin 
16*2813126eSlogin #define is_digit(c) ((c) >= '0' && (c) <= '9') // 用来判断是否是数字的宏
17*2813126eSlogin 
18*2813126eSlogin // 字体颜色的宏定义
19*2813126eSlogin #define WHITE 0x00ffffff  // 白
20*2813126eSlogin #define BLACK 0x00000000  // 黑
21*2813126eSlogin #define RED 0x00ff0000    // 红
22*2813126eSlogin #define ORANGE 0x00ff8000 // 橙
23*2813126eSlogin #define YELLOW 0x00ffff00 // 黄
24*2813126eSlogin #define GREEN 0x0000ff00  // 绿
25*2813126eSlogin #define BLUE 0x000000ff   // 蓝
26*2813126eSlogin #define INDIGO 0x0000ffff // 靛
27*2813126eSlogin #define PURPLE 0x008000ff // 紫
28*2813126eSlogin 
29*2813126eSlogin // 异常的宏定义
30*2813126eSlogin #define EPOS_OVERFLOW 1 // 坐标溢出
31*2813126eSlogin #define EFB_MISMATCH 2  // 帧缓冲区与指定的屏幕大小不匹配
32*2813126eSlogin #define EUNSUPPORTED 3  // 当前操作暂不被支持
33*2813126eSlogin 
34*2813126eSlogin #include "glib.h"
35*2813126eSlogin #include <stdarg.h>
36*2813126eSlogin 
37*2813126eSlogin /**
38*2813126eSlogin  * @brief 将字符串按照fmt和args中的内容进行格式化,然后保存到buf中
39*2813126eSlogin  *
40*2813126eSlogin  * @param buf 结果缓冲区
41*2813126eSlogin  * @param fmt 格式化字符串
42*2813126eSlogin  * @param args 内容
43*2813126eSlogin  * @return 最终字符串的长度
44*2813126eSlogin  */
45*2813126eSlogin int vsprintf(char *buf, const char *fmt, va_list args);
46*2813126eSlogin 
47*2813126eSlogin /**
48*2813126eSlogin  * @brief 将字符串按照fmt和args中的内容进行格式化,截取字符串前buf_size-1,保存到buf中
49*2813126eSlogin  *
50*2813126eSlogin  * @param buf 结果缓冲区,大小为buf_size
51*2813126eSlogin  * @param fmt 格式化字符串
52*2813126eSlogin  * @param buf_size 缓冲区长度
53*2813126eSlogin  * @param args 内容
54*2813126eSlogin  * @return 最终字符串的长度
55*2813126eSlogin  */
56*2813126eSlogin int vsnprintf(char *buf, const char *fmt, int buf_size, va_list args);
57*2813126eSlogin 
58*2813126eSlogin /**
59*2813126eSlogin  * @brief 格式化打印字符串
60*2813126eSlogin  *
61*2813126eSlogin  * @param FRcolor 前景色
62*2813126eSlogin  * @param BKcolor 背景色
63*2813126eSlogin  * @param ... 格式化字符串
64*2813126eSlogin  */
65*2813126eSlogin 
66*2813126eSlogin #define printk(...) printk_color(WHITE, BLACK, __VA_ARGS__)
67*2813126eSlogin 
68*2813126eSlogin int printk_color(unsigned int FRcolor, unsigned int BKcolor, const char *fmt, ...);
69*2813126eSlogin 
70*2813126eSlogin /**
71*2813126eSlogin  * @brief 格式化字符串并输出到buf
72*2813126eSlogin  *
73*2813126eSlogin  * @param buf 输出缓冲区
74*2813126eSlogin  * @param fmt 格式
75*2813126eSlogin  * @param ... 参数
76*2813126eSlogin  * @return int 字符串长度
77*2813126eSlogin  */
78*2813126eSlogin int sprintk(char *buf, const char *fmt, ...);
79*2813126eSlogin #pragma GCC pop_options