#ifndef HW_LIB_SIM_OLED_H
#define HW_LIB_SIM_OLED_H
#ifdef __cplusplus
extern "C" {
#endif

#include "stdint.h"

#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

/**
 * @brief   初始化模拟 OLED 显示
 * @param   width: [输入] 显示宽度
 * @param   height: [输入] 显示高度
 * @param   pixcolor: [输入] 像素颜色
 * @param   backcolor: [输入] 背景颜色
 * @param   scale: [输入] 显示缩放比例
 * @param   border: [输入] 是否显示边框
 * @return  void
 * @example SIM_OLED_INIT(128, 64, 0xFFFF00, 0x000000, 10, 1);
 **/
void SIM_OLED_INIT(int width, int height, uint32_t pixcolor, uint32_t backcolor, int scale, uint8_t border);

/**
 * @brief   开始模拟 OLED 显示
 * @return  void
 * @example SIM_OLED_START();
 **/
void SIM_OLED_START();

/**
 * @brief   停止模拟 OLED 显示
 * @return  void
 * @example SIM_OLED_STOP();
 **/
void SIM_OLED_STOP();

/**
 * @brief   从缓冲区绘制到模拟 OLED 显示
 * @param   buf: [输入] 缓冲区指针
 * @param   width: [输入] 图像宽度
 * @param   height: [输入] 图像高度
 * @return  void
 * @example SIM_OLED_DrawFromBuffer(buffer, 128, 64);
 **/
void SIM_OLED_DrawFromBuffer(uint8_t *buf, uint8_t width, uint8_t height);

#ifdef __cplusplus
}
#endif

#endif //HW_LIB_SIM_OLED_H