Skip to content

Commit fdfeb62

Browse files
authored
Fix: erroneous DLC set when transmitting more than 8 bytes. (#8)
1 parent 66f2195 commit fdfeb62

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

src/can.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,26 @@ int can_write(can_t *obj, CAN_Message msg)
704704
}
705705

706706
TxHeader.TxFrameType = FDCAN_DATA_FRAME;
707-
TxHeader.DataLength = msg.len << 16;
707+
switch (msg.len)
708+
{
709+
default:
710+
case 0: TxHeader.DataLength = FDCAN_DLC_BYTES_0; break;
711+
case 1: TxHeader.DataLength = FDCAN_DLC_BYTES_1; break;
712+
case 2: TxHeader.DataLength = FDCAN_DLC_BYTES_2; break;
713+
case 3: TxHeader.DataLength = FDCAN_DLC_BYTES_3; break;
714+
case 4: TxHeader.DataLength = FDCAN_DLC_BYTES_4; break;
715+
case 5: TxHeader.DataLength = FDCAN_DLC_BYTES_5; break;
716+
case 6: TxHeader.DataLength = FDCAN_DLC_BYTES_6; break;
717+
case 7: TxHeader.DataLength = FDCAN_DLC_BYTES_7; break;
718+
case 8: TxHeader.DataLength = FDCAN_DLC_BYTES_8; break;
719+
case 12: TxHeader.DataLength = FDCAN_DLC_BYTES_12; break;
720+
case 16: TxHeader.DataLength = FDCAN_DLC_BYTES_16; break;
721+
case 20: TxHeader.DataLength = FDCAN_DLC_BYTES_20; break;
722+
case 24: TxHeader.DataLength = FDCAN_DLC_BYTES_24; break;
723+
case 32: TxHeader.DataLength = FDCAN_DLC_BYTES_32; break;
724+
case 48: TxHeader.DataLength = FDCAN_DLC_BYTES_48; break;
725+
case 64: TxHeader.DataLength = FDCAN_DLC_BYTES_64; break;
726+
}
708727
TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
709728
TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
710729
TxHeader.FDFormat = FDCAN_CLASSIC_CAN;
@@ -985,4 +1004,4 @@ void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
9851004
NVIC_EnableIRQ(FDCAN3_IT1_IRQn);
9861005
#endif
9871006
#endif
988-
}
1007+
}

0 commit comments

Comments
 (0)