Actions
Support Request #6259
closedRead out wrong size of CAN data
Status:
Closed
Priority:
Normal
Customer:
AUDI
Department:
TKI
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
StreamingLib::Reader
FAQ Links:
Description
Hallo,
ich möchte gern mit adtf-streaming lib flexray und Can Daten aus .dat lesen.
Bei der benutzung des Beispiels candump.dat auf dem Trace erzeugt vom Beispiel canwritter, habe ich die can Daten mit ID und 8 bytes richtig bekommen.
Aber beim Traces von ADTF bekomme ich CAN Daten mit mehr als 8 Bytes, und ID passen auch nicht?? pCanMessage->ui8Length (siehe code unter) ist oft mehr als 32 bytes
if (pDataBlock->GetStreamId() == nCanStream)
{
nMessageCounter++;
//get the time the block was received as a sample
tTimeStamp tsReceived = pDataBlock->GetTime();
//get data from datablock
tCanMessage *pCanMessage = NULL;
//get data from block
pDataBlock->GetData((const tVoid**)&pCanMessage);
//show can message
cout << "#" << nMessageCounter << " -- " << tsReceived << " : C" << (int)pCanMessage->ui8Channel << " ID=" << hex << pCanMessage->ui16Id << dec << "[";
for (int nCounter = 0; nCounter < pCanMessage->ui8Length; nCounter++)
{
cout << " " << hex << (int)pCanMessage->pui8Data[nCounter] << dec;
}
cout << "]" << endl;
}
Lösung
Ich denke du verwendest die falsche Datenstruktur. In ADTF wird schon lange nicht mehr tCanMessage verwendet sondern tCANData, die ist in der Streaming Library als tADTFCANData verfügbar. Welche CAN Struktur im Sample enthalten ist kannst du über die Größe der Daten ermitteln:
const tVoid* pBlockData;
tInt64 nBlockSize = pDataBlock->GetData(&pBlockData);
if (nBlockSize == sizeof(tADTFCANData))
{
const tADTFCANData* pCanData = reinterpret_cast<const tADTFCANData*>(pBlockData);
...
}
else if (nBlockSize == sizeof(tCANMessage))
{
const tCANMessage* pCanMessage = reinterpret_cast<const tCANMessage*>(pBlockData);
...
}
...
Files
Actions