Skip to content

Latest commit

 

History

History
706 lines (526 loc) · 15.8 KB

protocol.rst

File metadata and controls

706 lines (526 loc) · 15.8 KB

Protocol

All commands are initiated by the console. All state is maintained primarily by the amplifier so the console requires the echoed responses to update its state.

There is no way to do automatic power on without modifying the firmware. It is not otherwise possible to make the console light up and respond to input unless it is powered on through its own power button or remote control.

Message formats

All messages are one byte except for AA that starts a longer message.

The longer messages have the following format:

AA <U8 type> <U8 length of data> <variable length data> <U8 checksum>

The checksum is verified by calculating the U8 sum of all bytes from the type (inclusive) to the checksum (inclusive) so that the final result is 0.

Communication is represented as follows:

> Message from console to amplifier
< Message from amplifier to console

Do not send additional requests to the amplifier while it is/will be sending a multi-byte response. It cannot handle this and will overwrite part of the output with any new single byte responses. For multi-byte responses it will start again instead of finishing the earlier response. Wait for it to finish responding before making additional requests. The console does not have this problem.

Status commands

Read status/configuration

> 34
< AA
< 0A = type
< 14 = length of remaining data (excluding checksum)
< 0A = main volume (0 to 43)
< 15 = rear level (0 to 43)
< 15 = centre level (0 to 43)
< 15 = subwoofer level (0 to 43)
< 00 = input (0 to 5 => 1 to 6)
< 00 = mute (0 = off, 1 = on)
< 00 = input 4 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 5 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 2 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 6 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 03 = input 1 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 3 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = digital signal status (amplifier)
< 00
< 01
< 05
< 04
< 00 = standby (0 = on, 1 = standby)
< 00
< 00 = auto standby (0 = enabled, 1 = disabled)
< XX = checksum

This can also be used in reverse, to get the status from the console. The console reports the input effects in ascending order 1-6 (and only if they have been set using the console). Allowing the response to go to the amplifier will overwrite the effect settings with incorrect values and the current idle time will become over 24 days which would normally result in an automatic standby occurring. It will also overwrite the digital signal status with the console's value until it next changes.

> 34
> AA
> 0E = type
> 03 = length of remaining data (excluding checksum)
> 20 = set most significant byte of the idle time (lower bytes are reset to 0)
> 00
> 00
> CF = checksum
< AA
< 0A = type
< 14 = length of remaining data (excluding checksum)
< 0A = main volume (0 to 43)
< 15 = rear level (0 to 43)
< 15 = centre level (0 to 43)
< 15 = subwoofer level (0 to 43)
< 00 = input (0 to 5 => 1 to 6)
< 00 = mute (0 = off, 1 = on)
< 00 = input 1 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 2 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 3 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 4 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 5 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = input 6 effect (0 = 3D, 1 = 2.1, 2 = 4.1, 3 = disabled)
< 00 = digital signal status (console)
< 00
< 06
< 01
< 03
< 00 = standby (0 = on, 1 = standby)
< 00
< 00 = auto standby (0 = enabled, 1 = disabled)
< XX = checksum

Digital signal status (amplifier)

The console stores the signal status differently from the amplifier so it will be confused by receiving the amplifier values while running (use the Decode state message to fix this).

  • 00 = N/A
  • 01 = 5.1 signal detected (5.1 levels, no effects)
  • 0C = 2.0 signal detected (5.1 levels, effects mandatory)
  • 0E = unknown signal (decode/effect LEDs cycle continuously)

Digital signal status (console)

The console reports the signal status differently from the amplifier.

  • 00 = N/A or unknown signal (decode/effect LEDs cycle continuously)
  • 01 = no signal
  • 02 = 5.1 signal detected (5.1 levels, no effects)
  • 03 = 4.1 signal detected (4.1 levels, no effects)
  • 04 = 3.1 signal detected (5.1 levels, no effects)
  • 05 = 2.1 signal detected (2.1 levels, no effects)
  • 06 = 2.0 signal detected (2.1 levels, no effects)
  • 07 = 2.0 signal detected (5.1 levels, effects mandatory)
  • 08 = signal detected (5.1 levels, no effects)

Write status/configuration

Send the AA 0A message from the section above (Read status/configuration).

There's an amplifier bug in that standby status is never restored to 1, but it can be set. Changing it from 1 to 0 will power on, changing it from 0 to 1 will not go into standby. Try to avoid changing the power state with this command.

Reset idle time

Sent liberally by the console whenever user input is provided. Resets the idle time maintained by the amplifier.

> 30
< 30

