Skip to content

Add gsmenu #62

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 55 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
790b015
add gsmenu
henkwiedig Mar 6, 2025
d017c46
fix hostkey checking
henkwiedig Apr 4, 2025
f7a829a
disable drone check
henkwiedig Apr 4, 2025
1e432bb
fix router settings
henkwiedig Apr 4, 2025
0f5aa86
improve error handleing, fix gsmenu.sh issues
henkwiedig Apr 9, 2025
546ca5e
fix start recodring on right
henkwiedig Apr 9, 2025
690544c
add key repeats
henkwiedig Apr 9, 2025
1fe1141
change to 4-way navigation
henkwiedig Apr 10, 2025
1ed45d2
fix gemenu wifi bugs
henkwiedig Apr 10, 2025
0e44c86
add channel search button
henkwiedig Apr 10, 2025
460e053
fix hang lockup on error hendleing
henkwiedig Apr 10, 2025
44e7c7b
reset menu, add main menu
henkwiedig Apr 11, 2025
f25eba4
back button
henkwiedig Apr 12, 2025
818a74e
improve gsmenu.sh
henkwiedig Apr 12, 2025
da5c7d3
use back to close
henkwiedig Apr 12, 2025
2e7236e
fix gpio input in edit mode
henkwiedig Apr 13, 2025
3b4b940
improve gsmenu.sh
henkwiedig Apr 13, 2025
89ca35c
add timeout to gsmenu.sh
henkwiedig Apr 13, 2025
1986a97
tix typo
henkwiedig Apr 13, 2025
d4154f7
fix typo
henkwiedig Apr 15, 2025
c22a85b
add recording callbacks
henkwiedig Apr 15, 2025
c30b48c
add drone detection
henkwiedig Apr 15, 2025
78b252a
optimize drone detection
henkwiedig Apr 16, 2025
7a7cb42
switch to yml config system
henkwiedig Apr 16, 2025
fd1ba42
make wfb restart more reliable
henkwiedig Apr 18, 2025
3ea5c40
fix lvgl to 9.2.2
henkwiedig Apr 21, 2025
02c0958
gsmenu.sh now knows GSMENU_VTX_DETECTED
henkwiedig Apr 21, 2025
d6c717f
add simulator background
henkwiedig Apr 22, 2025
88097dc
add runcam pinmapping
henkwiedig Apr 23, 2025
cf040fc
add yml config
henkwiedig Apr 24, 2025
cb6e3e2
add libyaml-cpp-dev to actions build
henkwiedig Apr 24, 2025
9aba61b
fix a race
henkwiedig Apr 24, 2025
d3fc579
generic page load
henkwiedig Apr 25, 2025
a9659f3
rename config, default disabled
henkwiedig Apr 25, 2025
18ce760
workaround lvgl issue 8093
henkwiedig Apr 25, 2025
57b0540
fix hard codet line numers
henkwiedig Apr 25, 2025
e16f4c5
add ip info
henkwiedig Apr 25, 2025
8ea338a
jumbo packets
henkwiedig Apr 26, 2025
d5e01eb
add vsync switch
henkwiedig Apr 27, 2025
22a10bd
remap keys
henkwiedig Apr 27, 2025
427050c
load settings in own thread
henkwiedig Apr 27, 2025
6136143
add loader cancel button
henkwiedig Apr 29, 2025
2611228
fix keyboard issues
henkwiedig Apr 30, 2025
9e42db2
properly handle group cleanup
henkwiedig May 1, 2025
4715800
fix scrolling bug
henkwiedig May 1, 2025
8438954
optimize loading
henkwiedig May 1, 2025
eb4b3bf
add preset support
henkwiedig May 3, 2025
9497905
no input during execution
henkwiedig May 4, 2025
5f6f584
rec_fps follows camera fps
henkwiedig May 4, 2025
75af811
readme update
henkwiedig May 4, 2025
6c1ab99
adaptions for sbc 2.0
henkwiedig May 15, 2025
5c2f562
fix hang on active items
henkwiedig May 15, 2025
0e329c7
move actions to executor infrastructure
henkwiedig May 16, 2025
0e48e14
use scp to copy files
henkwiedig May 16, 2025
9e228b6
add bonnet gpio mapping
henkwiedig May 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive

