HW_Lib/sim/display/sim_display.h

225 lines
6.6 KiB
C

//
// 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