Read idle time

The idle time is not just reset by the console, it is also reset by the amplifier itself when non-silent audio is being output. The console will send this command every 60 seconds after the last user input.

If automatic standby is enabled and the time is reached the console will turn the power off.

> 31
< 31
< AA
< 0F = type
< 03 = length of remaining data (excluding checksum)
< 00 06 1C = idle time (U24BE in seconds)
< XX = checksum

Read input volume

The console doesn't use this command, but you can find out the current volume of the input. Silence is 0 and it looks like it goes up to 1,000,000 with some maximum amplitude square waves. Normal values are around 1,000 to 2,000. Above a certain volume the idle time will be reset and held at 0.

> 2F
< 2F
< AA
< 08 = type
< 03 = length of remaining data (excluding checksum)
< 00 00 00 = volume (U24BE in unknown units)
< XX = checksum

Read temperature

The console doesn't use this command, but you can find out the current temperature in the amplifier.

> 25
< 25
< AA
< 0C = type
< 05 = length of remaining data (excluding checksum)
< 00
< 00 = temperature 1 in Celsius
< 00 = temperature 2 in Celsius
< 00 = temperature 3 in Celsius
< 00
< XX = checksum

Power commands

Power on

The first part of this is identical to Headphones disconnected so it should be possible to power on with the Headphones connected sequence in its place.

The amplifier will power on with the currently configured input active, but the effect is sent by the console automatically (Effect selection).

> 11 11
> XX (effect selection)
> 39 38 30 39
< 11 11
< XX (effect selection)
> 39 38 30 39

Power off

The 36 command here turns the speakers off and saves settings.

The 37 command's purpose is unknown.

Sends Read status/configuration at the end to update the console state.

> 30 37 36
< 30 37 36
> 34
< AA 0A ...

Headphones connected

> 10 10
> 3F (effect selection)
< 10 10
< 3F (effect selection)

Headphones disconnected

> 11 11
> XX (effect selection)
< 11 11
< XX (effect selection)

Volume/level commands

The console implements the mute operation by setting the volume to 0 using lots of Main volume down commands and then back up using lots of Main volume up commands. Going into standby while muted may result in a volume of 0 being saved.

Main volume up

Turning the volume up above level 43 is ignored and no command is sent.

> 08
< 08

Main volume down

Turning the volume down below level 0 is ignored and no command is sent.

> 09
< 09

Mute

Turn the volume down to level 0.

> 09
> 09
> 09 ...
< 09
< 09
< 09 ...

The amplifier can also report a muted status (without changing the volume). When the volume is next adjusted the console will unmute immediately:

< 20
...
> 38
> 08 or 09
> 39

The console has its own independent "muted volume" and will use this to report the mute status and when the button is pressed to unmute. At every power on this "muted volume" is reset to 0.

Unmute

Turn the volume back up.

> 38
> 08
> 08
> 08 ...
> 39
< 38
< 08
< 08
< 08 ...
< 39

The amplifier can also report an unmuted status (without changing the volume).

< 21

If the console had muted then the volume level will still be 0.

Subwoofer level up

Turning the subwoofer level up above 43 is ignored and no command is sent.

> 0A
< 0A

Subwoofer level down

Turning the subwoofer level down below 0 is ignored and no command is sent.

> 0B
< 0B

Centre level up

Turning the centre level up above 43 is ignored and no command is sent.

> 0C
< 0C

Centre level down

Turning the centre level down below 0 is ignored and no command is sent.

> 0D
< 0D

Rear level up

Turning the rear level up above 43 is ignored and no command is sent.

> 0E
< 0E

Rear level down

Turning the rear level down below 0 is ignored and no command is sent.

> 0F
< 0F

Input selection

Mute the volume before changing inputs (Volume/level commands) and switch to the configured effect for the input (Effect selection) before unmuting.

The "decode" light turns on if there is a digital signal from inputs 3, 4 or 5.

Input 1 (3.5mm TRS, 6 channels)

> 09 ... (mute)
> 02
> XX (effect selection)
> 08 ... (unmute)
< 09 ... (mute)
< 02
< XX (effect selection)
< 08 ... (unmute)
< 39

Input 2 (RCA, 2 channels)

> 09 ... (mute)
> 05
> XX (effect selection)
> 08 ... (unmute)
< 09 ... (mute)
< 05
< XX (effect selection)
< 08 ... (unmute)
< 39

Input 3 (TOSLINK, S/PDIF optical fibre)

