QNX Development for CIC

ccfj1

Private
Jul 26, 2018
45
41
0
UK
Ride
bmw e92 n55 335i Sport manual
The cic will take a hdd in the usb, but be careful of the power requirements.

You can connect to both buss and pro via telnet and ftp.

What sort of customization ? like any bmw system its limited.

2: normally i'd say, cas and jbbr, however im working on a bench emulator and that seems to be working perfectly, i need to sort a couple of thinks, but i will post up when im done, basically, a ardunio nano, a canbus shiled, some wires and a canbus sketch.

There is not much you can do to the cic-b TBH, you cant even update the maps on the bench like the cic-p
 
  • Like
Reactions: aus335iguy

madac1980

New Member
Jan 1, 2020
3
0
0
Ride
bmw
The cic will take a hdd in the usb, but be careful of the power requirements.

You can connect to both buss and pro via telnet and ftp.

What sort of customization ? like any bmw system its limited.

2: normally i'd say, cas and jbbr, however im working on a bench emulator and that seems to be working perfectly, i need to sort a couple of thinks, but i will post up when im done, basically, a ardunio nano, a canbus shiled, some wires and a canbus sketch.

There is not much you can do to the cic-b TBH, you cant even update the maps on the bench like the cic-p
I would be interested so see how I can control it, attach to it and display some telematics info like oil, rpm, gear etc..
Maybe you could post some images of your setup and give some details on parts needed. Today the CICs are quite cheap so it could be like a hobby for me.
 

jockyw2001

Lurker
Aug 4, 2020
21
5
0
2: normally i'd say, cas and jbbr, however im working on a bench emulator and that seems to be working perfectly, i need to sort a couple of thinks, but i will post up when im done, basically, a ardunio nano, a canbus shiled, some wires and a canbus sketch.

There is not much you can do to the cic-b TBH, you cant even update the maps on the bench like the cic-p
Hi there, I posted in your test bench setup thread, but this thread seems more appropriate. A while ago I had set up a test bench for my 2011 cic-p consisting of a cas (luckily there is no need for a key) a jbe and a cid. I use following interfaces with the cic: ethernet, obd2 (elm327 bt with replacement firmware), serial & jtag via the edge connector. I had to use topjtag sw for unbricking my unit after doing a few rough cloning experiments :)

What's missing in my configuration is an iDrive controller. I was thinking of emulating it using a script which sends messages via ipc/ch4

Would that be feasible? Someone already done this?

Best,
JockyW
 

jockyw2001

Lurker
Aug 4, 2020
21
5
0
What's missing in my configuration is an iDrive controller. I was thinking of emulating it using a script which sends messages via ipc/ch4

Would that be feasible? Someone already done this?
I tried this in a telnet session:
Code:
echo -n -e \\x01\\x01\\x13\\x00\\x00\\x15\\x0C\\x0C\\x02\\x0C\\x00\\x08\\x00\\xFF\\x00\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\xFA\\xDE >  /dev/ipc/ioc/ch4

echo -n -e \\x02\\x01\\x13\\x00\\x00\\x15\\x0C\\x0C\\x02\\x0C\\x00\\x08\\x00\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xFA\\xDE >  /dev/ipc/ioc/ch4

After the first command, which corresponds to a button 5 is pressed message sent by the iDrive controller, the MOST switches off (no more red blinking). After the second message, which corresponds to button 5 is released, the CID display turns off. After a few minuted the unit reboots.

It could be the driver detects the first byte (the message sequence number) is out of sequence and raises an alarm.

Anybody with any ideas how to emulate an iDrive controller. Perhaps it is possible to send messages via OBD2 using tool32 or inpa.
 

NoQuarter

Major
Nov 24, 2017
1,605
1,003
0
Indiana, USA
Ride
Z4 35is, 535xi, X5 35i
The idrive controller is pretty easy to emulate. That info should be available in the Google.

