Return to Home Page

Now Playing Screen

The Now Playing Screen I implemented shows the track information listed from DBus (which comes from AVRCP Bluetooth)

Now Playing Screen

The design of the screen is meant to mimic the BMW Navigation Radio information screen:

https://github.com/piersholt/wilhelm-docs/blob/master/radio/23/digital_old.jpg

Nav Module Title Layout

Data Sources

The Now Playing screen displays data from the global radioTextFieldsFlow. This flow has t0-t6, corresponding to the factory radio title layouts.

BmwSingleLineHeader("Now Playing")

val header: State<RadioTextFields> =
    NowPlayingTextFieldFlows.radioTextFieldsFlow.collectAsState(RadioTextFields())

BmwFullScreenTrackInfoHeader(
    t0 = header.value.t0,
    t1 = header.value.t1,
    t2 = header.value.t2,
    t3 = header.value.t3,
    t4 = header.value.t4,
    t5 = header.value.t5,
    t6 = header.value.t6,
)

This flow is populated by two services, the RadioTextFieldReaderService and the DbusTrackInfoPrinterService:

The last-recieved information is what’s written to the screen, so it’s handy to use the Car Settings page to turn off the service you don’t want.

flowchart TD subgraph Car BM54Radio["BM54 Radio"] end subgraph Phone BtPhone["Bluetooth Phone"] end subgraph RpiLinux BlueZ["BlueZ"] subgraph HMI DBusTrackInfoPrinter["DBus Track Info Printer"] RadioTextFieldReaderService["`Radio Text Field Reader Service`"] radioTextFieldsFlow[("`_RadioTextFields_ radioTextFieldsFlow`")] nowPlayingScreen["Now Playing Screen"] DBusTrackInfoPrinter --> radioTextFieldsFlow RadioTextFieldReaderService --> radioTextFieldsFlow radioTextFieldsFlow --> nowPlayingScreen end BlueZ --> DBusTrackInfoPrinter end BtPhone --> BlueZ BM54Radio --> RadioTextFieldReaderService

Other Track Info Printers

Before I added the HMI to the project, the original intent was to run it headless, with the track info being printed to messages that went to the BMBT screen. This is the responsibility of the ScreenTrackInfoPrinter

Audio Focus

The Audio Focus chooser on the NowPlaying Screen looks like this:

Audio Focus Pane

It is used to send a message to request which audio source from the pinout below you’d like to use:

BM53 Pinout

In my car, I have the Aux wired up to an aux port in the center console. My BM53 is new enough that I can use the Nav/TV input as a secondary aux. I tried using the VCR input but that didn’t work on my tuner. When you set the input to Nav/Tv, pressing the mode button doesn’t cycle the sources, you have to send a message to go back to Aux, and then the source cycling works again.

Return to Top