Summary
The Biamp Advantage PMX84 is a programmable 8x4 audio matrix switch with a built-in RS-232 serial interface for computer control. This spec covers three control methods over the serial port: Control Button Emulation (one-way ASCII characters that emulate remote buttons), the PMX-Link expansion port (one-way 8-bit serial key codes emulating 200 button events), and Advanced Computer Control (two-way pseudo-hex command protocol with full read/write access to the 32 matrix switches, 16 logic outputs, 50 button macros, and 1024 bytes of non-volatile configuration memory). Default serial parameters are 2400 baud, 8 data bits, no parity, 1 stop bit; 9600 baud is also supported via an internal jumper.
Transport
protocols:
- serial
serial:
baud_rate: 2400 # factory default; 9600 also supported via internal jumper strap
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # no hardware (DTR/RTS) or XON/XOFF handshaking; use character-echo flow control
auth:
type: none # inferred: no auth procedure in source
Traits
- routable # inferred from matrix assignment switch commands (set-matrix-status, do-matrix-action, virtual-macro)
- queryable # inferred from query commands (get-matrix-status, get-logic-status, get-button-definition, get-macro-definition, get-version, read-memory)
Actions
# --- Control Button Emulation: 40 remote-1 buttons (one-way) ---
- id: button_emulation_01
label: Button Emulation 1 (Remote 1)
kind: action
command: "B" # ASCII 'B' (0x42); emulates button 1 of remote port 1
params: []
- id: button_emulation_02
label: Button Emulation 2 (Remote 1)
kind: action
command: "C" # ASCII 'C' (0x43)
params: []
- id: button_emulation_03
label: Button Emulation 3 (Remote 1)
kind: action
command: "D" # ASCII 'D' (0x44)
params: []
- id: button_emulation_04
label: Button Emulation 4 (Remote 1)
kind: action
command: "E" # ASCII 'E' (0x45)
params: []
- id: button_emulation_05
label: Button Emulation 5 (Remote 1)
kind: action
command: "F" # ASCII 'F' (0x46)
params: []
- id: button_emulation_06
label: Button Emulation 6 (Remote 1)
kind: action
command: "G" # ASCII 'G' (0x47)
params: []
- id: button_emulation_07
label: Button Emulation 7 (Remote 1)
kind: action
command: "H" # ASCII 'H' (0x48)
params: []
- id: button_emulation_08
label: Button Emulation 8 (Remote 1)
kind: action
command: "I" # ASCII 'I' (0x49)
params: []
- id: button_emulation_09
label: Button Emulation 9 (Remote 1)
kind: action
command: "J" # ASCII 'J' (0x4A)
params: []
- id: button_emulation_10
label: Button Emulation 10 (Remote 1)
kind: action
command: "K" # ASCII 'K' (0x4B)
params: []
- id: button_emulation_11
label: Button Emulation 11 (Remote 1)
kind: action
command: "L" # ASCII 'L' (0x4C)
params: []
- id: button_emulation_12
label: Button Emulation 12 (Remote 1)
kind: action
command: "M" # ASCII 'M' (0x4D)
params: []
- id: button_emulation_13
label: Button Emulation 13 (Remote 1)
kind: action
command: "N" # ASCII 'N' (0x4E)
params: []
- id: button_emulation_14
label: Button Emulation 14 (Remote 1)
kind: action
command: "O" # ASCII 'O' (0x4F)
params: []
- id: button_emulation_15
label: Button Emulation 15 (Remote 1)
kind: action
command: "P" # ASCII 'P' (0x50)
params: []
- id: button_emulation_16
label: Button Emulation 16 (Remote 1)
kind: action
command: "Q" # ASCII 'Q' (0x51)
params: []
- id: button_emulation_17
label: Button Emulation 17 (Remote 1)
kind: action
command: "R" # ASCII 'R' (0x52)
params: []
- id: button_emulation_18
label: Button Emulation 18 (Remote 1)
kind: action
command: "S" # ASCII 'S' (0x53)
params: []
- id: button_emulation_19
label: Button Emulation 19 (Remote 1)
kind: action
command: "T" # ASCII 'T' (0x54)
params: []
- id: button_emulation_20
label: Button Emulation 20 (Remote 1)
kind: action
command: "U" # ASCII 'U' (0x55)
params: []
- id: button_emulation_21
label: Button Emulation 21 (Remote 1)
kind: action
command: "V" # ASCII 'V' (0x56)
params: []
- id: button_emulation_22
label: Button Emulation 22 (Remote 1)
kind: action
command: "W" # ASCII 'W' (0x57)
params: []
- id: button_emulation_23
label: Button Emulation 23 (Remote 1)
kind: action
command: "X" # ASCII 'X' (0x58)
params: []
- id: button_emulation_24
label: Button Emulation 24 (Remote 1)
kind: action
command: "Y" # ASCII 'Y' (0x59)
params: []
- id: button_emulation_25
label: Button Emulation 25 (Remote 1)
kind: action
command: "Z" # ASCII 'Z' (0x5A)
params: []
- id: button_emulation_26
label: Button Emulation 26 (Remote 1)
kind: action
command: "[" # ASCII '[' (0x5B)
params: []
- id: button_emulation_27
label: Button Emulation 27 (Remote 1)
kind: action
command: "\\" # ASCII '\' (0x5C)
params: []
- id: button_emulation_28
label: Button Emulation 28 (Remote 1)
kind: action
command: "]" # ASCII ']' (0x5D)
params: []
- id: button_emulation_29
label: Button Emulation 29 (Remote 1)
kind: action
command: "^" # ASCII '^' (0x5E)
params: []
- id: button_emulation_30
label: Button Emulation 30 (Remote 1)
kind: action
command: "_" # ASCII '_' (0x5F)
params: []
- id: button_emulation_31
label: Button Emulation 31 (Remote 1)
kind: action
command: "`" # ASCII '`' (0x60)
params: []
- id: button_emulation_32
label: Button Emulation 32 (Remote 1)
kind: action
command: "b" # ASCII 'b' (0x62)
params: []
- id: button_emulation_33
label: Button Emulation 33 (Remote 1)
kind: action
command: "c" # ASCII 'c' (0x63)
params: []
- id: button_emulation_34
label: Button Emulation 34 (Remote 1)
kind: action
command: "d" # ASCII 'd' (0x64)
params: []
- id: button_emulation_35
label: Button Emulation 35 (Remote 1)
kind: action
command: "e" # ASCII 'e' (0x65)
params: []
- id: button_emulation_36
label: Button Emulation 36 (Remote 1)
kind: action
command: "f" # ASCII 'f' (0x66)
params: []
- id: button_emulation_37
label: Button Emulation 37 (Remote 1)
kind: action
command: "g" # ASCII 'g' (0x67)
params: []
- id: button_emulation_38
label: Button Emulation 38 (Remote 1)
kind: action
command: "h" # ASCII 'h' (0x68)
params: []
- id: button_emulation_39
label: Button Emulation 39 (Remote 1)
kind: action
command: "i" # ASCII 'i' (0x69)
params: []
- id: button_emulation_40
label: Button Emulation 40 (Remote 1)
kind: action
command: "j" # ASCII 'j' (0x6A)
params: []
- id: button_emulation_repeat
label: Control Button Repeat Code
kind: action
command: "@" # ASCII '@' (0x40); repeat last button code; do NOT prefix with device-select
params: []
# --- Device Select Prefix Codes (4-device addressing, Control Button Emulation) ---
- id: select_device_1
label: Select Device 1
kind: action
command: "l" # ASCII 'l' (0x6C); prefix immediately before next button code
params: []
- id: select_device_2
label: Select Device 2
kind: action
command: "m" # ASCII 'm' (0x6D)
params: []
- id: select_devices_1_2
label: Select Devices 1 & 2
kind: action
command: "n" # ASCII 'n' (0x6E)
params: []
- id: select_device_3
label: Select Device 3
kind: action
command: "o" # ASCII 'o' (0x6F)
params: []
- id: select_devices_1_3
label: Select Devices 1 & 3
kind: action
command: "p" # ASCII 'p' (0x70)
params: []
- id: select_devices_2_3
label: Select Devices 2 & 3
kind: action
command: "q" # ASCII 'q' (0x71)
params: []
- id: select_devices_1_2_3
label: Select Devices 1, 2 & 3
kind: action
command: "r" # ASCII 'r' (0x72)
params: []
- id: select_device_4
label: Select Device 4
kind: action
command: "s" # ASCII 's' (0x73)
params: []
- id: select_devices_1_4
label: Select Devices 1 & 4
kind: action
command: "t" # ASCII 't' (0x74)
params: []
- id: select_devices_2_4
label: Select Devices 2 & 4
kind: action
command: "u" # ASCII 'u' (0x75)
params: []
- id: select_devices_1_2_4
label: Select Devices 1, 2 & 4
kind: action
command: "v" # ASCII 'v' (0x76)
params: []
- id: select_devices_3_4
label: Select Devices 3 & 4
kind: action
command: "w" # ASCII 'w' (0x77)
params: []
- id: select_devices_1_3_4
label: Select Devices 1, 3 & 4
kind: action
command: "x" # ASCII 'x' (0x78)
params: []
- id: select_devices_2_3_4
label: Select Devices 2, 3 & 4
kind: action
command: "y" # ASCII 'y' (0x79)
params: []
- id: select_devices_1_2_3_4
label: Select Devices 1, 2, 3 & 4
kind: action
command: "z" # ASCII 'z' (0x7A)
params: []
# --- Advanced Computer Control ---
# Every advanced command is preceded by parameter nibbles and ends with command character.
# Format: [params...] 08 {dd} {cmd} where 08 = PMX84 device-type bitmask, dd = device-number bitmask.
# nn = macro/button number, aa = action code, mmmm.. = matrix/macro data, llll = logic data,
# kk = button serial key code, bbbb = button definition, ss/ee = memory addresses, oo = options, cc = checksum.
- id: do_macro
label: Do Macro (perform stored macro actions)
kind: action
command: "{nn}08{dd}!" # example: 950820! -> macro 21 (0x15+128=0x95), device 6
params:
- name: nn
type: pseudo-hex byte
description: Macro number + 128 (pseudo-hex); values 80..B1 select macros 0..49
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask (0x01..0xFF, one bit per device 1..8)
- id: get_macro_definition
label: Get Macro Definition
kind: query
command: "{nn}08{dd}!" # example: 1;0801! -> macro 0x1B from device 1
params:
- name: nn
type: pseudo-hex byte
description: Macro number 0..49 (pseudo-hex, no +128 offset)
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: define_macro
label: Define Macro (store new macro definition)
kind: action
command: "{mmmmmmmmmmmmmmmmmmmmmmmm}{nn}08{dd}\"" # example: 000000020000000000000002030801"
params:
- name: mmmmmmmmmmmmmmmmmmmmmmmm
type: pseudo-hex
description: Button Macro Data Structure (24 nibbles = 12 bytes; 8 bytes matrix actions + 4 bytes logic actions; each 2-bit field is NOP/turn-off/turn-on/toggle)
- name: nn
type: pseudo-hex byte
description: Macro number 0..49
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: virtual_macro
label: Virtual Macro (perform inline macro actions, not stored)
kind: action
command: "{mmmmmmmmmmmmmmmmmmmmmmmm}8008{dd}\"" # example: 000000020000000000000002800801"
params:
- name: mmmmmmmmmmmmmmmmmmmmmmmm
type: pseudo-hex
description: Button Macro Data Structure (24 nibbles)
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: do_button
label: Do Button (perform actions for button's assigned macro)
kind: action
command: "{kk}?>08{dd}#" # example: 32?>080?# -> serial key 0x32, all 4 devices; do NOT use prefix codes
params:
- name: kk
type: pseudo-hex byte
description: Button serial key code 0x00..0xC7 (button events 0..199)
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: get_button_definition
label: Get Button Definition
kind: query
command: "{kk}08{dd}#" # example: 580801# -> serial key 0x58, device 1
params:
- name: kk
type: pseudo-hex byte
description: Button serial key code 0x00..0xC7
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: define_button
label: Define Button (set echo char + assign macro)
kind: action
command: "{bbbb}{kk}08{dd}$" # example: 4213000801$ -> echo='B'(0x42), macro=0x13=19, button 0x00, device 1
params:
- name: bbbb
type: pseudo-hex
description: Button Definition Data Structure (4 nibbles = 2 bytes: high byte = echo char or 0x00 for none, low byte = macro number or 0xFF for NOP)
- name: kk
type: pseudo-hex byte
description: Button serial key code 0..199
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: get_matrix_status
label: Get Matrix Status (all 32 assignment switches)
kind: query
command: "08{dd}%" # example: 0801% -> device 1 returns 88442211
params:
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: set_matrix_status
label: Set Matrix Status (all 32 assignment switches)
kind: action
command: "{mmmmmmmm}08{dd}&" # example: 000084210801&
params:
- name: mmmmmmmm
type: pseudo-hex
description: Matrix Status Data Structure (8 nibbles = 4 bytes); matrix[3] transmitted first. Bit layout: matrix[3]=sw8-4..8-1, matrix[2]=6-4..5-1, matrix[1]=4-4..3-1, matrix[0]=2-4..1-1
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: do_matrix_action
label: Do Matrix Action (single switch: NOP/off/on/toggle)
kind: action
command: "{aa}{nn}08{dd}'" # example: 020>0801' -> action 'turn on' (0x02), switch in4->out3 (0x0E), device 1
params:
- name: aa
type: pseudo-hex nibble
description: Action code: 00=NOP, 01=turn off, 02=turn on, 03=toggle
- name: nn
type: pseudo-hex nibble
description: Assignment switch number (pseudo-hex; see table - 0x00..0x1F = inputs 1..8 × outputs 1..4)
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: get_logic_status
label: Get Logic Status (all 16 logic outputs)
kind: query
command: "08{dd}(" # example: 0801( -> device 1 returns 0040
params:
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: set_logic_status
label: Set Logic Status (all 16 logic outputs)
kind: action
command: "{llll}08{dd})" # example: 40030801) -> outputs 1,2,15 on; logic[1] transmitted first
params:
- name: llll
type: pseudo-hex
description: Logic Status Data Structure (4 nibbles = 2 bytes); logic[1] transmitted first. Bit 0 of logic[0]=output 1; bit 7 of logic[1]=output 16
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: do_logic_action
label: Do Logic Action (single output: NOP/off/on/toggle)
kind: action
command: "{aa}{nn}08{dd}*" # example: 020<0801* -> action 'turn on' (0x02), output 13 (0x0C), device 1
params:
- name: aa
type: pseudo-hex nibble
description: Action code: 00=NOP, 01=turn off, 02=turn on, 03=toggle
- name: nn
type: pseudo-hex nibble
description: Logic output number 1..16 (pseudo-hex 0x00..0x0F)
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: sleep_for_10_seconds
label: Sleep For 10 Seconds (ignore all serial)
kind: action
command: "{tt}{dd}+" # example: ????+ -> all device types, all device numbers, sleep 10s
params:
- name: tt
type: pseudo-hex byte
description: Device Type Bitmask (use 08 for PMX84; ?? for all types)
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask (use ?? for all devices)
- id: read_memory
label: Read Memory (non-volatile config memory)
kind: query
command: "{bb}{ee}{ss}08{dd}," # example: 0006000801, -> bank 0, addr 00..06, device 1
params:
- name: bb
type: pseudo-hex nibble
description: Memory bank select: 00=bank0, 01=bank1, 02=bank2, 03=bank3
- name: ee
type: pseudo-hex byte
description: Ending memory address
- name: ss
type: pseudo-hex byte
description: Starting memory address (must be <= ee)
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: write_memory
label: Write Memory (non-volatile config memory, with checksum)
kind: action
command: "{xx..}{ss}{oo}{cc}08{dd}-" # example: 0302010382740801-
params:
- name: xx..
type: pseudo-hex
description: Up to 16 data values (pseudo-hex); transmitted in reverse order (highest address first)
- name: ss
type: pseudo-hex byte
description: Starting (lowest) memory address
- name: oo
type: pseudo-hex byte
description: Options & byte count: bits 0..3 = (count-1), bits 5..6 = bank select (00..11), bit 7 = activate new config now
- name: cc
type: pseudo-hex byte
description: Computed checksum = 1's complement of (8-bit sum of all data values + ss + oo); computed on raw 8-bit values before pseudo-hex conversion
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: set_factory_defaults
label: Set Factory Defaults
kind: action
command: "<>{oo}08{dd}." # example: <>84080?. -> restore global config params, activate now, devices 1..4
params:
- name: oo
type: pseudo-hex byte
description: Option byte: bit0=set button-definition defaults, bit1=set button-macro defaults, bit2=set global-config defaults, bit7=activate new globals now
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
- id: get_version
label: Get Version (model id + firmware date)
kind: query
command: "08{dd}/" # example: 0801/ -> device 1 returns "02 02:12:96"
params:
- name: dd
type: pseudo-hex byte
description: Device Number Bitmask
Feedbacks
- id: macro_definition
type: string
description: Response to get-macro-definition. 24 pseudo-hex nibbles (12 bytes) representing the Button Macro Data Structure; first 8 bytes = matrix switch actions, last 4 bytes = logic output actions. Terminated by ASCII CR (0x0D).
- id: button_definition
type: string
description: Response to get-button-definition. 4 pseudo-hex nibbles (2 bytes): high byte = echo character (0x00 = none), low byte = macro number (0xFF = NOP). Terminated by CR.
- id: matrix_status
type: string
description: Response to get-matrix-status. 8 pseudo-hex nibbles (4 bytes) for the 32 assignment switches; matrix[3] transmitted first. Terminated by CR.
- id: logic_status
type: string
description: Response to get-logic-status. 4 pseudo-hex nibbles (2 bytes) for the 16 logic outputs; logic[1] transmitted first. Terminated by CR.
- id: memory_contents
type: string
description: Response to read-memory. Up to 256 data values (pseudo-hex), sent in reverse order (highest address first). Terminated by CR.
- id: version_info
type: string
description: Response to get-version. Format: "02 mm:dd:yy" - literal ASCII "02" (model id 0x30 0x32), space (0x20), then decimal month, ':' separator, decimal day, ':' separator, decimal year. Terminated by CR. Example: "02 02:12:96".
- id: character_echo
type: string
description: All characters received on the standard RS-232 serial port are echoed back to the computer; this is the source's documented flow-control mechanism (wait-for-echo before next byte).
Variables
- name: matrix_switch
description: One of 32 assignment switches (8 inputs x 4 outputs). Addressed by pseudo-hex 0x00..0x1F in do-matrix-action. Each bit in the 4-byte Matrix Status Data Structure represents one switch (1=on, 0=off).
type: boolean
count: 32
- name: logic_output
description: One of 16 open-collector logic outputs. Addressed by pseudo-hex 0x00..0x0F in do-logic-action. Each bit in the 2-byte Logic Status Data Structure represents one output (1=on = low impedance, 0=off = high impedance).
type: boolean
count: 16
- name: button_definition
description: Per-button event (200 events, serial key codes 0x00..0xC7). Holds one macro number (0..49, or 0xFF for NOP) and one optional echo character (or 0x00 for none). Stored in non-volatile memory banks 0 and 1.
type: object
count: 200
- name: button_macro
description: User-defined macro (50 macros numbered 0..49). Each macro is 12 bytes: 8 bytes of matrix-switch actions (2 bits each: NOP/off/on/toggle) + 4 bytes of logic-output actions (2 bits each). Stored in non-volatile memory banks 1, 2, 3.
type: object
count: 50
- name: global_config_parameters
description: 16 bytes (0x00..0x0F) at the start of memory bank 0. Retrieved and activated only on power-up, or after a write with bit 7 of the options byte set.
type: object
count: 16
- name: configuration_memory
description: 1024 bytes of non-volatile memory, organized as 4 banks of 256 bytes each. Bank 0 = global config (0x00-0x0F) + button definitions 0..119 (0x10-0xFF). Bank 1 = button definitions 120..199 (0x00-0x9F) + macros 0..7 (0xA0-0xFF). Bank 2 = macros 8..28 (0x00-0xFB), 0xFC-0xFF unused. Bank 3 = macros 29..49 (0x00-0xFB), 0xFC-0xFF reserved.
type: bytes
count: 1024
Events
[]
# No unsolicited asynchronous notifications documented in source.
# The PMX84 transmits only in response to query commands and echoes all received characters.
Macros
# UNRESOLVED: The PMX84 supports 50 user-programmable button macros (macro 0..49) executed via
# the do-macro command. The source describes the macro data structure and storage layout but
# does not list any specific named macro sequences - macros are defined by the installer via
# define-macro / define-button / virtual-macro and their contents are application-specific.
Safety
[]
# No safety warnings, interlocks, or power-on sequencing requirements stated in source.
Notes
- Pseudo-hex notation (critical): The PMX84 does NOT use standard ASCII-hex. Pseudo-hex uses ASCII
'0'..'9'and':', ';', '<', '=', '>', '?'for nibble values 0..15. Convert by adding 0x30 to a 4-bit value: nibble 0 -> '0' (0x30), nibble 10 -> ':' (0x3A), nibble 15 -> '?' (0x3F). Lowercase 'a'..'f' are NOT used. - Device Type Bitmask: For PMX84-only control, set the device-type bitmask to
08(bit 3 = PMX84). Bits 0..7 correspond to DRC 4+4 (0x01), EQ28X (0x02), SPM522D (0x04), PMX84 (0x08), reserved (0x10/0x20/0x40/0x80). - Device Number Bitmask: Bit n (0..7) corresponds to device number n+1. Use
01for device 1,FFfor all 8 devices. - Character echo as flow control: Standard RS-232 port echoes every received byte; the host should wait for the echo before sending the next character (1-byte input buffer). The PMX-Link port has 8 bytes of buffer and does not echo; limit average rate to 20 chars/sec.
- Sleep command caveat:
+(sleep-for-10-seconds) is also the Hayes+++modem escape; when controlling via auto-answer modem, issue this as the last command before hanging up so spurious hang-up garbage is ignored. - 9600 baud: Possible by moving an internal jumper strap; factory default is 2400.
- Two control modes over same physical port: Control Button Emulation and Advanced Computer Control both use the standard RS-232 port, but are distinct command dialects. PMX-Link is a separate (one-way) expansion port, also RS-232 voltage-compatible.
- Get-version example decoded: "02 02:12:96" -> model id "02", space, firmware release date Feb 12, 1996.
- Checksum for write-memory: Computed on raw 8-bit values BEFORE pseudo-hex conversion; algorithm = 1's complement of (sum mod 256) of all data bytes + starting address byte + options byte.
Provenance
source_domains:
- downloads.biamp.com
source_urls:
- "https://downloads.biamp.com/assets/docs/default-source/discontinued/pmx84-rs-232-control-manual.pdf?sfvrsn=9af2bc3e_6"
retrieved_at: 2026-04-30T04:32:56.764Z
last_checked_at: 2026-06-02T21:41:00.978Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:41:00.978Z
matched_actions: 74
action_count: 74
confidence: medium
summary: "All 74 spec actions have literal command-character matches in the source; transport parameters confirmed verbatim; source catalogue is fully covered. (3 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility range; voltage/current ratings; pinout of RS-232 DB connector"
- "The PMX84 supports 50 user-programmable button macros (macro 0..49) executed via"
- "firmware version compatibility range; PMX-Link electrical/pinout details; DB-9 or DB-25 connector pinout for the RS-232 port; power consumption / voltage specs; physical button labels that correspond to ASCII codes 'B'..'j' (source only gives numeric button IDs)."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0