Skip to content

Commit 9e15182

Browse files
authored
littlefs-do binary to work with spi raw file (#52)
Add helper to modify spi raw file, to make experimenting with it easier. ```sh $ ./littlefs-do --help Usage: ./littlefs-do <command> [options] Commands: -h, --help show this help message for the selected command and exit -v, --verbose print status messages to the console stat show information of specified file or directory ls list available files in 'spiNorFlash.raw' file mkdir create directory rmdir remove directory rm remove directory or file cp copy files into or out of flash file settings list settings from 'settings.h' ``` In the process restructure the CMake file for less duplicate includes/defines for both executables (`infinisim` and `littlefs-do`). Upload the `littlefs-do` binary built by the CI additionally to the `infinisim` binary. Use the updated upload-artifact@v3 template to do that.
1 parent 741db4e commit 9e15182

File tree

4 files changed

+774
-56
lines changed

4 files changed

+774
-56
lines changed

.github/workflows/lv_sim.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ jobs:
6464
cmake --build build_lv_sim
6565
6666
- name: Upload simulator executable
67-
uses: actions/upload-artifact@v2
67+
uses: actions/upload-artifact@v3
6868
with:
6969
name: infinisim
7070
path: build_lv_sim/infinisim
71+
72+
- name: Upload littlefs-do executable
73+
uses: actions/upload-artifact@v3
74+
with:
75+
name: littlefs-do
76+
path: build_lv_sim/littlefs-do

CMakeLists.txt

Lines changed: 86 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,64 @@ configure_file(
5050
"${CMAKE_CURRENT_BINARY_DIR}/lv_conf.h"
5151
COPYONLY)
5252

53-
file(GLOB_RECURSE INCLUDES "lv_drivers/*.h" "${InfiniTime_DIR}/src/libs/lvgl/src/*.h" "./*.h" )
54-
file(GLOB_RECURSE SOURCES "lv_drivers/*.c" "${InfiniTime_DIR}/src/libs/lvgl/src/*.c" )
53+
file(GLOB_RECURSE LVGL_INCLUDES "lv_drivers/*.h" "${InfiniTime_DIR}/src/libs/lvgl/src/*.h" "./*.h" )
54+
file(GLOB_RECURSE LVGL_SOURCES "lv_drivers/*.c" "${InfiniTime_DIR}/src/libs/lvgl/src/*.c" )
55+
56+
add_library(sim-base STATIC
57+
# LVGL sources
58+
${LVGL_SOURCES} ${LVGL_INCLUDES}
59+
# FreeRTOS
60+
sim/FreeRTOS.h
61+
sim/FreeRTOS.cpp
62+
sim/task.h
63+
sim/task.cpp
64+
sim/timers.h
65+
sim/timers.cpp
66+
sim/queue.h
67+
sim/queue.cpp
68+
# src/FreeRTOS
69+
sim/portmacro_cmsis.h
70+
sim/portmacro_cmsis.cpp
71+
# nrf
72+
sim/libraries/log/nrf_log.h
73+
sim/libraries/delay/nrf_delay.h
74+
sim/libraries/delay/nrf_delay.cpp
75+
sim/nrfx/nrfx_log.h
76+
sim/nrfx/drivers/include/nrfx_twi.h
77+
sim/nrfx/hal/nrf_gpio.h
78+
sim/nrfx/hal/nrf_gpio.cpp
79+
sim/nrfx/hal/nrfx_gpiote.h # includes hal/nrf_gpio.h
80+
sim/nrfx/hal/nrf_rtc.h
81+
sim/nrfx/hal/nrf_rtc.cpp
82+
# nrf/components/libraries/timer
83+
sim/libraries/timer/app_timer.h
84+
sim/libraries/timer/app_timer.cpp
85+
sim/libraries/gpiote/app_gpiote.h # includes hal/nrf_gpio.h
86+
)
87+
# include the generated lv_conf.h file before anything else
88+
target_include_directories(sim-base PUBLIC "${CMAKE_CURRENT_BINARY_DIR}") # lv_conf.h
89+
target_include_directories(sim-base PUBLIC "sim")
90+
target_include_directories(sim-base PUBLIC "sim/libraries/log") # for nrf_log.h
91+
target_include_directories(sim-base PUBLIC "sim/libraries/timer") # for app_timer.h
92+
target_include_directories(sim-base PUBLIC "sim/nrfx") # for nrfx_log.h and others
93+
target_include_directories(sim-base PUBLIC "sim/nrfx/hal") # for nrfx_log.h
94+
95+
target_include_directories(sim-base PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") # lv_drv_conf.h
96+
target_include_directories(sim-base PUBLIC "${InfiniTime_DIR}/src/libs")
97+
target_include_directories(sim-base PUBLIC "lv_drivers")
98+
99+
target_include_directories(sim-base PUBLIC "${InfiniTime_DIR}/src") # InfiniTime drivers, components and all
55100

56-
add_executable(infinisim main.cpp ${SOURCES} ${INCLUDES})
57101

58102
set(MONITOR_ZOOM 1 CACHE STRING "Scale simulator window by this factor")
59103
if(MONITOR_ZOOM MATCHES "^[0-9]\.?[0-9]*")
60104
message(STATUS "Using MONITOR_ZOOM=${MONITOR_ZOOM}")
61-
target_compile_definitions(infinisim PRIVATE MONITOR_ZOOM=${MONITOR_ZOOM})
105+
target_compile_definitions(sim-base PUBLIC MONITOR_ZOOM=${MONITOR_ZOOM})
62106
else()
63107
message(FATAL_ERROR "variable MONITOR_ZOOM=${MONITOR_ZOOM} must be a positive number")
64108
endif()
65109

66-
# include the generated lv_conf.h file before anything else
67-
target_include_directories(infinisim PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
68-
110+
add_executable(infinisim main.cpp)
69111
# add simulator files
70112
target_sources(infinisim PUBLIC
71113
sim/displayapp/LittleVgl.h
@@ -108,45 +150,8 @@ target_sources(infinisim PUBLIC
108150
sim/drivers/SpiNorFlash.cpp
109151
sim/heartratetask/HeartRateTask.h
110152
sim/heartratetask/HeartRateTask.cpp
111-
# FreeRTOS
112-
sim/FreeRTOS.h
113-
sim/FreeRTOS.cpp
114-
sim/task.h
115-
sim/task.cpp
116-
sim/timers.h
117-
sim/timers.cpp
118-
sim/queue.h
119-
sim/queue.cpp
120-
# src/FreeRTOS
121-
sim/portmacro_cmsis.h
122-
sim/portmacro_cmsis.cpp
123-
# nrf
124-
sim/libraries/log/nrf_log.h
125-
sim/libraries/delay/nrf_delay.h
126-
sim/libraries/delay/nrf_delay.cpp
127-
sim/nrfx/nrfx_log.h
128-
sim/nrfx/drivers/include/nrfx_twi.h
129-
sim/nrfx/hal/nrf_gpio.h
130-
sim/nrfx/hal/nrf_gpio.cpp
131-
sim/nrfx/hal/nrfx_gpiote.h # includes hal/nrf_gpio.h
132-
sim/nrfx/hal/nrf_rtc.h
133-
sim/nrfx/hal/nrf_rtc.cpp
134-
# nrf/components/libraries/timer
135-
sim/libraries/timer/app_timer.h
136-
sim/libraries/timer/app_timer.cpp
137-
sim/libraries/gpiote/app_gpiote.h # includes hal/nrf_gpio.h
138-
)
139-
target_include_directories(infinisim PRIVATE "sim")
140-
target_include_directories(infinisim PRIVATE "sim/libraries/log") # for nrf_log.h
141-
target_include_directories(infinisim PRIVATE "sim/libraries/timer") # for app_timer.h
142-
target_include_directories(infinisim PRIVATE "sim/nrfx") # for nrfx_log.h and others
143-
target_include_directories(infinisim PRIVATE "sim/nrfx/hal") # for nrfx_log.h
144-
145-
target_compile_definitions(infinisim PRIVATE LV_CONF_INCLUDE_SIMPLE)
146-
147-
target_include_directories(infinisim PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
148-
target_include_directories(infinisim PRIVATE "${InfiniTime_DIR}/src/libs")
149-
target_include_directories(infinisim PRIVATE "lv_drivers")
153+
)
154+
target_link_libraries(infinisim PUBLIC sim-base)
150155

151156
# add dates library
152157
if(EXISTS "${InfiniTime_DIR}/src/libs/date/includes")
@@ -175,21 +180,12 @@ file(GLOB InfiniTime_WIDGETS
175180
"${InfiniTime_DIR}/src/displayapp/widgets/*.cpp"
176181
"${InfiniTime_DIR}/src/displayapp/widgets/*.h"
177182
)
178-
set(LITTLEFS_SRC
179-
${InfiniTime_DIR}/src/libs/littlefs/lfs_util.h
180-
${InfiniTime_DIR}/src/libs/littlefs/lfs.h
181-
${InfiniTime_DIR}/src/libs/littlefs/lfs_util.c
182-
${InfiniTime_DIR}/src/libs/littlefs/lfs.c
183-
)
184183
target_sources(infinisim PUBLIC ${InfiniTime_SCREENS})
185184
target_sources(infinisim PUBLIC ${InfiniTime_FONTS})
186185
target_sources(infinisim PUBLIC ${InfiniTime_ICONS})
187186
target_sources(infinisim PUBLIC ${InfiniTime_WIDGETS})
188-
target_sources(infinisim PUBLIC ${LITTLEFS_SRC})
189187

190188
# add files directly from InfiniTime sources
191-
target_include_directories(infinisim PRIVATE "${InfiniTime_DIR}/src")
192-
target_include_directories(infinisim PRIVATE "${InfiniTime_DIR}/src/libs/littlefs")
193189
target_sources(infinisim PUBLIC
194190
${InfiniTime_DIR}/src/BootloaderVersion.h
195191
${InfiniTime_DIR}/src/BootloaderVersion.cpp
@@ -242,6 +238,16 @@ else()
242238
)
243239
endif()
244240

241+
# littlefs
242+
add_library(littlefs STATIC
243+
${InfiniTime_DIR}/src/libs/littlefs/lfs_util.h
244+
${InfiniTime_DIR}/src/libs/littlefs/lfs.h
245+
${InfiniTime_DIR}/src/libs/littlefs/lfs_util.c
246+
${InfiniTime_DIR}/src/libs/littlefs/lfs.c
247+
)
248+
target_include_directories(littlefs PUBLIC "${InfiniTime_DIR}/src/libs/littlefs")
249+
target_link_libraries(infinisim PRIVATE littlefs)
250+
245251
# QCBOR
246252
add_library(QCBOR STATIC
247253
${InfiniTime_DIR}/src/libs/QCBOR/src/ieee754.c
@@ -305,3 +311,28 @@ endif()
305311
target_include_directories(infinisim PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/gif-h")
306312

307313
install(TARGETS infinisim DESTINATION bin)
314+
315+
# helper library to manipulate littlefs raw image
316+
add_executable(littlefs-do
317+
littlefs-do-main.cpp
318+
# want to use FS.h
319+
${InfiniTime_DIR}/src/components/fs/FS.h
320+
${InfiniTime_DIR}/src/components/fs/FS.cpp
321+
# dependencies for FS.h
322+
sim/drivers/SpiNorFlash.h
323+
sim/drivers/SpiNorFlash.cpp
324+
# dependencies for SpiNorFlash.h
325+
${InfiniTime_DIR}/src/drivers/Spi.h
326+
${InfiniTime_DIR}/src/drivers/Spi.cpp
327+
sim/drivers/SpiMaster.h
328+
sim/drivers/SpiMaster.cpp
329+
330+
${InfiniTime_DIR}/src/components/settings/Settings.h
331+
${InfiniTime_DIR}/src/components/settings/Settings.cpp
332+
)
333+
334+
target_link_libraries(littlefs-do PUBLIC sim-base)
335+
target_link_libraries(littlefs-do PUBLIC littlefs)
336+
337+
target_link_libraries(littlefs-do PRIVATE SDL2::SDL2)
338+
target_link_libraries(littlefs-do PRIVATE infinitime_fonts)

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,26 @@ Using the keyboard the following events can be triggered:
115115
- `i` ... take screenshot
116116
- `I` ... start/stop Gif scren capture
117117

118+
## Littlefs-do helper
119+
120+
To help working with the SPI-raw file the tool `littlefs-do` is provided.
121+
The SPI-raw file emulates the persistent 4MB storage available over the SPI bus on the PineTime.
122+
123+
```sh
124+
$ ./littlefs-do --help
125+
Usage: ./littlefs-do <command> [options]
126+
Commands:
127+
-h, --help show this help message for the selected command and exit
128+
-v, --verbose print status messages to the console
129+
stat show information of specified file or directory
130+
ls list available files in 'spiNorFlash.raw' file
131+
mkdir create directory
132+
rmdir remove directory
133+
rm remove directory or file
134+
cp copy files into or out of flash file
135+
settings list settings from 'settings.h'
136+
```
137+
118138
## Licenses
119139

120140
This project is released under the GNU General Public License version 3 or, at your option, any later version.

0 commit comments

Comments
 (0)