I thought that I would also be able to include some of the immo communication stuff (request / unlock), but that will take longer and I have to get help in another thread.
But what I can say for now:
The ABS module CAN messages that the ECU expects:
ID=1CA006/14A006 (first 2 wheels and second 2 wheels) sent every 10ms, 8 bytes of data in each message, 2 times 4 bytes for one wheel
The 4 bytes for each wheel: byte0 - bits #7-#4 - cyclic counter 0..3, bit #3 - ready bit (set to 1), the rest of byte0 together with bytes1, 2, 3 is the impulse counter (with yet unclear to me scale, sorry) for the wheel that wraps at 0x04000000. Example messages:
01CA006 [8] 0B 80 92 25 0A F3 81 91
014A006 [8] 0B B5 2D 87 0B 2E 28 C9
01CA006 [8] 1B 81 A9 31 1A F4 98 86
014A006 [8] 1B B6 44 5B 1B 2F 3F B7
The second message that the ECU expects from the ABS module is (I guess) the ASR/MSR info, the samples I got are of this pattern:
210A006 [8] FF 07 FF 00 00 00 00 00
where the second data byte is a 00..0F cyclic counter. The reception of this message can be switched off by turning off bits #15 and #6 at the same time in CWKONFZ1. If you want to send it nevertheless, do it every 10ms.
Then from the body computer the ECU expects the following:
every 100ms: ID=A18A000 with 8 bytes of data, where only these matter for the ECU:
byte1.1 - status of the power steering mode / sport mode button
byte3 - ambient temperature with conversion (x+16)*2/3 to get the normal ECU temperature variable that converts as all other short range ones (x*3/4 - 48).
byte5 - fuel level in %, values 0..100 decimal
byte6.5 - handbrake status (1 on, 0 off)
On some ECUs with some CWs different and where there are both power steering button and sport mode button things are a bit different, namely byte4-bits3-5 indicate mode number, but I do not know how this translates to practice (dashboard button arrangement). Also byte4.0 is fuel level indicator error flag, leave at 0. The frame has other information, but the ECU does not care. This message cannot be cleanly disabled.
The second body computer message is ID=810A000 with 4 bytes of data, sent every 10ms. byte1 has some flags, all of the time I see this byte it is 0xFF (ECU does read some of these bits). The third byte2 is a 0..3 cyclic counter on bits 2 and 3, and bits 5 and 6 are respectively light brake press and hard brake press (the latter has the former on too). Sample frames:
0810A000 [4] 00 FF 60 00
0810A000 [4] 00 FF 64 00
0810A000 [4] 00 FF 68 00
This message cannot be cleanly disabled either.
The last body computer message is ID=C24A000 sent every 2 seconds, with only the first byte0 indicating wheel circumference (with unknown to me conversion). The reception of this message can be killed by turning of CWKONFZ1.5, in which case a default value from the flash will be used.
All this keeps the ECU happy about ABS and body modules communication, no DTCs.
Then, during the initialisation the ECU exchanges two messages with the body computer to sort out the immo, ECU sends ID=010A001 with 7 bytes (0 - request code, 4 bytes of crypto-like code, 2 bytes of some other stuff (checksum?)), the body replies with ID=010A000 with 7 data bytes, where the first one is the result/status. Don't yet know more. So far I killed the immo brutally, trying to dissect the code for it now.