Datasat AV Processor
Datasat AP/RS-series immersive audio processors (AP20, AP25, and the older RS20i)
are controlled over Datasat's ASCII IP-control protocol — short text commands, each prefixed
with @ and terminated by a carriage return, sent to the processor over TCP. GEM drives the
cinema-processor controls an integrator commissioning a luxury home theatre needs: power,
master volume, mute, input selection, the monitor (booth) output, and the full decoder /
post-processing surface — Dolby Surround and Pro Logic II, DTS Neural:X / Neo:X, Auro-3D,
TrueHD dynamic-range control, pink-noise calibration, EQ-preset and processor-macro recall.
This driver models the processor as a single main-zone device. It does not create a control zone of its own and it is not a matrix or controller — instead you point an AV zone's Volume Device at it so the room's volume slider and mute indicator ride the processor. See "Linking to an AV zone" below.
What's controlled
- Main-zone power on / off
- Master volume — absolute set as a
0–100percentage, plus up/down steps in 2.0 dB increments - Mute on / off / toggle (the processor has a native toggle)
- Input selection from Datasat's fixed input list (
AUDIO,BLURAY,DCINEMA,HOUSE,QUAD 1–QUAD 4,QUAD MAIN) - Monitor (booth-monitor) output level and mute
- Decoder / post-processing modes: Dolby Surround, Pro Logic II (mode, centre width, dimension, panorama), DTS Neural:X, DTS Neo:X (with LFE), Auro-3D (listening mode, preset, strength), TrueHD dynamic-range mode, Dolby Surround centre-spread
- DTS:X dialogue boost (level and up/down)
- EQ-preset recall and processor-macro recall (with read-back of the processor's stored input, macro, and EQ name lists)
- Pink-noise calibration sequences, a pulse (trigger) output, and the front-panel screensaver
- Live status polling — power, volume, mute, input, and the current video resolution and audio stream are refreshed on a timer (default every 10 seconds)
Prerequisites
- A Datasat AP20 / AP25 / RS20i with IP control enabled in the processor's network / control menu, reachable on the LAN.
- The TCP control port the processor is configured to listen on. Note it from the processor
menu — GEM does not assume one (the AP20/AP25 example below uses
23). - A stable IP for the processor — assign a static IP or a DHCP reservation so the address never moves.
Setup
- On the Datasat processor, enable IP control and note the IP address and TCP port from its network menu.
- In GEM, open Devices, add a device, and choose the Datasat AV Processor driver.
- Set Processor IP Address to the unit's address and TCP Port to the port from the processor menu.
- (Optional) Set Status Poll Interval (ms) — how often GEM re-reads power/volume/mute/input
from the processor. It defaults to
10000(10 s); the minimum is2000. - (Optional) Set Max Volume (%) — a soft ceiling on
volume_upstepping. See "Volume scaling" below. It defaults to100. - Save. On connect, GEM opens the control session and begins the status poll.
- (Optional but recommended) Run the get_input_names, get_macro_names, and get_eq_names commands once so GEM reads back the labels you configured on the processor. Re-run them any time you rename inputs, macros, or EQ presets on the unit.
Linking to an AV zone
The processor feeds volume and mute into an AV zone rather than appearing as its own controllable zone:
- Open AV Zones and edit (or create) the zone for the room the processor serves.
- Set the Volume Device field to this Datasat device.
- Save. From then on, whenever the processor reports a new volume or mute state, GEM mirrors it onto that AV zone's volume slider and mute indicator — and the zone's volume control drives the processor.
Selecting an input on the processor is a device command, not an AV source change. The
processor's active input is tracked separately from GEM's AV source routing — choosing the
room's source on a touchpanel does not, by itself, change the processor's input unless you wire
that input select into the source's on-macro.
Volume scaling
Datasat reports and accepts volume on the wire in tenths of a decibel, over the range
0 (0 dB, maximum) to 700 (−70 dB, the quiet floor). GEM presents this to you as a friendlier
0–100 percentage — 100 = 0 dB (loudest), 0 = −70 dB (silence) — and converts in both
directions, so everywhere in the UI (the AV zone slider, the volume command, the volume
status attribute) you work in 0–100.
The up/down step commands move the processor's own volume by 2.0 dB each press (@VOLUME +20
/ @VOLUME -20). Because a 2 dB step and a 1-percentage-point step aren't the same size, the
slider may momentarily read slightly off after a step — the status poll re-reads the true level
from the processor a beat later and the slider settles to the actual value.
Max Volume (%) on this driver is a soft ceiling: it only stops GEM's own tracked
percentage from climbing past the limit while you hold volume_up. It does not reject an
out-of-range absolute volume command, and it does not hard-limit the processor itself —
the periodic poll always re-reads the processor's real level. Treat it as a nicety on repeated
step-ups, not a hardware safety interlock. If you need a true hard limit, enforce it on the
processor.
Attributes
Device — required
| Attribute | Type | Description |
|---|---|---|
ip | string | Processor LAN IP address. |
port | int | TCP control port configured on the processor. |
Device — optional
| Attribute | Type | Default | Description |
|---|---|---|---|
status_interval | int | 10000 | Status poll interval in milliseconds (minimum 2000). |
max_volume | int | 100 | Soft ceiling (1–100) on volume_up stepping — see "Volume scaling". |
State attributes (read-only, auto-populated)
As the processor reports state — from command read-backs and the periodic poll — the driver keeps these attributes on the device current. They are status you read (in widgets, conditions, or macros), not values you set by hand:
power_state—on/offvolume— 0–100 percentagemute_state—on/offinput— current inputmonitor_level— booth-monitor levelmonitor_mute_state— booth-monitor mute (on/off)video_stream— current input video resolutionaudio_stream— current decoded audio stream / formatdecoderpost— active post-processing modedpl2mode— active Pro Logic II modenoiseseq— active pink-noise sequenceeq— active EQ presetinputnames,macronames,eqnames— the processor's stored label lists, populated when you runget_input_names/get_macro_names/get_eq_names
Commands
The driver declares the command surface below. Commands whose name starts with get_ are
status queries; the rest are actions. Arguments you supply are shown in the Arg column; the
Sends column is the literal string sent to the processor.
Power, mute
| Command | Arg | Sends | Notes |
|---|---|---|---|
power_on | — | @POWER 1 | Power the processor on. |
power_off | — | @POWER 0 | Power off. |
mute_on | — | @MUTED 1 | Mute. |
mute_off | — | @MUTED 0 | Unmute. |
mute_toggle | — | @MUTED + | Toggle mute (native). |
Volume, monitor
| Command | Arg | Sends | Notes |
|---|---|---|---|
volume | volume | @VOLUME [volume] | Absolute volume as 0–100; translated to tenths-dB on the wire. |
volume_up | — | @VOLUME +20 | Step up 2.0 dB. |
volume_down | — | @VOLUME -20 | Step down 2.0 dB. |
monitor_level | level | @MONITORLEVEL [level] | Set the booth-monitor output level. |
monitor_mute_on | — | @MONITORMUTE 1 | Mute the monitor output. |
monitor_mute_off | — | @MONITORMUTE 0 | Unmute the monitor output. |
After any volume or mute command the driver re-queries the processor about a second later, so the cached state — and the linked AV zone — stays in sync with what the unit actually did.
Input
| Command | Arg | Sends | Notes |
|---|---|---|---|
input | input | @INPUT [input] | One of AUDIO, BLURAY, DCINEMA, HOUSE, QUAD 1, QUAD 2, QUAD 3, QUAD 4, QUAD MAIN. |
Decoder / surround processing
| Command | Arg | Sends | Options |
|---|---|---|---|
post_processing_mode | mode | @DECODERPOST [mode] | off, dts_neo_x, dolby_plii, dolby_pliiz, auro_3d, dolby_surround, dts_neural_x, stereo_surround |
pro_logic_two_mode | mode | @DPL2MODE [mode] | pro_logic, music, movie, dolby_digital_ex |
pro_logic_two_music_center_width | width | @DPL2CW [width] | 0–7 |
pro_logic_two_music_dimension | dimension | @DPL2DIM [dimension] | -7…7 |
pro_logic_two_panorama | panorama | @DPL2PANO [panorama] | low, mid, high |
neo_x_mode | mode | @NEOXMODE [mode] | cinema, music, game |
neo_x_lfe_enable / neo_x_lfe_disable | — | @NEOXLFE 1 / 0 | Neo:X LFE on/off. |
dolby_surround_center_spread_enable / _disable | — | @DSUCENTERSPREAD 1 / 0 | Dolby Surround centre-spread. |
Auro-3D
| Command | Arg | Sends | Options |
|---|---|---|---|
auro_3d_listening_mode | mode | @AUROLM [mode] | native, stereo, surround, auro_3d |
auro_3d_preset | preset | @AUROPRESET [preset] | small, medium, large, speech |
auro_3d_strength | strength | @AUROSTRENGTH [strength] | 1–16 |
Dolby TrueHD / DTS:X detail
| Command | Arg | Sends | Notes |
|---|---|---|---|
dolby_drc_mode | mode | @TRUEHDDRC [mode] | TrueHD dynamic-range compression: off, auto, on. |
dts_x_dialog_boost_level | level | @DTSXDIALOG [level] | 0–6. |
dts_x_dialog_boost_up / _down | — | @DTSXDIALOG + / - | Step the DTS:X dialogue boost. |
EQ, macros, calibration, utility
| Command | Arg | Sends | Notes |
|---|---|---|---|
eq_preset | preset | @EQSET [preset] | Recall an EQ preset — run get_eq_names for the available list. |
run_macro | macro | @RUNMACRO [macro] | Run a processor macro — run get_macro_names for the list. |
pink_noise | state | @NOISESEQ [state] | Calibration pink noise: off, sequence, manual, channel_step. |
pulse_output | output | @PULSE [output] | Pulse a processor control/trigger output. |
screensaver_on / screensaver_off | — | @SCR ON / @SCR OFF | Front-panel screensaver. |
login | password | @AUTH [password] | Only needed if the processor is configured with a control password (most installs are not). |
Status queries
Numeric and text read-backs are available on demand: get_volume, get_mute, get_input,
get_video_resolution, get_audio_stream, get_decoder_channel_count, get_decoder_stream,
get_monitor_level, get_monitor_mute, get_input_names, get_macro_names, get_eq_names,
get_identity, get_model, get_serial_number, get_mac_address, get_system_info, and
get_video_protection. See Commands for how a device's command list is
surfaced in the admin UI.
Known limitations
- Single device, not multi-zone. The Datasat processor is modelled as one main-zone device. It does not create a GEM control zone of its own — bind it as an AV zone's Volume Device.
- Max Volume is a soft ceiling, not a hardware limit. It bounds only GEM's tracked
percentage while stepping up; it does not cap an absolute
volumecommand or the processor's own front-panel volume. See "Volume scaling". - No native power toggle. The driver exposes explicit
power_onandpower_off; there is no single power-toggle command. - Input labels are read on demand. Custom input, macro, and EQ names are populated only when
you run
get_input_names/get_macro_names/get_eq_names; re-run them after renaming any of these on the processor.
Troubleshooting
| Symptom | Check |
|---|---|
| No connection | Confirm IP control is enabled on the processor and the TCP Port matches its network menu. Verify the Processor IP Address and that the port isn't blocked by a VLAN or firewall. |
| Volume jumps to silence on the first command | Datasat reads volume in tenths of a dB; a raw passthrough that sent the wrong unit can be interpreted as a deep cut. Drive volume with the volume command (0–100), not a raw wire value. |
| Inputs show as numbers instead of names | Run get_input_names — processors that store custom labels return them via this command. |
| Connection drops every few minutes | Some firmwares idle-disconnect. Lower Status Poll Interval (ms) toward 5000 so polling keeps the socket alive. |
See also
- AV Zones — set this processor as a zone's Volume Device.
- AV Sources — how room sources route, and where an input-select macro would live.
- Devices — adding and configuring the device.
- Commands — viewing and running a device's command list.