Input controls
Settings → Controls & Input is where every action in ARGUS that can be triggered by a physical input — keyboard key, gamepad button, WebHID button or axis, or the GCS serial panel — gets mapped to hardware.
The binding grid has one row per action and one column per hardware source. Keyboard, WebHID, Gamepad, GCS Serial are the four sources. Each cell is double-clickable to open a binding popup. Each action can hold multiple bindings per source.
Hardware strip
Above the grid is the hardware strip. Each card shows:
- The source name.
- A connection dot — red when disconnected, green when connected.
- The connected device name (for WebHID and GCS Serial) or a short note
(
Always availablefor keyboard,Plug and playfor gamepad). - A Connect / Disconnect button for WebHID and GCS Serial.
Gamepads auto-detect via the browser Gamepad API. WebHID opens a device
picker when you click Connect. Serial opens the Web Serial picker at
115200 baud with | as the frame delimiter.
Preferred drone input source
Above the grid, Drone flight input selects which source feeds the VirtualStick axes:
- WebHID — highest fidelity, default. HOTAS and sim joysticks.
- Gamepad — browser-auto-detected controllers.
- Bridge — Arduino routed through the native bridge WebSocket.
- Serial — Arduino over Web Serial directly.
Stick curve
Stick curve (expo) is a single slider, 0.00 to 1.00 in 0.01 steps, default 0.35. 0 is linear; higher is more expo (flatter near centre, steeper near the edges). Applies to every axis before the VirtualStick packet is sent.
Secondary stick mode
The second joystick on a two-stick HOTAS or gamepad can be re-purposed at runtime:
- Map — pans the mission map and bumps zoom/bearing.
- Drone cam — drives the gimbal pitch/yaw and zoom axes.
Bindable controls
Every control below can be bound on any source. Defaults for most
actions are GCS-Arduino pin numbers (d_9, d_14, …) because ARGUS
ships with a GCS hardware panel as reference wiring. All DJI Cloud /
Dock controls and all axes ship unbound by default so there is
no accidental conflict.
Safety
masterCaution, emergencyStopGuard, emergencyStop
Display
showUavView, showHsiView, showBodycamView, showLogsView,
displayPrev, displayNext, displayUAV, displayHome, displayWpt
Drone flight
droneTakeoffGuard, droneTakeoff, droneGoHome, droneLand,
droneCancelTakeoff, droneCancelLand, droneCancelGoHome,
droneRemotePairing, droneAutopilot, droneAutopilotHeading,
droneAutopilotAltitude, droneObstacleAvoidance, dronePayloadGuard,
dronePayloadRelease, droneMapStickControlMode,
droneVirtualStickEnabled
DJI Cloud / Dock (default-unbound)
dockCoverOpen, dockCoverClose, droneFlyToPoint, takeoffToPoint,
returnToPointHome, poiModeToggle, poiCircleSpeedIncrease,
poiCircleSpeedDecrease, authorityGrabFlight, authorityGrabPayload,
spotlightToggle, nightVisionToggle, beaconToggle, stealthToggle,
speakerTtsPlay, speakerStop, aiRecognitionToggle
These route through the active IDroneControlTransport. On a DJI peer
they land on the dji-dock-{sn} TACLINK data channel which argus-dji
translates to MQTT; on a non-DJI peer they are no-ops.
Mission
missionStart, missionResumePause, missionStop
Map
mapRecenter, mapHeatmap, mapSweep, mapType,
mapZoomBearingStickMode
Camera and imaging
liveStream, camObjectDetection, camThermal, camLensChange,
camStartRecording, camStopRecording, camTakePicture,
toggleFlightMode, toggleObstacleAvoidance, toggleLedSettings,
toggleThermalPalette, toggleNdviStreamSource,
toggleMultiSpectralFusion, toggleSpectralDisplayMode
Axes (single axis per action)
droneAxisPitch, droneAxisRoll, droneAxisYaw, droneAxisThrottle,
gimbalAxisPitch, gimbalAxisYaw, gimbalAxisZoom,
secondaryJoystick, volume
Mapping a binding
Double-click a cell. In the popup, click + Learn (or + Bind Axis for an axis row) and drive the hardware:
- Keyboard — press the key or hold modifiers then a key (chord). Release to commit. Chords sort modifiers first.
- Gamepad — press a button; for an axis, push it past 85% deflection.
- WebHID — press a button; for an axis, move it past 70% with a clear change from rest so an idle throttle does not auto-bind.
- Serial — press the GCS panel button; for an axis, deflect past 85% or raw 900.
The popup also shows every existing binding, a per-binding ✕ to
remove, and for axes an ⇅ INV toggle that flips direction by
appending _inv. Clear drops every binding for that cell. Reset
defaults up top restores the shipped mapping.
Mode-2 by default
The shipped axis defaults follow the Mode-2 convention where the
right stick is pitch/roll and the left stick is throttle/yaw — but only
once you bind them. Out of the box every axis row shows — so nothing
flies until you map it.