Skip to content

Commit 644431c

Browse files
JF002NeroBurner
andauthored
Add support for SpiNorFlash and FS (#30)
The external SPI flash is implemented as a 4MB on the local filesystem. This allows the FS (littleFS) and settings to work properly. Remove the simulated `FS.h` and `FS.cpp`, because we can now use the files from InfiniTime directly as the heavy lifting is done in the simulated `SpiNorFlash.h` and cpp files. `SpiNorFlash.h` provides read and write functions with `uint8_t` buffer, but `fs::fstream` expects `char` buffer. Use `reinterpret_cast` and check if by any chance the `char` type on a platform is implemented with more than one byte. Then the `reinterpret_cast<char *>(buffer)` would change the meaning of the `size` parameter, which could lead to garbage data. Co-authored-by: Reinhold Gschweicher <pyro4hell@gmail.com>
1 parent b1fbae3 commit 644431c

6 files changed

Lines changed: 50 additions & 502 deletions

File tree

CMakeLists.txt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ target_sources(infinisim PUBLIC
8888
sim/components/brightness/BrightnessController.cpp
8989
sim/components/firmwarevalidator/FirmwareValidator.h
9090
sim/components/firmwarevalidator/FirmwareValidator.cpp
91-
sim/components/fs/FS.h
92-
sim/components/fs/FS.cpp
9391
sim/components/heartrate/HeartRateController.h
9492
sim/components/heartrate/HeartRateController.cpp
9593
sim/components/motion/MotionController.h
@@ -173,13 +171,21 @@ file(GLOB InfiniTime_WIDGETS
173171
"${InfiniTime_DIR}/src/displayapp/widgets/*.cpp"
174172
"${InfiniTime_DIR}/src/displayapp/widgets/*.h"
175173
)
174+
set(LITTLEFS_SRC
175+
${InfiniTime_DIR}/src/libs/littlefs/lfs_util.h
176+
${InfiniTime_DIR}/src/libs/littlefs/lfs.h
177+
${InfiniTime_DIR}/src/libs/littlefs/lfs_util.c
178+
${InfiniTime_DIR}/src/libs/littlefs/lfs.c
179+
)
176180
target_sources(infinisim PUBLIC ${InfiniTime_SCREENS})
177181
target_sources(infinisim PUBLIC ${InfiniTime_FONTS})
178182
target_sources(infinisim PUBLIC ${InfiniTime_ICONS})
179183
target_sources(infinisim PUBLIC ${InfiniTime_WIDGETS})
184+
target_sources(infinisim PUBLIC ${LITTLEFS_SRC})
180185

181186
# add files directly from InfiniTime sources
182187
target_include_directories(infinisim PRIVATE "${InfiniTime_DIR}/src")
188+
target_include_directories(infinisim PRIVATE "${InfiniTime_DIR}/src/libs/littlefs")
183189
target_sources(infinisim PUBLIC
184190
${InfiniTime_DIR}/src/BootloaderVersion.h
185191
${InfiniTime_DIR}/src/BootloaderVersion.cpp
@@ -202,6 +208,8 @@ target_sources(infinisim PUBLIC
202208
${InfiniTime_DIR}/src/components/settings/Settings.cpp
203209
${InfiniTime_DIR}/src/components/ble/NotificationManager.h
204210
${InfiniTime_DIR}/src/components/ble/NotificationManager.cpp
211+
${InfiniTime_DIR}/src/components/fs/FS.h
212+
${InfiniTime_DIR}/src/components/fs/FS.cpp
205213
${InfiniTime_DIR}/src/components/timer/TimerController.h
206214
${InfiniTime_DIR}/src/components/timer/TimerController.cpp
207215
${InfiniTime_DIR}/src/drivers/PinMap.h

main.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ Pinetime::Drivers::Spi lcdSpi {spi, Pinetime::PinMap::SpiLcdCsn};
224224
Pinetime::Drivers::St7789 lcd {lcdSpi, Pinetime::PinMap::LcdDataCommand};
225225

226226
Pinetime::Drivers::Spi flashSpi {spi, Pinetime::PinMap::SpiFlashCsn};
227-
Pinetime::Drivers::SpiNorFlash spiNorFlash {flashSpi};
227+
Pinetime::Drivers::SpiNorFlash spiNorFlash {"spiNorFlash.raw"};
228228

229229
// The TWI device should work @ up to 400Khz but there is a HW bug which prevent it from
230230
// respecting correct timings. According to erratas heet, this magic value makes it run
@@ -252,7 +252,7 @@ Pinetime::Controllers::Ble bleController;
252252
Pinetime::Controllers::HeartRateController heartRateController;
253253
Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController);
254254

255-
Pinetime::Controllers::FS fs; // {spiNorFlash};
255+
Pinetime::Controllers::FS fs {spiNorFlash};
256256
Pinetime::Controllers::Settings settingsController {fs};
257257
Pinetime::Controllers::MotorController motorController {};
258258

@@ -837,6 +837,8 @@ int main(int argc, char **argv)
837837
/*Initialize the HAL (display, input devices, tick) for LVGL*/
838838
hal_init();
839839

840+
fs.Init();
841+
840842
// initialize the core of our Simulator
841843
Framework fw(fw_status_window_visible, 240,240);
842844

sim/components/fs/FS.cpp

Lines changed: 0 additions & 261 deletions
This file was deleted.

0 commit comments

Comments
 (0)