I'll see what I can track down in my old work folders. It has been a few years....
 
  • Like
Reactions: aus335iguy

NoQuarter

Major
Nov 24, 2017
1,605
1,003
0
Indiana, USA
Ride
Z4 35is, 535xi, X5 35i
Here is my code from 2012

miDrive was a personal project to display directly to the idrive screen and use the iDrive knob to select menu functions, etc. The intent of this code was to create a macro type process that would change options when the steering wheel button was pressed and display some basic info such as oil temp, etc.

snippit below. full file is attached

char miDrive_VERSION[ ] = "0.6.4";

/*
Version notes:

-Adding iDrive controller for selecting which screen to view.
-Adding EEPROM preferences
-Adding CAN Bus hex IDs
-Adding canbus interrupt testing. Not using it in this implementation
-Adding testing multiple CAN Bus buffers and filters
-Adding miDrive display screen and menu

miDrive v.04
- Adding change menu direction for left/right

miDrive v.06
- Adapted for 2 CAN networks k_can and pt_can
- Uses CAN2 library which provides for both CANbus controllers on pins 10&2 and 9&3
- 8/5/2012 v06 tested successfully with iDrive knob menu selection and RPM display

miDrive v.06.2
- Changing OBD function calls to library
- Changing to miDrive library
- Only ait temp, RPM, IAT, timing are returning values

miDrive v.06.3
- **need to test CAN2 filters

v.06.4
-CAN RPM, Water Temo, and Oil Temp correct
 

Attachments

  • miDrive v06.5.txt
    28 KB · Views: 47
  • Like
Reactions: AstroZ

NoQuarter

Major
Nov 24, 2017
1,605
1,003
0
Indiana, USA
Ride
Z4 35is, 535xi, X5 35i
some more notes

idrive knob turned right. 1 row per right click. Byte 4 counts up
ID 264, E1, FD, A6, B, 80, 1E, 0, E1
ID 264, E1, FD, AB, C, 80, 1E, FF, FF
ID 264, E1, FD, AC, D, 80, 1E, FF, E1
ID 264, E1, FD, AE, E, 80, 1E, FF, FF
ID 264, E1, FD, B0, F, 80, 1E, 20, C2
ID 264, E1, FD, B1, 10, 80, 1E, 0, 0
ID 264, E1, FD, B4, 11, 80, 1E, 70, 3
ID 264, E1, FD, B5, 12, 80, 1E, 70, F2
ID 264, E1, FD, B6, 13, 80, 1E, FF, FF


turned left. Byte 3 counts down
ID 264, E1, FD, D6, 12, 80, 1E, FC, FF
ID 264, E1, FD, DA, 11, 80, 1E, 70, 13
ID 264, E1, FD, DB, 10, 80, 1E, 0, 0
ID 264, E1, FD, DD, F, 80, 1E, FF, FF
ID 264, E1, FD, DE, E, 80, 1E, 0, FB
ID 264, E1, FD, E0, D, 80, 1E, 0, 0
ID 264, E1, FD, E1, C, 80, 1E, F4, 0
ID 264, E1, FD, E2, B, 80, 1E, FF, FF
ID 264, E1, FD, E4, A, 80, 1E, FF, 2


knob pressed right 1 time
ID 267, E1, FD, A1, 21, DD, 0, F4, 0
ID 267, E1, FD, A1, 21, DD, 0, 0, 1
ID 267, E1, FD, A1, 21, DD, 0, FF, FF
ID 267, E1, FD, A2, 0, DD, 0, E0, 83
ID 267, E1, FD, A2, 0, DD, 0, F4, 0
ID 267, E1, FD, A2, 0, DD, 0, 0, 83
and again
ID 267, E1, FD, B2, 21, DD, 0, FF, FF 21 is when the knob is helf for a short time. Turns to 22 when held for a long time.
ID 267, E1, FD, B2, 21, DD, 0, FF, 2
ID 267, E1, FD, B3, 0, DD, 0, 2D, 84 these 3 are when the knob is released
ID 267, E1, FD, B3, 0, DD, 0, FF, 2
ID 267, E1, FD, B3, 0, DD, 0, 0, 52

press and hold to right
Starting...
ID 267, E1, FD, A, 21, DD, 0, F4, 0
ID 267, E1, FD, A, 21, DD, 0, 0, 0
ID 267, E1, FD, A, 21, DD, 0, FF, FF
ID 267, E1, FD, A, 21, DD, 0, FF, FF
ID 267, E1, FD, A, 21, DD, 0, FF, FF
ID 267, E1, FD, A, 21, DD, 0, FF, FF
ID 267, E1, FD, A, 21, DD, 0, FF, FF
ID 267, E1, FD, A, 21, DD, 0, 0, 0
ID 267, E1, FD, A, 21, DD, 0, F4, 0
ID 267, E1, FD, A, 21, DD, 0, 0, 0
ID 267, E1, FD, C, 22, DD, 0, F4, 0
ID 267, E1, FD, C, 22, DD, 0, 0, 0
ID 267, E1, FD, C, 22, DD, 0, FF, 0
ID 267, E1, FD, C, 22, DD, 0, FF, FF
ID 267, E1, FD, C, 22, DD, 0, 0, FF
ID 267, E1, FD, C, 22, DD, 0, FF, FF
ID 267, E1, FD, C, 22, DD, 0, 0, FF
ID 267, E1, FD, C, 22, DD, 0, 40, E2
ID 267, E1, FD, C, 22, DD, 0, 90, 23
ID 267, E1, FD, C, 22, DD, 0, E0, 73
ID 267, E1, FD, C, 22, DD, 0, 40, C2
ID 267, E1, FD, C, 22, DD, 0, 90, 33
ID 267, E1, FD, C, 22, DD, 0, E0, 73
ID 267, E1, FD, C, 22, DD, 0, 40, E2
ID 267, E1, FD, C, 22, DD, 0, FF, FF
ID 267, E1, FD, C, 22, DD, 0, E0, 73
ID 267, E1, FD, C, 22, DD, 0, 40, D2
ID 267, E1, FD, D, 0, DD, 0, FC, D
ID 267, E1, FD, D, 0, DD, 0, E0, 73
ID 267, E1, FD, D, 0, DD, 0, F4, 0

press and hold to left
Starting...
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1B, 81, DD, 0, 2D, 84
ID 267, E1, FD, 1C, 82, DD, 0, 2D, 84
ID 267, E1, FD, 1C, 82, DD, 0, 2D, 84
ID 267, E1, FD, 1C, 82, DD, 0, 2D, 84
ID 267, E1, FD, 1C, 82, DD, 0, 2D, 84
ID 267, E1, FD, 1C, 82, DD, 0, 2D, 84
ID 267, E1, FD, 1C, 82, DD, 0, F, 0
ID 267, E1, FD, 1C, 82, DD, 0, F4, 0
ID 267, E1, FD, 1C, 82, DD, 0, F1, 0
ID 267, E1, FD, 1C, 82, DD, 0, F4, 0
ID 267, E1, FD, 1C, 82, DD, 0, F1, 0
ID 267, E1, FD, 1C, 82, DD, 0, F4, 0
ID 267, E1, FD, 1C, 82, DD, 0, F1, 0
ID 267, E1, FD, 1C, 82, DD, 0, F4, 0
ID 267, E1, FD, 1C, 82, DD, 0, 0, 1
ID 267, E1, FD, 1C, 82, DD, 0, F4, 0
ID 267, E1, FD, 1E, 0, DD, 0, FC, F
ID 267, E1, FD, 1E, 0, DD, 0, 90, 23
ID 267, E1, FD, 1E, 0, DD, 0, FC, 12

press and hold knob down
Starting...
ID 267, E1, FD, 41, 1, DE, 1, FF, FF short press
ID 267, E1, FD, 41, 1, DE, 1, 0, 71
ID 267, E1, FD, 42, 0, DE, 1, FF, 2 release
ID 267, E1, FD, 42, 0, DE, 1, FF, FF
ID 267, E1, FD, 42, 0, DE, 1, 40, F2
ID 267, E1, FD, 4D, 1, DE, 1, FC, 11 start press
ID 267, E1, FD, 4D, 1, DE, 1, FC, 12
ID 267, E1, FD, 4D, 1, DE, 1, FC, 13
ID 267, E1, FD, 4D, 1, DE, 1, FC, 5
ID 267, E1, FD, 4D, 1, DE, 1, FC, 6
ID 267, E1, FD, 4D, 1, DE, 1, 0, 7
ID 267, E1, FD, 4D, 1, DE, 1, F0, FF
ID 267, E1, FD, 4D, 1, DE, 1, 0, 9
ID 267, E1, FD, 4D, 1, DE, 1, FF, FF
ID 267, E1, FD, 4D, 1, DE, 1, 0, FF
ID 267, E1, FD, 4E, 2, DE, 1, FF, FF long press
ID 267, E1, FD, 4E, 2, DE, 1, 0, D
ID 267, E1, FD, 4E, 2, DE, 1, FC, E
ID 267, E1, FD, 4E, 2, DE, 1, 0, F
ID 267, E1, FD, 4E, 2, DE, 1, FC, 10
ID 267, E1, FD, 4E, 2, DE, 1, 0, 11
ID 267, E1, FD, 4E, 2, DE, 1, FC, 12
ID 267, E1, FD, 4E, 2, DE, 1, 0, 13
ID 267, E1, FD, 4E, 2, DE, 1, FF, FF
ID 267, E1, FD, 4E, 2, DE, 1, FF, FF
ID 267, E1, FD, 4E, 2, DE, 1, FF, FF
ID 267, E1, FD, 4E, 2, DE, 1, 0, 8
ID 267, E1, FD, 4E, 2, DE, 1, FC, 9
ID 267, E1, FD, 4E, 2, DE, 1, 0, A
ID 267, E1, FD, 4E, 2, DE, 1, FC, B
ID 267, E1, FD, 4E, 2, DE, 1, 0, C
ID 267, E1, FD, 4E, 2, DE, 1, 2D, 84
ID 267, E1, FD, 4E, 2, DE, 1, 2D, 84
ID 267, E1, FD, 4E, 2, DE, 1, FF, FF
ID 267, E1, FD, 4E, 2, DE, 1, 2D, 84
ID 267, E1, FD, 4E, 2, DE, 1, 2D, 84
ID 267, E1, FD, 4E, 2, DE, 1, 2D, 84
ID 267, E1, FD, 4E, 2, DE, 1, 2D, 84
ID 267, E1, FD, 4E, 2, DE, 1, 2D, 84
ID 267, E1, FD, 51, 0, DE, 1, 90, F4 releease
ID 267, E1, FD, 51, 0, DE, 1, 0, 0
ID 267, E1, FD, 51, 0, DE, 1, 40, F9
 

AstroZ

Lurker
Apr 17, 2021
12
1
0
Here is my code from 2012

miDrive was a personal project to display directly to the idrive screen and use the iDrive knob to select menu functions, etc. The intent of this code was to create a macro type process that would change options when the steering wheel button was pressed and display some basic info such as oil temp, etc.

snippit below. full file is attached

char miDrive_VERSION[ ] = "0.6.4";

/*
Version notes:

-Adding iDrive controller for selecting which screen to view.
-Adding EEPROM preferences
-Adding CAN Bus hex IDs
-Adding canbus interrupt testing. Not using it in this implementation
-Adding testing multiple CAN Bus buffers and filters
-Adding miDrive display screen and menu

miDrive v.04
- Adding change menu direction for left/right

miDrive v.06
- Adapted for 2 CAN networks k_can and pt_can
- Uses CAN2 library which provides for both CANbus controllers on pins 10&2 and 9&3
- 8/5/2012 v06 tested successfully with iDrive knob menu selection and RPM display

miDrive v.06.2
- Changing OBD function calls to library
- Changing to miDrive library
- Only ait temp, RPM, IAT, timing are returning values

miDrive v.06.3
- **need to test CAN2 filters

v.06.4
-CAN RPM, Water Temo, and Oil Temp correct

Wow this is really cool! How do we build and run this code? seems like a complete but not too complex app. Thanks for sharing.

BTW there seems to be some code missing can you also share the c file and headers that go with EEPROM.h, Tellymate.h, miDrive_CAN.h ?
 

NoQuarter

Major
Nov 24, 2017
1,605
1,003
0
Indiana, USA
Ride
Z4 35is, 535xi, X5 35i
Wow this is really cool! How do we build and run this code? seems like a complete but not too complex app. Thanks for sharing.

BTW there seems to be some code missing can you also share the c file and headers that go with EEPROM.h, Tellymate.h, miDrive_CAN.h ?
I'll track it down. Feel free to PM and remind me to get it done.
 

AstroZ

Lurker
Apr 17, 2021
12
1
0
Where in the CIC would this information appear ? I imagine as a banner similar to alerts ?
I was wondering the same thing :grimacing:. if you look at the code it gives some hints:

Code:
...
Tellymate miVideo(57600);
...
    /*     video     */
    miVideo.init();
    delay(900);
    miVideo.clearscreen();
    goto_menu(currentMenu);
