Tagged: BeoMaster, Datalink, Datalink'86
- This topic has 8 replies, 3 voices, and was last updated 10 months, 2 weeks ago by B3OHACK3R.
- AuthorPosts
- January 7, 2024 at 9:23 pm #28334
As already described in some other threads, I am trying to gain “full”
control of a Beomaster 6500 by sending datalink commands via TV/Aux port.My initial setup looks the following:
- Beolab 8000 connected to Beolab 2 connected to Power Link 1
- MCL Sensor – data (White) connected to BM6500 TV/Aux – Datalink
- MCL Sensor – ground connected to BM6500 Aux – ground
- MCL Sensor – 5V connected to external power supply
- MCL Sensor in option 1 (Standby – while keeping the timer button on MCL Sensor depressed, press “AV” button on Beolink 1000)
- Ardunio Uno R4 – ground connected to BM6500 Aux – ground
- Arduino Uno R4 – Pin 2 connected BM6500 TV/Aux – Datalink
- BM6500 in option 2 (Standby – press “sound”, “2”, “store”)
As a code basis I`m using this GitHub Project.
I actually don´t need the additional MCL Sensor in my day to day use. I´m using it to identify commands from the Datalink protocol. I know about the Datalink manual and with this I´m already able to send and receive signals via the Arduino.
But unfortunately the commands only startup the BM in muted state and I can´t get it to unmute (See my post here). I´m aware this is expected behavior, but I was wondering if there really is no command for unmuting speaker 1/Powerlink.
I also tried out the changes suggested by B3OHACK3R:
But unfortunately the commands only startup the BM in muted state and I can´t get it to unmute
Hi! Maybe I can jump in here. Was busy with ML lately and haven’t had a deep dive in the DL’86 protocol yet. What I would try first is just sending it a virtual volume or mute key stroke. So similar to this https://github.com/toresbe/datalink/blob/main/datalink86-captures-new.txt#L26 But instead of the 0x09 at the end (digit-9) give it a try with 0x60 (volume up) or 0x0d (mute toggle). Maybe it will then leave the muted state it started up with.
Unfortunately, this also did not do the trick, like he described by himself earlier today.
This leaves me with the following question: Was it not intended to connect a B&O TV to the TV/Aux port of the BM and play the sound over the connected speakers? If so, it should have sent matching Datalink commands (like Madskp suggested here). Or is it perhaps a question of BM settings after all (like I asumed here)?
To be honest, I probably don’t have a deep enough understanding when it comes to the structure/composition of Datalink commands at the moment.
I would therefore be very happy to receive any hints, tips and tricks or any documentation to be able to learn more about Datalink and maybe solve the puzzle!
Thank you all in advance!
January 7, 2024 at 10:57 pm #28339Was it not intended to connect a B&O TV to the TV/Aux port of the BM and play the sound over the connected speakers?
It was intended indeed. In an option 0 (TV) / 2 (music system) setup. In that case the TV would not receive any IR commands but only the music system (where also the speakers are connected). So the music system would power up by it’s regular IR commands and then forward everything TV related over the DL / aux port to the TV. So this setup cannot be used for “spying” on a special command.
What pilatomic does in the other thread is simulating a tape deck or a CD player. They have those separate connectors and are speaking the older DL protocol. So when pressing the play button on the CD player it sends a command to the master device which then switches on. Without muting its output. The downside is that using this port you only have limited functionality available.
I think the MCL and the TV/AUX connector do carry the same data signal. So when the enable signal comes in through the MCL port it makes perfectly sense to not enable the local output. I’m just curious if this can somehow be overruled with a special command.
Easiest fix would probably be just simulating an activation from the CD player or the tape deck using the DL80 port. Once the system started (unmuted) just use the DL86 protocol on the other connector to switch to the actual source you want.
January 8, 2024 at 10:45 pm #28390It was intended indeed. In an option 0 (TV) / 2 (music system) setup. In that case the TV would not receive any IR commands but only the music system (where also the speakers are connected). So the music system would power up by it’s regular IR commands and then forward everything TV related over the DL / aux port to the TV. So this setup cannot be used for “spying” on a special command.
[…]
I think the MCL and the TV/AUX connector do carry the same data signal. So when the enable signal comes in through the MCL port it makes perfectly sense to not enable the local output. I’m just curious if this can somehow be overruled with a special command.Thanks for clearing things up! I also checked the BM 6500 schematics again and like you mentioned the Datalink pin of the TV/AUX port is directly connected to the MCL and Powerlink Datalink Pins. I can imagine that B&O has left the door open to control or mute the system via a future iteration of innovative speakers like the Penta series. So maybe there is this special command. But that’s crystal ball gazing… 😀
What pilatomic does in the other thread is simulating a tape deck or a CD player. They have those separate connectors and are speaking the older DL protocol. So when pressing the play button on the CD player it sends a command to the master device which then switches on. Without muting its output. The downside is that using this port you only have limited functionality available.
[…]
Easiest fix would probably be just simulating an activation from the CD player or the tape deck using the DL80 port. Once the system started (unmuted) just use the DL86 protocol on the other connector to switch to the actual source you want.I get how pilatomic is achieving control and I also understand your solution approach. I guess for my personal project this would be just fine, as I could connect another pin of the Arduino to a DL80 port, just for sending the “missing” commands. Many thanks for the inspiration!
Having your “MasterDataTool” project and the use of DL86 in mind , this would unfortunately compromise the elegant plug-and-play solution…January 8, 2024 at 11:34 pm #28398I can imagine that B&O has left the door open to control or mute the system
As the messages are short enough one could set up an automated test and just iterate through every possible command.
Having your “MasterDataTool” project and the use of DL86 in mind , this would unfortunately compromise the elegant plug-and-play solution
Not that bad after all. The good thing is that the DL80 port ignores DL86 and vice versa. So in theory it should be possible joining them together and sending DL80 and DL86 on the same wire. Then it’s just about a simple cable splitter. Still have to properly test that.
January 9, 2024 at 12:04 am #28405I also want to comment on your previous post from another thread:
What I would try first is just sending it a virtual volume or mute key stroke.
So similar to this
https://github.com/toresbe/datalink/blob/main/datalink86-captures-new.txt#L26But instead of the 0x09 at the end (digit-9) give it a try with 0x60 (volume up) or 0x0d (mute toggle). Maybe it will then leave the muted state it started up with.
So as mentioned I also tested your suggestions without success (no unmuting of Powerlink Ports). And while I tested, I also compared them to the Datalink’86 documentation:
The Datalink’86 document states, the transmitted commands can be split into 4 blocks. And following Figure “Fig. 2045-4 gives an example of a complete data transmission” I assumed the Header is always 14 bits long:
- Start
- Header
- Format [4 Bits]
- Address (to) [5 Bits]
- Address (from) [5 Bits]
- Data [“… may be commands or ASCII codes”]
- Stop
Assuming that 0x60 is the usual command for “increase volume” and following your suggestion to start with the input from the Github link: S 0000 00001 00001 001 E. Then replacing 0x09 with 0x60 already leads to an interference with the address information of the header. Maybe I misunderstood you here?
However, confused by this, I tested several options:- Following your suggestion: S 0000 00001 00001 100000 E
No response by the BM. - Following the DL86 documentation (sending 0x60 as data): S 0000 00001 00001 1100000 E
No response by the BM. - Sending a command from my own findings when testing the MCL Sensor: S 0000 00001 01100 000 E
Success – BM is increasing the Volume by 2.
So I can’t help but notice that 0x60 is part of the option 3 command and also the length of the command is the same as those from the Github Link, but it seems to be filled from the back, overwriting parts of the header.
This left me completely confused about the DL86 protocol and unfortunately, I can’t figure it out. Or maybe I’m misunderstanding something from the documentation…
Anyway, I’m curious what your take is on this ?January 9, 2024 at 12:48 am #28406Yes, it is a bit confusing. There are full and short messages. The full messages are described in the DL86 pdf. So far I could only read them but sending didn’t do anything.
Sniffing data between a 1611 converter and a BC9500 I found out that there are also short messages transmitted that are very similar to the Beo4 IR codes. The 1611 sends out such a command e.g. for activating the radio source or for next/prev commands.
Those short messages just contain the “to address” and the command. The command can be any Beo4 command. https://github.com/christianlykke9/Beomote/blob/master/Commands.h
So sending a 0 0000 0001 0110 0000 is a volume up key to the radio source. Leading 0 plus 0x01 (radio) plus 0x60 (vol-up). This is actually what I meant with replacing the 0x09 with the 0x60 from the linked file.
January 10, 2024 at 12:22 am #28481Thank you very much for the explanation of the “short” messages!! I noticed the same behavior for “long” messages while testing with the MCL Sensor. I could imagine the “long” messages are the response from the BM, providing the status after receiving the “short” command? However that may be… With the understanding of the “short” messages, I did what you suggested:
As the messages are short enough one could set up an automated test and just iterate through every possible command.
And success! I found the “secret” commands to unmute/mute the Powerlink speaker:
- unmute – 0x1C
- mute – 0x1D
Prerequisite is an already running Beomaster.
January 10, 2024 at 11:05 am #28490And success! I found the “secret” commands to unmute/mute the Powerlink speaker: unmute – 0x1C mute – 0x1D Prerequisite is an already running Beomaster.
Just to understand this correctly. You can then activate the Beomaster in a muted state via the datalink’86, and then afterwards unmute it also with datalink’86. Is that correct?
January 10, 2024 at 12:23 pm #28497And success! I found the “secret” commands to unmute/mute the Powerlink speaker: unmute – 0x1C mute – 0x1D
Really cool!! Thanks a lot for sharing that! Could reproduce it on a BC9500. Works!
You can then activate the Beomaster in a muted state via the datalink’86, and then afterwards unmute it also with datalink’86. Is that correct?
Yes, all through the AAL / AUX connector. So that brings some really nice remote control capabilities. 🙂
BTW some time ago I made two little helper python tools for Linux & DL. As bit-banging from userspace is something you should avoid you can instead use LIRC in raw mode for that.
This tool converts a DL86 command to a lirc.conf snippet for raw mode (there is also a full lirc.conf example file).
For example python3 dl-lirc-gen.py 011c will generate the unmute command.https://gitlab.com/masterdatatool/software/dl-tools/-/blob/main/dl-lirc-conf/dl-lirc-gen.py
The other one uses lirc’s mode2 tool to decode incoming DL86 messages on-to-fly and will print out hex values.
https://gitlab.com/masterdatatool/software/dl-tools/-/blob/main/dl-receive/dl-receive.py
Still pretty much work-in-progress but they are functional so far. I made them for the MasterDataTool project but can be used stand-alone of course. Just don’t forget the level shifter.
- AuthorPosts
- You must be logged in to reply to this topic.