Hello. I wrote a simple program for my arduino to read messages from my car's can bus, print them to the serial, and read from serial and send them to the can bus. Created simple android application so now it's easier to reverse engineer can bus with graphical interface.
I've already found interesting can bus id's, but the problem is it's not that simple to mess around with my car and I want to know if it's even possible. For example this message:
0x81C030A2 [8] C0 5B 40 1 89 3 14 0
is from window switches controller. Third byte tells what to do with front right window, 40 - nothing, 41 - roll up, 44 - roll down.
It's being sent continuously (even though nothing is touched), first byte always changing in every message, it's order: 0x00, 0x40, 0x80, 0xC0
Now if I send that message with third byte set to 41 or 44 at 50ms interval, window just rapidly roll and stop, but not rolling continuously. If I send that message faster, let's say at 1ms interval, window keeps rolling for longer period of time, but still, it stops for a few milliseconds and then again continues rolling.
So if I understand correctly, there are two messages on the bus, with same ID and window rolling mechanism interprets one message from my arduino to roll the window, and then comes message from window switch controller telling to do nothing with that window, since switch is physically not touched and this situation is probably causing such behavior, am I right?
As I understand, there's no way to catch that broadcasted message from switches controller and prevent it from reaching window rolling mechanism, so is there any way to override window switch controller message? Or is there anything else I can do? How do diagnostics software roll windows and activate all other devices? Do they use some special diagnostics messages?