Skip to content

Commit 51e8451

Browse files
committed
waveform bin reader supports file ystem.
1 parent 583b165 commit 51e8451

6 files changed

Lines changed: 76 additions & 11 deletions

File tree

‎epdiy-epub/src/boards/display_dbi/epd_configs_opm060d.c‎

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,26 +112,49 @@ void epd_wave_table_fill_lut(uint32_t *p_epic_lut, uint32_t frame_num)
112112

113113
#include "mem_map.h"
114114
#include "epd_waveform_bin_reader.h"
115+
#include "drv_flash.h"
115116
#ifndef CUSTOM_EPD_WAVE_TABLE_START_ADDR
116117
#error "CUSTOM_EPD_WAVE_TABLE_START_ADDR is not defined!!!"
117118
#endif
118-
119119
void epd_wave_table(void)
120120
{
121-
int ret = waveform_bin_reader_init(CUSTOM_EPD_WAVE_TABLE_START_ADDR, CUSTOM_EPD_WAVE_TABLE_SIZE);
121+
static uint8_t initialized = 0;
122122

123-
if(ret != 0)
123+
if(0 == initialized)
124124
{
125-
rt_kprintf("Failed to initialize custom EPD wave table reader! err=%d\n", ret);
125+
int ret = waveform_bin_reader_init(CUSTOM_EPD_WAVE_TABLE_SIZE);
126+
127+
if(ret != 0)
128+
{
129+
rt_kprintf("Failed to initialize custom EPD wave table reader! err=%d\n", ret);
130+
}
131+
else
132+
{
133+
initialized = 1;
134+
}
126135
}
127136
}
128137

129138
uint32_t epd_wave_table_get_frames(int temperature, EpdDrawMode mode)
130139
{
131140
uint32_t frames;
132141

133-
frames = waveform_bin_reader_get_frames(temperature, mode);
142+
//Convert EpdDrawMode to WAVE_TABLE_MODE_T
143+
WAVE_TABLE_MODE_T wave_table_mode;
144+
switch(mode) {
145+
case EPD_DRAW_MODE_FULL:
146+
wave_table_mode = WAVE_MODE_FULL;
147+
break;
148+
case EPD_DRAW_MODE_PARTIAL:
149+
wave_table_mode = WAVE_MODE_PARTIAL;
150+
break;
151+
default:
152+
rt_kprintf("Unknown EPD draw mode: %d, use WAVE_MODE_FULL mode\n", mode);
153+
wave_table_mode = WAVE_MODE_FULL;
154+
break;
155+
}
134156

157+
frames = waveform_bin_reader_get_frames(temperature, wave_table_mode);
135158
return frames;
136159
}
137160

@@ -140,6 +163,32 @@ void epd_wave_table_fill_lut(uint32_t *p_epic_lut, uint32_t frame_num)
140163
waveform_bin_reader_fill_lut(p_epic_lut, frame_num);
141164
}
142165

166+
int waveform_bin_reader_read_data(uint32_t offset, uint8_t *buf, uint32_t size)
167+
{
168+
int read_size = 0;
169+
#ifdef BSP_USING_SPI_NAND
170+
read_size = rt_nand_read(CUSTOM_EPD_WAVE_TABLE_START_ADDR + offset,buf,size);
171+
#else
172+
read_size = rt_flash_read(CUSTOM_EPD_WAVE_TABLE_START_ADDR + offset,buf,size);
173+
#endif
174+
175+
if (read_size != size) {
176+
rt_kprintf("Failed to read data at offset 0x%08X, expected %d bytes, got %zu bytes\n", offset, size, read_size);
177+
return -1;
178+
}
179+
180+
return read_size;
181+
}
182+
void *waveform_bin_reader_malloc(size_t size)
183+
{
184+
return rt_malloc(size);
185+
}
186+
187+
void waveform_bin_reader_free(void *ptr)
188+
{
189+
rt_free(ptr);
190+
}
191+
143192
#endif /*EPD_WAVEFORM_USE_BIN*/
144193

145194
uint16_t epd_get_vcom_voltage(void)

‎epdiy-epub/waveform/SConscript‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ inc = [cwd]
1010
obj = []
1111
lib = []
1212

13-
if os.path.isfile(os.path.join(cwd, 'epd_waveform_bin_reader_rvds.lib')):
13+
if os.path.isfile(os.path.join(cwd, 'epd_waveform_bin_reader_rvds.lib')) or os.path.isfile(os.path.join(cwd, 'libepd_waveform_bin_reader_gcc.a')):
1414
lib = [GroupLibName("epd_waveform_bin_reader")]
1515
else:
1616
src = src + Glob('*.c')
-15.6 KB
Binary file not shown.

‎epdiy-epub/waveform/epd_waveform_bin_reader.h‎

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,28 @@ typedef enum{
55
EPD_WAVEFORM_ERR_OK = 0,
66
EPD_WAVEFORM_ERR_INVALID_MAGIC_NUMBER = -1,
77
EPD_WAVEFORM_ERR_INVALID_VERSION = -2,
8-
EPD_WAVEFORM_ERR_INVALID_FULL_TABLE_OFFSET = -3,
8+
EPD_WAVEFORM_ERR_MALLOC_FAILED = -3,
9+
EPD_WAVEFORM_ERR_READ_FAILED = -4,
10+
EPD_WAVEFORM_ERR_INVALID_FIRST_TABLE_OFFSET = -10, //-10 ~ -25 for mode 0~15
911

10-
EPD_WAVEFORM_ERR_INVALID_PARTIAL_TABLE_OFFSET = -4,
12+
EPD_WAVEFORM_ERR_INVALID_TABLE_OFFSET = -1000, //
1113
}EPD_WAVEFORM_ERR_TYPEDEF;
1214

1315

14-
int waveform_bin_reader_init(uint32_t addr, uint32_t max_size);
15-
uint32_t waveform_bin_reader_get_frames(int temperature, EpdDrawMode mode);
16-
void waveform_bin_reader_fill_lut(uint32_t *p_epic_lut, uint32_t frame_num);
16+
typedef enum{
17+
WAVE_MODE_NONE = 0,
18+
WAVE_MODE_PARTIAL = 1,
19+
WAVE_MODE_FULL = 2,
20+
/* 2~15 为待确定的波形模式 */
21+
WAVE_MODE_MAX = 16
22+
} WAVE_TABLE_MODE_T;
23+
24+
int waveform_bin_reader_init(uint32_t max_size);
25+
uint32_t waveform_bin_reader_get_frames(int temperature, WAVE_TABLE_MODE_T mode);
26+
void waveform_bin_reader_fill_lut(uint32_t *p_epic_lut, uint32_t frame_num);
27+
28+
29+
/* 依赖外部接口 */
30+
extern int waveform_bin_reader_read_data(uint32_t offset, uint8_t *buf, uint32_t size);
31+
extern void *waveform_bin_reader_malloc(size_t size);
32+
extern void waveform_bin_reader_free(void *ptr);
-8.72 KB
Binary file not shown.
2.16 KB
Binary file not shown.

0 commit comments

Comments
 (0)