peach-menu
OLED menu microservice module for PeachCloud. A state machine which listens for GPIO events (button presses) by subscribing to peach-buttons over websockets and makes JSON-RPC calls to relevant PeachCloud microservices (peach-network, peach-oled, peach-stats).
Note: This module is a work-in-progress.
Button Code Mappings
0 => Center,
1 => Left,
2 => Right,
3 => Up,
4 => Down,
5 => A,
6 => B
States
Home(u8),
Logo,
Network,
NetworkConf(u8),
NetworkMode(u8),
OledPower(u8),
Reboot,
Shutdown,
Stats,
Environment
The JSON-RPC HTTP server address and port for the OLED microservice can be configured with the PEACH_OLED_SERVER environment variable:
export PEACH_OLED_SERVER=127.0.0.1:5000
When not set, the value defaults to 127.0.0.1:5112.
Logging is made available with env_logger:
export RUST_LOG=info
Other logging levels include debug, warn and error.
Setup
Clone this repo:
git clone https://github.com/peachcloud/peach-menu.git
Move into the repo and compile:
cd peach-menu
cargo build --release
Run the binary:
./target/target/peach-menu
Note: Will currently panic if peach_buttons is not running (connection to ws server fails).
Debian Packaging
A systemd service file and Debian maintainer scripts are included in the debian directory, allowing peach-menu to be easily bundled as a Debian package (.deb). The cargo-deb crate can be used to achieve this.
Install cargo-deb:
cargo install cargo-deb
Move into the repo:
cd peach-menu
Build the package:
cargo deb
The output will be written to target/debian/peach-menu_0.2.1_arm64.deb (or similar).
Build the package (aarch64):
cargo deb --target aarch64-unknown-linux-gnu
Install the package as follows:
sudo dpkg -i target/debian/peach-menu_0.2.1_arm64.deb
The service will be automatically enabled and started.
Uninstall the service:
sudo apt-get remove peach-menu
Remove configuration files (not removed with apt-get remove):
sudo apt-get purge peach-menu
Resources
This work was made much, much easier by the awesome blog post titled Pretty State Machine Patterns in Rust by hoverbear. Thanks hoverbear!
Licensing
AGPL-3.0