mirror of
https://github.com/Dejvino/lilybook.git
synced 2024-11-14 04:17:28 +00:00
Added support for SD Card browsing. Added missing CMakeLists.txt.
This commit is contained in:
parent
d93fc4b4c7
commit
af712d9124
6
CMakeLists.txt
Normal file
6
CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# The following lines of boilerplate have to be in your project's CMakeLists
|
||||||
|
# in this exact order for cmake to work correctly
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
project(lilybook)
|
21
components/epaper/CMakeLists.txt
Normal file
21
components/epaper/CMakeLists.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
set(COMPONENT_PRIV_INCLUDEDIRS "." "../")
|
||||||
|
set(COMPONENT_SRCS
|
||||||
|
"comic24.c"
|
||||||
|
"DefaultFont.c"
|
||||||
|
"DejaVuSans18.c"
|
||||||
|
"DejaVuSans24.c"
|
||||||
|
"dejavuX.c"
|
||||||
|
"EPD.c"
|
||||||
|
"EPDspi.c"
|
||||||
|
"minya24.c"
|
||||||
|
"SmallFont.c"
|
||||||
|
"tooney32.c"
|
||||||
|
"Ubuntu16.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(COMPONENT_REQUIRES spi_flash)
|
||||||
|
set(COMPONENT_PRIV_REQUIRES bootloader_support)
|
||||||
|
|
||||||
|
register_component()
|
||||||
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "spi_master_lobo.h"
|
#include "spidriver/spi_master_lobo.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#define _EPDSPI_H_
|
#define _EPDSPI_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "spi_master_lobo.h"
|
#include "spidriver/spi_master_lobo.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -4,4 +4,4 @@
|
|||||||
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
|
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
|
||||||
|
|
||||||
COMPONENT_SRCDIRS := .
|
COMPONENT_SRCDIRS := .
|
||||||
COMPONENT_ADD_INCLUDEDIRS := .
|
COMPONENT_ADD_INCLUDEDIRS := . ../
|
||||||
|
9
components/spidriver/CMakeLists.txt
Normal file
9
components/spidriver/CMakeLists.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
set(COMPONENT_PRIV_INCLUDEDIRS ".")
|
||||||
|
set(COMPONENT_SRCS "spi_master_lobo.c")
|
||||||
|
|
||||||
|
set(COMPONENT_REQUIRES spi_flash)
|
||||||
|
set(COMPONENT_PRIV_REQUIRES bootloader_support)
|
||||||
|
|
||||||
|
register_component()
|
||||||
|
|
||||||
|
|
17
components/spiffs/CMakeLists.txt
Normal file
17
components/spiffs/CMakeLists.txt
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
set(COMPONENT_PRIV_INCLUDEDIRS ".")
|
||||||
|
set(COMPONENT_SRCS "esp_spiffs.c"
|
||||||
|
"list.c"
|
||||||
|
"mutex.c"
|
||||||
|
"spiffs_cache.c"
|
||||||
|
"spiffs_check.c"
|
||||||
|
"spiffs_gc.c"
|
||||||
|
"spiffs_hydrogen.c"
|
||||||
|
"spiffs_nucleus.c"
|
||||||
|
"spiffs_vfs.c")
|
||||||
|
|
||||||
|
set(COMPONENT_REQUIRES spi_flash)
|
||||||
|
set(COMPONENT_PRIV_REQUIRES bootloader_support)
|
||||||
|
|
||||||
|
register_component()
|
||||||
|
|
||||||
|
|
5
main/CMakeLists.txt
Normal file
5
main/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
FILE(GLOB_RECURSE app_sources *.cpp *.c)
|
||||||
|
set(COMPONENT_SRCS "${app_sources} main.cpp")
|
||||||
|
set(COMPONENT_ADD_INCLUDEDIRS "." "../components/")
|
||||||
|
|
||||||
|
register_component()
|
@ -2,7 +2,7 @@ menu "LilyBook Configuration"
|
|||||||
|
|
||||||
config SPIFFS_BASE_ADDR
|
config SPIFFS_BASE_ADDR
|
||||||
hex "SPIFFS Base address"
|
hex "SPIFFS Base address"
|
||||||
range 0x100000 0x1FFE000
|
# range 0x100000 0x1FFE000
|
||||||
default 0x180000
|
default 0x180000
|
||||||
help
|
help
|
||||||
Starting address of the SPIFFS area in ESP32 Flash
|
Starting address of the SPIFFS area in ESP32 Flash
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
#include "spi_master_lobo.h"
|
#include "spidriver/spi_master_lobo.h"
|
||||||
#include "EPD.h"
|
#include "epaper/EPD.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#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 "spiffs/spiffs_vfs.h"
|
||||||
#include "storage.h"
|
#include "storage.h"
|
||||||
|
|
||||||
static const char *tag = "storage";
|
static const char *tag = "storage";
|
||||||
|
@ -1,25 +1,23 @@
|
|||||||
#include "core/common.h"
|
#include "core/common.h"
|
||||||
#include "core/buttons.h"
|
#include "core/buttons.h"
|
||||||
#include "core/display.h"
|
#include "core/display.h"
|
||||||
#include <EPD.h>
|
#include <epaper/EPD.h>
|
||||||
#include "ModeRunner.h"
|
#include "ModeRunner.h"
|
||||||
#include "ReaderMode.h"
|
#include "ReaderMode.h"
|
||||||
#include "AbstractMenuMode.h"
|
#include "AbstractMenuMode.h"
|
||||||
|
|
||||||
static int baseY = 35;
|
static int baseY = 35;
|
||||||
static int menuSkip = 20;
|
static int x = 20;
|
||||||
static int x = 40;
|
|
||||||
static int menu_options_size = 4;
|
|
||||||
|
|
||||||
void draw_menu_option(char* text, int line, bool selected)
|
void draw_menu_option(char* text, int textX, int textHeight, int line, bool selected)
|
||||||
{
|
{
|
||||||
EPD_print(text, CENTER, baseY + line * menuSkip);
|
EPD_print(text, textX, baseY + line * textHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_menu_cursor(int cursor)
|
void draw_menu_cursor(int cursor, int textHeight)
|
||||||
{
|
{
|
||||||
EPD_drawRect(x, baseY + cursor * menuSkip,
|
EPD_drawRect(x, baseY + cursor * textHeight,
|
||||||
EPD_DISPLAY_WIDTH - 2*x, menuSkip + 1, 0x0F);
|
EPD_DISPLAY_WIDTH - 2*x, textHeight + 1, 0x0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractMenuMode::start()
|
void AbstractMenuMode::start()
|
||||||
@ -32,13 +30,18 @@ void AbstractMenuMode::loop()
|
|||||||
EPD_print(this->getTitle(), CENTER, 0);
|
EPD_print(this->getTitle(), CENTER, 0);
|
||||||
|
|
||||||
int line = 0;
|
int line = 0;
|
||||||
EPD_setFont(DEJAVU18_FONT, NULL);
|
EPD_setFont(this->getOptionsFont(), NULL);
|
||||||
|
int menu_option_height = EPD_getfontheight() + 1;
|
||||||
|
int menu_options_limit = (EPD_DISPLAY_HEIGHT - baseY) / (EPD_getfontheight() + 1);
|
||||||
char** options = this->getOptions();
|
char** options = this->getOptions();
|
||||||
int menu_options_size = this->getOptionsSize();
|
int menu_options_size = this->getOptionsSize();
|
||||||
for (int line = 0; line < menu_options_size; line++) {
|
int start = (this->cursor / menu_options_limit) * menu_options_limit;
|
||||||
draw_menu_option(options[line], line, this->cursor == line);
|
int stop = ((this->cursor / menu_options_limit) + 1) * menu_options_limit;
|
||||||
|
for (int line = start; line < menu_options_size && line < stop; line++) {
|
||||||
|
draw_menu_option(options[line], this->getOptionsX(), menu_option_height,
|
||||||
|
line % menu_options_limit, this->cursor == line);
|
||||||
}
|
}
|
||||||
draw_menu_cursor(this->cursor);
|
draw_menu_cursor(this->cursor % menu_options_limit, menu_option_height);
|
||||||
display_update();
|
display_update();
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
@ -60,3 +63,13 @@ void AbstractMenuMode::loop()
|
|||||||
|
|
||||||
void AbstractMenuMode::finish()
|
void AbstractMenuMode::finish()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
int AbstractMenuMode::getOptionsX()
|
||||||
|
{
|
||||||
|
return CENTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
int AbstractMenuMode::getOptionsFont()
|
||||||
|
{
|
||||||
|
return DEJAVU18_FONT;
|
||||||
|
}
|
||||||
|
@ -14,6 +14,8 @@ protected:
|
|||||||
virtual char** getOptions();
|
virtual char** getOptions();
|
||||||
virtual int getOptionsSize();
|
virtual int getOptionsSize();
|
||||||
virtual void onOptionSelected(int option);
|
virtual void onOptionSelected(int option);
|
||||||
|
virtual int getOptionsX();
|
||||||
|
virtual int getOptionsFont();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int cursor = 0;
|
int cursor = 0;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "core/common.h"
|
#include "core/common.h"
|
||||||
#include "core/buttons.h"
|
#include "core/buttons.h"
|
||||||
#include "core/display.h"
|
#include "core/display.h"
|
||||||
#include <EPD.h>
|
#include <epaper/EPD.h>
|
||||||
#include "InternalMemoryMenuMode.h"
|
#include "InternalMemoryMenuMode.h"
|
||||||
|
|
||||||
void InternalMemoryMenuMode::start()
|
void InternalMemoryMenuMode::start()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "core/common.h"
|
#include "core/common.h"
|
||||||
#include "core/buttons.h"
|
#include "core/buttons.h"
|
||||||
#include "core/display.h"
|
#include "core/display.h"
|
||||||
#include <EPD.h>
|
#include <epaper/EPD.h>
|
||||||
#include "ModeRunner.h"
|
#include "ModeRunner.h"
|
||||||
#include "ReaderMode.h"
|
#include "ReaderMode.h"
|
||||||
#include "InternalMemoryMenuMode.h"
|
#include "InternalMemoryMenuMode.h"
|
||||||
@ -12,7 +12,7 @@
|
|||||||
static char* options[] = {
|
static char* options[] = {
|
||||||
"Continue Reading",
|
"Continue Reading",
|
||||||
"Internal Memory",
|
"Internal Memory",
|
||||||
"SC Card",
|
"SD Card",
|
||||||
"Settings"
|
"Settings"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,23 +1,87 @@
|
|||||||
|
#include <string.h>
|
||||||
#include "core/common.h"
|
#include "core/common.h"
|
||||||
#include "core/buttons.h"
|
#include "core/buttons.h"
|
||||||
#include "core/display.h"
|
#include "core/display.h"
|
||||||
#include <EPD.h>
|
#include <epaper/EPD.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <dirent.h>
|
||||||
#include "SdCardMenuMode.h"
|
#include "SdCardMenuMode.h"
|
||||||
|
|
||||||
static char* options[] = {
|
#include "esp_log.h"
|
||||||
"[Back]",
|
static char* TAG = "SdCardMenuMode";
|
||||||
"/file.txt",
|
|
||||||
"/book.txt",
|
// TODO: make use of bytes
|
||||||
"/asdf.gif",
|
|
||||||
};
|
|
||||||
|
|
||||||
void SdCardMenuMode::start()
|
void SdCardMenuMode::start()
|
||||||
{
|
{
|
||||||
display_refresh();
|
display_refresh();
|
||||||
|
|
||||||
|
dir_entry_t* dir_chain_start = new dir_entry_t;
|
||||||
|
strcpy(dir_chain_start->name, "[Back]");
|
||||||
|
dir_entry_t* last_entry = dir_chain_start;
|
||||||
|
int entries = 1;
|
||||||
|
|
||||||
|
struct stat stats;
|
||||||
|
struct dirent *dir;
|
||||||
|
DIR* d = opendir(this->basedir);
|
||||||
|
if (d)
|
||||||
|
{
|
||||||
|
while ((dir = readdir(d)) != NULL)
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG, "* %s", dir->d_name);
|
||||||
|
dir_entry_t* new_entry = new dir_entry_t;
|
||||||
|
strcpy(new_entry->name, dir->d_name);
|
||||||
|
char path[64];
|
||||||
|
strcpy(path, this->basedir);
|
||||||
|
strcat(path, dir->d_name);
|
||||||
|
if (stat(path, &stats) == 0) {
|
||||||
|
last_entry->bytes = stats.st_size;
|
||||||
|
}
|
||||||
|
new_entry->next = NULL;
|
||||||
|
if (dir_chain_start == NULL) {
|
||||||
|
dir_chain_start = new_entry;
|
||||||
|
}
|
||||||
|
if (last_entry == NULL) {
|
||||||
|
last_entry = new_entry;
|
||||||
|
} else {
|
||||||
|
last_entry->next = new_entry;
|
||||||
|
last_entry = new_entry;
|
||||||
|
}
|
||||||
|
entries++;
|
||||||
|
}
|
||||||
|
closedir(d);
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG, "Could not open dir.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this->optionsNames = new char[entries*DIR_ENTRY_NAME_SIZE];
|
||||||
|
this->options = new char*[entries];
|
||||||
|
this->optionsBytes = new unsigned long[entries];
|
||||||
|
this->optionsSize = entries;
|
||||||
|
last_entry = dir_chain_start;
|
||||||
|
int i = 0;
|
||||||
|
while (last_entry != NULL) {
|
||||||
|
this->options[i] = &this->optionsNames[i * DIR_ENTRY_NAME_SIZE];
|
||||||
|
memcpy(this->options[i], last_entry->name, DIR_ENTRY_NAME_SIZE);
|
||||||
|
this->optionsBytes[i] = last_entry->bytes;
|
||||||
|
|
||||||
|
dir_entry_t* next = (dir_entry_t*)last_entry->next;
|
||||||
|
delete last_entry;
|
||||||
|
last_entry = next;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SdCardMenuMode::finish()
|
void SdCardMenuMode::finish()
|
||||||
{}
|
{
|
||||||
|
delete this->options;
|
||||||
|
delete this->optionsNames;
|
||||||
|
delete this->optionsBytes;
|
||||||
|
}
|
||||||
|
|
||||||
char* SdCardMenuMode::getTitle()
|
char* SdCardMenuMode::getTitle()
|
||||||
{
|
{
|
||||||
@ -26,12 +90,12 @@ char* SdCardMenuMode::getTitle()
|
|||||||
|
|
||||||
char** SdCardMenuMode::getOptions()
|
char** SdCardMenuMode::getOptions()
|
||||||
{
|
{
|
||||||
return options;
|
return this->options;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SdCardMenuMode::getOptionsSize()
|
int SdCardMenuMode::getOptionsSize()
|
||||||
{
|
{
|
||||||
return 4;
|
return this->optionsSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SdCardMenuMode::onOptionSelected(int option)
|
void SdCardMenuMode::onOptionSelected(int option)
|
||||||
@ -42,3 +106,13 @@ void SdCardMenuMode::onOptionSelected(int option)
|
|||||||
}
|
}
|
||||||
// TODO files
|
// TODO files
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SdCardMenuMode::getOptionsX()
|
||||||
|
{
|
||||||
|
return 35;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SdCardMenuMode::getOptionsFont()
|
||||||
|
{
|
||||||
|
return SMALL_FONT;
|
||||||
|
}
|
||||||
|
@ -1,17 +1,31 @@
|
|||||||
#include "AppMode.h"
|
#include "AppMode.h"
|
||||||
#include "AbstractMenuMode.h"
|
#include "AbstractMenuMode.h"
|
||||||
|
|
||||||
|
#define DIR_ENTRY_NAME_SIZE 16
|
||||||
|
typedef struct {
|
||||||
|
char name[DIR_ENTRY_NAME_SIZE];
|
||||||
|
unsigned long bytes;
|
||||||
|
void* next;
|
||||||
|
} dir_entry_t;
|
||||||
|
|
||||||
class SdCardMenuMode : public AbstractMenuMode
|
class SdCardMenuMode : public AbstractMenuMode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void start();
|
void start();
|
||||||
virtual void finish();
|
void finish();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual char* getTitle();
|
char* getTitle();
|
||||||
virtual char** getOptions();
|
char** getOptions();
|
||||||
virtual int getOptionsSize();
|
int getOptionsSize();
|
||||||
virtual void onOptionSelected(int option);
|
void onOptionSelected(int option);
|
||||||
|
int getOptionsX();
|
||||||
|
int getOptionsFont();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
char* basedir = "/sdcard/";
|
||||||
|
char** options;
|
||||||
|
char* optionsNames;
|
||||||
|
unsigned long* optionsBytes;
|
||||||
|
int optionsSize;
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "core/common.h"
|
#include "core/common.h"
|
||||||
#include "core/buttons.h"
|
#include "core/buttons.h"
|
||||||
#include "core/display.h"
|
#include "core/display.h"
|
||||||
#include <EPD.h>
|
#include <epaper/EPD.h>
|
||||||
#include "SettingsMenuMode.h"
|
#include "SettingsMenuMode.h"
|
||||||
|
|
||||||
static char* options[] = {
|
static char* options[] = {
|
||||||
@ -38,7 +38,7 @@ void SettingsMenuMode::onOptionSelected(int option)
|
|||||||
{
|
{
|
||||||
switch (option) {
|
switch (option) {
|
||||||
case 0:
|
case 0:
|
||||||
// TODO
|
this->setFinished();
|
||||||
return;
|
return;
|
||||||
case 1:
|
case 1:
|
||||||
// TODO
|
// TODO
|
||||||
@ -47,7 +47,7 @@ void SettingsMenuMode::onOptionSelected(int option)
|
|||||||
// TODO
|
// TODO
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
this->setFinished();
|
// TODO
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include "core/display.h"
|
#include "core/display.h"
|
||||||
#include "EPD.h"
|
#include "epaper/EPD.h"
|
||||||
#include "PagePrinter.h"
|
#include "PagePrinter.h"
|
||||||
|
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "PageSettingsProvider.h"
|
#include "PageSettingsProvider.h"
|
||||||
#include "EPD.h"
|
#include "epaper/EPD.h"
|
||||||
#include "EPDspi.h" // TODO: remove after display config is extracted
|
#include "epaper/EPDspi.h" // TODO: remove after display config is extracted
|
||||||
|
|
||||||
int PageSettingsProvider::getWidth()
|
int PageSettingsProvider::getWidth()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user