Response¶
suppose you send a request for information over the canbus, you want to listen for a certain respons as well.
How is this done ?
In the request message, there the “type of operation” is defined :
for example:
A1 No Operation Performed (keep alive)
A3 Security Access Mode
A5 Read Current Data By Offset
A6 Read Current Data By Identifier
A7 Read Current Data By Address
A8 Set Data Transmission
A9 Stop Data Transmission
In the vida msql database (T111 service table) these values are defined. In this table is a field (definition) that describes how this value should “behave”.
example for code B9 (Read Data Block By Offset)¶
<request>
<item name="Service" length="8" />
<item name="Identifier" length="8" />
</request>
<response>
<block id="ID2_1" type="BLOFF" length="8" name="Bloff" />
<dynamiclist type="PARAM" name="Parameters" blockName="Parameter" parent="ID2_1" />
</response>
This XML snippet describes a structure for a request and a response.
In the request section:
There are three items: - “Service” with a length of 8 units. - “Identifier” length of 8 units.
In the response section: - BLOFF (T142 blocktype) this refers to metaTable 146 (is not in database, but guess it is constructed out of XML file data depending on volvo model) - ID2_1 (cannot find any reference in database …) - PARAM (T142 blocktype) refers to metaTable 148 (T148_metaPara) which gives all the parameters for an ECUvariant
VIDA diagnostic logs¶
When using VIDA diagnostic tools, at first it tries to get vehicle data. As it happens, this might give some insight.
(extract) <Request EcuAddress=”0B” DiagnosticPartNo=”30670330 A” CompletePartNo=”0008621154 A” Message=”B9F0” OrderPosition> <Response Message=”F9F0000862115420204130670330202041”/>
In the Response Message I can see some of the request
30670330202041 similar to ”30670330 A” 0008621154202041 similar to ”0008621154 A”
apply this to real life example¶
CAN_HS ---> ID=000ffffe data=cb 50 b9 f0 00 00 00 00
CAN_HS <--- ID=01000003 data=8f 50 f9 f0 00 08 68 85
CAN_HS <--- ID=01000003 data=09 13 20 20 41 30 65 70
CAN_HS <--- ID=01000003 data=4c 24 20 20 41 00 00 00
First byte in reply is a technical field (8F)
Second byte is CEM ID (50)
Third (F9) is like reply to B9
Fourth (F0)
Fifth 00
PARTNUMBER 08688513 (08688513 A)
SPACES 20 20
ASCII A
DIAGNOSTICPARTNUMBER (30657024 A)
SPACES 20 20
ASCII A
PARTNUMBER cannot be found in the database maybe something like a serialnumber
in (T100_ecuvariant) the DIAGNOSTICPARTNUMBER is found and refers to CEM 372302
using the DHA (diagnostic host application) to get a clue¶
this was easier to understand, and performs likely the same action
DIAG_ITEM [NAME=ECU: HW partnumber and DIA diagnostic number][SEND_ABLE=TRUE][NOTE=] [FORMAT=OTHER:2] [BASE=HEX] [VALUE=F0] [TYPE=BLOFF][INPUT=FALSE]
BEGIN
RESPONSE_ITEM [NAME=ECU Complete Part Number .][SEND_ABLE=FALSE][NOTE=ECU Complete Part Number] [NO_OF_BYTES=8] [OFFSET=2] [MASK=] [UNIT=.] [PRECISION=2] [SIGNED=U] [BASE=5 BCD 3 ASCII] [FORMULA=x] [COMP_VALUE=] [DEP_RESPITEM=CHECKOK] [DEP_RESPITEM_CHECK=TRUE]
RESPONSE_ITEM [NAME=ECU Diagnostic Software number .][SEND_ABLE=FALSE][NOTE=ECU Diagnostic Software number] [NO_OF_BYTES=7] [OFFSET=10] [MASK=] [UNIT=.] [PRECISION=2] [SIGNED=U] [BASE=4 BCD 3 ASCII] [FORMULA=x] [COMP_VALUE=] [DEP_RESPITEM=CHECKOK] [DEP_RESPITEM_CHECK=TRUE]
END
the response is defined :
offset 2 and 8 databytes
offset 10 and 7 databytes
according to this the PARTNUMBER would be *00*08688513