Summary
The Ashly Audio Nxe1502Bd is controlled via the WR5 Remote Protocol, a binary serial (RS-232C) protocol operating at 9600 bps with 1 start bit, 1 stop bit, and no parity. Messages are framed with $F0 start and $F7 stop bytes and use the Ashly manufacturer SysEx id (00 01 2A). This spec covers device discovery, preset recall, channel gain, mute, matrix mixer, logic output, and firmware message types documented in the WR5 protocol reference (02/23/2018).
Transport
protocols:
- serial
serial:
baud_rate: 9600
data_bits: null # UNRESOLVED: data bits not stated in source
parity: none
stop_bits: 1
flow_control: null # UNRESOLVED: flow control not stated in source
auth:
type: UNRESOLVED # source does not state this (was inferred none: no auth procedure in source)
Traits
traits:
- queryable # inferred: inquiry message types present (settings, preset/mute, gain, logic, matrix)
- levelable # inferred: gain messages with 0-99 level values present
- routable # inferred: matrix mixer message types present
Actions
# All WR5 message types enumerated verbatim from source. Message-type byte shown in the
# command payload. Controller->device messages (inquiry/download/msg) are Actions;
# device->controller responses are in Feedbacks; unsolicited WR5 button msgs are in Events.
# Serial bytes: for 3rd-party control, serial hi=00, lo=01 (per source). Target Device Id=00.
- id: device_discovery_request
label: Device Discovery Request
kind: query
command: "F0 00 01 2A 0D 00 F7"
params: []
notes: "Broadcast discovery; model byte=$0D, msg type byte7=00."
- id: settings_inquiry
label: WR5 Settings Inquiry
kind: query
command: "F0 00 01 2A 0C 7F 00 {sn_hi} {sn_lo} F7"
params:
- name: sn_hi
type: integer
description: Device Serial number bits 13-7
- name: sn_lo
type: integer
description: Device Serial number bits 6-0
notes: "msg type 00; byte6=$7F = PC Device Id."
- id: settings_download
label: WR5 Settings Download
kind: action
command: "F0 00 01 2A 0C 7F 02 {sn_hi} {sn_lo} {id} {name[1..20]} {settings[31..107]} F7"
params:
- name: id
type: integer
description: Target Device Id
- name: name
type: string
description: WR5 name characters 1-20
- name: settings
type: object
description: Settings bytes 31-107 (options, zone selection, 6 button config blocks)
notes: "msg type 02; same layout as Settings Response but byte7=$02. Function types: 0=off,1=preset recall,2=preset scroll,3=gain,4=mute,5=source select,6=LogicOut ActiveHigh,7=LogicOut ActiveLow,8=Matrix Mixer."
- id: preset_mute_status_inquiry
label: Preset Number & Mute Status Inquiry
kind: query
command: "F0 00 01 2A 0C 00 03 00 01 F7"
params: []
notes: "msg type 03."
- id: output_gain_inquiry
label: Output Gain & Mixer Mutes Inquiry
kind: query
command: "F0 00 01 2A 0C 00 05 00 01 {channel} F7"
params:
- name: channel
type: integer
description: Target device output channel (0 to n = output 1 to n+1)
notes: "msg type 05."
- id: channel_gain_inquiry
label: Channel Gain Inquiry
kind: query
command: "F0 00 01 2A 0C 00 07 00 01 {channel} F7"
params:
- name: channel
type: integer
description: "0-63 = inputs 1-64; 64-127 = outputs 1-64"
notes: "msg type 07."
- id: preset_recall
label: Preset Recall
kind: action
command: "F0 00 01 2A 0C 00 09 00 01 {preset} F7"
params:
- name: preset
type: integer
description: Target device preset number (24.24M preset number - 1)
notes: "msg type 09."
- id: mute_unmute
label: Mute/Unmute
kind: action
command: "F0 00 01 2A 0C 00 0A 00 01 {um} {in1_7} {in8_14} {in15_20} {in_sp} {out1_7} {out8_14} {out15_20} {out_sp} F7"
params:
- name: um
type: integer
description: "0 = unmute selected channels; 1-7F = mute selected channels"
- name: in1_7
type: integer
description: Inputs 1-7 selection bitmask (high bit = selected)
- name: in8_14
type: integer
description: Inputs 8-14 selection bitmask
- name: in15_20
type: integer
description: Inputs 15-20 selection bitmask
- name: out1_7
type: integer
description: Outputs 1-7 selection bitmask (high bit = selected)
- name: out8_14
type: integer
description: Outputs 8-14 selection bitmask
- name: out15_20
type: integer
description: Outputs 15-20 selection bitmask
notes: "msg type 0A (10)."
- id: gain_message
label: Gain Message
kind: action
command: "F0 00 01 2A 0C 00 0B 00 01 {level} {in1_7} {in8_14} {in15_20} {in_sp} {out1_7} {out8_14} {out15_20} {out_sp} F7"
params:
- name: level
type: integer
description: New gain value (0-99)
- name: in1_7
type: integer
description: Inputs 1-7 selection bitmask (high bit = selected for new gain)
- name: in8_14
type: integer
description: Inputs 8-14 selection bitmask
- name: in15_20
type: integer
description: Inputs 15-20 selection bitmask
- name: out1_7
type: integer
description: Outputs 1-7 selection bitmask
- name: out8_14
type: integer
description: Outputs 8-14 selection bitmask
- name: out15_20
type: integer
description: Outputs 15-20 selection bitmask
notes: "msg type 0B (11)."
- id: mixer_source_mute
label: Mixer Source Mute/Unmute
kind: action
command: "F0 00 01 2A 0C 00 0C 00 01 {out1_7} {out8_14} {out15_20} {out_sp} {mute1_7} {mute8_14} {mute15_20} {mute_sp} {unmute1_7} {unmute8_14} {unmute15_20} {unmute_sp} F7"
params:
- name: out1_7
type: integer
description: Mixer output channel 1-7 selection bitmask
- name: out8_14
type: integer
description: Mixer output channel 8-14 selection bitmask
- name: out15_20
type: integer
description: Mixer output channel 15-20 selection bitmask
- name: mute1_7
type: integer
description: Sources (mix faders) 1-7 to mute (high = mute)
- name: mute8_14
type: integer
description: Sources 8-14 to mute
- name: mute15_20
type: integer
description: Sources 15-20 to mute
- name: unmute1_7
type: integer
description: Sources 1-7 to unmute (high = unmute)
- name: unmute8_14
type: integer
description: Sources 8-14 to unmute
- name: unmute15_20
type: integer
description: Sources 15-20 to unmute
notes: "msg type 0C (12)."
- id: logic_output_status_inquiry
label: Logic Output Status Inquiry
kind: query
command: "F0 00 01 2A 0C 00 0F 00 01 F7"
params: []
notes: "msg type 0F (15)."
- id: logic_output_message
label: Logic Output Set
kind: action
command: "F0 00 01 2A 0C 00 11 00 01 {num} {value} F7"
params:
- name: num
type: integer
description: Logic Output Number (0 to number of logic outputs)
- name: value
type: integer
description: "0 = Low (Fet on); 1 = High (Fet off)"
notes: "msg type 11 (17)."
- id: matrix_mixer_inquiry
label: Matrix Mixer Inquiry
kind: query
command: "F0 00 01 2A 0C 00 12 00 01 {zone} {input} F7"
params:
- name: zone
type: integer
description: Output zone to request mixer settings for
- name: input
type: integer
description: Mixer input number
notes: "msg type 12 (18)."
- id: matrix_mixer_message
label: Matrix Mixer Set
kind: action
command: "F0 00 01 2A 0C 00 14 00 01 {level} {zout1_7} {zout8_14} {zout15_20} {zout_sp} {min1_7} {min8_14} {min15_20} {min_sp} F7"
params:
- name: level
type: integer
description: New gain value (0-99)
- name: zout1_7
type: integer
description: Zone outputs 1-7 selection bitmask
- name: zout8_14
type: integer
description: Zone outputs 8-14 selection bitmask
- name: zout15_20
type: integer
description: Zone outputs 15-20 selection bitmask
- name: min1_7
type: integer
description: Mixer inputs 1-7 selection bitmask (high bit = selected for new level)
- name: min8_14
type: integer
description: Mixer inputs 8-14 selection bitmask
- name: min15_20
type: integer
description: Mixer inputs 15-20 selection bitmask
notes: "msg type 14 (20)."
- id: checksum_message
label: Checksum Message
kind: action
command: "F0 00 01 2A 0C 00 15 00 01 {follow_type} {checksum} F7"
params:
- name: follow_type
type: integer
description: Message-to-follow type byte
- name: checksum
type: integer
description: Computed checksum (two's complement of summed message bytes AND 0x7F)
notes: "msg type 15 (21). Optional; prepend to messages when checksum flag set in options."
- id: reprogram_message
label: Enter Reprogram Message
kind: action
command: "F0 00 01 2A 0C 7F 16 {sn_hi} {sn_lo} 33 55 F7"
params:
- name: sn_hi
type: integer
description: Device Serial number bits 13-7
- name: sn_lo
type: integer
description: Device Serial number bits 6-0
notes: "msg type 16 (22). Bytes 10-11 reserved $33 $55."
- id: firmware_download_message
label: Download Firmware Protocol Message
kind: action
command: "F0 00 01 2A 0C 7F 17 {sn_hi} {sn_lo} {len} F7"
params:
- name: sn_hi
type: integer
description: Device Serial number bits 13-7
- name: sn_lo
type: integer
description: Device Serial number bits 6-0
- name: len
type: integer
description: Length of message (byte 1)
notes: "msg type 17 (23)."
- id: firmware_version_inquiry
label: WR5 Firmware Version Inquiry
kind: query
command: "F0 00 01 2A 0C 7F 19 {sn_hi} {sn_lo} F7"
params:
- name: sn_hi
type: integer
description: Device Serial number bits 13-7
- name: sn_lo
type: integer
description: Device Serial number bits 6-0
notes: "msg type 19 (25)."
Feedbacks
# Device->controller responses (one per source-documented response message type).
- id: device_discovery_response
type: object
command: "F0 00 01 2A 0D 01 {model} {sn_hi} {sn_lo} {name[1..20]} F7"
values:
model: "Device model number (WR5 model = $0C)"
sn_hi: "Serial number bits 13-7"
sn_lo: "Serial number bits 6-0"
name: "WR5 name characters 1-20"
notes: "Discovery response; msg type byte7=01, model byte=$0D."
- id: settings_response
type: object
command: "F0 00 01 2A 0C 7F 01 {sn_hi} {sn_lo} {id} {name[1..20]} {settings[31..107]} F7"
values:
id: "Target Device Id"
name: "WR5 name characters 1-20"
options: "Byte31 bitmask: bit0=exclusive source select, bit1=disable output zone lvl, bit2=use checksums, bit6=supports LogicOut & matrix mixer (read-only)"
zone_selection: "Bytes 32-35 (outputs 1-20 selection)"
buttons: "Bytes 36-107 (six button config blocks: ft/ll/ul/pn + input/output assignment bitmasks)"
notes: "msg type 01; byte6=$7F PC Device Id."
- id: preset_mute_status_response
type: object
command: "F0 00 01 2A 0C 00 04 00 01 {preset} {in1_7} {in8_14} {in15_20} {in_sp} {out1_7} {out8_14} {out15_20} {out_sp} F7"
values:
preset: "Target device preset number (24.24M preset - 1)"
input_mutes: "Inputs 1-20 mute status bitmasks (high bit = muted)"
output_mutes: "Outputs 1-20 mute status bitmasks (high bit = muted)"
notes: "msg type 04."
- id: output_gain_response
type: object
command: "F0 00 01 2A 0C 00 06 00 01 {channel} {level} {s1_7} {s8_14} {s15_20} {s_sp} F7"
values:
channel: "Requested output channel (0 to n = output 1 to n+1)"
level: "Output channel level (0-99)"
source_mutes: "Output channel's sources 1-20 mute status bitmasks"
notes: "msg type 06."
- id: channel_gain_response
type: object
command: "F0 00 01 2A 0C 00 08 00 01 {channel} {level} F7"
values:
channel: "0-63 = inputs 1-64; 64-127 = outputs 1-64"
level: "Channel level (0-99)"
notes: "msg type 08."
- id: logic_output_status_response
type: object
command: "F0 00 01 2A 0C 00 10 00 01 {in1_7} {in8_14} {in15_20} {in_sp} F7"
values:
logic_status: "Inputs 1-20 logic status bitmasks (high bit = channel high / Fet off)"
notes: "msg type 10 (16)."
- id: matrix_mixer_response
type: object
command: "F0 00 01 2A 0C 00 13 00 01 {zone} {input} {level} F7"
values:
zone: "Output zone mixer settings are for"
input: "Mixer input number"
level: "Mix level"
notes: "msg type 13 (19)."
- id: firmware_crc_error_message
type: object
command: "F0 00 01 2A 0C 7F 18 {sn_hi} {sn_lo} {?} {len} F7"
values:
unknown: "Byte 10 undocumented (?)"
len: "Length of message (byte 1)"
notes: "msg type 18 (24). Source labels byte 10 as '?' - UNRESOLVED."
- id: firmware_version_response
type: object
command: "F0 00 01 2A 0C 7F 1A {sn_hi} {sn_lo} {version} F7"
values:
version: "Firmware version byte"
notes: "msg type 1A (26)."
Variables
# Settable continuous/discrete parameters surfaced via Actions; ranges from source.
- id: channel_gain_level
type: integer
range: [0, 99]
description: Gain value used by Gain Message (msg 11) and Matrix Mixer Set (msg 20)
- id: preset_number
type: integer
range: [0, 99]
description: Preset number used by Preset Recall (msg 09); 24.24M uses preset - 1
- id: logic_output_value
type: enum
values: [low_fet_on, high_fet_off]
description: Logic output state (msg 17)
- id: button_function_type
type: enum
values: ["0_off", "1_preset_recall", "2_preset_scroll", "3_gain", "4_mute", "5_source_selection", "6_logic_out_active_high", "7_logic_out_active_low", "8_matrix_mixer"]
description: WR5 button function type (settings bytes); types 6-8 added in firmware 2.0
- id: output_channel
type: integer
range: [0, 127]
description: "Channel index: 0-63 = inputs 1-64; 64-127 = outputs 1-64"
Events
# Unsolicited WR5 remote notifications (remote -> host).
- id: wr5_button_pressed
type: object
command: "F0 00 01 2A 0C 7F 0D {sn_hi} {sn_lo} {button} F7"
values:
sn_hi: "Device Serial number bits 13-7"
sn_lo: "Device Serial number bits 6-0"
button: "WR5 button number pressed"
notes: "msg type 0D (13); byte6=$7F PC Device Id."
- id: wr5_button_released
type: object
command: "F0 00 01 2A 0C 7F 0E {sn_hi} {sn_lo} F7"
values:
sn_hi: "Device Serial number bits 13-7"
sn_lo: "Device Serial number bits 6-0"
notes: "msg type 0E (14); byte6=$7F PC Device Id."
Macros
# No explicit multi-step sequences documented in source.
# UNRESOLVED: no macros described in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or power-on
# sequencing requirements. Logic Output FET state (Fet on/off) is documented but no
# safety interlock guidance is provided.
Notes
- Protocol is WR5 Remote Protocol dated 02/23/2018; framing is MIDI-like SysEx (
$F0/$F7) over RS-232C. Hardware layer is logic 5V current loop (similar to MIDI) per source. - Ashly manufacturer id =
00 01 2A. WR5 model number byte =$0C; Device Discovery model byte =$0D. - For 3rd-party control systems the source mandates serial bytes
00 01(sn_hi=00, sn_lo=01) and Target Device Id00. For the 24.24M, use front-panel Device Id - 1 and preset number - 1. - Checksum (msg 21) is optional: enabled only when the checksum flag bit is set in the Settings options byte. Computation: sum message bytes -> one's complement -> +1 (two's complement) -> AND
0x7F. - Up to 20 input and 20 output channels are addressable via the selection bitmasks (bytes packed 7 per byte across 3 bytes + 1 spare). Actual channel count of the Nxe1502Bd is not stated in this source.
- Button function types 6-8 (Logic Out Active High/Low, Matrix Mixer) were added in firmware version 2.0.
## Provenance
```yaml
source_domains:
- ashly.com
source_urls:
- https://ashly.com/wp-content/uploads/2015/10/WR5_Protocol.pdf
- https://ashly.com/wr-5-and-ina-1-protocol/
- https://ashly.com/wp-content/uploads/2026/03/nX-amp-full-manual-r12.pdf
- https://ashly.com/nxe-multi-mode/
retrieved_at: 2026-07-13T18:29:17.887Z
last_checked_at: 2026-10-01T11:21:00.616Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-10-01T11:21:00.616Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec action units map 1:1 to source WR5 message types 0,3,5,7,9,10,11,12,15,17,18,20,21,22,23,25 with matching opcode bytes and shapes; transport 9600/1/N/1 confirmed. (10 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "data bits not stated in source; flow control not stated; number of physical I/O channels per device not enumerated; logic output count not stated"
- "data bits not stated in source"
- "flow control not stated in source"
- "no macros described in source"
- "source contains no safety warnings, interlock procedures, or power-on"
- "data bits and flow control not stated in source"
- "number of physical inputs/outputs and logic outputs on the Nxe1502Bd not stated in this source"
- "firmware version compatibility range not stated"
- "firmware CRC error message byte 10 undocumented in source"
- "checksum byte insertion position (byte 11 of checksum msg refers to byte 11 of the *following* message) is ambiguously worded in source"
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0