Skip to content

Repository files navigation

Space Elevator

Space Elevator is a display driver for the 3Dconnexion SpaceMouse Enterprise on Linux. It puts the active CAD app's mode and button labels on the device's built-in screen, and lights up a function key's tile while the key is held. Motion and button dispatch go through spacenavd as usual; the daemon reads the device's button reports only to draw them and acts on none of them. A CAD app pushes its current state (profile, mode, button tiles) to a small daemon, which renders that and sends it to the screen.

Primary targets are FreeCAD and Onshape.

Components

  • spacemouse-lcd/: Rust driver for the Enterprise's display. It takes a 640×150 RGB888 frame, converts it to the packed format the screen expects, and writes it over USB. It has no relationship to the spacenav protocol.
  • space-elevatord/: Rust daemon. Owns the SpaceMouse Enterprise LCD. It takes a structured "state" over a Unix-socket JSON IPC, renders an SVG, and pushes it to the device. It also reads the device's hidraw node for button reports, which is a tap alongside spacenavd rather than a claim, so a held function key reaches the screen without the client having to say so. The message handler is transport-agnostic, so a loopback WebSocket listener can be added later for browser clients (Onshape).
  • freecad-addon/: Thin FreeCAD client. On startup, workbench change, and binding change it gathers {profile, mode, 12 button tiles} and pushes it to the daemon. No input handling, no navigation.
  • spnav-sys/, spnav/: Rust bindings for libspnav. Tested and working, but unmaintained; see below. Nothing else here depends on them.

Nothing in this workspace is published to crates.io.

The spnav bindings

spnav-sys/ and spnav/ work and are tested against real hardware. They are unmaintained because the design they were written for is gone: Space Elevator was once going to wrap spacenavd and own motion, buttons and the display together. It now owns only the display. Motion and buttons go to spacenavd directly, so this daemon is not a single point of failure for navigation. If the display stops, the mouse still moves.

They stay in the tree because the code is correct and there is no reason to throw it away. They are not on the daemon's dependency path, so libspnav is not needed to build or run space-elevatord.

Status

  • Daemon and LCD render pipeline: working.
  • FreeCAD client: working.
  • Onshape client: planned. Needs a WebSocket listener on the daemon and a browser extension or userscript, since a browser page can't open a Unix socket. For Onshape the tiles would be curated per mode rather than read from button bindings.

Supported hardware

  • 3Dconnexion SpaceMouse Enterprise (motion, buttons, and LCD).

Other SpaceMice work for motion and buttons through spacenavd; the LCD path is Enterprise-only.

About

SpaceMouse Enterprise display driver for Linux. Shows the active CAD app's mode and button labels on the device screen. FreeCAD and Onshape.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages