HID Gateway

The Human Interface Device (HID) gateway service (gva-gateway-hid) bridges physical bezel-key panels — currently ScioTeq SmartView MFDs — to the GVA DDS data bus. It publishes a Human_Interaction_Resource covering the panel's buttons (up to 35 keys: F1..F20, eight top-area keys, five aux, two mode) and, when wired to a ScioTeq DAPI (Display Access Programming Interface) HTTP endpoint, bridges the panel's brightness and blackout controls into the Displays and Controls domain.

Overview

The gateway implements bidirectional integration with the physical panel:

  • Panel to DDS: Reads bezel key presses (via the DAPI socket or a Qt keyboard fallback), debounces them, and publishes C_Button_Control samples with A_transitioning=false per Def Stan 23-009 §2.5.5.
  • DDS to Panel: Subscribes to Human_Interaction_Resource::setBrightness and Human_Interaction_Resource::setBlackout and forwards them to the DAPI endpoint on the panel.
  • State republish: Polls DAPI on a 5 s cadence and republishes the observed brightness/blackout state so any subscriber has a live view of the panel regardless of who commanded the change.

Brightness and blackout

Brightness and blackout are unusual among GVA commands because they may be driven from two independent sources: the DDS command bus and the physical panel controls.

Def Stan 23-009 Displays and Controls Specification v1.0 anticipates this directly. §2.3.4 (LDM_DAC_1, on setBlackout) states:

This operation may be mirrored or entirely replaced by physical controls on the resource itself e.g. a blackout button.

§2.3.5 (LDM_DAC_3, on setBrightness) is identical:

This operation may be mirrored or entirely replaced by physical controls on the resource itself.

Current behaviour

  • The gateway advertises A_setBlackoutSupported and A_setBrightnessSupported only when a DAPI client is wired. If the gateway is running in output-only mode (buttons only, no DAPI), both capabilities are advertised as unsupported.
  • When a setBrightness or setBlackout command arrives on DDS, it is forwarded verbatim to the DAPI endpoint. Brightness is clamped to [0, 100] before forwarding.
  • Pre-blackout brightness is restored by the panel hardware itself on blackout release. The gateway does not maintain a fallback cache because the spec explicitly permits physical-control delegation and the ScioTeq DAPI blackout endpoint is documented to preserve the pre-blackout value.
  • The ATLAS HMI does not currently publish setBrightness or setBlackout commands. Brightness and blackout are operated exclusively via the physical panel controls, and the gateway observes and republishes the resulting state so any DDS subscriber sees a live view.

This mode of operation — physical controls drive brightness/blackout, DDS carries the observed state — is spec-compliant. If a deployment requires HMI-commandable brightness (for example, a dimming automation tied to external ambient-light sensors), the DDS command path is already wired and no code change in the gateway is required; only an HMI-side UI would need to be added.

Capability advertisement

The gateway publishes a Human_Interaction_Resource_Specification at startup that reflects the wired configuration:

Attribute Value Notes
A_setTestModeSupported false Panel does not expose a test-mode command.
A_setBlackoutSupported true iff DAPI wired Advertised honestly per §2.3.4.
A_setBrightnessSupported true iff DAPI wired Advertised honestly per §2.3.5.
A_transitioningSupported (per button) false Panel does not provide half-press / long-press events; §2.5.5 permits omission.

Each bezel key is published as a discrete Human_Interaction_Component with its own (resourceId, instanceId). No Composite_Component or Output_Component is published; the panel backlight is subsumed by the resource-level brightness/blackout attributes.

Installation

The gateway is packaged as a Debian package and installed as a systemd service. See Installation for platform-specific instructions. Once installed:

sudo systemctl enable --now gva-gateway-hid
sudo systemctl status gva-gateway-hid

The service reads its DAPI endpoint URL and DDS domain ID from the package-supplied environment file at /etc/default/gva-gateway-hid.

Diagnostics

If the gateway is running but bezel keys are not reaching the HMI, run:

astutedds-discovery-dump -d <domain>

Confirm that the gateway's Human_Interaction_Resource topic shows W=1 R>=1 and that no QoS mismatches are reported. See DDS Discovery Diagnostics for details.

References

  • Def Stan 23-009 Displays and Controls Specification v1.0 §2.3.4, §2.3.5, §2.5.5
  • Def Stan 23-009 GVA Command Response Protocol v2.0