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
											
										
									
								
							
							
								
								
									
										197
									
								
								main/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										197
									
								
								main/main.cpp
									
									
									
									
									
								
							| @ -1,7 +1,6 @@ | |||||||
| #include <time.h> | #include <time.h> | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <sys/fcntl.h> | #include <sys/fcntl.h> | ||||||
| #include <stdio.h> |  | ||||||
| #include <time.h> | #include <time.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| @ -11,21 +10,21 @@ | |||||||
| #include "driver/gpio.h" | #include "driver/gpio.h" | ||||||
| #include "esp_system.h" | #include "esp_system.h" | ||||||
| #include "esp_heap_alloc_caps.h" | #include "esp_heap_alloc_caps.h" | ||||||
| #include "spiffs_vfs.h" | 
 | ||||||
| #include "esp_log.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"; | 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 struct tm* tm_info; | ||||||
| static char tmp_buff[128]; | static char tmp_buff[128]; | ||||||
| static time_t time_now, time_last = 0; | 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]"; | static const char tag[] = "[LilyBook]"; | ||||||
| esp_err_t ret; | 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); |     vTaskDelay(ms / portTICK_RATE_MS); | ||||||
| 	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."); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| extern "C" void app_main() | extern "C" void app_main() | ||||||
| { | { | ||||||
|     gpio_config_t buttons_config; |     printf("\n   LilyBook v%s\n\n", APP_VERSION); | ||||||
|     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); |  | ||||||
| 
 | 
 | ||||||
|  |     storage_init(); | ||||||
|  |     buttons_init(); | ||||||
|     display_init(); |     display_init(); | ||||||
|     spi_init(); |     spi_init(); | ||||||
| 
 | 
 | ||||||
| 	vTaskDelay(500 / portTICK_RATE_MS); | 	sleep(500); | ||||||
| 
 |  | ||||||
|     printf("\n   LilyBook v%s\n\n", APP_VERSION); |  | ||||||
| 
 | 
 | ||||||
| 	display_connect(); | 	display_connect(); | ||||||
|  |     display_splash_screen(); | ||||||
| 
 | 
 | ||||||
|     EPD_DisplayClearPart(); |     sleep(500); | ||||||
|     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(); |  | ||||||
| 
 | 
 | ||||||
| 	printf("==== START ====\r\n\n"); | 	printf("==== START ====\r\n\n"); | ||||||
| 
 | 
 | ||||||
| 	_gs = 1; |     Typesetter typesetter; | ||||||
| 	uint32_t tstart; |     PagePrinter pagePrinter; | ||||||
| 	int pass = 0; |     TextStorage textStorage; | ||||||
|     int font = DEJAVU18_FONT;//DEFAULT_FONT;
 |     TextReader* textReader = textStorage.open("/sdcard/book.txt"); | ||||||
|     EPD_setFont(font, NULL); |     Page page; | ||||||
| 
 | 
 | ||||||
|     EPD_wait(100); |     long bookmark = 0; | ||||||
| 
 |  | ||||||
|     FILE* f = fopen("/sdcard/book.txt", "r"); |  | ||||||
| 
 | 
 | ||||||
|     while (1) { |     while (1) { | ||||||
| 		EPD_fillScreen(_bg); | 		char text[1024]; | ||||||
| 		_fg = 15; |         if (textReader != NULL) { | ||||||
| 		_bg = 0; |             size_t read = textReader->read(bookmark, text, sizeof(text)); | ||||||
| 
 |  | ||||||
|         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"); |  | ||||||
|         } else { |         } else { | ||||||
|             if (fread(text, 1, sizeof(text), f) > 0) { |             strcpy(text, "File could not be opened."); | ||||||
|                 ESP_LOGI(TAG, "Read content: %s", text); |  | ||||||
|             } else { |  | ||||||
|                 ESP_LOGI(TAG, "End of file. Closing."); |  | ||||||
|                 fclose(f); |  | ||||||
|                 f = NULL; |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
| 
 |         typesetter.preparePage(&page, text, sizeof(text)); | ||||||
|         text_wrap = 1; |         display_clear(); | ||||||
|         EPD_print(text, 0, 0); |         pagePrinter.print(&page); | ||||||
|         EPD_UpdateScreen(); |         display_update(); | ||||||
| 
 | 
 | ||||||
|         while (1) { |         while (1) { | ||||||
|             EPD_wait(100); |             sleep(10); | ||||||
|             if (gpio_get_level(BTN_PIN_OK) == 0) { |             if (buttons_pressed_ok()) { | ||||||
|                 ESP_LOGI(TAG, "Clear page."); |                 ESP_LOGI(TAG, "Clear page."); | ||||||
|                 EPD_DisplayClearPart(); |                 display_refresh(); | ||||||
|                 EPD_fillScreen(_bg); |  | ||||||
|                 EPD_print(text, 10, 10); |  | ||||||
|                 EPD_UpdateScreen(); |  | ||||||
|             } |  | ||||||
|             if (gpio_get_level(BTN_PIN_PLUS) == 0) { |  | ||||||
|                 ESP_LOGI(TAG, "Turn page PLUS."); |  | ||||||
|                 break; |                 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."); |                 ESP_LOGI(TAG, "Turn page MINUS."); | ||||||
|                 fseek(f, 2 * sizeof(text), SEEK_CUR); |                 bookmark -= sizeof(text); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -9,9 +9,10 @@ | |||||||
| #include "driver/sdmmc_host.h" | #include "driver/sdmmc_host.h" | ||||||
| #include "driver/sdspi_host.h" | #include "driver/sdspi_host.h" | ||||||
| #include "sdmmc_cmd.h" | #include "sdmmc_cmd.h" | ||||||
|  | #include "spiffs_vfs.h" | ||||||
| #include "storage.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.
 | // This example can use SDMMC and SPI peripherals to communicate with SD card.
 | ||||||
| // By default, SDMMC peripheral is used.
 | // By default, SDMMC peripheral is used.
 | ||||||
| @ -33,10 +34,10 @@ static const char *TAG = "storage"; | |||||||
| #define PIN_NUM_CS   ((gpio_num_t)13) | #define PIN_NUM_CS   ((gpio_num_t)13) | ||||||
| #endif //USE_SPI_MODE
 | #endif //USE_SPI_MODE
 | ||||||
| 
 | 
 | ||||||
| int storage_init() | int sdcard_init() | ||||||
| { | { | ||||||
| #ifndef USE_SPI_MODE | #ifndef USE_SPI_MODE | ||||||
|     ESP_LOGI(TAG, "Using SDMMC peripheral"); |     ESP_LOGI(tag, "Using SDMMC peripheral"); | ||||||
|     sdmmc_host_t host = SDMMC_HOST_DEFAULT(); |     sdmmc_host_t host = SDMMC_HOST_DEFAULT(); | ||||||
| 
 | 
 | ||||||
|     // This initializes the slot without card detect (CD) and write protect (WP) signals.
 |     // 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_OK) { | ||||||
|         if (ret == ESP_FAIL) { |         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."); |                 "If you want the card to be formatted, set format_if_mount_failed = true."); | ||||||
|         } else { |         } 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)); |                 "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret)); | ||||||
|         } |         } | ||||||
|         return -1; |         return -1; | ||||||
| @ -100,3 +101,25 @@ int storage_init() | |||||||
| 
 | 
 | ||||||
|     return 0; |     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