aboutsummaryrefslogtreecommitdiffstats
path: root/src/displayapp
diff options
context:
space:
mode:
Diffstat (limited to 'src/displayapp')
-rw-r--r--src/displayapp/DisplayApp.cpp2
-rw-r--r--src/displayapp/LittleVgl.cpp58
-rw-r--r--src/displayapp/LittleVgl.h5
3 files changed, 62 insertions, 3 deletions
diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp
index 1648a090..ccba7ee6 100644
--- a/src/displayapp/DisplayApp.cpp
+++ b/src/displayapp/DisplayApp.cpp
@@ -91,7 +91,7 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
brightnessController {brightnessController},
touchHandler {touchHandler},
filesystem {filesystem},
- lvgl {lcd} {
+ lvgl {lcd, filesystem} {
}
void DisplayApp::Start(System::BootErrors error) {
diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp
index 1326c566..89893cf7 100644
--- a/src/displayapp/LittleVgl.cpp
+++ b/src/displayapp/LittleVgl.cpp
@@ -4,6 +4,8 @@
#include <FreeRTOS.h>
#include <task.h>
#include "drivers/St7789.h"
+#include "littlefs/lfs.h"
+#include "components/fs/FS.h"
using namespace Pinetime::Components;
@@ -12,6 +14,43 @@ namespace {
lv_theme_t* theme = lv_pinetime_theme_init();
lv_theme_set_act(theme);
}
+
+ lv_fs_res_t lvglOpen(lv_fs_drv_t* drv, void* file_p, const char* path, lv_fs_mode_t /*mode*/) {
+ lfs_file_t* file = static_cast<lfs_file_t*>(file_p);
+ Pinetime::Controllers::FS* filesys = static_cast<Pinetime::Controllers::FS*>(drv->user_data);
+ int res = filesys->FileOpen(file, path, LFS_O_RDONLY);
+ if (res == 0) {
+ if (file->type == 0) {
+ return LV_FS_RES_FS_ERR;
+ } else {
+ return LV_FS_RES_OK;
+ }
+ }
+ return LV_FS_RES_NOT_EX;
+ }
+
+ lv_fs_res_t lvglClose(lv_fs_drv_t* drv, void* file_p) {
+ Pinetime::Controllers::FS* filesys = static_cast<Pinetime::Controllers::FS*>(drv->user_data);
+ lfs_file_t* file = static_cast<lfs_file_t*>(file_p);
+ filesys->FileClose(file);
+
+ return LV_FS_RES_OK;
+ }
+
+ lv_fs_res_t lvglRead(lv_fs_drv_t* drv, void* file_p, void* buf, uint32_t btr, uint32_t* br) {
+ Pinetime::Controllers::FS* filesys = static_cast<Pinetime::Controllers::FS*>(drv->user_data);
+ lfs_file_t* file = static_cast<lfs_file_t*>(file_p);
+ filesys->FileRead(file, static_cast<uint8_t*>(buf), btr);
+ *br = btr;
+ return LV_FS_RES_OK;
+ }
+
+ lv_fs_res_t lvglSeek(lv_fs_drv_t* drv, void* file_p, uint32_t pos) {
+ Pinetime::Controllers::FS* filesys = static_cast<Pinetime::Controllers::FS*>(drv->user_data);
+ lfs_file_t* file = static_cast<lfs_file_t*>(file_p);
+ filesys->FileSeek(file, pos);
+ return LV_FS_RES_OK;
+ }
}
static void disp_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p) {
@@ -34,7 +73,7 @@ bool touchpad_read(lv_indev_drv_t* indev_drv, lv_indev_data_t* data) {
return lvgl->GetTouchPadInfo(data);
}
-LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd) : lcd {lcd} {
+LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Controllers::FS& filesystem) : lcd {lcd}, filesystem {filesystem} {
}
void LittleVgl::Init() {
@@ -42,6 +81,7 @@ void LittleVgl::Init() {
InitTheme();
InitDisplay();
InitTouchpad();
+ InitFileSystem();
}
void LittleVgl::InitDisplay() {
@@ -75,6 +115,22 @@ void LittleVgl::InitTouchpad() {
lv_indev_drv_register(&indev_drv);
}
+void LittleVgl::InitFileSystem() {
+ lv_fs_drv_t fs_drv;
+ lv_fs_drv_init(&fs_drv);
+
+ fs_drv.file_size = sizeof(lfs_file_t);
+ fs_drv.letter = 'F';
+ fs_drv.open_cb = lvglOpen;
+ fs_drv.close_cb = lvglClose;
+ fs_drv.read_cb = lvglRead;
+ fs_drv.seek_cb = lvglSeek;
+
+ fs_drv.user_data = &filesystem;
+
+ lv_fs_drv_register(&fs_drv);
+}
+
void LittleVgl::SetFullRefresh(FullRefreshDirections direction) {
if (scrollDirection == FullRefreshDirections::None) {
scrollDirection = direction;
diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h
index 38f1f00e..9a15ae15 100644
--- a/src/displayapp/LittleVgl.h
+++ b/src/displayapp/LittleVgl.h
@@ -1,6 +1,7 @@
#pragma once
#include <lvgl/lvgl.h>
+#include <components/fs/FS.h>
namespace Pinetime {
namespace Drivers {
@@ -11,7 +12,7 @@ namespace Pinetime {
class LittleVgl {
public:
enum class FullRefreshDirections { None, Up, Down, Left, Right, LeftAnim, RightAnim };
- LittleVgl(Pinetime::Drivers::St7789& lcd);
+ LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Controllers::FS& filesystem);
LittleVgl(const LittleVgl&) = delete;
LittleVgl& operator=(const LittleVgl&) = delete;
@@ -37,8 +38,10 @@ namespace Pinetime {
private:
void InitDisplay();
void InitTouchpad();
+ void InitFileSystem();
Pinetime::Drivers::St7789& lcd;
+ Pinetime::Controllers::FS& filesystem;
lv_disp_buf_t disp_buf_2;
lv_color_t buf2_1[LV_HOR_RES_MAX * 4];