diff --git a/Application/Tasks/CanDataTask.c b/Application/Tasks/CanDataTask.c index 974af9b..72039b8 100644 --- a/Application/Tasks/CanDataTask.c +++ b/Application/Tasks/CanDataTask.c @@ -8,6 +8,7 @@ #include "cls_device.pb.h" #include "usb.pb.h" #include "version_info.h" +#include "ulog.h" // Define thread flags #define FLAG_FDCAN_RX_FIFO0 (1<<0) #define FLAG_FDCAN_RX_FIFO1 (1<<1) @@ -129,6 +130,13 @@ void CanDataTask_func(void *argument) { static uint64_t last_car_message_time = UINT64_MAX; +// convert byte to 2 hex characters +void byteToHex(uint8_t byte, char * hex) { + const char hexLookup[] = "0123456789ABCDEF"; + hex[0] = hexLookup[byte >> 4]; + hex[1] = hexLookup[byte & 0x0F]; +} + void CarCanTask_func(void *argument) { // for testing accept all messages from the car can bus @@ -159,6 +167,70 @@ void CarCanTask_func(void *argument) { // do something with the can data last_car_message_time = osKernelGetTickCount(); + char msg[17] = {0}; + + switch (RxHeader.DataLength) + { + case FDCAN_DLC_BYTES_1: + byteToHex(RxData[0], &msg[0]); + break; + case FDCAN_DLC_BYTES_2: + byteToHex(RxData[0], &msg[0]); + byteToHex(RxData[1], &msg[2]); + break; + case FDCAN_DLC_BYTES_3: + byteToHex(RxData[0], &msg[0]); + byteToHex(RxData[1], &msg[2]); + byteToHex(RxData[2], &msg[4]); + break; + case FDCAN_DLC_BYTES_4: + byteToHex(RxData[0], &msg[0]); + byteToHex(RxData[1], &msg[2]); + byteToHex(RxData[2], &msg[4]); + byteToHex(RxData[3], &msg[6]); + break; + case FDCAN_DLC_BYTES_5: + byteToHex(RxData[0], &msg[0]); + byteToHex(RxData[1], &msg[2]); + byteToHex(RxData[2], &msg[4]); + byteToHex(RxData[3], &msg[6]); + byteToHex(RxData[4], &msg[8]); + break; + case FDCAN_DLC_BYTES_6: + byteToHex(RxData[0], &msg[0]); + byteToHex(RxData[1], &msg[2]); + byteToHex(RxData[2], &msg[4]); + byteToHex(RxData[3], &msg[6]); + byteToHex(RxData[4], &msg[8]); + byteToHex(RxData[5], &msg[10]); + break; + case FDCAN_DLC_BYTES_7: + byteToHex(RxData[0], &msg[0]); + byteToHex(RxData[1], &msg[2]); + byteToHex(RxData[2], &msg[4]); + byteToHex(RxData[3], &msg[6]); + byteToHex(RxData[4], &msg[8]); + byteToHex(RxData[5], &msg[10]); + byteToHex(RxData[6], &msg[12]); + break; + case FDCAN_DLC_BYTES_8: + byteToHex(RxData[0], &msg[0]); + byteToHex(RxData[1], &msg[2]); + byteToHex(RxData[2], &msg[4]); + byteToHex(RxData[3], &msg[6]); + byteToHex(RxData[4], &msg[8]); + byteToHex(RxData[5], &msg[10]); + byteToHex(RxData[6], &msg[12]); + byteToHex(RxData[7], &msg[14]); + break; + + case FDCAN_DLC_BYTES_0: + default: + /* nothing to do */ + break; + } + + ULOG_DEBUG("Car MSG: %x, %d %s", RxHeader.Identifier, RxHeader.DataLength, msg); } }