DragonOS/kernel/common/printk.h

153 lines
3.9 KiB
C
Raw Normal View History

//
// Created by longjin on 2022/1/21.
//
#pragma once
#define PAD_ZERO 1 // 0填充
#define LEFT 2 // 靠左对齐
#define RIGHT 4 // 靠右对齐
#define PLUS 8 // 在正数前面显示加号
#define SPACE 16
#define SPECIAL 32 // 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X'
#define SMALL 64 // 十进制以上数字显示小写字母
#define SIGN 128 // 显示符号位
#define is_digit(c) ((c) >= '0' && (c) <= '9') // 用来判断是否是数字的宏
// 字体颜色的宏定义
#define WHITE 0x00ffffff //白
#define BLACK 0x00000000 //黑
#define RED 0x00ff0000 //红
#define ORANGE 0x00ff8000 //橙
#define YELLOW 0x00ffff00 //黄
#define GREEN 0x0000ff00 //绿
#define BLUE 0x000000ff //蓝
#define INDIGO 0x0000ffff //靛
#define PURPLE 0x008000ff //紫
// 异常的宏定义
#define EPOS_OVERFLOW 1 // 坐标溢出
#define EFB_MISMATCH 2 // 帧缓冲区与指定的屏幕大小不匹配
#define EUNSUPPORTED 3 // 当前操作暂不被支持
#include "font.h"
#include "glib.h"
//#include "linkage.h"
#include <stdarg.h>
struct screen_info
{
int width, height; //屏幕大小
int max_x, max_y; // 最大x、y字符数
int x, y; //光标位置
int char_size_x, char_size_y;
2022-03-02 05:07:13 +00:00
uint *FB_address; //帧缓冲区首地址
2022-03-02 10:31:41 +00:00
unsigned long FB_length; // 帧缓冲区长度乘以4才是字节数
};
extern unsigned char font_ascii[256][16]; //导出ascii字体的bitmap8*16大小 ps:位于font.h中
char buf[4096]; // vsprintf()的缓冲区
/**
* @brief printk的屏幕信息
*
* @param char_size_x
* @param char_size_y
*/
int printk_init(const int char_size_x, const int char_size_y);
/**
* @brief Set the printk pos object
*
* @param x
* @param y
*/
2022-01-24 10:01:40 +00:00
int set_printk_pos(const int x, const int y);
/**
* @brief fmt和args中的内容进行格式化buf中
*
* @param buf
* @param fmt
* @param args
* @return
*/
static int vsprintf(char *buf, const char *fmt, va_list args);
/**
* @brief 2~36
*
* @param str
* @param num
* @param base
* @param field_width
* @param precision
* @param flags
*/
2022-03-18 11:18:36 +00:00
static char *write_num(char *str,ul num, int base, int field_width, int precision, int flags);
static char *write_float_point_num(char *str, double num, int field_width, int precision, int flags);
/**
* @brief
*
* @param fb 线
* @param Xsize
* @param x
* @param y
* @param FRcolor
* @param BKcolor
* @param font bitmap
*/
2022-03-02 05:07:13 +00:00
static void putchar(uint *fb, int Xsize, int x, int y, unsigned int FRcolor, unsigned int BKcolor, unsigned char font);
/**
* @brief
*
* @param FRcolor
* @param BKcolor
* @param ...
*/
#define printk(...) printk_color(WHITE, BLACK, __VA_ARGS__)
int printk_color(unsigned int FRcolor, unsigned int BKcolor, const char *fmt, ...);
/**
* @brief )
*
* @param direction true,false
* @param pixels
* @param animation
*/
int scroll(bool direction, int pixels, bool animation);
/**
* @brief
*
*/
int cls();
/**
* @brief VBE帧缓存区的物理地址
2022-03-02 05:07:13 +00:00
*
*/
ul get_VBE_FB_phys_addr();
/**
* @brief VBE帧缓冲区长度
*/
ul get_VBE_FB_length();
/**
* @brief pos变量中的VBE帧缓存区的线性地址
* @param virt_addr VBE帧缓存区线性地址
*/
2022-03-02 05:07:13 +00:00
void set_pos_VBE_FB_addr(uint* virt_addr);
uint* get_pos_VBE_FB_addr();