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