mirror of
https://github.com/fsender/readguy.git
synced 2025-12-12 13:08:11 +08:00
1.3.5: add more examples&fix bugs
This commit is contained in:
@@ -40,17 +40,24 @@ namespace guydev_template{
|
||||
void drv::drv_init(){ //初始化屏幕
|
||||
//add driver code...
|
||||
}
|
||||
void drv::drv_fullpart(bool part){ //初始化慢刷功能
|
||||
void drv::drv_fullpart(bool part){ //初始化慢刷/快刷功能
|
||||
if(lastRefresh) return;
|
||||
//add driver code...
|
||||
}
|
||||
void drv::drv_setDepth(uint8_t i){
|
||||
epdFull=0; iLut = i?(i>15?15:i):15; //如果需要, 改成自己的代码
|
||||
}
|
||||
/* 关于这里的f函数指针: f(n)代表访问屏幕缓存的第n字节
|
||||
若设N=(((屏幕宽度+7)/8)*屏幕高度), 则n的取值范围为 0<=n<N .
|
||||
比如一个缓存buffer, 有N字节, 那么可以用f(n)=buffer[n]
|
||||
函数语法为 drv_dispWriter([&](int n)->uint8_t{return buffer[n];},3);
|
||||
呃 你就把里面的f(n)理解为buffer[n]就行.
|
||||
*/
|
||||
void drv::drv_dispWriter(std::function<uint8_t(int)> f,uint8_t m){ //单色刷新
|
||||
if(m&1){//stage 1
|
||||
if(lastRefresh) drv_dispWriter(f,2);
|
||||
//add driver code...
|
||||
lastRefresh=millis();
|
||||
}
|
||||
if(m&2){//stage 2
|
||||
uint32_t ms=millis()-lastRefresh;
|
||||
|
||||
@@ -43,20 +43,45 @@ constexpr int fastRefTime =500; //驱动屏幕快刷时间, 单位毫秒
|
||||
|
||||
class drv : public readguyEpdBase {
|
||||
public:
|
||||
/** @brief 返回驱动程序ID. 此函数不需要在 cpp 文件内重写
|
||||
* @return int 直接返回对应宏定义就可以 */
|
||||
int drv_ID() const { return READGUY_DEV_template; }
|
||||
void drv_init(); //初始化屏幕
|
||||
void drv_fullpart(bool part); //切换慢刷/快刷功能
|
||||
void drv_dispWriter(std::function<uint8_t(int)> f,uint8_t m=3); //按照函数刷新
|
||||
void drv_sleep() ; //开始屏幕睡眠
|
||||
int drv_width() const { return GUY_D_WIDTH; }; //返回显示区域宽度
|
||||
//int drv_panelwidth() const { return GUY_D_WIDTH; }; //返回缓存的数据宽度
|
||||
int drv_height() const{ return GUY_D_HEIGHT; }; //返回显示区域高度
|
||||
void drv_setDepth(uint8_t i); //设置显示颜色深度
|
||||
/// @brief 初始化屏幕 不过大多数时候此函数只需要初始化启动变量就行
|
||||
// 比如将模式设为慢刷, 设置为未上电状态 这样下次刷新必为全屏慢刷
|
||||
void drv_init();
|
||||
/// @brief 切换慢刷/快刷功能
|
||||
/// @param part 为1则为快刷, 为0则为慢刷
|
||||
void drv_fullpart(bool part);
|
||||
/** @brief 刷屏函数. 程序接口按照此函数刷新
|
||||
/ @param f 读取像素数据的函数. 这个函数用于替代屏幕缓存数组.
|
||||
/ 因为有时候屏幕缓存数组不能满足一些显示场景, 比如存储空间复用, 缩放显示等
|
||||
/ @param m 刷新模式:
|
||||
/ 1-仅执行前半部分 执行前半部分之后将会向屏幕发送数据后立即退出. (不等busy信号)
|
||||
/ 2-仅执行后半部分 执行后半部分之后会进行屏幕刷新完之后该执行的操作
|
||||
/ 3-完整刷屏: 执行1部分->等待busy信号->执行2部分 */
|
||||
void drv_dispWriter(std::function<uint8_t(int)> f,uint8_t m=3);
|
||||
/// @brief 开始屏幕睡眠/低功耗模式
|
||||
void drv_sleep() ;
|
||||
/// @brief 返回显示区域宽度
|
||||
int drv_width() const { return GUY_D_WIDTH; };
|
||||
/// @brief 返回显示区域高度
|
||||
int drv_height() const{ return GUY_D_HEIGHT; };
|
||||
/** @brief 设置显示颜色深度. 只有在受支持 屏幕上才可以设置灰度
|
||||
/ @param i 有效值 1~16 0必须为无效 */
|
||||
void drv_setDepth(uint8_t i);
|
||||
/** @brief 设置屏幕是否支持连续灰度刷新.
|
||||
/ @return 设置为 0 不支持灰度 16 支持灰度 -16 支持连续刷新灰度
|
||||
/ 连续刷新灰度: 先刷深色部分 再刷浅色部分, 原来的深色部分每次刷新都会逐渐越来越深色.
|
||||
/ 如果不提供连续刷新灰度接口 则使用setDepth函数 先刷浅色部分 再刷深色部分
|
||||
/ 可以在支持连续刷新的屏幕上烧录范例程序查看效果. 通常都是好于非连续刷新的灰度 */
|
||||
int drv_supportGreyscaling() const { return 16; }
|
||||
// 在支持连续灰度刷新的屏幕上 还要额外实现一个函数用于连续刷新接口
|
||||
/// @brief 设置连续刷新功能函数. 范例可以看guy_420a文件内的示例,分步执行连续刷灰度
|
||||
//void drv_draw16grey_step(std::function<uint8_t(int)> f, int step);
|
||||
private:
|
||||
uint8_t epd_PowerOn=1; //是否上电. 睡眠则设为0
|
||||
uint8_t epdFull=0; //是partical模式/快速刷新模式 0快刷, 1慢刷
|
||||
uint8_t iLut=15; //颜色深度
|
||||
uint8_t iLut=15; //颜色深度 1-15均为有效. 慢刷模式中 此数值为15.
|
||||
};
|
||||
}
|
||||
#endif /* END OF FILE. ReadGuy project.
|
||||
|
||||
@@ -45,9 +45,6 @@ default_envs = nodemcuv2
|
||||
board_build.filesystem = littlefs ; SPIFFS mode
|
||||
upload_speed = 921600 ; If using USB-JTAG, this selection is dummy
|
||||
monitor_speed = 115200
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
|
||||
[env:esp32dev] ; 适用于ESP32的项目配置方案 注意是经典的ESP32...
|
||||
platform = espressif32
|
||||
@@ -60,6 +57,8 @@ framework = espidf, arduino
|
||||
monitor_filters = esp32_exception_decoder
|
||||
;build_type = debug
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
; -DCORE_DEBUG_LEVEL=4
|
||||
|
||||
[env:nodemcuv2] ; 适用于ESP8266的项目配置方案
|
||||
@@ -72,6 +71,8 @@ monitor_filters = esp8266_exception_decoder
|
||||
;build_type = debug
|
||||
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
; -DNON32XFER_HANDLER ;不需要PROGMEM保留字也可以访问flash中的内容
|
||||
; -D PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48 ;增大可用的HEAP内存
|
||||
; -fstack-protector ;打开栈溢出保护器
|
||||
@@ -90,7 +91,9 @@ board_build.partitions = readguy_4MB.csv ; defined
|
||||
monitor_filters = esp32_exception_decoder
|
||||
;build_type = debug
|
||||
|
||||
build_flags =
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
;-DARDUINO_USB_MODE=1
|
||||
;-DARDUINO_USB_CDC_ON_BOOT=1 ; 是否需要使用USB串口调试,如果需要调试则打开,否则禁用,
|
||||
; 如果打开了这个选项但是不连接串口,在有串口输出的地方会卡顿1秒左右
|
||||
@@ -117,7 +120,9 @@ board_build.flash_mode = dio
|
||||
board_build.partitions = readguy_16MB.csv
|
||||
monitor_filters = esp32_exception_decoder
|
||||
|
||||
build_flags =
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
;-DARDUINO_USB_MODE=1
|
||||
;-DARDUINO_USB_CDC_ON_BOOT=1 ; 是否需要使用USB串口调试,如果需要调试则打开,否则禁用,
|
||||
; 如果打开了这个选项但是不连接串口,在有串口输出的地方会卡顿1秒左右
|
||||
@@ -142,6 +147,31 @@ board_build.f_flash = 80000000L
|
||||
board_build.flash_mode = dio
|
||||
board_build.partitions = readguy_4MB.csv ; 2MB的芯片就选readguy_2MB_noOTA.csv
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
;-DARDUINO_USB_MODE=1
|
||||
;-DARDUINO_USB_CDC_ON_BOOT=1 ; 是否需要使用USB串口调试,如果需要调试则打开,否则禁用,
|
||||
; 如果打开了这个选项但是不连接串口,在有串口输出的地方会卡顿1秒左右
|
||||
; 合宙无串口开发板请选择此选项为1.
|
||||
-DCORE_DEBUG_LEVEL=1 ; None 0, Error 1, Warn 2, Info 3, Debug 4, Verbose 5
|
||||
|
||||
[env:esp32c3_no_uart] ;适用于ESP32C3 的项目配置方案.
|
||||
platform = espressif32 ;注意在使用不带串口芯片的ESP32C3时, 尽量不要使用引脚18和19.
|
||||
board = esp32-c3-devkitm-1 ;那俩是连接的板载USB串口 (USB-CDC, 可以下载程序或是当免驱串口)
|
||||
framework = espidf, arduino ;合宙你真该死啊出这种没串口芯片的ESP32C3 甚至旧版本arduino无法编程!
|
||||
board_build.f_cpu = 160000000L ;芯片速率默认160MHz, 不支持高频240MHz.
|
||||
;board_build.flash_size=2MB ;2MB的芯片就选readguy_2MB_noOTA.csv
|
||||
board_build.flash_size=4MB ;根据你自己的改, 不得小于4MB. 2MB的芯片就选readguy_2MB_noOTA.csv
|
||||
board_build.f_flash = 80000000L
|
||||
board_build.flash_mode = dio
|
||||
board_build.partitions = readguy_4MB.csv ; 2MB的芯片就选readguy_2MB_noOTA.csv
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
-DARDUINO_USB_MODE=1
|
||||
-DARDUINO_USB_CDC_ON_BOOT=1 ; 是否需要使用USB串口调试,如果需要调试则打开,否则禁用,
|
||||
; 如果打开了这个选项但是不连接串口,在有串口输出的地方会卡顿1秒左右
|
||||
; 合宙无串口开发板请选择此选项为1.
|
||||
-DCORE_DEBUG_LEVEL=1 ; None 0, Error 1, Warn 2, Info 3, Debug 4, Verbose 5
|
||||
|
||||
|
||||
@@ -149,10 +179,14 @@ build_flags =
|
||||
platform = espressif32
|
||||
board = nodemcu-32s2
|
||||
framework = espidf, arduino
|
||||
board_build.f_cpu = 240000000L
|
||||
build_type = debug
|
||||
board_build.f_cpu = 160000000L
|
||||
board_build.flash_size=4MB ;根据你自己的改, 不得小于4MB
|
||||
board_build.f_flash = 80000000L
|
||||
board_build.flash_mode = dio
|
||||
board_build.partitions = readguy_4MB.csv ; defined
|
||||
build_flags =
|
||||
-Wall
|
||||
-Wextra
|
||||
-DCORE_DEBUG_LEVEL=1 ; None 0, Error 1, Warn 2, Info 3, Debug 4, Verbose 5
|
||||
monitor_filters = esp32_exception_decoder
|
||||
|
||||
7
extra/platformio/readguy_4MB_largeAPP.csv
Normal file
7
extra/platformio/readguy_4MB_largeAPP.csv
Normal file
@@ -0,0 +1,7 @@
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 0x5000,
|
||||
otadata, data, ota, 0xe000, 0x2000,
|
||||
app0, app, ota_0, 0x10000, 0x1E0000,
|
||||
app1, app, ota_1, 0x1F0000,0x1E0000,
|
||||
spiffs, data, spiffs, 0x3D0000,0x20000,
|
||||
coredump, data, coredump,0x3F0000,0x10000,
|
||||
|
1434
extra/platformio/sdkconfig.esp32c3_no_uart
Normal file
1434
extra/platformio/sdkconfig.esp32c3_no_uart
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user