DAQ List Hierarchy
DAQ List 0 — event: event_10ms (10ms task trigger)
├── ODT 0 (Object Descriptor Table — one CAN frame / DAQ packet)
│ ├── ODT Entry 0: engine_rpm address=0x20004A00, size=2 bytes
│ ├── ODT Entry 1: coolant_temp address=0x20004A04, size=2 bytes
│ └── ODT Entry 2: lambda_actual address=0x20004A08, size=4 bytes (float)
└── ODT 1
├── ODT Entry 0: boost_mbar address=0x20004A0C, size=2 bytes
└── ODT Entry 1: inj_pw_us address=0x20004A10, size=2 bytes
DAQ List 1 — event: event_100ms (100ms task trigger)
└── ODT 0
└── ODT Entry 0: battery_voltage address=0x20005000, size=2 bytes/* Allocate DAQ list dynamically: ALLOC_DAQ, ALLOC_ODT, ALLOC_ODT_ENTRY */
/* Step 1: Free all existing DAQ lists */
Tx: D6 00 00 00 00 00 00 00 /* FREE_DAQ */
Rx: FF 00 00 00 00 00 00 00
/* Step 2: Allocate 1 DAQ list with 1 ODT with 3 ODT entries */
Tx: D5 01 00 00 00 00 00 00 /* ALLOC_DAQ: count=1 list */
Rx: FF 00 00 00 00 00 00 00
Tx: D4 00 00 01 00 00 00 00 /* ALLOC_ODT: daq=0, count=1 ODT */
Rx: FF 00 00 00 00 00 00 00
Tx: D3 00 00 00 03 00 00 00 /* ALLOC_ODT_ENTRY: daq=0, odt=0, count=3 */
Rx: FF 00 00 00 00 00 00 00