As the project has come quite far already, this is going to be a bit of a long post with lots of visuals.
So this initially started with playing around with a project called open auto, its an open source version of android auto that can run on a raspberry pi. I installed this into my jaguar XF, in a rather rudimentary way, but it worked well, just looked a bit of an eye sore.
It stayed like this for a while, my original idea was to replace the factory screen with the raspberry pi screens, however the factory screen doesn’t actually communicate on canbus, it sends messages through the MOST bus so the integrated audo module, which then translates to CAN. So whilst this isn’t impossible, it would require building a can firewall to avoid message collision/race condition. Then someone online gave me the brainwave idea that the physical control panel below the screen is a perfect spot for the screen to go.
Through various sessions of canbus sniffing or more commonly known as canbus hacking I had already gotten most of the required messages from this panel. To be 100% sure I picked up a second hand panel from ebay for around £15, and set up a test rig, using this rig I began decoding the button presses. This part was quite easy, what was a bit more trick was getting the inputs to the panel, each of the bottom row of buttons have an led indicator to show when they are active (heated rear screen, front screen etc), whilst you code code some logic to allow the system to ‘guess’ that the function is on when the button is pressed and the off when pressed again, this wouldnt be too accurate. The car automatically turns these on on startup when the temperature is below a certain point, so that would throw off the ‘guessing’. Attempting to sniff the responses is also tricky, using cansniffer theres around 20 ids that are present when sniffing as they are constantly changing. Getting the button press is easy, but the response gets lost in all the noise.
So using NodeJS I created a program that logs every message and every byte value in the message. When the new messages lowers to around 3, you then press the button. The program then outputs to a json file any new byte values it hasnt seen since starting the program. Using this I managed to get all the required messages, and then had a bit of fun with the test panel :).
At this point the panel was completely decoded, so work began on getting that app running that can replace the panel. I wont go into too much detail here, I will do a seperate post that covers backend/frontend, but the packages used were
So, with it all developed (I will go into more detail seperately, this post is already pretty long) we end up with this
I’m no graphic designer,I’m a typical backend kind of guy, so the visual need more work. but it does the job for now. More to come in the next post, as its now integrated to open auto pro, installed and working a dream.