@@ -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-
119119void 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
129138uint32_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
145194uint16_t epd_get_vcom_voltage (void )
0 commit comments