- name: Build
run: |
Expand Down Expand Up @@ -56,7 +58,7 @@ jobs:
rm -r /boot/* #save space
apt-get update
apt clean
apt-get install -y cmake g++ git pkg-config librockchip-mpp-dev libcairo-dev libdrm-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libspdlog-dev nlohmann-json3-dev libmsgpack-dev
apt-get install -y cmake g++ git pkg-config librockchip-mpp-dev libcairo-dev libdrm-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libspdlog-dev nlohmann-json3-dev libmsgpack-dev libgpiod-dev libyaml-cpp-dev
apt clean

cmake -B build
Expand All @@ -69,7 +71,7 @@ jobs:
EOL

chmod 755 build.sh run.sh
sudo cp -r build.sh run.sh CMakeLists.txt pixelpilot_config.h.in src $output/home
sudo cp -r build.sh run.sh CMakeLists.txt pixelpilot_config.h.in src lvgl lv_conf.h $output/home
sudo rm $output/etc/resolv.conf
echo nameserver 1.1.1.1 | sudo tee -a $output/etc/resolv.conf
sudo chroot $output /home/build.sh
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,4 @@ pixelpilot_config.h

.vscode/
build/
build_sim/
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "lvgl"]
path = lvgl
url = https://github.com/lvgl/lvgl.git
131 changes: 117 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,107 @@
cmake_minimum_required(VERSION 3.1)

project(pixelpilot VERSION 1.2.0)
find_package(PkgConfig REQUIRED)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# LVGL setup
set(LV_USE_LINUX_DRM ON)
set(LV_CONF_BUILD_DISABLE_DEMOS 1)
set(LV_CONF_BUILD_DISABLE_EXAMPLES 1)
add_subdirectory(lvgl)
target_include_directories(lvgl PUBLIC
${PROJECT_SOURCE_DIR}
/usr/include/libdrm
/usr/include/drm
)
set(CMAKE_C_STANDARD 99) # LVGL officially supports C99 and above
set(CMAKE_CXX_STANDARD 17) #C17
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Simulator
set(SIMULATOR_SOURCES
src/simulator.c
src/gsmenu/executor.h
src/gsmenu/executor.c
src/gsmenu/air_presets.h
src/gsmenu/air_presets.c
src/gsmenu/air_telemetry.h
src/gsmenu/air_telemetry.c
src/gsmenu/air_camera.h
src/gsmenu/air_camera.c
src/gsmenu/air_actions.h
src/gsmenu/air_actions.c
src/gsmenu/gs_wifi.h
src/gsmenu/gs_wifi.c
src/gsmenu/ui.h
src/gsmenu/helper.h
src/gsmenu/helper.c
src/gsmenu/gs_main.c
src/gsmenu/gs_main.h
src/gsmenu/gs_wfbng.h
src/gsmenu/gs_wfbng.c
src/gsmenu/gs_system.h
src/gsmenu/gs_system.c
src/gsmenu/gs_actions.h
src/gsmenu/gs_actions.c
src/gsmenu/air_wfbng.h
src/gsmenu/air_wfbng.c
src/gsmenu/ui.c
src/gsmenu/images.h
src/gsmenu/images.c
src/gsmenu/styles.h
src/gsmenu/styles.c
src/lvosd.h
src/lvosd.c
src/menu.h
src/menu.c
src/input.h
src/input.cpp
)
# LVGL setup

add_compile_options("-Wno-address-of-packed-member")

set(SOURCE_FILES
src/drm.h
src/drm.c
src/gsmenu/executor.h
src/gsmenu/executor.c
src/gsmenu/air_presets.h
src/gsmenu/air_presets.c
src/gsmenu/air_telemetry.c
src/gsmenu/air_camera.h
src/gsmenu/air_camera.c
src/gsmenu/air_actions.h
src/gsmenu/air_actions.c
src/gsmenu/gs_wifi.h
src/gsmenu/gs_wifi.c
src/gsmenu/ui.h
src/gsmenu/helper.h
src/gsmenu/helper.c
src/gsmenu/gs_main.c
src/gsmenu/gs_main.h
src/gsmenu/gs_wfbng.h
src/gsmenu/gs_wfbng.c
src/gsmenu/gs_system.h
src/gsmenu/gs_system.c
src/gsmenu/air_wfbng.h
src/gsmenu/air_wfbng.c
src/gsmenu/gs_actions.h
src/gsmenu/gs_actions.c
src/gsmenu/images.h
src/gsmenu/images.c
src/gsmenu/styles.h
src/gsmenu/styles.c
src/gsmenu/ui.c
src/lvosd.h
src/lvosd.c
src/menu.h
src/menu.c
src/input.h
src/input.cpp
src/osd.h
src/osd.hpp
src/osd.cpp
Expand All @@ -31,21 +123,32 @@ include_directories("/usr/include/libdrm" "/usr/include/cairo" "/usr/include/spd

configure_file("${PROJECT_NAME}_config.h.in" "${PROJECT_NAME}_config.h")

find_package(spdlog REQUIRED)
find_package(nlohmann_json 3 REQUIRED)
# Option to control wmenu simulator build
option(USE_SIMULATOR "Build the simulator version of the application" OFF)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} rockchip_mpp pthread drm m cairo spdlog::spdlog nlohmann_json::nlohmann_json rt)

# Embed gstreamer
find_package(PkgConfig REQUIRED)
pkg_search_module(GST REQUIRED
gstreamer-1.0>=1.4
gstreamer-app-1.0>=1.4
)
pkg_search_module(gstreamer REQUIRED IMPORTED_TARGET gstreamer-1.0>=1.4)
pkg_search_module(gstreamer-app REQUIRED IMPORTED_TARGET gstreamer-app-1.0>=1.4)
target_link_libraries(${PROJECT_NAME} PkgConfig::gstreamer PkgConfig::gstreamer-app)
if(USE_SIMULATOR)
add_definitions(-DUSE_SIMULATOR)
target_compile_definitions(lvgl PRIVATE USE_SIMULATOR)
pkg_check_modules(LIBSDL REQUIRED sdl2)
add_executable(${PROJECT_NAME} ${SIMULATOR_SOURCES} lvgl)
target_link_libraries(${PROJECT_NAME} lvgl ${LIBSDL_LIBRARIES})
else()
find_package(spdlog REQUIRED)
find_package(nlohmann_json 3 REQUIRED)
find_package(yaml-cpp REQUIRED)
pkg_check_modules(LIBGPIOD REQUIRED libgpiod)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} rockchip_mpp pthread drm m cairo spdlog::spdlog nlohmann_json::nlohmann_json yaml-cpp rt lvgl ${LIBGPIOD_LIBRARIES})
# Embed gstreamer
find_package(PkgConfig REQUIRED)
pkg_search_module(GST REQUIRED
gstreamer-1.0>=1.4
gstreamer-app-1.0>=1.4
)
pkg_search_module(gstreamer REQUIRED IMPORTED_TARGET gstreamer-1.0>=1.4)
pkg_search_module(gstreamer-app REQUIRED IMPORTED_TARGET gstreamer-app-1.0>=1.4)
target_link_libraries(${PROJECT_NAME} PkgConfig::gstreamer PkgConfig::gstreamer-app)
endif()

if(CMAKE_BUILD_TYPE MATCHES "Debug")
add_compile_definitions(SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE)
Expand Down
19 changes: 18 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Build on the Rockchip linux system directly.
- drm, cairo, mpp, logging, json, msgpack

```
sudo apt install libdrm-dev libcairo-dev librockchip-mpp-dev libspdlog-dev nlohmann-json3-dev libmsgpack-dev
sudo apt install libdrm-dev libcairo-dev librockchip-mpp-dev libspdlog-dev nlohmann-json3-dev libmsgpack-dev libgpiod-dev
```

- gstreamer
Expand Down Expand Up @@ -178,6 +178,23 @@ Specific widgets expect quite concrete facts as input:
* `GPSWidget` - displays GPS fix type (no fix / 2D fix / 3D fix etc) and GPS coordinates.
Uses `mavlink.gps_raw.fix_type`, `mavlink.gps_raw.lat` and `mavlink.gps_raw.lon` facts

## Menu

The menu provides options to modify air and ground settings.
Navigation is controlled via a GPIO button, adhering to Ruby wiring conventions.
PixelPilot_rk will take ownership of the needed gpios.
The provided gsmenu.sh script needs
- https://github.com/openipc/yaml-cli/
- https://github.com/mikefarah/yq/
- drm_info: `sudo apt install drm-info`

### Navigation
Up/Down – Cycles through menu items (wraps around at the top and bottom of the page/sections).
Left/Right/Ok (Back/Menu/QA1 in Ruby terms) – Adjusts selected values.
Ok becomes Rec/QA1 when menu is not shown.

When not in menu any navigation key will open the menu.

## Known issues

1. Video is cropped when the fpv feed resolution is bigger than the screen mode.
Expand Down
Loading