This CLSID returns the diagnostic trouble codes generated by the vehicle’s electronic control units.
Trouble codes
Read, shareable or exclusive
Type: | VT_UNKNOWN |
None
Type: | VT_UNKNOWN (The IUnknown interface to an object that exposes the IVIO_DiagnosticItems interface.) |
Measurement: | VIOMEASUREMENT_COLLECTION |
Units: | VIOUNITS_DIAGNOSTICITEMS |
API device objects expect the following data types and sizes when sending data to and from the mini-drivers:
None
Type: | LPVIODIAGNOSTICARRAY |
Size: | Varies |
Description: | See the description of the VIODIAGNOSTICITEMSARRAY structure. |
HRESULT hr;
IVIO_Device *pTroubleCodeDevice;
VARIANT vTroubleCodes;
IVIO_EnumDiagnosticItems *pTroubleCodes;
IVIO_EnumDiagnosticEntry *pThisCode[1];
IVIO_DataValue *pEntryValues[4];
DWORD j, cValues;
//Initialize the VARIANT.
VariantInit(&vTroubleCodes);
//Create an instance of the trouble code device and get its
//IVIO_DEVICE interface.
hr = CoCreateInstance(CLSID_VIO_TROUBLE_CODES, NULL,
CLSCTX_INPROC_SERVER, IID_VIODEVICE,
&pTroubleCodeDevice);
//Fetch the trouble codes from the vehicle.
pTroubleCodeDevice->GetData(&vTroubleCodes, 3000);
//Get the IUknown pointer to the collection of returned trouble codes.
if (SUCCEEDED(vTroubleCodes.punkVal->
QueryInterface(IID_VIOEnumDiagnosticItems, (VOID **)
&pTroubleCodes)))
{//Got the enumeration interface from the VARIANT.
do
{
//Retrieve the next trouble code from the enumerator.
hr = pTroubleCode->Next(1, pThisCode, NULL);
if (SUCCEEDED (hr))
{//Retrieved the next entry in the collection of returned
//trouble codes.
pThisCode->Next(4, pEntryValues, &cValues);
//Process the values as needed.
//Then release the data value created in the pThisCode->
//Next() call.
for (j = 0; j < cValues; j++)
pEntryValues[j]->Release();
//Release the diagnostic entry enumerator.
pThisCode->Release();
}//End if (Got the next diagnostic code item from the
enumerator)
}
while (hr == S_OK);
//Verify that the enumeration interface is released.
pTroubleCodes->Release();
}//End if (Got the enumeration interface from the VARIANT)
//Free up the resources in the VARIANT returned by GetData().
VariantClear(&vTroubleCodes);
//Release the reference to the interface.
pTroubleCodeDevice->Release();