Summary
RS-232 audio conferencing interface. 9600 baud, 8N1, ASCII protocol. Each command is 16 ASCII chars + 0x0D CR. Controls transmit/receive volume and mute, saves DSP settings, provides telephone dialer interface (optional PSTN card).
Transport
protocols:
- serial
serial:
baud_rate: 9600
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: no auth procedure in source
Traits
- queryable # inferred: get volume/mute commands present
- levelable # inferred: volume set commands present
Actions
# All commands = 16 ASCII chars + 0x0D (CR). {VV} = ASCII hex volume 0x00-0x18.
- id: get_transmit_volume
label: Get Transmit Volume
kind: query
command: "'F013040000000000',0x0D"
params: []
- id: get_receive_volume
label: Get Receive Volume
kind: query
command: "'F013020000000000',0x0D"
params: []
- id: set_transmit_volume
label: Set Transmit Volume
kind: action
command: "'F01203{VV}00000000',0x0D then 'F01207{VV}00000000',0x0D then 'F01204{VV}00000000',0x0D"
params:
- name: level
type: integer
description: "Volume level hex 0x00-0x18 (0-24 decimal); {VV} = ASCII hex representation"
- id: set_receive_volume
label: Set Receive Volume
kind: action
command: "'F01201{VV}00000000',0x0D then 'F01202{VV}00000000',0x0D"
params:
- name: level
type: integer
description: "Volume level hex 0x00-0x18 (0-24 decimal); {VV} = ASCII hex representation"
- id: get_transmit_mute
label: Get Transmit Mute
kind: query
command: "'F013240000000000',0x0D"
params: []
- id: get_receive_mute
label: Get Receive Mute
kind: query
command: "'F013220000000000',0x0D"
params: []
- id: set_transmit_mute
label: Set Transmit Mute
kind: action
command: "'F01223{m}00000000',0x0D then 'F01227{m}00000000',0x0D then 'F01224{m}00000000',0x0D # {m}=1 mute, {m}=0 unmute"
params:
- name: mute
type: boolean
description: "True to mute ({m}=1), false to unmute ({m}=0)"
- id: set_transmit_mute_on
label: Transmit Mute (Mute Mic)
kind: action
command: "'F012230100000000',0x0D then 'F012270100000000',0x0D then 'F012240100000000',0x0D"
params: []
- id: set_transmit_mute_off
label: Transmit UnMute (Open Mic)
kind: action
command: "'F012230000000000',0x0D then 'F012270000000000',0x0D then 'F012240000000000',0x0D"
params: []
- id: set_receive_mute
label: Set Receive Mute
kind: action
command: "'F01221{m}00000000',0x0D then 'F01222{m}00000000',0x0D # {m}=1 mute, {m}=0 unmute"
params:
- name: mute
type: boolean
description: "True to mute ({m}=1), false to unmute ({m}=0)"
- id: set_receive_mute_on
label: Receive Mute (Mute Speakers)
kind: action
command: "'F012210100000000',0x0D then 'F012220100000000',0x0D"
params: []
- id: set_receive_mute_off
label: Receive UnMute (Unmute Speakers)
kind: action
command: "'F012210000000000',0x0D then 'F012220000000000',0x0D"
params: []
- id: save_settings
label: Save Settings
kind: action
command: "'B100000000000000',0x0D"
params: []
description: "Saves volume and mute settings to DSP non-volatile memory; unit reuses them on next power-on."
- id: dial_digit
label: Dial Digit
kind: action
command: "'F00C00060100000{X}',0x0D # {X} = hex code per digit: 0=0,1=1,2=2,3=3,4=4,5=5,6=6,7=7,8=8,9=9,*=E,#=F"
params:
- name: digit
type: enum
values:
- "0"
- "1"
- "2"
- "3"
- "4"
- "5"
- "6"
- "7"
- "8"
- "9"
- "*"
- "#"
description: "DTMF digit to dial; {X} hex: 0-9 → 0-9, * → E, # → F"
- id: dial_0
label: Dial 0
kind: action
command: "'F00C000601000000',0x0D"
params: []
- id: dial_1
label: Dial 1
kind: action
command: "'F00C000601000001',0x0D"
params: []
- id: dial_2
label: Dial 2
kind: action
command: "'F00C000601000002',0x0D"
params: []
- id: dial_3
label: Dial 3
kind: action
command: "'F00C000601000003',0x0D"
params: []
- id: dial_4
label: Dial 4
kind: action
command: "'F00C000601000004',0x0D"
params: []
- id: dial_5
label: Dial 5
kind: action
command: "'F00C000601000005',0x0D"
params: []
- id: dial_6
label: Dial 6
kind: action
command: "'F00C000601000006',0x0D"
params: []
- id: dial_7
label: Dial 7
kind: action
command: "'F00C000601000007',0x0D"
params: []
- id: dial_8
label: Dial 8
kind: action
command: "'F00C000601000008',0x0D"
params: []
- id: dial_9
label: Dial 9
kind: action
command: "'F00C000601000009',0x0D"
params: []
- id: dial_star
label: Dial *
kind: action
command: "'F00C00060100000E',0x0D"
params: []
- id: dial_hash
label: Dial #
kind: action
command: "'F00C00060100000F',0x0D"
params: []
- id: dial_pause
label: Dial Pause
kind: action
command: "'F00C000601000015',0x0D"
params: []
- id: dial_redial
label: Dial Redial
kind: action
command: "'F00C000600000001',0x0D"
params: []
- id: dial_flash
label: Dial Flash
kind: action
command: "'F00C000600000002',0x0D"
params: []
- id: dial_on_off_hook
label: Dial On/Off Hook Toggle
kind: action
command: "'F00C000600000004',0x0D"
params: []
description: "Toggle only - Octopus cannot report hook state; user relies on dial tone."
Feedbacks
- id: transmit_volume_response
type: integer
values: [] # range 0x00-0x18
command_format: "'F01304VV00000000',0x0D"
comment: "VV = ASCII hex volume level 0x00-0x18; response to Get Transmit Volume"
- id: receive_volume_response
type: integer
values: []
command_format: "'F01302VV00000000',0x0D"
comment: "VV = ASCII hex volume level 0x00-0x18; response to Get Receive Volume"
- id: transmit_mute_response
type: enum
values:
- "0"
- "1"
command_format: "'F013240M00000000',0x0D"
comment: "M=0 open (unmuted), M=1 muted; response to Get Transmit Mute"
- id: receive_mute_response
type: enum
values:
- "0"
- "1"
command_format: "'F013220M00000000',0x0D"
comment: "M=0 on (unmuted), M=1 muted; response to Get Receive Mute"
- id: command_echo
type: string
comment: "Every command returns echo of the sent command as feedback in same 16-char+0x0D format"
Variables
# UNRESOLVED: no standalone settable parameters beyond actions
Events
# UNRESOLVED: no unsolicited event notifications described in source
Macros
- id: set_transmit_volume_macro
description: "Set Transmit Volume = sequence of 3 commands: F01203, F01207, F01204 with same VV"
steps:
- "'F01203{VV}00000000',0x0D"
- "'F01207{VV}00000000',0x0D"
- "'F01204{VV}00000000',0x0D"
- id: set_receive_volume_macro
description: "Set Receive Volume = sequence of 2 commands: F01201, F01202 with same VV"
steps:
- "'F01201{VV}00000000',0x0D"
- "'F01202{VV}00000000',0x0D"
- id: set_transmit_mute_macro
description: "Set Transmit Mute = sequence of 3 commands: F01223, F01227, F01224 with same {m} (1 mute / 0 unmute)"
steps:
- "'F01223{m}00000000',0x0D"
- "'F01227{m}00000000',0x0D"
- "'F01224{m}00000000',0x0D"
- id: set_receive_mute_macro
description: "Set Receive Mute = sequence of 2 commands: F01221, F01222 with same {m}"
steps:
- "'F01221{m}00000000',0x0D"
- "'F01222{m}00000000',0x0D"
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures in source
Notes
- All commands = exactly 16 ASCII characters followed by CR (0x0D). Unit returns feedback in same format.
- Volume range 0x00 (min, = mute) to 0x18 (24 decimal, max). {VV} = ASCII hex representation.
- Set Transmit Volume requires 3-command sequence (F01203, F01207, F01204) with same VV.
- Set Receive Volume requires 2-command sequence (F01201, F01202) with same VV.
- Set Transmit Mute requires 3-command sequence (F01223, F01227, F01224) with same m byte.
- Set Receive Mute requires 2-command sequence (F01221, F01222) with same m byte.
- Control unit should GET volume + mute state on connect, sync sliders/indicators before user interaction.
- On/Off Hook is a toggle — Octopus cannot determine hook state, only provides dial tone.
Changes vs on-disk:
- Added `command:` verbatim payload to ALL actions (was major gap).
- Added `command_format:` to all feedback entries.
- Split mute/unmute into explicit `_on`/`_off` entries (source lists them as separate ops) — kept parameterized variants too.
- Enumerated 12 dialer digits as separate actions (source table = 12 distinct rows) — kept parameterized `dial_digit` too.
- Added `Macros` section documenting the multi-command sequences source explicitly describes.
- Preserved all original IDs/shapes.
## Provenance
```yaml
source_domains:
- phnxaudio.com
source_urls:
- https://www.phnxaudio.com/support-sub/hc/en-us/articles/360005777833-Octopus-Control-Protocol/
- https://www.phnxaudio.com/support-sub/support/solutions/articles/4000071423-crestron-and-phoenix-audio-module-via-rs232/
retrieved_at: 2026-04-26T19:14:46.703Z
last_checked_at: 2026-07-22T00:39:34.396Z
Verification Summary
verdict: verified
checked_at: 2026-07-22T00:39:34.396Z
matched_actions: 30
action_count: 30
confidence: medium
summary: "All 30 spec actions matched as literal wire-level commands in source; transport parameters verified verbatim; complete bidirectional coverage of all documented operations. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "power on/off commands not present in source"
- "no standalone settable parameters beyond actions"
- "no unsolicited event notifications described in source"
- "no safety warnings or interlock procedures in source"
- "telephone (PSTN) interface card is optional; not all units have dialer"
- "firmware version compatibility not stated in source"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0