// // Created by lydxh on 24-7-5. // #ifndef HW_LIB_SIM_DISPLAY_H #define HW_LIB_SIM_DISPLAY_H #ifdef __cplusplus extern "C" { #endif #include "stdint.h" //是否启用SDL3画图 #define USER_SDL3 /** * @brief 定义颜色常量值,用于模拟显示 */ #define BLACK 0 // 黑色 #define BLUE 0xAA0000 // 蓝色 #define GREEN 0x00AA00 // 绿色 #define CYAN 0xAAAA00 // 青色 #define RED 0x0000AA // 红色 #define MAGENTA 0xAA00AA // 品红 #define BROWN 0x0055AA // 棕色 #define LIGHTGRAY 0xAAAAAA // 亮灰色 #define DARKGRAY 0x555555 // 暗灰色 #define LIGHTBLUE 0xFF5555 // 亮蓝色 #define LIGHTGREEN 0x55FF55 // 亮绿色 #define LIGHTCYAN 0xFFFF55 // 亮青色 #define LIGHTRED 0x5555FF // 亮红色 #define LIGHTMAGENTA 0xFF55FF // 亮品红 #define YELLOW 0x55FFFF // 黄色 #define WHITE 0xFFFFFF // 白色 #ifndef USER_SDL3 /** * @brief 初始化模拟 显示 * @param width: [输入] 显示宽度 * @param height: [输入] 显示高度 * @param pixcolor: [输入] 像素颜色 * @param backcolor: [输入] 背景颜色 * @param scale: [输入] 显示缩放比例 * @param border: [输入] 是否显示边框 * @return void * @example SIM_Display_INIT(128, 64, 0xFFFF00, 0x000000, 10, 1); **/ void SIM_Display_INIT(int width, int height, uint32_t pixcolor, uint32_t backcolor, int scale, uint8_t border); /** * @brief 开始模拟 显示 * @return void * @example SIM_Display_START(); **/ void SIM_Display_START(); /** * @brief 停止模拟 显示 * @return void * @example SIM_OLED_STOP(); **/ void SIM_Display_STOP(); /** * @brief 从缓冲区绘制到单色显示 * @param buf: [输入] 缓冲区指针 * @param width: [输入] 图像宽度 * @param height: [输入] 图像高度 * @return void * @example SIM_OneColor_DrawFromBuffer(buffer, 128, 64); **/ void SIM_OneColor_DrawFromBuffer(uint8_t *buf, uint16_t width, uint16_t height); /** * @brief 在指定的坐标位置绘制一个像素点 * @param color 颜色 * @param x x坐标 * @param y y坐标 */ void SIM_Color_DrawPiexl(uint32_t color, uint16_t x, uint16_t y); void SIM_Color_DrawHLineBuffer(uint32_t *buf, uint16_t x, uint16_t y, uint16_t width); /** * @brief 从缓冲区绘制到显示 * @param buf: [输入] 缓冲区指针 * @param width: [输入] 图像宽度 * @param height: [输入] 图像高度 * @return void * @example SIM_Color_DrawFromBuffer(buffer, 480, 320); **/ void SIM_Color_DrawFromBuffer(uint32_t *buf, uint16_t width, uint16_t height); /** * @brief 从缓冲区中填充图像 * @param buf: [输入] 缓冲区指针 * @param x: [输入] 图像起始横坐标 * @param y: [输入] 图像起始纵坐标 * @param width: [输入] 图像宽度 * @param height: [输入] 图像高度 * @return void * @example SIM_Color_ImgFromBuffer(buf, 100, 50, 320, 240); **/ void SIM_Color_ImgFromBuffer(uint32_t* buf, uint16_t x, uint16_t y, uint16_t width, uint16_t height); /** * @brief 从缓冲区中填充颜色 * @param buf: [输入] 缓冲区指针 * @param xs: [输入] 填充区域起始横坐标 * @param ys: [输入] 填充区域起始纵坐标 * @param xe: [输入] 填充区域结束横坐标 * @param ye: [输入] 填充区域结束纵坐标 * @return void * @example SIM_Color_FillFromBuffer(buf, 50, 30, 150, 100); **/ void SIM_Color_FillFromBuffer(uint32_t* buf, uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye); #else #include "SDL3/SDL.h" typedef union { struct { uint8_t blue; uint8_t green; uint8_t red; uint8_t alpha; } ch; uint32_t full; } SIM_Color_t; typedef struct { SDL_Window *window; SDL_Renderer *renderer; SDL_Event *event; int scale; SIM_Color_t pixelcolor; SIM_Color_t backcolor; } SIM_Display_t; /** * @brief 初始化模拟 显示 * @param name: [输入] 窗口名称 * @param width: [输入] 显示宽度 * @param height: [输入] 显示高度 * @param pixcolor: [输入] 像素颜色 * @param backcolor: [输入] 背景颜色 * @param scale: [输入] 显示缩放比例 * @param display: [输入] 输入窗口实例 * @return bool: true[成功] false[失败] * @example SIM_Display_Init(128, 64, 0xFFFF00, 0x000000, 10, 1); **/ bool SIM_Display_Init(char *name, int width, int height, uint32_t pixcolor, uint32_t backcolor, int scale, SIM_Display_t *display); /** * @brief 在指定的坐标位置绘制一个像素点 * @param display: [输入] 输入窗口实例 * @param color 颜色 * @param x x坐标 * @param y y坐标 */ void SIM_Color_DrawPiexl(SIM_Display_t *display, SIM_Color_t color, uint16_t x, uint16_t y); /** * @brief 从颜色缓冲区绘制单色图像到模拟显示器 * @param display 模拟显示器指针 * @param buf 颜色缓冲区指针 * @param width 绘制区域宽度 * @param height 绘制区域高度 */ void SIM_OneColor_DrawFromBuffer(SIM_Display_t *display, uint8_t *buf, uint16_t width, uint16_t height); /** * @brief 从缓冲区中填充图像 * @param display: [输入] 输入窗口实例 * @param buf: [输入] 缓冲区指针 * @param x: [输入] 图像起始横坐标 * @param y: [输入] 图像起始纵坐标 * @param width: [输入] 图像宽度 * @param height: [输入] 图像高度 * @return void * @example SIM_Color_ImgFromBuffer(buf, 100, 50, 320, 240); **/ void SIM_Color_ImgFromBuffer(SIM_Display_t *display, uint32_t *buf, uint16_t x, uint16_t y, uint16_t width, uint16_t height); /** * @brief 从缓冲区中填充颜色 * @param display: [输入] 输入窗口实例 * @param buf: [输入] 缓冲区指针 * @param xs: [输入] 填充区域起始横坐标 * @param ys: [输入] 填充区域起始纵坐标 * @param xe: [输入] 填充区域结束横坐标 * @param ye: [输入] 填充区域结束纵坐标 * @return void * @example SIM_Color_FillFromBuffer(buf, 50, 30, 150, 100); **/ void SIM_Color_FillFromBuffer(SIM_Display_t *display, uint32_t *buf, uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye); /** * @brief 刷新模拟显示器 * * @param display 模拟显示器指针 */ void SIM_Display_Refresh(SIM_Display_t *display); /** * @brief 停止模拟 显示 * @return void * @example SIM_OLED_STOP(); **/ void SIM_Display_STOP(SIM_Display_t *display); #endif uint32_t RGB565_to_ARGB8888(uint16_t rgb565, bool isBGR); #ifdef __cplusplus } #endif #endif //HW_LIB_SIM_DISPLAY_H