> 09 ... (mute)
> 03
> XX (effect selection)
> 08 ... (unmute)
< 09 ... (mute)
< 03
< XX = `Decode state`_
< XX (effect selection)
< 08 ... (unmute)
< 39

Input 4 (TOSLINK, S/PDIF optical fibre)

> 09 ... (mute)
> 04
> XX (effect selection)
> 08 ... (unmute)
< 09 ... (mute)
< 04
< XX = `Decode state`_
< XX (effect selection)
< 08 ... (unmute)
< 39

Input 5 (RCA, S/PDIF 75Ω coaxial)

> 09 ... (mute)
> 06
> XX (effect selection)
> 08 ... (unmute)
< 09 ... (mute)
< 06
< XX = `Decode state`_
< XX (effect selection)
< 08 ... (unmute)
< 39

Input 6 (3.5mm TRS on the console, 2 channels)

> 09 ... (mute)
> 07
> XX (effect selection)
> 08 ... (unmute)
< 09 ... (mute)
< 07
< XX (effect selection)
< 08 ... (unmute)
< 39

Decode state

  • 17 = 5.1 signal detected (5.1 levels, no effects)
  • 18 = no signal
  • 19 = 4.1 signal detected (4.1 levels, no effects)
  • 1A = 3.1 signal detected (5.1 levels, no effects)
  • 1B = 2.1 signal detected (2.1 levels, no effects)
  • 1C = 2.0 signal detected (2.1 levels, no effects)
  • 1D = signal detected (5.1 levels, no effects)
  • 1E = 2.0 signal detected (5.1 levels, effects mandatory)
  • 1F = unknown signal (decode/effect LEDs cycle continuously)

The default state on the console is 1F until this is provided by the amplifier. The console will update the effect when the decode state changes (no signal = effect disabled).

Effect selection

Using effects that are not compatible with the selected input has not been tested.

3D effect

> 14
< 14

4.1 effect

> 15
< 15

2.1 effect

> 16
< 16

Effect disabled

> 35
< 35

No effect, headphones

> 3F
< 3F

Speaker test

While powered on hold down the "input" button for 5 seconds.

Tests speakers in this order:

  • Front left
  • Centre
  • Front right
  • Rear right
  • Rear left
  • Subwoofer

Start

Enter speaker test mode and Select test speaker "front left".

> 36
> 22
< 22
> AA 07 ... (Select test speaker: front left)
< 36

Select test speaker

> AA
> 07 = type
> 08 = length of remaining data (excluding checksum)
> 01
> 01 = speaker (01 front left, 10 centre, 02 front right,
                08 rear right, 04 rear left, 20 sub, 00 none)
> 00 00 00 00 09 2B
> XX = checksum

Stop

Exit speaker test mode, Select test speaker "none" and restore the previously selected input (Input selection).

> 33
> AA 07 ... (Select test speaker: none)
> 00
< 33
< 00

Configuration reset

While in standby hold down the "input" button for 8 seconds.

Sends Read status/configuration at the end to update the console state.

> AA
> 0E = type
> 03 = length of remaining data (excluding checksum)
> 20 = most significant byte of the idle time (lower bytes are reset to 0)
> 00
> 00
> CF = checksum
> AA
> 0A = type
> 14 = length of remaining data (excluding checksum)
> 0A 15 15 15 00 00 00 00 00 00 03 00 00 00 06 01 03 00 00 00
> 8C = checksum
> 36
< AA
< FF = type
< 01 = length of remaining data (excluding checksum)
< 8A
< 76 = checksum
< 36
> 34
< AA 0A 14 0A 15 15 15 00 00 00 00 00 00 03 00 00 00 01 05 04 00 00 00 8C

Enable/disable automatic standby

While powered on hold the "level" button for 5 seconds (until the level change light goes out). The setting will be toggled. The console will also send the current effect configuration in the wrong order so all of the effects set for the inputs will be changed.

> AA
> 0E = type
> 03 = length of remaining data (excluding checksum)
> 20 = set most significant byte of the idle time (lower bytes are reset to 0)
> 00
> 00
> CF = checksum
> AA
> 0A = type
> 14 = length of remaining data (excluding checksum)
> 0A 15 15 15 00 00 00 00 00 00 03 00 00 00 01 05 04 00 00
> XX = auto standby (0 = enabled, 1 = disabled)
> XX = checksum
> 36
< AA
< FF = type
< 01 = length of remaining data (excluding checksum)
< 8A
< 76 = checksum
< 36

The current idle time will become over 24 days which would normally result in an automatic standby occurring but holding the button also repeatedly sends the command to reset the idle time so it's unlikely to happen.