No announcement yet.

2008 Holden/Opel Astra Install

  • Filter
  • Time
  • Show
Clear All
new posts

  • 2008 Holden/Opel Astra Install

    Currently at this point:

    Lonngggg way to go.

    Parts list: (will write my thoughts on each once completed)
    Zotac ION N330 (Dual-Core Atom Mini-ITX WiFi GF9400 PCI-X)
    Corsair 2GB
    Intel 80GB X25-M
    Asus Xonar DX 7.1
    Panasonic Slot Load Burner
    HQCT FM Radio
    M4-ATX 250W DC-DC PSU
    BU-353 GPS Receiver
    Fusion Brain v4.0 + Accelerometer, Current Sensor, Photosensor and Thermometer

    Wires smoked so far: 1.

    The plan: Under wraps for at least a day or two.

  • #2
    Last night, I rewrote the FusionUSB.dll so that I can talk to the Fusion Brain through Delphi 6 on Vista x64 - and without any dlls.

    Today I made a little forza-esque accelerometer app:

    and my CANUSB arrived - tomorrow I plan to decipher what I can of the steering wheel controls and screen's cd player text. Anyone know the legality of me publishing my reverse-engineered findings on here?

    Wires smoked so far: 5 + a HQCT... I'm not very good at this.


    • #3
      So work's marching on with the CanUSB. The majority of non-engine related coms in the car is on the medium speed Can, which has a non standard frequency of 95kbps. Lars from Lawicel responded within 15 minutes of my email telling me how to get the CanUSB talking at this rate - so I'm eager to recommend CanUSB to anyone who's willing to listen .

      For anyone else with a GM Opel car (or at least the Corsas, Astras and Vectras) and a CanUSB, the init string I've found most stable for talking to the coms is "0x43:0x7b".

      Steering wheel controls were easy to decipher - I knocked up a quick sniffing program in Delphi with a sinbox, and put all the noisy IDs in to it (with engine off).

      Click to enlarge.

      Once the bus was silent, just hit the buttons and see what popped up.

      I noticed a pattern between all the buttons and knobs on the car that have to communicate their action (ie the buttons on the deck that selects things on the car screen, and the buttons on the steering wheel). They all send a 3 byte command on Can (with varying IDs depending on what device you've touched), which follows this format:

      AA BB CC
      AA = Action
      BB = Button Identifier
      CC = Data
      Action's I've found are 00 (button release), 01 (button pushed), 08 (knob fiddled).
      The identifier is a unique number for the button/knob. For Astra's I've found these IDs so far (along with the can message ID):

      0208 16 Climate Control Knob (is used to navigate the car's screen)
      0208 17 Climate Control Knob Press (it's also a button)
      0201 6A Head Unit Knob (is used to navigate the car's screen)
      0201 6B Head Unit Knob Press (it's also a button)
      0206 81 Steering Wheel Left Top Button
      0206 82 Steering Wheel Left Bottom Button
      0206 83 Steering Wheel Left Knob
      0206 84 Steering Wheel Left Knob Press (it's also a button)
      0206 91 Steering Wheel Right Top Button
      0206 92 Steering Wheel Right Bottom Button
      0206 93 Steering Wheel Right Knob
      0206 E0 Head Unit "Main" Button (navigates to main car screen)
      0206 FF Head Unit "Settings" Button (opens the settings screen)
      Which I believe is a complete list, at least for my car. Some things are surprisingly not broadcast - ie the "Info" button on the head unit which brings up a popup with info on the song - must be sent as a screen display packet (which I am yet to decipher) rather then a button packet. This I like - it means I can probably make popups of my own choosing, rather then only being able to make the current song title/artist etc pop up.

      Also as the steering wheel knobs (which are actually centering switches you can hold down or up) are broadcast as knobs rather than buttons, it means it's impossible to tell the difference between them being flicked repeatedly and them being held down. Minor detail, but interesting to me

      Also the climate control packets (0208) are sent as 6 byte packets with 3 00s following the 3 button bytes.

      The Data byte depends on the button type, and can be read as follows.

      00: Button has been released, data is 00.
      01: Button has been pushed down - data byte increases in every subsequent packet from 00 to FF where it is capped.
      08: Signed byte, indicating how much the knob has been turned. Normally -1 (FF) or 1 (01), but if you spin a knob really quickly you can get it to send a few 02s or higher.

      Anyway, now on to the much harder task of deciphering the screen, which requires multiple packets. So far I've narrowed it down to these packets:

      06C1 08 10 9A 40 00 8D 03 10 20  ??@???? 
      02C1 08 30 00 00 00 00 00 00 00  0???????
      06C1 08 21 00 47 00 68 00 6F 00  !?G?h?o?
      06C1 08 22 73 00 74 00 73 00 20  "s?t?s? 
      06C1 08 23 00 27 00 6E 00 20 00  #?'?n? ?
      06C1 08 24 53 00 74 00 75 00 66  $S?t?u?f
      06C1 08 25 00 66 00 20 00 28 00  %?f? ?(?
      06C1 08 26 46 00 65 00 61 00 74  &F?e?a?t
      06C1 08 27 00 75 00 72 00 69 00  '?u?r?i?
      06C1 08 28 6E 00 67 00 20 00 52  (n?g? ?R
      06C1 08 29 00 6F 00 62 00 20 00  )?o?b? ?
      06C1 08 2A 53 11 1B 27 80 00 20  *S??'?? 
      06C1 08 2B 00 46 00 6F 00 72 00  +?F?o?r?
      06C1 08 2C 20 00 4C 00 61 00 63  , ?L?a?c
      06C1 08 2D 00 6B 00 20 00 4F 00  -?k? ?O?
      06C1 08 2E 66 00 20 00 41 00 20  .f? ?A? 
      06C1 08 2F 00 42 00 65 00 74 00  /?B?e?t?
      06C1 08 20 74 00 65 00 72 00 20   t?e?r? 
      06C1 08 21 00 4E 00 61 00 6D 00  !?N?a?m?
      06C1 08 22 65 12 08 00 44 00 65  "e???D?e
      06C1 08 23 00 61 00 64 00 6D 00  #?a?d?m?
      06C1 08 24 61 00 75 00 35 50 00  $a?u?5P?
      06C1 08 25 07 03 02 01 01 03 01  %???????
      06C1 08 26 01 00 00 00 00 00 00  &???????
      The above sends at least three bits of info to the screen, which appears on three lines. The album name, the artist and the track.

      So far I think I've figured out this much from GM-LAN:

      All coms are done in 8 byte packets - even if this means padding at the end.

      The CD player sends a packet to the screen, describing how much data is to follow.
      The screen sends back a 30 (padded with 7 zeros).
      The CD player then sends the data in 7 byte chunks, preceded by a Packet ID which starts at 21, and increases - wrapping around at 2F downto 20.

      And this of the car:

      All three bits of info, album/artist/track are sent as one large packet of 16 bit unicode.

      Anyway, so that's where I'm at as of today .


      • #4
        Also - and I'm not sure which way this data's being sent (from deck to screen or from screen to deck), but the sound settings are sent as follows:

        ID   AA BB CC DD EE FF FF
        02C1 07 03 A3
        Where AA, BB, CC identify that we're setting sound settings, I don't know what DD means (I can't remember typical values either), EE is the band (see below) and FF is a signed word setting the value. ie -1 for -1dB, 10 for +10dB.

        05 50Hz
        06 Treble
        07 125Hz
        08 Bass
        09 315Hz
        0B 800Hz
        0D 2kHz
        0F 5kHz
        11 12.5kHz
        Which is good - if all goes to plan I'll be able to use the car's screen to adjust the EQ of the Car PC (on top of a finer EQ that I'll adjust for flat response via calibrated microphone). Can map either Bass or 50Hz to the subwoofer control.

        Also - the eq revealed the first interesting thing - all coms are Big endian. Same applies to the unicode above.


        • #5


          • #6
            My findings of the screen:
            ) Full, self running GUI.
            ) It has a built in layout for the board computer which can't be changed, same as the settings screen for the screen - and it manages all navigation of those internally (nothing is sent on CAN).
            ) Supports a huge number of unicode characters, and some escape codes such as \[tl35m (left align at x:35), \[fS_bm (use a small font), where \ is the escape character 0x1B.
            ) Once the controls are sent to the screen, labels/buttons etc, it manages the highlighting of them as you navigate, and sends back a code for which one the user has pressed.
            ) The layouts on the screen are fixed, of which there are about a dozen. Basic menu, Menu with break out box for song info etc.
            ) Self-timed info pop ups are supported, as are ones with pushbuttons - these can be made to appear at any time.

            I'm currently at the point where I can make a basic menu on the screen, and detect when a user pushes a button on it. I've nearly implemented horizontal sliders, for treble/bass controls, and vertical sliders (for eqs) are only a little bit further away again.

            I want to be able to fully emulate the CD players screens, plus a few additional controls (such as Subwoofer volume) - and then from that starting point extend it as required. Making popups for navigation as you approach the street would be great for example.

            Multi packets are simple:
            Sender sends:
            0x1L LL XX XX XX XX XX XX
            Where L is the 12 bit length and X is the first 6 bytes of data.
            Receiver sends:
            0x30 00 00 00 00 00 00 00
            When it's ready to receive
            All packets are 8 bytes, last packet padded if necessary.
            Then the sender just dumps the remaining packets, no confirmation is given (other then the standard CAN ack), but with the first byte of each an ID byte starting from 0x21, and wrapping to 0x20 after 0x2F. I'm yet to test what happens if a packet is missed - if the receiver asks for it again or what, will add to this when I do.


            • #7
              great job

              Did you manage to understand the protocol used to send information to the display?
              I try to control the display for a Corsa. It is a TID (triple info display) but seems to use a similar protocol.
              Here is one message (which displays the radio station)

              6C1 10 3A C0 00 37 03 10 1A
              6C1 21 00 1B 00 5B 00 66 00
              6C1 22 53 00 5F 00 64 00 6D
              6C1 23 00 46 00 4D 00 32 00
              6C1 24 1B 00 5B 00 66 00 53
              6C1 25 00 5F 00 67 00 6D 00
              6C1 26 20 00 4B 00 49 00 53
              6C1 27 00 53 00 20 00 46 00
              6C1 28 4D 00 20 00 00 00 00

              Some of them are characters but the other?
              E.g. what is the meaning of 37 03 10 1A?

              On the other side how did you manage to take control of the display? Did you remove the radio unit?


              • #8
                Hi ghitao, good to see another working down similar lines .

                That seems to be what I've deemed an UpdateData() packet. They need to be sent at least every 5 seconds or so or the screen will blank its song info, assuming it's out of date. As for what it all means - I'm not certain, but I have a bit of it.

                1X: Start long packet
                X03A: Length of the long packet (58 bytes, notice the padding at the end)
                C000: As far as I can determine this is the screen packet type. This one's an "UpdateData" (On mine, they're sent as 4000 - but the rest of the packet seems similar)

                The rest is specific to the packet type.

                37: Length of the string(s) in bytes + the ID bytes (IMPORTANT)
                03: ID Byte 1: I'm yet to determine - may mean "String"
                10: Identifier for the string - 10 means the middle line, normally the title or FM station. 11 is the top line (usually album), 12 bottom line (usually artist).
                1A: Length of the string in characters (16 bit unicode, so double for bytes)
                001B: Escape character
                '[fS_dm': Some kind of font markup - I haven't seen this one myself. Probably makes Big, or small, or bold or something . May be specific to your screen.
                'FM2': The text "FM2"
                001B: Escape character
                '[fS_gm': Another markup. Markups always been with an escape char followed by a [, and end with the letter m.
                ' KISS FM': The text ' KISS FM'

                That first byte must be correct, and isn't always the length of the packet - 3, as sometimes there's bytes at the end of the packet (that I'm yet to figure out).

                It looks like your markups will be different to the CIDs.

                Anyway, hope this helps .


                • #9
                  I've been working on a few new menus..

                  I still haven't got the music icon working at the top left, but I'll get there.


                  • #10
                    Excellent progress Mania, it looks good. Thanks for mentioning CanUSB, I hadn't head of them before. I'm in the US and have a 2008 Saturn Astra, I'm not sure exactly what you're trying to achieve but it looks like you want to keep the stock display? I'm looking to replace the stock display with a liliput.

                    I'd love to keep the stock headunit but I'm not sure whether that will be possible or not as the US version is not AUX-In compatible, that interface has been reserved for onstar, so if I can modify that to accept an auxillary then I will keep the stock, otherwise it will need to be replaced.

                    I'm hoping I can use the CANUSB to accept the signals from the steering wheel controls and use them as an input on the PC.

                    subscribed to thread!
                    2008 Saturn Astra XR5
                    Progress: 0%...


                    • #11
                      Hi Aaron, SWC -> computer is easy using a CanUSB. I'd be happy to provide you with a program which controls Winamp via them.. or if you prefer, make the SWC appear as keystrokes on the computer for you to interpret how you like.

                      As for the thread, it hasn't progressed much since my last update. Works well controlling winamp on the laptop, but I haven't had a minute spare to work on it since getting it to that point... hoping to find free time before Easter.


                      • #12
                        Hello Mania,
                        any development on this project? Looks very promising.
                        I understand you sniffed all this on the medium speed can. The steering controls, though, are attached to the instrument module which is on low speed can. Im aiming to find the gateway ID between the two networks.
                        Any chance u can link to low speed can and scan again?
                        Thx in advance


                        • #13
                          Hi ma_jk, sorry I've been away lately - and have had no free time at all =(.

                          I'm confused though, and my knowledge of CAN isn't the best.. but afaik the steering wheel controls are most definitely (on the Astra H) MSCAN. I've given the details above .. unless you mean they'll appear on both networks?


                          • #14
                            Yes Mania, i was hoping exactly that: see the messages on both network, for these particular messages.
                            And id like to understand how gateways works on the IDs.


                            • #15
                              I got the news!
                              look here: