- This topic has 75 replies, 18 voices, and was last updated 5 months, 3 weeks ago by Madskp.
- AuthorPosts
- 26 December 2023 at 10:53 #50987
One very practical example here. BL2000 converted to an AirPlay receiver.
Automatically switches on when the stream starts and also turns off once it stopped.
The buttons / IR receiver are fully functional and control the source application. Next, previous, play, pause.Would also be pretty easy adding a couple of pre-programmed radio stations that could be selected independent of any incoming AirPlay stream.
I’m surprised how good the BL2000 actually sounds in that combo. Interesting price/performance ratio. They are traded for very little money…
Works with any other ML linkroom product and will also sync the clock on a BL3500.
Video:
27 December 2023 at 02:53 #50992I misspoke ! Controlling the ML USB adapter by direct by UART instead of USB !
Ah, okay. On the hardware side that would work. The thing is that ML requires setting some (nowadays) very uncommon parity bits. I’m glad that I found a USB-serial chip that on the receiving side happily ignores any parity errors but let’s you set arbitrary bits when sending.
So if you are not going through the USB interface it gets a bit more complicated and really depends.
Is there any “waiting list” for this device and/or ML to RJ45 adapter ?
Will update this thread once everything is ready. Still have to do the compliance testing and paperwork… You can also send me a PM and I’ll put you on the list. 🙂
27 December 2023 at 03:57 #50993Controlling the ML USB adapter by direct by UART instead of USB
I had a similar thought. I considered suggesting adding solder jumpers and some pads to attached wires (or a connector) to the UART signal traces. Without more detail of the design, it is hard to know if suggestions like this make sense or not.
I’m glad that I found a USB-serial chip that on the receiving side happily ignores any parity errors…
What happens when there is an actual (real) parity error?
I’m looking forward to any updates on functionality, availability, and pricing. This device has the potential to be a lot of fun.
Glitch
27 December 2023 at 05:23 #50994I had a similar thought. I considered suggesting adding solder jumpers and some pads to attached wires (or a connector) to the UART signal traces. Without more detail of the design, it is hard to know if suggestions like this make sense or not.
What exactly you’d like to connect there?
Right now the RX/TX pins from the ML transceiver circuit are directly connected to the FTDI USB-serial chip. By soldering / removing a few resistors they can also be routed to the 40-way pinsocket. For Raspberry Pis there is a library for bit-banging such things on the GPIOs. Haven’t tried it but they promise it works up to 19200 baud (exactly the ML speed) with zero errors.What happens when there is an actual (real) parity error?
Each telegram contains a checksum. If a bit got flipped somehow (messages colliding etc) the checksum won’t match and the telegram is ignored or resent.
ML and many other low-power machines from that time are using space and mark parity bits for better performance. The first and the last byte is sent with a mark parity bit while the rest of the message is sent with a space parity. The receiver is always set to space parity and so will wake up / get triggered when a parity error occurs. So no need for polling which greatly frees up resources.I’m looking forward to any updates on functionality, availability, and pricing. This device has the potential to be a lot of fun.
I’m currently preparing a summary for everything. Will also provide the schematic.
It can receive and transmit ML & DL audio + data. Can act as master or slave.The kit will contain:
- Raspberry Pi compatible “MasterDataTool” with RJ45 ML and DIN DL connectors
- RJ45 <-> ML adapter
- short USB-C <-> USB-A cable
- three 3d printed plastic parts that will form a basic housing when assembled with a Raspberry Pi
- € 150 incl. 19% VAT (likely also including shipping cost but not sure yet)
27 December 2023 at 05:29 #5099527 December 2023 at 05:45 #50996I had a similar thought. I considered suggesting adding solder jumpers and some pads to attached wires (or a connector) to the UART signal traces. Without more detail of the design, it is hard to know if suggestions like this make sense or not.
What exactly you’d like to connect there? Right now the RX/TX pins from the ML transceiver circuit are directly connected to the FTDI USB-serial chip. By soldering / removing a few resistors they can also be routed to the 40-way pinsocket. For Raspberry Pis there is a library for bit-banging such things on the GPIOs. Haven’t tried it but they promise it works up to 19200 baud (exactly the ML speed) with zero errors.
I would like to inject commands, and extract commands on the ML from an my HA system using rs232.
27 December 2023 at 07:03 #50997I would like to inject commands, and extract commands on the ML from an my HA system using rs232.
Yes, that is certainly possible. I would just leave the Raspberry in the signal chain as it will take care of handling the ML protocol. Your HA system will not be able to deal with the ML protocol anyway.
You could connect a simple USB-RS232 converter to the Raspberry and then have a small application running on there that translates the serial commands from your HA to ML commands (or the other way around).27 December 2023 at 10:34 #50989I am also very interested.
is it possible to control it directly by serial Rs232 (with/without a level converter) ?
Thank you for your excellent work !
27 December 2023 at 11:10 #50990A very great use case which has been requested by many
Yes, certainly makes BL2000 and BL3500 a lot more useful again. 🙂
is it possible to control it directly by serial Rs232 (with/without a level converter) ?
No, that won’t work unfortunately. It’s a half-duplex symmetrical bus working at very low voltages (+/- 0.25V). It is a bit similar to RS422 but won’t work with such transceiver chips due to the low voltages. Also you have to provide power to the data pins as well as to the ML detect pin. So quite a circuit required and anything else than straight forward.
Thank you for your excellent work !
Thanks 🙂
27 December 2023 at 11:31 #50991is it possible to control it directly by serial Rs232 (with/without a level converter) ?
No, that won’t work unfortunately. It’s a half-duplex symmetrical bus working at very low voltages (+/- 0.25V). It is a bit similar to RS422 but won’t work with such transceiver chips due to the low voltages. Also you have to provide power to the data pins as well as to the ML detect pin. So quite a circuit required and anything else than straight forward.
I misspoke ! Controlling the ML USB adapter by direct by UART instead of USB !
Is there any “waiting list” for this device and/or ML to RJ45 adapter ?
Thanks
3 January 2024 at 01:38 #50998A quick video with a BL3500. Pretty much the same as the previous one with the BL2000.
Still have to take the video with the BeoCenter 2. That works really nice as well. Showing even the AirPlay metadata on the display…
3 January 2024 at 04:39 #50999Would metadata also be possible on the BL3500?
It was mentioned as a feature for the Linkplayer software for Beoport back in the old forums.
3 January 2024 at 04:52 #51000Would metadata also be possible on the BL3500? It was mentioned as a feature for the Linkplayer software for Beoport back in the old forums.
Good question. Haven’t tried it yet as I thought the BL3500 firmware would not support that. Easy to add that data on the ML communication. Will give it a try but I have never seen a BL3500 that displays metadata.
What I can also see was implemented in ML but never used (at least on the BL3500) is custom source names. The audio master would send the source name string right in the beginning with an extra command. So “N.RADIO” in ascii for example. My BC2 and the BL3500 happily ignore that when changed to something else.
The BC2 later switches then over to display the metadata but the source name shown after powering on always stays the same.4 January 2024 at 07:04 #51002Looking good ?
4 January 2024 at 08:58 #51003What exactly you’d like to connect there?
I’m not exactly sure. It just “seems” like something that might be useful. 😉 Being able to bit-bang from a Raspberry Pi would likely cover anything that I would want to play with.
Each telegram contains a checksum. If a bit got flipped somehow (messages colliding etc) the checksum won’t match and the telegram is ignored or resent.
My question was related to how the retry strategy works. For example, which device (sender or receiver) initiates a retry? I’m not really looking for an answer here, but your statement of a “USB-serial chip that on the receiving side happily ignores any parity errors” got me thinking a bit. My experience is that 90% of code from most projects is (or should be) dedicated to faults and edge cases. This code is usually under-represented since 90% of the coders only want to work on the 10% of code that is NOT faults and edge cases. 😉
Glitch
4 January 2024 at 10:47 #51001BeoCenter 2 and MasterDataTool in action
4 January 2024 at 11:14 #51004My question was related to how the retry strategy works. For example, which device (sender or receiver) initiates a retry? I’m not really looking for an answer here, but your statement of a “USB-serial chip that on the receiving side happily ignores any parity errors” got me thinking a bit. My experience is that 90% of code from most projects is (or should be) dedicated to faults and edge cases. This code is usually under-represented since 90% of the coders only want to work on the 10% of code that is NOT faults and edge cases. ?
I’m actually happy that is ignores those parity “errors” when receiving. After all they are not used for error checking in the ML protocol at all. It’s just for signalling start and end of a message. As several parameters of a message are known and consistent we can just estimate when a message starts and ends software wise. That works really well although of course not the cleanest solution. Other alternatives would have been altering the kernel driver of the built-in uart interface for a special 9-bit mode or using a dedicated ML MCU in-between.
If a client receives a message with its address but something is wrong (checksum, unknown command, etc) it will send back an error.
I’ve developed a simple message broker that handles the uart interface and takes care of receiving and sending. You can easily connect to it using redis and don’t have to think about bit banging or parity bits. Just send the message in hex on the one channel and wait for the answer on the other. 😉
4 January 2024 at 11:20 #51005This code is usually under-represented since 90% of the coders only want to work on the 10% of code that is NOT faults and edge cases.
That’s the reason OTA updates should be used straight from the beginning in the development process of every project. 😉 As long as in-field updates are proven and solid you can take care of the edge cases as they are coming in. Not a friend of that either but…
5 January 2024 at 01:26 #51006Count me in as well as interested in this project and already see request has been made to be able to integrate with Home Assistant and were I’ve opted in for Domtoicz, which there are a few script projects already available to communicate for example with the MLG.
Also recalled that there was a previous attempt on ML bridging with open source software project in a previous thread.
9 January 2024 at 09:19 #51007from my Linkplayer experience:
• BS3000 displayed, on activation, that the source was either N.RADIO or N.MUSIC. It then displayed the song and the author via horizontally scrolling displayed; or, the radio station and the song.
• BL3500 only displayed N.MUSIC or N.RADIO; no additional data was displayed.
The scrolling abilities of BS3000 avoided the cut-off titles shown on the BeoCenter 2 video included above.
- AuthorPosts
- You must be logged in to reply to this topic.