UPDATE: Leigh Oliver has shared more details surrounding the process of reverse engineering the ICM2 unit, including imagery of the breadboard wiring, as well as an upcoming upgrade that will "allow for a less invasive install procedure by plugging directly into the intended ribbon cable."
The original article continues below.
Leigh Oliver has published a unique Arduino graphics library: It's designed to drive the instrument panel of a Saab 9-3 Gen 2, following an effort to reverse engineer its operation.
"I've always loved the green and black style of the instruments in my Saab 9-3 Gen2, and I've been slowly trying to hack various aspects of the infotainment system," Oliver writes in a Reddit post. "Here is one example! This module is called 'ICM2,' the Infotainment Control Module (2), and it is basically a glorified control panel that talks to all the other modules (CD Player, Amplifiers, Radio, etc) in the car and tells them what to do.
"Turns out, the display uses a very simple I2C interface! That was a nice surprise, I was expecting an 8-bit parallel interface or similar."
Oliver reverse engineered the ICM2's operation using a BusPirate v3, initially using scripts but switching to a C library — owing, Oliver explains, to the BusPirate being too slow in scripted operation. A GitHub repository, published under the GNU General Public License 3, contains copies of the scripts, programs, and schematics created during the reverse engineering process.
The final outcome, meanwhile, is a version of the Adafruit_GFX Arduino library, modified for compatibility with the ICM2 and allowing it to be driven from any Arduino-compatible microcontroller. Oliver does note some issues, however, including a lack of scrolling and framebuffer support and an inability to address the display's very top row.
The library, published under the same GNU General Public License 3, is available on GitHub.