mirror of
				https://github.com/Dejvino/lilybook.git
				synced 2025-10-30 03:25:22 +00:00 
			
		
		
		
	Restructured into modules and classes.
This commit is contained in:
		
							parent
							
								
									bd2b673a30
								
							
						
					
					
						commit
						8fc6843995
					
				
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										4
									
								
								main/Page.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								main/Page.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| #include "Page.h" | ||||
| 
 | ||||
| Page::Page() | ||||
| {} | ||||
							
								
								
									
										16
									
								
								main/Page.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								main/Page.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| #ifndef _PAGE_H_ | ||||
| #define _PAGE_H_ | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| class Page | ||||
| { | ||||
| public: | ||||
|     Page(); | ||||
| 
 | ||||
|     char* text; | ||||
|     size_t len; | ||||
| 
 | ||||
| private: | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										27
									
								
								main/PagePrinter.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								main/PagePrinter.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| #include "display.h" | ||||
| #include "EPD.h" | ||||
| #include "PagePrinter.h" | ||||
| 
 | ||||
| #include "esp_log.h" | ||||
| static const char *TAG = "PagePrinter"; | ||||
| 
 | ||||
| int font = DEJAVU18_FONT;//DEFAULT_FONT;
 | ||||
| 
 | ||||
| PagePrinter::PagePrinter() | ||||
| {} | ||||
| 
 | ||||
| void PagePrinter::print(Page* page) | ||||
| { | ||||
|     if (page->text == NULL) { | ||||
|         ESP_LOGE(TAG, "Page text is NULL"); | ||||
|         return; | ||||
|     } | ||||
|     if (page->len == 0) { | ||||
|         return; | ||||
|     } | ||||
|     EPD_setFont(font, NULL); | ||||
|     text_wrap = 1; | ||||
|     EPD_print(page->text, 0, 0); | ||||
|     EPD_UpdateScreen(); | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										11
									
								
								main/PagePrinter.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								main/PagePrinter.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| #include "Page.h" | ||||
| 
 | ||||
| class PagePrinter | ||||
| { | ||||
| public: | ||||
|     PagePrinter(); | ||||
| 
 | ||||
|     void print(Page* page); | ||||
| 
 | ||||
| private: | ||||
| }; | ||||
							
								
								
									
										34
									
								
								main/TextReader.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								main/TextReader.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| #include "TextReader.h" | ||||
| 
 | ||||
| #include "esp_log.h" | ||||
| static const char *TAG = "TextReader"; | ||||
| 
 | ||||
| TextReader::TextReader(FILE* file) | ||||
| { | ||||
|     this->f = file; | ||||
| } | ||||
| 
 | ||||
| void TextReader::close() | ||||
| { | ||||
|     fclose(this->f); | ||||
| } | ||||
| 
 | ||||
| size_t TextReader::read(long pos, char* text, size_t len) | ||||
| { | ||||
|     if (this->f == NULL) { | ||||
|         ESP_LOGE(TAG, "File not opened."); | ||||
|         sprintf(text, "File could not be opened."); | ||||
|         return 0; | ||||
|     } else { | ||||
|         fseek(this->f, pos, SEEK_SET); | ||||
|         size_t read = fread(text, 1, len, this->f); | ||||
|         if (read > 0) { | ||||
|             ESP_LOGI(TAG, "Read content: %s", text); | ||||
|         } else { | ||||
|             ESP_LOGI(TAG, "End of file. Closing."); | ||||
|             fclose(this->f); | ||||
|             this->f = NULL; | ||||
|         } | ||||
|         return read; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										16
									
								
								main/TextReader.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								main/TextReader.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| #include <stdlib.h> | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| class TextReader | ||||
| { | ||||
| public: | ||||
|     TextReader(FILE* file); | ||||
| 
 | ||||
|     size_t read(long pos, char* text, size_t len); | ||||
| 
 | ||||
|     void close(); | ||||
|      | ||||
| private: | ||||
|      | ||||
|     FILE* f; | ||||
| }; | ||||
							
								
								
									
										25
									
								
								main/TextStorage.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								main/TextStorage.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| #include "TextStorage.h" | ||||
| 
 | ||||
| #include "esp_log.h" | ||||
| static const char *TAG = "TextStorage"; | ||||
| 
 | ||||
| TextStorage::TextStorage() | ||||
| {} | ||||
| 
 | ||||
| TextReader* TextStorage::open(char* filename) | ||||
| { | ||||
|     FILE* f = fopen("/sdcard/book.txt", "r"); | ||||
|     if (f == NULL) { | ||||
|         ESP_LOGE(TAG, "File could not be opened"); | ||||
|         return NULL; | ||||
|     } | ||||
|     ESP_LOGI(TAG, "File opened for reading."); | ||||
|     return new TextReader(f); | ||||
| } | ||||
| 
 | ||||
| void TextStorage::close(TextReader* reader) | ||||
| { | ||||
|     reader->close(); | ||||
|     delete reader; | ||||
|     ESP_LOGI(TAG, "File closed."); | ||||
| } | ||||
							
								
								
									
										10
									
								
								main/TextStorage.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								main/TextStorage.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| #include "TextReader.h" | ||||
| 
 | ||||
| class TextStorage | ||||
| { | ||||
| public: | ||||
|     TextStorage(); | ||||
| 
 | ||||
|     TextReader* open(char* filename); | ||||
|     void close(TextReader* reader); | ||||
| }; | ||||
							
								
								
									
										10
									
								
								main/Typesetter.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								main/Typesetter.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| #include "Typesetter.h" | ||||
| 
 | ||||
| Typesetter::Typesetter() | ||||
| {} | ||||
| 
 | ||||
| void Typesetter::preparePage(Page* page, char* text, size_t len) | ||||
| { | ||||
|     page->text = text; | ||||
|     page->len = len; | ||||
| } | ||||
							
								
								
									
										13
									
								
								main/Typesetter.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								main/Typesetter.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| #include <stdlib.h> | ||||
| #include "Page.h" | ||||
| 
 | ||||
| class Typesetter | ||||
| { | ||||
| public: | ||||
|     Typesetter(); | ||||
| 
 | ||||
|     void preparePage(Page* page, char* text, size_t len); | ||||
| 
 | ||||
| //private:
 | ||||
| 
 | ||||
| }; | ||||
							
								
								
									
										27
									
								
								main/buttons.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								main/buttons.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| #include "driver/gpio.h" | ||||
| #include "buttons.h" | ||||
| 
 | ||||
| #define BTN_PIN_PLUS ((gpio_num_t)39) | ||||
| #define BTN_PIN_OK ((gpio_num_t)37) | ||||
| #define BTN_PIN_MINUS ((gpio_num_t)38) | ||||
| 
 | ||||
| void buttons_init() | ||||
| { | ||||
|     gpio_config_t buttons_config; | ||||
|     buttons_config.intr_type = (gpio_int_type_t)GPIO_PIN_INTR_DISABLE; | ||||
|     buttons_config.mode = GPIO_MODE_INPUT; | ||||
|     buttons_config.pull_up_en = (gpio_pullup_t)1; | ||||
|     buttons_config.pull_down_en = (gpio_pulldown_t)0; | ||||
|     buttons_config.pin_bit_mask = (1LL << BTN_PIN_MINUS); | ||||
|     gpio_config(&buttons_config); | ||||
|     buttons_config.pin_bit_mask = (1LL << BTN_PIN_OK); | ||||
|     gpio_config(&buttons_config); | ||||
|     buttons_config.pin_bit_mask = (1LL << BTN_PIN_PLUS); | ||||
|     gpio_config(&buttons_config); | ||||
| } | ||||
| 
 | ||||
| bool buttons_pressed_ok() { return gpio_get_level(BTN_PIN_OK) == 0; } | ||||
| bool buttons_pressed_plus() { return gpio_get_level(BTN_PIN_PLUS) == 0; } | ||||
| bool buttons_pressed_minus() { return gpio_get_level(BTN_PIN_MINUS) == 0; } | ||||
							
								
								
									
										4
									
								
								main/buttons.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								main/buttons.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| void buttons_init(); | ||||
| bool buttons_pressed_ok(); | ||||
| bool buttons_pressed_plus(); | ||||
| bool buttons_pressed_minus(); | ||||
							
								
								
									
										2
									
								
								main/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								main/config.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| 
 | ||||
| #define APP_VERSION "0.1" | ||||
							
								
								
									
										102
									
								
								main/display.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								main/display.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,102 @@ | ||||
| 
 | ||||
| #include "spi_master_lobo.h" | ||||
| #include "EPD.h" | ||||
| #include <stdlib.h> | ||||
| #include "esp_system.h" | ||||
| #include "driver/gpio.h" | ||||
| #include "esp_system.h" | ||||
| #include "esp_heap_alloc_caps.h" | ||||
| #include "esp_log.h" | ||||
| #include "config.h" | ||||
| #include "display.h" | ||||
| 
 | ||||
| void display_init() | ||||
| { | ||||
| 	disp_buffer = (uint8_t*)pvPortMallocCaps(EPD_DISPLAY_WIDTH * (EPD_DISPLAY_HEIGHT/8), MALLOC_CAP_DMA); | ||||
| 	assert(disp_buffer); | ||||
| 	drawBuff = disp_buffer; | ||||
| 
 | ||||
| 	gs_disp_buffer = (uint8_t*)pvPortMallocCaps(EPD_DISPLAY_WIDTH * EPD_DISPLAY_HEIGHT, MALLOC_CAP_DMA); | ||||
| 	assert(gs_disp_buffer); | ||||
| 	gs_drawBuff = gs_disp_buffer; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| spi_lobo_device_interface_config_t devcfg; | ||||
| spi_lobo_bus_config_t buscfg; | ||||
| void spi_init() | ||||
| { | ||||
|     gpio_set_direction(DC_Pin, GPIO_MODE_OUTPUT); | ||||
| 	gpio_set_level(DC_Pin, 1); | ||||
| 	gpio_set_direction(RST_Pin, GPIO_MODE_OUTPUT); | ||||
| 	gpio_set_level(RST_Pin, 0); | ||||
| 	gpio_set_direction(BUSY_Pin, GPIO_MODE_INPUT); | ||||
|     gpio_set_pull_mode(BUSY_Pin, GPIO_PULLUP_ONLY); | ||||
| 
 | ||||
| #ifdef POWER_Pin | ||||
| 	gpio_set_direction(POWER_Pin, GPIO_MODE_OUTPUT); | ||||
| 	gpio_set_level(POWER_Pin, 1); | ||||
| #endif | ||||
| 
 | ||||
|     buscfg.miso_io_num = -1;    			// set SPI MISO pin
 | ||||
|     buscfg.mosi_io_num = MOSI_Pin;  		// set SPI MOSI pin
 | ||||
|     buscfg.sclk_io_num = SCK_Pin;			// set SPI CLK pin
 | ||||
|     buscfg.quadwp_io_num=-1; | ||||
|     buscfg.quadhd_io_num=-1; | ||||
| 	buscfg.max_transfer_sz = 5*1024;		// max transfer size is 4736 bytes
 | ||||
| 
 | ||||
|     devcfg.clock_speed_hz=40000000;		// SPI clock is 40 MHz
 | ||||
|     devcfg.mode=0;						// SPI mode 0
 | ||||
|     devcfg.spics_io_num=-1;				// we will use external CS pin
 | ||||
| 	devcfg.spics_ext_io_num = CS_Pin;		// external CS pin
 | ||||
| 	devcfg.flags=SPI_DEVICE_HALFDUPLEX;	// ALWAYS SET  to HALF DUPLEX MODE for display spi !!
 | ||||
| } | ||||
| 
 | ||||
| void display_connect() | ||||
| { | ||||
|     int ret; | ||||
|      | ||||
|     ret=spi_lobo_bus_add_device(SPI_BUS, &buscfg, &devcfg, &disp_spi); | ||||
|     assert(ret==ESP_OK); | ||||
| 	printf("SPI: display device added to spi bus\r\n"); | ||||
| 
 | ||||
| 	ret = spi_lobo_device_select(disp_spi, 1); | ||||
|     assert(ret==ESP_OK); | ||||
| 	ret = spi_lobo_device_deselect(disp_spi); | ||||
|     assert(ret==ESP_OK); | ||||
| 
 | ||||
|     printf("SPI: attached display device, speed=%u\r\n", spi_lobo_get_speed(disp_spi)); | ||||
| 	printf("SPI: bus uses native pins: %s\r\n", spi_lobo_uses_native_pins(disp_spi) ? "true" : "false"); | ||||
| 
 | ||||
|     //EPD_PowerOn();
 | ||||
| } | ||||
| 
 | ||||
| void display_splash_screen() | ||||
| { | ||||
|     EPD_DisplayClearPart(); | ||||
|     EPD_fillScreen(0); | ||||
|     EPD_UpdateScreen(); | ||||
| 
 | ||||
|     EPD_setFont(COMIC24_FONT, NULL); | ||||
|     EPD_print("LilyBook", 30, 30); | ||||
|     EPD_setFont(DEFAULT_FONT, NULL); | ||||
|     EPD_print("Version:", 30, 70); | ||||
|     EPD_print(APP_VERSION, 100, 70); | ||||
|     EPD_UpdateScreen(); | ||||
| } | ||||
| 
 | ||||
| void display_clear() | ||||
| { | ||||
|     EPD_fillScreen(_bg); | ||||
| } | ||||
| 
 | ||||
| void display_refresh() | ||||
| { | ||||
|     EPD_DisplayClearPart(); | ||||
|     EPD_fillScreen(_bg); | ||||
| } | ||||
| 
 | ||||
| void display_update() | ||||
| { | ||||
|     EPD_UpdateScreen(); | ||||
| } | ||||
							
								
								
									
										8
									
								
								main/display.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								main/display.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| void display_init(); | ||||
| void spi_init(); | ||||
| void display_connect(); | ||||
| void display_splash_screen(); | ||||
| 
 | ||||
| void display_clear(); | ||||
| void display_refresh(); | ||||
| void display_update(); | ||||
							
								
								
									
										2382
									
								
								main/img_hacking.c
									
									
									
									
									
								
							
							
						
						
									
										2382
									
								
								main/img_hacking.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										195
									
								
								main/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										195
									
								
								main/main.cpp
									
									
									
									
									
								
							| @ -1,7 +1,6 @@ | ||||
| #include <time.h> | ||||
| #include <errno.h> | ||||
| #include <sys/fcntl.h> | ||||
| #include <stdio.h> | ||||
| #include <time.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| @ -11,21 +10,21 @@ | ||||
| #include "driver/gpio.h" | ||||
| #include "esp_system.h" | ||||
| #include "esp_heap_alloc_caps.h" | ||||
| #include "spiffs_vfs.h" | ||||
| 
 | ||||
| #include "esp_log.h" | ||||
| #include "spi_master_lobo.h" | ||||
| #include "img_hacking.c" | ||||
| #include "EPD.h" | ||||
| #include "storage.h" | ||||
| 
 | ||||
| #define APP_VERSION "0.1" | ||||
| 
 | ||||
| #define BTN_PIN_PLUS ((gpio_num_t)39) | ||||
| #define BTN_PIN_OK ((gpio_num_t)37) | ||||
| #define BTN_PIN_MINUS ((gpio_num_t)38) | ||||
| 
 | ||||
| static const char *TAG = "main"; | ||||
| 
 | ||||
| extern "C" { | ||||
| #include "config.h" | ||||
| #include "buttons.h" | ||||
| #include "storage.h" | ||||
| #include "display.h" | ||||
| } | ||||
| 
 | ||||
| #include "Typesetter.h" | ||||
| #include "TextStorage.h" | ||||
| #include "PagePrinter.h" | ||||
| 
 | ||||
| static struct tm* tm_info; | ||||
| static char tmp_buff[128]; | ||||
| static time_t time_now, time_last = 0; | ||||
| @ -33,172 +32,64 @@ static const char *file_fonts[3] = {"/spiffs/fonts/DotMatrix_M.fon", "/spiffs/fo | ||||
| static const char tag[] = "[LilyBook]"; | ||||
| esp_err_t ret; | ||||
| 
 | ||||
| void display_init() | ||||
| void sleep(unsigned int ms) | ||||
| { | ||||
| 	disp_buffer = (uint8_t*)pvPortMallocCaps(EPD_DISPLAY_WIDTH * (EPD_DISPLAY_HEIGHT/8), MALLOC_CAP_DMA); | ||||
| 	assert(disp_buffer); | ||||
| 	drawBuff = disp_buffer; | ||||
| 
 | ||||
| 	gs_disp_buffer = (uint8_t*)pvPortMallocCaps(EPD_DISPLAY_WIDTH * EPD_DISPLAY_HEIGHT, MALLOC_CAP_DMA); | ||||
| 	assert(gs_disp_buffer); | ||||
| 	gs_drawBuff = gs_disp_buffer; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| spi_lobo_device_interface_config_t devcfg; | ||||
| spi_lobo_bus_config_t buscfg; | ||||
| void spi_init() | ||||
| { | ||||
|     gpio_set_direction(DC_Pin, GPIO_MODE_OUTPUT); | ||||
| 	gpio_set_level(DC_Pin, 1); | ||||
| 	gpio_set_direction(RST_Pin, GPIO_MODE_OUTPUT); | ||||
| 	gpio_set_level(RST_Pin, 0); | ||||
| 	gpio_set_direction(BUSY_Pin, GPIO_MODE_INPUT); | ||||
|     gpio_set_pull_mode(BUSY_Pin, GPIO_PULLUP_ONLY); | ||||
| 
 | ||||
| #ifdef POWER_Pin | ||||
| 	gpio_set_direction(POWER_Pin, GPIO_MODE_OUTPUT); | ||||
| 	gpio_set_level(POWER_Pin, 1); | ||||
| #endif | ||||
| 
 | ||||
|     buscfg.miso_io_num = -1;    			// set SPI MISO pin
 | ||||
|     buscfg.mosi_io_num = MOSI_Pin;  		// set SPI MOSI pin
 | ||||
|     buscfg.sclk_io_num = SCK_Pin;			// set SPI CLK pin
 | ||||
|     buscfg.quadwp_io_num=-1; | ||||
|     buscfg.quadhd_io_num=-1; | ||||
| 	buscfg.max_transfer_sz = 5*1024;		// max transfer size is 4736 bytes
 | ||||
| 
 | ||||
|     devcfg.clock_speed_hz=40000000;		// SPI clock is 40 MHz
 | ||||
|     devcfg.mode=0;						// SPI mode 0
 | ||||
|     devcfg.spics_io_num=-1;				// we will use external CS pin
 | ||||
| 	devcfg.spics_ext_io_num = CS_Pin;		// external CS pin
 | ||||
| 	devcfg.flags=SPI_DEVICE_HALFDUPLEX;	// ALWAYS SET  to HALF DUPLEX MODE for display spi !!
 | ||||
| } | ||||
| 
 | ||||
| void display_connect() | ||||
| { | ||||
|     ret=spi_lobo_bus_add_device(SPI_BUS, &buscfg, &devcfg, &disp_spi); | ||||
|     assert(ret==ESP_OK); | ||||
| 	printf("SPI: display device added to spi bus\r\n"); | ||||
| 
 | ||||
| 	ret = spi_lobo_device_select(disp_spi, 1); | ||||
|     assert(ret==ESP_OK); | ||||
| 	ret = spi_lobo_device_deselect(disp_spi); | ||||
|     assert(ret==ESP_OK); | ||||
| 
 | ||||
|     printf("SPI: attached display device, speed=%u\r\n", spi_lobo_get_speed(disp_spi)); | ||||
| 	printf("SPI: bus uses native pins: %s\r\n", spi_lobo_uses_native_pins(disp_spi) ? "true" : "false"); | ||||
| 
 | ||||
|     //EPD_PowerOn();
 | ||||
| } | ||||
| 
 | ||||
| void fs_init() | ||||
| { | ||||
|     vfs_spiffs_register(); | ||||
|     if (spiffs_is_mounted) { | ||||
|         ESP_LOGI(tag, "File system mounted."); | ||||
|     } else { | ||||
|         ESP_LOGE(tag, "Error mounting file system."); | ||||
|     } | ||||
| 
 | ||||
|     if (storage_init() == 0) { | ||||
|         ESP_LOGI(tag, "SD card mounted."); | ||||
|     } else { | ||||
|         ESP_LOGE(tag, "Error mounting SD card."); | ||||
|     } | ||||
|     vTaskDelay(ms / portTICK_RATE_MS); | ||||
| } | ||||
| 
 | ||||
| extern "C" void app_main() | ||||
| { | ||||
|     gpio_config_t buttons_config; | ||||
|     buttons_config.intr_type = (gpio_int_type_t)GPIO_PIN_INTR_DISABLE; | ||||
|     buttons_config.mode = GPIO_MODE_INPUT; | ||||
|     buttons_config.pull_up_en = (gpio_pullup_t)1; | ||||
|     buttons_config.pull_down_en = (gpio_pulldown_t)0; | ||||
|     buttons_config.pin_bit_mask = (1LL << BTN_PIN_MINUS); | ||||
|     gpio_config(&buttons_config); | ||||
|     buttons_config.pin_bit_mask = (1LL << BTN_PIN_OK); | ||||
|     gpio_config(&buttons_config); | ||||
|     buttons_config.pin_bit_mask = (1LL << BTN_PIN_PLUS); | ||||
|     gpio_config(&buttons_config); | ||||
|     printf("\n   LilyBook v%s\n\n", APP_VERSION); | ||||
| 
 | ||||
|     storage_init(); | ||||
|     buttons_init(); | ||||
|     display_init(); | ||||
|     spi_init(); | ||||
| 
 | ||||
| 	vTaskDelay(500 / portTICK_RATE_MS); | ||||
| 
 | ||||
|     printf("\n   LilyBook v%s\n\n", APP_VERSION); | ||||
| 	sleep(500); | ||||
| 
 | ||||
| 	display_connect(); | ||||
|     display_splash_screen(); | ||||
| 
 | ||||
|     EPD_DisplayClearPart(); | ||||
|     EPD_fillScreen(0); | ||||
|     EPD_UpdateScreen(); | ||||
| 
 | ||||
|     EPD_setFont(COMIC24_FONT, NULL); | ||||
|     EPD_print("LilyBook", 30, 30); | ||||
|     EPD_setFont(DEFAULT_FONT, NULL); | ||||
|     EPD_print("Version:", 30, 70); | ||||
|     EPD_print(APP_VERSION, 100, 70); | ||||
|     EPD_UpdateScreen(); | ||||
| 
 | ||||
|     EPD_wait(500); | ||||
| 
 | ||||
|     fs_init(); | ||||
|     sleep(500); | ||||
| 
 | ||||
| 	printf("==== START ====\r\n\n"); | ||||
| 
 | ||||
| 	_gs = 1; | ||||
| 	uint32_t tstart; | ||||
| 	int pass = 0; | ||||
|     int font = DEJAVU18_FONT;//DEFAULT_FONT;
 | ||||
|     EPD_setFont(font, NULL); | ||||
|     Typesetter typesetter; | ||||
|     PagePrinter pagePrinter; | ||||
|     TextStorage textStorage; | ||||
|     TextReader* textReader = textStorage.open("/sdcard/book.txt"); | ||||
|     Page page; | ||||
| 
 | ||||
|     EPD_wait(100); | ||||
| 
 | ||||
|     FILE* f = fopen("/sdcard/book.txt", "r"); | ||||
|     long bookmark = 0; | ||||
| 
 | ||||
|     while (1) { | ||||
| 		EPD_fillScreen(_bg); | ||||
| 		_fg = 15; | ||||
| 		_bg = 0; | ||||
| 
 | ||||
| 		char text[1024]; | ||||
|          | ||||
|         if (f == NULL) { | ||||
|             ESP_LOGE(TAG, "Failed to open file for reading"); | ||||
|             sprintf(text, "Could not open SD card."); | ||||
|             f = fopen("/sdcard/book.txt", "r"); | ||||
|         if (textReader != NULL) { | ||||
|             size_t read = textReader->read(bookmark, text, sizeof(text)); | ||||
|         } else { | ||||
|             if (fread(text, 1, sizeof(text), f) > 0) { | ||||
|                 ESP_LOGI(TAG, "Read content: %s", text); | ||||
|             } else { | ||||
|                 ESP_LOGI(TAG, "End of file. Closing."); | ||||
|                 fclose(f); | ||||
|                 f = NULL; | ||||
|             strcpy(text, "File could not be opened."); | ||||
|         } | ||||
|         } | ||||
| 
 | ||||
|         text_wrap = 1; | ||||
|         EPD_print(text, 0, 0); | ||||
|         EPD_UpdateScreen(); | ||||
|         typesetter.preparePage(&page, text, sizeof(text)); | ||||
|         display_clear(); | ||||
|         pagePrinter.print(&page); | ||||
|         display_update(); | ||||
| 
 | ||||
|         while (1) { | ||||
|             EPD_wait(100); | ||||
|             if (gpio_get_level(BTN_PIN_OK) == 0) { | ||||
|             sleep(10); | ||||
|             if (buttons_pressed_ok()) { | ||||
|                 ESP_LOGI(TAG, "Clear page."); | ||||
|                 EPD_DisplayClearPart(); | ||||
|                 EPD_fillScreen(_bg); | ||||
|                 EPD_print(text, 10, 10); | ||||
|                 EPD_UpdateScreen(); | ||||
|             } | ||||
|             if (gpio_get_level(BTN_PIN_PLUS) == 0) { | ||||
|                 ESP_LOGI(TAG, "Turn page PLUS."); | ||||
|                 display_refresh(); | ||||
|                 break; | ||||
|             } | ||||
|             if (gpio_get_level(BTN_PIN_MINUS) == 0) { | ||||
|             if (buttons_pressed_plus()) { | ||||
|                 ESP_LOGI(TAG, "Turn page PLUS."); | ||||
|                 bookmark += sizeof(text); | ||||
|                 break; | ||||
|             } | ||||
|             if (buttons_pressed_minus()) { | ||||
|                 ESP_LOGI(TAG, "Turn page MINUS."); | ||||
|                 fseek(f, 2 * sizeof(text), SEEK_CUR); | ||||
|                 bookmark -= sizeof(text); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @ -9,9 +9,10 @@ | ||||
| #include "driver/sdmmc_host.h" | ||||
| #include "driver/sdspi_host.h" | ||||
| #include "sdmmc_cmd.h" | ||||
| #include "spiffs_vfs.h" | ||||
| #include "storage.h" | ||||
| 
 | ||||
| static const char *TAG = "storage"; | ||||
| static const char *tag = "storage"; | ||||
| 
 | ||||
| // This example can use SDMMC and SPI peripherals to communicate with SD card.
 | ||||
| // By default, SDMMC peripheral is used.
 | ||||
| @ -33,10 +34,10 @@ static const char *TAG = "storage"; | ||||
| #define PIN_NUM_CS   ((gpio_num_t)13) | ||||
| #endif //USE_SPI_MODE
 | ||||
| 
 | ||||
| int storage_init() | ||||
| int sdcard_init() | ||||
| { | ||||
| #ifndef USE_SPI_MODE | ||||
|     ESP_LOGI(TAG, "Using SDMMC peripheral"); | ||||
|     ESP_LOGI(tag, "Using SDMMC peripheral"); | ||||
|     sdmmc_host_t host = SDMMC_HOST_DEFAULT(); | ||||
| 
 | ||||
|     // This initializes the slot without card detect (CD) and write protect (WP) signals.
 | ||||
| @ -86,10 +87,10 @@ int storage_init() | ||||
| 
 | ||||
|     if (ret != ESP_OK) { | ||||
|         if (ret == ESP_FAIL) { | ||||
|             ESP_LOGE(TAG, "Failed to mount filesystem. " | ||||
|             ESP_LOGE(tag, "Failed to mount filesystem. " | ||||
|                 "If you want the card to be formatted, set format_if_mount_failed = true."); | ||||
|         } else { | ||||
|             ESP_LOGE(TAG, "Failed to initialize the card (%s). " | ||||
|             ESP_LOGE(tag, "Failed to initialize the card (%s). " | ||||
|                 "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret)); | ||||
|         } | ||||
|         return -1; | ||||
| @ -100,3 +101,25 @@ int storage_init() | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int storage_init() | ||||
| { | ||||
|     int ret = 0; | ||||
| 
 | ||||
|     vfs_spiffs_register(); | ||||
|     if (spiffs_is_mounted) { | ||||
|         ESP_LOGI(tag, "File system mounted."); | ||||
|     } else { | ||||
|         ESP_LOGE(tag, "Error mounting file system."); | ||||
|         ret += 1 << 1; | ||||
|     } | ||||
| 
 | ||||
|     if (sdcard_init() == 0) { | ||||
|         ESP_LOGI(tag, "SD card mounted."); | ||||
|     } else { | ||||
|         ESP_LOGE(tag, "Error mounting SD card."); | ||||
|         ret += 1 << 2; | ||||
|     } | ||||
|      | ||||
|     return ret; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user