I'm one of those not-so-proud owners of a Bose Solo audio systems that simply sits under your TV-set and plays some audio you feed in.
It ships with a really basic IR-Remote that consists of four keys:
0 Toggle On/Off
1 Volume up
2 Volume down
3 Mute
Other then that the device has one LED in the front and some ports in the back:
Data (3,5" Jack) Serial communication
USB (Service) Firmware updates
TOS-Link Optical Digital audio
Coaxial Digital audio
Cinch Analog stereo audio
Read more about it in the user manual.
While the days were long, dark and cold I discovered that you can update the firmware of this piece of technology. Some research (Hacking the Bose Soundtouch, and its Linux-based OS) showed me that this device is probably also running an embedded linux system. So I went on and updated my firmware to the latest version.
But this little Data-port caught my attention. After some Googling, I found a Bose service manual that stated you can controll this device using so called TAP-commands. I had no clue how to do that and I have never used a serial terminal before. After I fiddled around some weeks with different cables, an Arduino, etc. I finally made it and found a way to talk this device using a serial console.
Here is the list of commands with their corresponding output. Note: I haven't run all commands yet, as I don't know their impact yet. Others had no particular output.
Describe command
> DC
dc (here) Describe command
vr Version info
sr Read serial
sw Write serial
mt Write test status
mr Read test status
rd Read data
wd Write data
br BDSP Read data
bw BDSP Write data
bb BDSP base addr
xm BDSP xmodel ver
cpu CPU control
debug Debug level
gpio GPIO control
tap TAP control
ui UI control
repeat Repeat a command
vo Volume control
reboot Reboot
bdsp BDSP control
spdif S/PDIF read/write
lpsc lpsc
audio audio settings
echo echo
mu Mute control
bass Bass control
led LED control
ir IR control
remote Remote control
fd Factory defaults
persist Persistent control
flash SPI flash
usb USB
Version info
> VR
Main 1.0.6.1287 epdbuild.usmahedbldsrv01.2014-05-22T14:40:29
Boot 1.0.0.1211 epdbuild.usmahedbldsrv01.2013-05-09T14:25:14
Mfg 1.0.0.1211 epdbuild.usmahedbldsrv01.2013-05-09T14:25:31
Read serial
> SR
M:WBM0141G0743
I:00000000000000000000000
S:057237Z40201505AE
Read test status
> MR
0x000000F8
BDSP base addr
> BB
293731936
BDSP xmodel ver
> XM
1210
CPU control
> CPU
load: 1/64/70
stack 0 @ 0xC01F5358 1188/4096
stack 1 @ 0xC01F6358 684/4096
stack 2 @ 0xC01F7358 1384/4096
stack 3 @ 0xC01F8358 572/4096
stack 4 @ 0xC01F9358 620/4096
stack 5 @ 0xC01FA358 868/4096
stack 6 @ 0xC01FB358 652/4096
stack 7 @ 0xC01FC358 876/2048
stack s @ 0xC01FCB58 1104/4096
Debug level
> DEBUG
TimerMBX: 0xC01DA150
RenderAudioMBX: 0xC01DA1D0
TAPAppMBX: 0xC01DA0D0
UITaskMBX: 0xC01DA2D0
USBTaskMBX: 0xC01DA350
CodecManagerMBX: 0xC01DA250
TAP control
> TAP
RX/TX max usage: 9/301
UI control
> UI
state: 2
BDSP mute: 0
BDSP vol: 11
BDSP isNaN: 0
demo layer: 0
idle timer: 1/1
idle timer value: 0
audio silence: 1
audio silence timer value: 123211
power cycles: 28
running from: upgraded main image
Hospitality mode: 0
UI control (while playing)
> UI
state: 2
BDSP mute: 0
BDSP vol: 11
BDSP isNaN: 0
demo layer: 0
idle timer: 1/1
idle timer value: 0
audio silence: 0
audio silence timer value: 0
power cycles: 28
running from: upgraded main image
Hospitality mode: 0
Volume control
> VO
0/11/100
Reboot
> reboot
Bose Solo
Audio settings
> AUDIO
audio in bypass: no
input auto selection: on
digital source: no
S/PDIF valid: no
Audio type: PCM
Audio settings (while playing)
> AUDIO
audio in bypass: no
input auto selection: on
digital source: yes
S/PDIF valid: yes
S/PDIF channel: 1
S/PDIF frame rate: 44.1 kHz
S/PDIF IEC Pc: 0xFFFFFFFF
Audio type: PCM
Mute control
> MU
0
Mute control (while muted)
> MU
1
Bass control
> BASS
0
LED control (while off)
> LED
Active Layers:
LED control (while on)
> LED
Active Layers: 14
LED control (while blinking)
> LED
Active Layers: 12 14
IR control
> IR
echoRemote: 0
ignoreRemote: 0
eventBufferWatermark: 4
Remote
> remote 0 # Toggle On/Off
> remote 1 # Volume up
> remote 2 # Volume down
> remote 3 # Mute
Persistent control
> PERSIST
current block @ 0x00019778
drcSetting: 1
allowDrcSetting: 0
USB
> USB
usbDeviceConnected: 0
usbUpdateLockout: 0