...
//menu
miVideo.cursorto( 0, 20 );
draw_line(38);

miVideo.cursorto( 1, 21 );
miVideo.print("Normal    Sport    Track   miDrive Dbg"); 
...

The clearscreen() says to me that this is clearing the screen fully and printing a custom menu that takes over the whole screen. it is also taking over input from the controller to control the custom menu and has a persistence layer (EEPROM.h).

I'll track it down. Feel free to PM and remind me to get it done.
definitely, looking forward to seeing the rest of the code.

v impressive as this code was developed only ~3-4 years after the cic was released!
 

NoQuarter

Major
Nov 24, 2017
1,605
1,003
0
Indiana, USA
Ride
Z4 35is, 535xi, X5 35i
I was wondering the same thing :grimacing:. if you look at the code it gives some hints:

Code:
...
Tellymate miVideo(57600);
...
    /*     video     */
    miVideo.init();
    delay(900);
    miVideo.clearscreen();
    goto_menu(currentMenu);
...
//menu
miVideo.cursorto( 0, 20 );
draw_line(38);

miVideo.cursorto( 1, 21 );
miVideo.print("Normal    Sport    Track   miDrive Dbg");
...

The clearscreen() says to me that this is clearing the screen fully and printing a custom menu that takes over the whole screen. it is also taking over input from the controller to control the custom menu and has a persistence layer (EEPROM.h).


definitely, looking forward to seeing the rest of the code.

v impressive as this code was developed only ~3-4 years after the cic was released!

Sorry to say it is not nearly as cool as you think. For the video, I was using the input to my night vision module which was simple RCA. The Tellymate library let me create a very simple video input signal that resembled an old Atari game :grin:



The menu items was selected via the IDrive controller and the display changed as recalled via the EEPROM as you described.

Not very useful compared to options available now, but I do think the "macro" idea is still relevant. Select sport and seats adjust, transmission mode changes, HUD changes, iDrive screen changes to MHD gauges, etc

I attached the CAN and EEPROM libraries. I can't find the tellymate library for some reason but it is not relevant anyway - just some old school television video code

Jim
 

Attachments

  • CAN2.h.txt
    7.3 KB · Views: 8
  • EEPROM.h.txt
    998 bytes · Views: 5