sl-webui bd22a1a2b1 feat: MageDok 7in display setup for Jetson Orin (Issue #369)
Add complete display integration for MageDok 7" IPS touchscreen:

Configuration Files:
- X11 display config (xorg-magedok.conf) — 1024×600 @ 60Hz
- PulseAudio routing (pulseaudio-magedok.conf) — HDMI audio to speakers
- Udev rules (90-magedok-touch.rules) — USB touch device permissions
- Systemd service (magedok-display.service) — auto-start on boot

ROS2 Launch:
- magedok_display.launch.py — coordinate display/touch/audio setup

Helper Scripts:
- verify_display.py — validate 1024×600 resolution via xrandr
- touch_monitor.py — detect MageDok USB touch, publish status
- audio_router.py — configure PulseAudio HDMI sink routing

Documentation:
- MAGEDOK_DISPLAY_SETUP.md — complete installation and troubleshooting guide

Features:
✓ DisplayPort → HDMI video from Orin DP connector
✓ USB touch input as HID device (driver-free)
✓ HDMI audio routing to built-in speakers
✓ 1024×600 native resolution verification
✓ Systemd auto-launch on boot (no login prompt)
✓ Headless fallback when display disconnected
✓ ROS2 status monitoring (touch/audio/resolution)

Supports Salty Face UI (Issue #370) and accessibility features (Issue #371)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-03 15:44:00 -05:00

60 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
MageDok 7" Display Launch Configuration
- Video: DisplayPort → HDMI (1024×600)
- Touch: USB HID
- Audio: HDMI → internal speakers via PulseAudio
"""
import os
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import ExecuteProcess
def generate_launch_description():
return LaunchDescription([
# Log startup
ExecuteProcess(
cmd=['echo', '[MageDok] Display setup starting...'],
shell=True,
),
# Verify display resolution
Node(
package='saltybot_bringup',
executable='verify_display.py',
name='display_verifier',
parameters=[
{'target_width': 1024},
{'target_height': 600},
{'target_refresh': 60},
],
output='screen',
),
# Monitor touch input
Node(
package='saltybot_bringup',
executable='touch_monitor.py',
name='touch_monitor',
parameters=[
{'device_name': 'MageDok Touch'},
{'poll_interval': 0.1},
],
output='screen',
),
# Audio routing (PulseAudio sink redirection)
Node(
package='saltybot_bringup',
executable='audio_router.py',
name='audio_router',
parameters=[
{'hdmi_sink': 'alsa_output.pci-0000_00_1d.0.hdmi-stereo'},
{'default_sink': True},
],
output='screen',
),
])