Summary
Ashly WR5 Remote Control Protocol (02/23/2018) for the Ne4250.25 amplifier. Control over a serial current-loop interface at 9600 bps using MIDI-like SysEx hex messages framed by $F0 and $F7 start/stop bytes. Source documents 26 message types: device discovery, settings inquiry/download, preset recall, mute, gain, source select, logic output, matrix mixer, checksum, firmware reprogram/download, and firmware version.
Transport
protocols:
- serial
serial:
baud_rate: 9600
data_bits: 8 # UNRESOLVED: source says "1 start byte, 1 stop byte, no parity" implying 8N1 by inference
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: no auth procedure in source
Traits
- queryable # inferred from inquiry message types (3, 5, 7, 14, 15, 18, 25)
- routable # inferred from source select (msg 13) and matrix mixer messages (18, 19, 20)
- levelable # inferred from gain message (11), output gain inquiry (5), matrix mixer msg (20)
Actions
# Message types enumerated from source. ASCII-literal field shows the verbatim hex frame
# where the source provides one; where the source uses placeholders (_xx_, _yy_, _pn_, etc.)
# the command template is given with variable parts in braces.
# All messages are framed by Start byte $F0 and Stop byte $F7.
- id: device_discovery_request
label: Device Discovery Request
kind: query
command: "F0 00 01 2A 0D 00 F7"
params: []
- id: device_discovery_response
label: Device Discovery Response
kind: feedback
command: "F0 00 01 2A 0D 01 0C {xx} {yy} {nn*20} F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- name: yy
type: integer
description: Device serial number bits 6-0
- name: nn
type: string
description: WR5 name characters 1-20
- id: wr5_settings_inquiry
label: WR5 Settings Inquiry
kind: query
command: "F0 00 01 2A 0C 7F 00 {xx} {yy} F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- name: yy
type: integer
description: Device serial number bits 6-0
- id: wr5_settings_response
label: WR5 Settings Response
kind: feedback
command: "F0 00 01 2A 0C 7F 01 {xx} {yy} {id} {nn*20} {op} {zones*4} {btn1*12} {btn2*12} {btn3*12} {btn4*12} {btn5*12} {btn6*12} F7"
params: []
- id: wr5_settings_download
label: WR5 Settings Download
kind: action
command: "F0 00 01 2A 0C {id} 02 {xx} {yy} {settings-payload} F7"
params:
- name: id
type: integer
description: Target Device Id (PC = $7F)
- name: xx
type: integer
description: Device serial number bits 13-7
- name: yy
type: integer
description: Device serial number bits 6-0
- 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: []
- id: preset_mute_status_response
label: Preset Number & Mute Status Response
kind: feedback
command: "F0 00 01 2A 0C 00 04 00 01 {pn} {input-mutes*4} {output-mutes*4} F7"
params:
- name: pn
type: integer
description: Target device preset number (24.24M preset number - 1)
- id: output_gain_mixer_mutes_inquiry
label: Output Gain & Mixer Mutes Inquiry
kind: query
command: "F0 00 01 2A 0C 00 05 00 01 {nn} F7"
params:
- name: nn
type: integer
description: Target device output channel
- id: output_gain_mixer_mutes_response
label: Output Gain & Mixer Mutes Response
kind: feedback
command: "F0 00 01 2A 0C 00 06 00 01 {nn} {ll} {mutemap*4} F7"
params:
- name: nn
type: integer
description: Output channel requested
- name: ll
type: integer
description: Output channel level 0-99
- id: channel_gain_inquiry
label: Channel Gain Inquiry
kind: query
command: "F0 00 01 2A 0C 00 07 00 01 {nn} F7"
params:
- name: nn
type: integer
description: 0-63 = inputs 1-64, 64-127 = outputs 1-64
- id: channel_gain_response
label: Channel Gain Response
kind: feedback
command: "F0 00 01 2A 0C 00 08 00 01 {nn} {ll} F7"
params:
- name: nn
type: integer
description: 0-63 = inputs 1-64, 64-127 = outputs 1-64
- name: ll
type: integer
description: Channel level 0-99
- id: preset_recall
label: Preset Recall Message
kind: action
command: "F0 00 01 2A 0C 00 09 00 01 {pn} F7"
params:
- name: pn
type: integer
description: Target device preset number (24.24M preset number - 1)
- id: mute_unmute
label: Mute/Unmute Message
kind: action
command: "F0 00 01 2A 0C 00 0A 00 01 {um} {input-sel*4} {output-sel*4} F7"
params:
- name: um
type: integer
description: 0 = unmute, 1-7F = mute
- name: input-sel
type: bits
description: Input channels 1-20 selection by bit
- name: output-sel
type: bits
description: Output channels 1-20 selection by bit
- id: gain_message
label: Gain Message
kind: action
command: "F0 00 01 2A 0C 00 0B 00 01 {ll} {input-sel*4} {output-sel*4} F7"
params:
- name: ll
type: integer
description: New gain value 0-99
- name: input-sel
type: bits
description: Input channels 1-20 selection by bit
- name: output-sel
type: bits
description: Output channels 1-20 selection by bit
- id: mixer_source_mute_unmute
label: Mixer Source Mute/Unmute Message
kind: action
command: "F0 00 01 2A 0C 00 0C 00 01 {out-sel*4} {mute-src*4} {unmute-src*4} F7"
params:
- name: out-sel
type: bits
description: Mixer (output channel) 1-20 selection by bit
- name: mute-src
type: bits
description: Sources (mix faders) 1-20 to mute (high = mutes)
- name: unmute-src
type: bits
description: Sources (mix faders) 1-20 to unmute (high = unmutes)
- id: source_select
label: Source Select Msg
kind: action
command: "F0 00 01 2A 0C 7F 0D {xx} {yy} {zz} F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- name: yy
type: integer
description: Device serial number bits 6-0
- name: zz
type: integer
description: Source
- id: logic_output_inquiry
label: Logic Output Inquiry
kind: query
command: "F0 00 01 2A 0C 7F 0E {xx} {yy} F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- name: yy
type: integer
description: Device serial number bits 6-0
- id: logic_output_status_inquiry
label: Logic Output Status Inquiry
kind: query
command: "F0 00 01 2A 0C 00 0F 00 01 F7"
params: []
- id: logic_output_status_response
label: Logic Output Status Response
kind: feedback
command: "F0 00 01 2A 0C 00 10 00 01 {logicmap*4} F7"
params:
- name: logicmap
type: bits
description: Inputs 1-20 logic status (high bit = high, fet off)
- id: logic_output_set
label: Logic Output Msg
kind: action
command: "F0 00 01 2A 0C 00 11 00 01 {Zz} {aa} F7"
params:
- name: Zz
type: integer
description: Logic output number (0 to number of logic outputs)
- name: aa
type: integer
description: Logic output value (0 = Low/Fet on, 1 = High/Fet Off)
- id: matrix_mixer_inquiry
label: Matrix Mixer Inquiry
kind: query
command: "F0 00 01 2A 0C 00 12 00 01 {zz} {aa} F7"
params:
- name: zz
type: integer
description: Output zone to request mixer settings
- name: aa
type: integer
description: Mixer input number
- id: matrix_mixer_response
label: Matrix Mixer Response
kind: feedback
command: "F0 00 01 2A 0C 00 13 00 01 {zz} {aa} {level} F7"
params:
- name: zz
type: integer
description: Output zone mixer settings apply to
- name: aa
type: integer
description: Mixer input number
- name: level
type: integer
description: Mix level
- id: matrix_mixer_set
label: Matrix Mixer Msg
kind: action
command: "F0 00 01 2A 0C 00 14 00 01 {ll} {zone-sel*4} {mixer-in-sel*4} F7"
params:
- name: ll
type: integer
description: New gain value 0-99
- name: zone-sel
type: bits
description: Zone outputs 1-20 selection by bit
- name: mixer-in-sel
type: bits
description: Mixer inputs 1-20 selection by bit
- id: checksum_msg
label: Checksum Msg
kind: action
command: "F0 00 01 2A 0C 00 15 00 01 {aa} {bb} F7"
params:
- name: aa
type: integer
description: Message to follow type
- name: bb
type: integer
description: Message to follow checksum (computed per source algorithm)
- id: reprogram_message
label: Enter Reprogram Message
kind: action
command: "F0 00 01 2A 0C 7F 16 {xx} 00 33 55 F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- id: download_firmware_protocol
label: Download Firmware Protocol Msg
kind: action
command: "F0 00 01 2A 0C 7F 17 {xx} 00 {len} F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- name: len
type: integer
description: Length of message (Byte 1)
- id: download_firmware_crc_error
label: Download Firmware CRC Error Msg
kind: feedback
command: "F0 00 01 2A 0C 7F 18 {xx} 00 {len} F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- name: len
type: integer
description: Length of message (Byte 1)
- id: firmware_version_inquiry
label: WR5 Firmware Version Inquiry Msg
kind: query
command: "F0 00 01 2A 0C 7F 19 {xx} 00 F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- id: firmware_version_response
label: WR5 Firmware Version Response Msg
kind: feedback
command: "F0 00 01 2A 0C 7F 1A {xx} 00 {aa} F7"
params:
- name: xx
type: integer
description: Device serial number bits 13-7
- name: aa
type: integer
description: Firmware version
Feedbacks
- id: preset_number
type: integer
description: Target device preset number (24.24M preset number - 1)
- id: input_mute_status
type: bits
description: Inputs 1-20 mute status (high bit means channel is muted)
- id: output_mute_status
type: bits
description: Outputs 1-20 mute status (high bit means channel is muted)
- id: output_channel_level
type: integer
values: [0, 99]
description: Output channel gain level 0-99
- id: source_mixer_mutes
type: bits
description: Source mix fader mute status per output channel
- id: channel_gain
type: integer
values: [0, 99]
description: Channel gain level 0-99 for inputs (0-63) or outputs (64-127)
- id: logic_output_status
type: bits
description: Inputs 1-20 logic status (high bit = high, fet off)
- id: matrix_mix_level
type: integer
description: Mix level for a given (zone, mixer input) pair
- id: firmware_version
type: integer
description: Firmware version reported by the WR5
Variables
- id: wr5_button_function
type: enum
values: [off, preset_recall, preset_scroll, gain, mute, source_select, logic_out_active_high, logic_out_active_low, matrix_mixer]
description: Button function type (per WR5 settings download, function types 0-8)
- id: button_lower_limit
type: integer
values: [0, 99]
description: Button lower limit (0-99/upper limit)
- id: button_upper_limit
type: integer
values: [0, 99]
description: Button upper limit (lower limit/0-99)
- id: button_preset_number
type: integer
values: [0, 99]
description: Button preset number (0-99)
- id: output_zone_selection
type: bits
description: Outputs 1-20 zone assignment bitfield (per WR5 settings)
- id: button_input_assignment
type: bits
description: Button inputs 1-20 assignment bitfield
- id: button_output_assignment
type: bits
description: Button outputs 1-20 assignment bitfield
- id: wr5_options
type: bits
description: Options: bit 0 exclusive source select, bit 1 disable output zone lvl, bit 2 use checksums, bit 6 supports LogicOut & matrix Mixer (READ ONLY)
- id: wr5_name
type: string
description: WR5 name characters 1-20
Events
- id: device_discovery_response
description: Device Discovery Response (message type 1)
- id: settings_response
description: WR5 Settings Response (message type 1 of PC Device Id)
- id: preset_mute_status_response
description: Preset Number & Mute Status Response (message type 4)
- id: output_gain_mixer_mutes_response
description: Output Gain & Mixer Mutes Response (message type 6)
- id: channel_gain_response
description: Channel Gain Response (message type 8)
- id: logic_output_status_response
description: Logic Output Status Response (message type 16)
- id: matrix_mixer_response
description: Matrix Mixer Response (message type 19)
- id: firmware_version_response
description: Firmware Version Response (message type 26)
- id: firmware_crc_error
description: Download Firmware CRC Error Msg (message type 24)
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source does not document safety warnings, interlock procedures, or
# power-on sequencing requirements.
Notes
- All messages use MIDI-like SysEx framing: start byte
$F0, stop byte$F7. - Manufacturer ID bytes are
00 01 2A(Ashly); WR5 Model number is$0C. Device Discovery uses Model$0D. - PC Device Id byte is
$7F; target device id is00plus the front panel id (for 24.24M use front panel id - 1). - For 3rd-party control systems, send
00 01as the serial number bytes (bits 13-7 =00, bits 6-0 =01). - Checksum is optional, controlled by bit 2 of the Options field. Algorithm: sum message bytes, take 1's complement, add 1, AND with
0x7F. The resulting value is placed in byte 11 (the message to follow checksum) of the Checksum Msg envelope. - Source is a Ne4250.25 implementation of the WR5 Remote Protocol. Function types added in protocol v2.0 are documented in the WR5 Settings Response.
- Preset numbers from the 24.24M perspective are 1-based; transmitted preset values are 0-based (
preset_number - 1). - Input and output bitmaps span 20 channels (1-7 in byte LSBs, 8-14 in byte 2, 15-20 in byte 3, spare in byte 4); bit set = channel selected/active per the source note.
Provenance
source_domains:
- ashly.com
source_urls:
- https://ashly.com/wp-content/uploads/2015/10/WR5_Protocol.pdf
- https://ashly.com/wp-content/uploads/2015/08/Ethernet-Communications-v5_3.pdf
- https://ashly.com/wp-content/uploads/2026/03/NE-Multi-Channel-Amps-r14.pdf
- https://ashly.com/knowledge-base/
retrieved_at: 2026-07-13T18:26:12.186Z
last_checked_at: 2026-07-21T20:11:37.120Z
Verification Summary
verdict: verified
checked_at: 2026-07-21T20:11:37.120Z
matched_actions: 29
action_count: 29
confidence: medium
summary: "All 29 spec actions matched literal message type bytes in source; transport verified at 9600 baud, 8N1, no flow control; complete bidirectional coverage with spec representing all documented message types. (4 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "Power on/off commands not documented in source. Voltage, current, power specs not stated."
- "source says \"1 start byte, 1 stop byte, no parity\" implying 8N1 by inference"
- "source does not document safety warnings, interlock procedures, or"
- "Power commands, fault behavior, error recovery sequences, voltage/current specs, and firmware version compatibility ranges not stated in source. Output mute status spare byte usage in msgs 4-6 / 10-12 not described beyond \"spare\" label. Reprogram message field table has formatting artifact at byte 9 (skipped from $08 to $10)."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0