#!/bin/sh set -eu find_st7789v_fbdev() { [ -r /proc/fb ] || return 1 while IFS= read -r line; do case "$line" in *fb_st7789v*) set -- $line case "${1:-}" in ''|*[!0-9]*) return 1 ;; *) printf '/dev/fb%s\n' "$1"; return 0 ;; esac ;; esac done < /proc/fb return 1 } case "$0" in */*) script_dir=${0%/*} ;; *) script_dir=/usr/lib/trailmate-cardputer-zero ;; esac settings_root=${TRAIL_MATE_SETTINGS_ROOT:-${HOME:-/home/pi}/.trailmate_cardputer_zero} load_env_file() { env_file=$1 [ -r "$env_file" ] || return 0 set -a . "$env_file" set +a } load_env_file /etc/trailmate-cardputer-zero.env load_env_file "$settings_root/trailmate.env" : "${TRAIL_MATE_RUNTIME_MODE:=mesh}" : "${TRAIL_MATE_LORA_SPI:=/dev/spidev0.1}" : "${TRAIL_MATE_LORA_GPIOCHIP:=/dev/gpiochip0}" : "${TRAIL_MATE_LORA_POWER_GPIO:=-1}" : "${TRAIL_MATE_LORA_RESET_GPIO:=26}" : "${TRAIL_MATE_LORA_BUSY_GPIO:=22}" : "${TRAIL_MATE_LORA_IRQ_GPIO:=23}" : "${TRAIL_MATE_LORA_SPI_HZ:=500000}" : "${TRAIL_MATE_LORA_DIO2_RF_SWITCH:=1}" : "${TRAIL_MATE_LORA_DIO3_TCXO_1V8:=1}" : "${TRAIL_MATE_GPS_BAUD:=115200}" : "${TRAIL_MATE_GPS_AUTO_SERIAL:=1}" : "${TRAIL_MATE_GPS_DEVICE_CANDIDATES:=/dev/serial0:/dev/ttyAMA1:/dev/ttyAMA0:/dev/ttyS0:/dev/ttyS1}" : "${TRAIL_MATE_DESKTOP_NOTIFICATIONS:=freedesktop}" if [ -z "${ALL_PROXY:-}${all_proxy:-}${HTTPS_PROXY:-}${https_proxy:-}${HTTP_PROXY:-}${http_proxy:-}" ] && command -v ss >/dev/null 2>&1 && ss -ltn 2>/dev/null | grep -q '127\.0\.0\.1:7890'; then ALL_PROXY=http://127.0.0.1:7890 all_proxy=$ALL_PROXY HTTPS_PROXY=$ALL_PROXY https_proxy=$ALL_PROXY HTTP_PROXY=$ALL_PROXY http_proxy=$ALL_PROXY fi export TRAIL_MATE_RUNTIME_MODE export TRAIL_MATE_LORA_SPI TRAIL_MATE_LORA_GPIOCHIP export TRAIL_MATE_LORA_POWER_GPIO TRAIL_MATE_LORA_RESET_GPIO export TRAIL_MATE_LORA_BUSY_GPIO TRAIL_MATE_LORA_IRQ_GPIO export TRAIL_MATE_LORA_SPI_HZ TRAIL_MATE_LORA_DIO2_RF_SWITCH export TRAIL_MATE_LORA_DIO3_TCXO_1V8 export TRAIL_MATE_GPS_BAUD TRAIL_MATE_GPS_AUTO_SERIAL export TRAIL_MATE_GPS_DEVICE TRAIL_MATE_GPS_DEVICE_CANDIDATES export TRAIL_MATE_DESKTOP_NOTIFICATIONS export TRAIL_MATE_EARTHDATA_TOKEN TRAIL_MATE_EARTH_DATA_TOKEN export ALL_PROXY all_proxy HTTPS_PROXY https_proxy HTTP_PROXY http_proxy backend=${TRAIL_MATE_DISPLAY_BACKEND:-auto} case "$backend" in wayland|labwc) exec "$script_dir/trailmate-cardputer-zero" "$@" ;; auto|"") if [ -n "${WAYLAND_DISPLAY:-}" ]; then exec "$script_dir/trailmate-cardputer-zero" "$@" fi echo "trailmate-cardputer-zero-applaunch: Wayland session is required; set TRAIL_MATE_DISPLAY_BACKEND=fbdev only for explicit framebuffer debugging." >&2 exit 127 ;; fb|fbdev|framebuffer|device) ;; *) echo "trailmate-cardputer-zero-applaunch: unsupported TRAIL_MATE_DISPLAY_BACKEND=$backend" >&2 exit 2 ;; esac if [ -z "${TRAIL_MATE_FRAMEBUFFER:-}" ]; then if [ -n "${APPLAUNCH_LINUX_FBDEV_DEVICE:-}" ]; then TRAIL_MATE_FRAMEBUFFER=$APPLAUNCH_LINUX_FBDEV_DEVICE elif detected_fbdev=$(find_st7789v_fbdev); then TRAIL_MATE_FRAMEBUFFER=$detected_fbdev else TRAIL_MATE_FRAMEBUFFER=/dev/fb1 fi fi if [ -z "${TRAIL_MATE_INPUT_DEVICE:-}" ]; then TRAIL_MATE_INPUT_DEVICE="${APPLAUNCH_LINUX_KEYBOARD_DEVICE:-/dev/input/by-path/platform-3f804000.i2c-event}" fi export TRAIL_MATE_FRAMEBUFFER TRAIL_MATE_INPUT_DEVICE exec "$script_dir/trailmate-cardputer-zero-fbdev" "$@"