-
Bug
-
Resolution: Fixed
-
P2: Important
-
6.5.1
-
MSVC 2019 x64
-
42cbbe9b6 (dev), 733cb6267 (6.5), 2b09ab3ee (6.6)
-
Foundation Sprint 83, Foundation Sprint 84
Sample input
Copied from "J1939 DBC Demo Example" at https://www.csselectronics.com/pages/can-dbc-file-database-intro
Save this as "j1939.dbc"
VERSION ""
NS_ :
CM_
BA_DEF_
BA_
BA_DEF_DEF_
BS_:
BU_:
BO_ 2364540158 EEC1: 8 Vector_XXX
SG_ EngineSpeed : 24|16@1+ (0.125,0) [0|8031.875] "rpm" Vector_XXX
BO_ 2566844926 CCVS1: 8 Vector_XXX
SG_ WheelBasedVehicleSpeed : 8|16@1+ (0.00390625,0) [0|250.996] "km/h" Vector_XXX
CM_ BO_ 2364540158 "Electronic Engine Controller 1";
CM_ SG_ 2364540158 EngineSpeed "Actual engine speed which is calculated over a minimum crankshaft angle of 720 degrees divided by the number of cylinders....";
CM_ BO_ 2566844926 "Cruise Control/Vehicle Speed 1";
CM_ SG_ 2566844926 WheelBasedVehicleSpeed "Wheel-Based Vehicle Speed: Speed of the vehicle as calculated from wheel or tailshaft speed.";
BA_DEF_ SG_ "SPN" INT 0 524287;
BA_DEF_ BO_ "VFrameFormat" ENUM "StandardCAN","ExtendedCAN","reserved","J1939PG";
BA_DEF_ "BusType" STRING ;
BA_DEF_ "ProtocolType" STRING ;
BA_DEF_DEF_ "SPN" 0;
BA_DEF_DEF_ "VFrameFormat" "J1939PG";
BA_DEF_DEF_ "BusType" "";
BA_DEF_DEF_ "ProtocolType" "";
BA_ "ProtocolType" "J1939";
BA_ "BusType" "CAN" ;
BA_ "VFrameFormat" BO_ 2364540158 3;
BA_ "VFrameFormat" BO_ 2566844926 3;
BA_ "SPN" SG_ 2364540158 EngineSpeed 190;
BA_ "SPN" SG_ 2566844926 WheelBasedVehicleSpeed 84;
Code
QCanDbcFileParser fileParser; fileParser.parse(":/j1939.dbc"); for (const auto& desc : fileParser.messageDescriptions()) qDebug() << "CAN ID:" << QString::number(static_cast<quint32>(desc.uniqueId()), 16) << "Name:" << desc.name();
Expected output
CAN ID: "18fef1fe" Name: "CCVS1" CAN ID: "cf004fe" Name: "EEC1"
Expected IDs can be seen at https://www.csselectronics.com/pages/dbc-editor-can-bus-database
Actual output
CAN ID: "98fef1fe" Name: "CCVS1" CAN ID: "8cf004fe" Name: "EEC1"
These IDs are clearly invalid since they exceed 29 bits
Notes
According to https://www.csselectronics.com/pages/can-dbc-file-database-intro, "For extended 29-bit CAN IDs, a mask (0x1FFFFFFF) needs to be applied to the 32-bit DBC ID to get the 29-bit CAN ID"
| For Gerrit Dashboard: QTBUG-114043 | ||||||
|---|---|---|---|---|---|---|
| # | Subject | Branch | Project | Status | CR | V |
| 482287,3 | QCanDbcFileParser: fix the size of Unique Id | dev | qt/qtserialbus | Status: MERGED | +2 | 0 |
| 483695,2 | QCanDbcFileParser: fix the size of Unique Id | 6.6 | qt/qtserialbus | Status: MERGED | +2 | 0 |
| 483696,2 | QCanDbcFileParser: fix the size of Unique Id | 6.5 | qt/qtserialbus | Status: MERGED | +2 | 0 |