AVPro Edge MXNet
The mxnet driver controls an AVPro Edge MXNet AV-over-IP system — the encoders
(transmitters) and decoders (receivers) that carry HDMI video, audio, USB and IR over a
network switch instead of a hard-wired HDMI matrix. In GEM, one device is the MXNet
controller/host; that single device discovers every encoder and decoder on the system and
lets you route any source to any display by switching the network paths between them.
MXNet is a virtual matrix: unlike a fixed HDMI matrix with numbered OUT/IN ports, video, audio, USB and IR each route independently, endpoint-to-endpoint. Sending a display a new video source is a matter of pointing that decoder's video path at the chosen encoder.
An HDMI matrix (for example the AVPro Edge AC-MAX) has one device with numbered outputs, and you give each output a volume. MXNet has no OUT/IN numbers and no per-output volume — every encoder and decoder is its own network endpoint with an id, and you route by naming a source encoder and a destination decoder. Volume for a room is handled by that room's display or AVR, not by MXNet.
Prerequisites
- The MXNet controller/host (the MXNet Hub, or the unit acting as host) on the same LAN as GEM, with a static IP or a DHCP reservation, and its control API reachable.
- Every encoder and decoder bound to the controller in the AVPro MXNet web UI before you discover them in GEM. GEM only sees endpoints the controller already knows about.
- A note of which encoder feeds each source (cable box, media server, game console) and which decoder drives each display. You will match these to the discovered ids.
Setup
-
System → Devices → Add Device — choose driver AVPro MXNet (
mxnet). Set:- Host IP (
ip) — the LAN address of the MXNet controller/host (not an individual encoder or decoder). - TCP Port (
port) — leave the default 24 unless your system was changed from it. - Status Poll Interval (ms) (
status_interval) — optional, default 5000 (see Live state below for what this does and does not do).
Set Enabled to Yes and save.
- Host IP (
-
Discover the endpoints. Run the
sync_zonescommand against the MXNet device. The quickest way: System → Commands, pick the MXNet as the test device, findsync_zones, and run it. GEM reads the controller's device list and creates one GEM zone per endpoint in the AV subsystem:- Each zone's Address is the endpoint's MXNet device id — this is the identifier you select when routing.
- Encoders (transmitters) get an
_encodername suffix; decoders (receivers) get an_decodersuffix, so a source and a display that share a base name stay distinct.
Re-run
sync_zonesany time you add endpoints — it only creates zones that don't already exist, then reloads the device so the new zones bind. -
Confirm the zones under System → Zones (filtered to the AV subsystem). Rename the Label to something room-friendly if you like — the Address (the device id) is the key GEM routes on, so leave it alone.
-
Route a source to a display. Run the
config_set_device_videopathcommand with the encoder set to the source endpoint and the decoder set to the display endpoint (both are zone pickers offering your discovered endpoints). See Routing below.
Routing
A MXNet route is just a path command that names a source encoder and a destination decoder. Video, audio, USB and IR are separate paths — set the ones you need:
| Path | Command | What it connects |
|---|---|---|
| Video | config_set_device_videopath | The decoder's HDMI output follows the chosen encoder. |
| Audio (digital) | config_set_device_audiopath | The decoder's digital audio follows the chosen encoder. |
| Audio (analog) | config_set_device_analogaudiopath | The decoder's analog audio out follows the chosen encoder. |
| USB | config_set_device_usbpath | KM/USB from the decoder side reaches the encoder side. |
| IR | config_set_device_irpath | IR passes between the two endpoints. |
Each takes an encoder and a decoder argument; both pickers list your discovered zones, and the value sent is that zone's Address (the device id).
Video, audio, USB and IR route independently, so a single "watch this source here" action is
usually a macro that sends the paths you care about — most rooms just need
config_set_device_videopath (audio follows over HDMI), and you add config_set_device_audiopath
only where the room takes audio on a separate path.
Automation → Macros → Add a macro per route (or per touchpanel button), add a Send Command step that targets the MXNet device and sends the path command with the source encoder and destination decoder selected, and bind that macro to the button or source tile that should trigger it.
Because the audio path is separate, switching only the video path leaves the decoder's audio on
whatever it was routed to last. If a display should always take audio from the same source as
its picture, send config_set_device_audiopath (or config_set_device_analogaudiopath)
alongside the video path.
Turning a path off
To blank a display or drop its audio/USB/IR without routing a new source, use the matching
disable command against the decoder: config_set_device_videopathdisable,
config_set_device_audiopathdisable, config_set_device_usbpathdisable, or
config_set_device_irpathdisable.
Live state
MXNet is command-driven. The driver does not continuously poll or push endpoint state onto
the zones — the Status Poll Interval attribute exists, but the driver does not currently
read routing or signal state on that timer, and it does not write volume, mute_state, or a
routed-input attribute back onto the zones. To read an endpoint's current status on demand, run
config_get_device_status against it, or config_get_devicelist for the whole system.
Practically, this means:
- GEM sends routes reliably, but a zone tile will not light up to show "what's currently routed here" the way an HDMI-matrix zone does.
- A route changed outside GEM (at the MXNet web UI or a wall keypad) is not reflected in GEM until you query it.
- MXNet zones do not carry the generic on/off/volume/mute controls — they are routing endpoints, not volume zones. Route with the path commands above.
Attributes
Device — required
| Attribute | Type | Description |
|---|---|---|
ip | string | LAN IP of the MXNet controller/host. |
Device — optional
| Attribute | Type | Default | Description |
|---|---|---|---|
port | int | 24 | MXNet host control port. |
status_interval | int (ms) | 5000 | Reserved poll interval. The driver keeps a timer at this cadence but does not read endpoint state on it (see Live state). |
MXNet ships no catalogued attributes, so the Attribute editor's name picker won't auto-suggest MXNet-specific names — there are essentially none to add by hand beyond the connection settings above, which you set on the device when you create it.
Zone (encoder / decoder endpoint)
- Address required: yes — the endpoint's MXNet device id.
sync_zonesfills this in for every endpoint; you normally never type it. The_encoder/_decodername suffix tells you which role the endpoint plays.
Commands
Run any of these from System → Commands (select the MXNet as the test device), from a macro Send Command step, or from the AI assistant. Commands that take an encoder / decoder / encoder_decoder argument show a picker listing your discovered endpoint zones.
Discovery & status
| Command | Args | Notes |
|---|---|---|
sync_zones | — | Discover every encoder/decoder and create a GEM zone for each. Re-runnable; skips endpoints that already have a zone. |
config_get_devicelist | — | Return the controller's full endpoint list. |
config_get_device_status | encoder_decoder | Read one endpoint's current status. |
Routing (encoder → decoder)
| Command | Args | Wire | Notes |
|---|---|---|---|
config_set_device_videopath | encoder, decoder | config set device videopath [encoder] [decoder] | Point a decoder's video at an encoder. The main "switch source" command. |
config_set_device_audiopath | encoder, decoder | config set device audiopath [encoder] [decoder] | Route digital audio. |
config_set_device_analogaudiopath | encoder, decoder | config set device analogaudiopath [encoder] [decoder] | Route analog audio. |
config_set_device_usbpath | encoder, decoder | config set device usbpath [encoder] [decoder] | Route USB / KM. |
config_set_device_irpath | encoder, decoder | config set device irpath [encoder] [decoder] | Route IR. |
Disable a path (on a decoder)
| Command | Args | Wire |
|---|---|---|
config_set_device_videopathdisable | encoder_decoder | config set device videopathdisable [encoder_decoder] |
config_set_device_audiopathdisable | decoder | config set device audiopathdisable [decoder] |
config_set_device_usbpathdisable | encoder_decoder | config set device usbpathdisable [encoder_decoder] |
config_set_device_irpathdisable | decoder | config set device irpathdisable [decoder] |
Output tuning
| Command | Args | Wire | Notes |
|---|---|---|---|
config_set_device_video | width_height_fps, encoder_decoder | config set device video [width_height_fps] [encoder_decoder] | Force a scaling mode. The picker offers Passthrough, 1280x720 50/60fps, 1920x1080 24/50/60fps, 4K 30fps, and 4K 60fps (sent to the unit as width height fps). Use it when a display goes blank on an unsupported native resolution. |
config_set_device_hdrmode | encoder, hdr_mode | config set device hdrmode [encoder] [hdr_mode] | Turn HDR on / off on an encoder. |
Locate & maintenance
| Command | Args | Wire | Notes |
|---|---|---|---|
config_set_device_light_on | encoder_decoder | config set device light on [encoder_decoder] | Turn an endpoint's ID light on — handy for finding a unit in the rack. |
config_set_device_light_flash | encoder_decoder | config set device light flash [encoder_decoder] | Flash the ID light. |
config_set_device_reboot | encoder_decoder | config set device reboot [encoder_decoder] | Reboot a single encoder or decoder. |
hotplug_reset | encoder_decoder | config set device hpdrst [encoder_decoder] | Re-run hotplug detect on an endpoint. |
reset_source | source_address | config set device hpdrst [source_address] | Toggle HPD on a source-side encoder (same reset, addressed by the encoder). |
config_set_reboot | — | config set reboot | Reboot the MXNet controller/host. |
Video walls
| Command | Args | Wire | Notes |
|---|---|---|---|
activate_videowall_layout | videowall_name, layout_name | vwid layout active [videowall_name] [layout_name] | Switch a configured video wall to a named layout. Build the wall and its layouts in the AVPro MXNet web UI first. |
System info
config_get_version, config_get_name, config_get_date, config_get_ntp,
config_get_timezone, config_get_dns, config_get_ipsetting, config_get_ipsetting2 —
each returns the corresponding controller setting (no arguments).
Advanced
| Command | Args | Wire | Notes |
|---|---|---|---|
config_set_ir | data, encoder_decoder | config set ir [data] [encoder_decoder] | Send raw IR data out of an endpoint's IR port. |
config_set_device_id | new_id, encoder_decoder | config set device id [new_id] … | Re-number an endpoint. Renumbering endpoints is normally done in the AVPro MXNet web UI — prefer that. |
passthrough | command | [command] | Send a raw MXNet host command verbatim — the escape hatch for anything not modeled above. |
Known limitations
- No live state feedback. The driver routes reliably but does not poll or push endpoint
state; zones don't reflect "what's routed here", and out-of-band changes aren't seen until you
query with
config_get_device_status/config_get_devicelist. - No per-zone volume/mute. MXNet zones are routing endpoints; the generic on/off/volume/mute verbs are not implemented for them. Room volume belongs to the display or AVR.
- Independent paths. Switching video does not move audio/USB/IR — send each path you need.
- Discovery depends on the controller.
sync_zonesonly sees endpoints already bound to the controller in the AVPro web UI.
Troubleshooting
| Symptom | Check |
|---|---|
sync_zones returns nothing / creates no zones | Confirm the Host IP is the MXNet controller, not an encoder or decoder, and that every endpoint is bound to it in the AVPro MXNet web UI. |
| A route switches video but not audio | Audio routes on a separate path — send config_set_device_audiopath (or config_set_device_analogaudiopath) in the same macro. |
| A display goes blank after a route change | The source may be outputting a resolution the display can't take. Force a known mode with config_set_device_video, or run hotplug_reset on the decoder. |
| A command "does nothing" for a zone | Generic on/off/volume verbs are not implemented for MXNet zones — route with the config_set_device_*path commands instead. |
| GEM shows a stale route after a keypad/web-UI change | MXNet state is read on demand only. Run config_get_device_status for that endpoint, or config_get_devicelist. |
| Can't find a unit in the rack | Run config_set_device_light_on (or config_set_device_light_flash) against its endpoint to blink its ID light. |
Related documentation
- AVPro Edge AC-MAX — the fixed-matrix sibling, when a room uses a hard-wired audio matrix instead of AV-over-IP.
- Devices — add and configure the MXNet controller.
- Zones — the discovered encoder/decoder endpoints.
- Commands — run
sync_zonesand the routing commands from the Test runner. - Macros — build per-route or per-button switch actions.
- AV Sources and AV Zones — model sources and rooms for touchpanel source selection.