Thursday, December 23, 2010

Untested clarification of the Pontiac G8 DIC text API

Had some spare time, did some digging into some of the DIC text control packets.

The following is just observation based. I have yet to code up something to test the observations.

Arbitration ID 0x183 : Arb_Text_Display_Status
Packet Size: 4 bytes
29bit CAN header

Frames DIC text packets.
Sent from ECU 0x060 at priority 4 (DIC?)

Need to experiment to see if DIC sends as response to  a 0x185 packet.

CAN Header: 0x10306060

Header Framing Packet:
0x00 0x91 0x00 0x01
Tail Framing Packet:
0x00 0x91 0x00 0x07

Byte 2 composition:

1001 0xxx

xxx is the message sequence number. Maps to 0x185 Disp parameter sequence. Valid values from 001 to 111

Other packets observed:

0x01 0x00 0x00 0x00 <-  Unknown function, seen near power down
0x00 0xC0 0x00 0x00 <- Unknown function
0x00 0x80 0x00 0x00 <- Unknown function
0x00 0x93 0x00 0x09 <- Seen early. Unknown 0x09 in byte 4.


Arbitration ID 0x185 : Arb_Text_Req_Set_Disp_Parameters
Packet Size: 6 bytes
29bit CAN header

Precedes DIC text packets to control display parameters.
Send from ECU 0x080 at priority 4 (Radio?)

Only scroll arrow control has been isolated at this time.

CAN Header: 0x1030A080

Packet formatting

0x00 0x04 0x49 0x40 0x00 0x03

Byte 3-4
0100 1001 0100 0000

Scroll Arrow Enable Bit - Mutually exclusive of No Scroll Arrow bit
No Scroll Arrow Bit - Mutually exclusive of Scroll Arrow Enable bit

Sequence Number. Sets sequence for 0x183 display status header and footer. Must match.

Byte 1: Unknown Function. Seen the following bytes (0x00, 0x02, 0x03, 0xC2, 0x28)
     0x00 used in transmitting arrow parameter packets
Byte 2: Always observed as 0x00
Byte 3-4: As above.
Byte 5: Always observed as 0x00
Byte 6: Always observed as 0x03


Arbitration ID 0x186: Arb_Text_Req_Set_Display_Text
Packet Size: 8 bytes.
29bit CAN header

Sent from ECU 0x080 at priority 4 (RADIO?)

Transmits packets to DIC for display. Framed by 0x183 framing packets and format controlled with 0x185 packet.

Text is ASCII encoded. Text is terminated by 0x04. Remainder of packet is null filled. (0x00)

1-3 packets can form the DIC text update.  Length of string will determine packet count. 14 bytes is practical limit.

CAN Header:

Format for Packet 1: 0x1030C080

0x45 0xYY 0xZZ Data Data Data Data Data

YY = Packet count. 0x01 for 1 text packet. 0x02 for 2 packet text. 0x03 for 3 packet text.
ZZ = Scroll arrow to display (0x01 is both up/down, others TBD) If control parameter No scroll arrow bit set, ZZ will be first ASCII encoded packet.
Data = ASCII encoded text string. Terminate by 0x04 and null pad packet to 8 bytes.

Format for Packet 2:

0x44 0x02 DATA DATA DATA DATA DATA
Data = ASCII encoded text string. Terminate by 0x04 and null pad packet to 8 bytes.

Format for Packet 3:

0x44 0x03 DATA DATA DATA DATA DATA
Data = ASCII encoded text string. Terminate by 0x04 and null pad packet to 8 bytes.


Example SequencesHEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 91 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 34 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 91 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | 00 04 48 80 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 92 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 34 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 92 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | C2 04 48 C0 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 93 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 35 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 93 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | C2 04 49 00 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 94 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 36 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 94 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | 28 04 49 40 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 95 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 37 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 95 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | C2 04 49 80 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 96 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 38 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 96 00 07   

HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 91 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 34 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 91 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | 00 04 48 80 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 92 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 34 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 92 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | C2 04 48 C0 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 93 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 35 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 93 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | C2 04 49 00 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 94 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 36 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 94 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | 28 04 49 40 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 95 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 37 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 95 00 07   
HEADER:0x1030A080 Pri:4 Arb:185 Dest:80 | C2 04 49 80 00 03 
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 96 00 01   
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 45 02 00 4D 50 33 20 54
HEADER:0x1030C080 Pri:4 Arb:186 Dest:80 | 44 02 72 6B 38 04 00 00
HEADER:0x10306060 Pri:4 Arb:183 Dest:60 | 00 96 00 07   

4 comments:

  1. pretty interesting analysis. Im working on a Opel GMLAN, 11bit CAN, completely different story :(

    ReplyDelete
  2. You have logs? Send em my way. You found the DIC arb id's of interest? I might have them somewhere..

    ReplyDelete
  3. Greets.
    Arb id is 6c1, with multiline frames (as in the post on mp3car).
    TID works fine, it sends back FC frames, but it just doesnt show up anything even if the frame sequence contains valid data.
    It seems to react only to something like 0x41 0x00 0x04 0x03 0x10 0x90 0x14 0x00, where 0x90 blanks the display.
    any help is appreciated :)

    ReplyDelete
  4. Arb_Text_Req_Set_Display_Text
    Byte0 bit7 length 3 = Requesting Device: 1=telematics, 2=Head, 3= Remote Receiver, 4= Rear Seat Entertainment, 5=Auxiliary,6=Accomodated Device Gateway, 7=Cluster
    bit4 length 4 = Target Display: 1=Infotainment Display, 2=Head Up Display, 3= Cluster Display, 4=Cockpit Display, 5=Rear Seat Display, 6=Auxiliary Display, 7=Navigation Display
    bit0 length 1 = First Frame Active: 0=false, 1=true
    Byte1 bit7 length 8 = Frame Sequence Number
    Byte2 bit7 length 48=Character string information. On First Frame Active, byte2 tends to indicate which line (on multiline display) to display the text on. Other wise byte2 is an ASCII character

    Arb_Text_Req_Set_Disp_Parameters
    Byte1 bit3 length 3 = Requesting Device Identifier: 1 telematics, 2 head, 3 remote receiver, etc...
    byte1 bit0 length 4 = Target Display device identifier: 1 infortainment, 2 head up display, 3 cluster display, etc...
    byte2 bit4 length 4 = target display device session mode: 0 none, 1 static arbitrary text mode, 2 static arbitrary text w/icon, 3 Navigation mode, 4 Scolling Arbitrary Text mode, etc...
    byte2 bit0 length 3 = Requester session identifier
    byte3 bit5 length 8 = Session function code: 0 none, 1 emergency, 2 urgetn turn-by-turn prompt, 3 urgent service application prompt, 4 user dialog, 5 user scroll, 6 non-urgent turn-by-turn prompt, etc...
    byte4 bit 5 length 8 = requester caret display line identifier
    byte5 bit5 length 2 = character set
    byte5 bit3 length 2 = font: 0 none, 1 small, 2 large, 3 dual (large/small)
    byte5 bit1 length 2 = horizontal justify: 0 none, 1 left, 2 right, 3 center

    ReplyDelete