#include "stdint.h" #include "string.h" #include "mod_candataprocess.h" #include "mod_spi.h" #include "sys_log.h" #include "sys_common.h" #include "hal_can.h" #define CAN_PAYLOAD_MAX_LEN 8 #define SEND_CAN_BUF_MAX_LEN 64 static uint8_t g_s_can_index; static uint8_t g_s_send_can_buf[SEND_CAN_BUF_MAX_LEN]; int MOD_CanTransferData(uint8_t* data, uint8_t len) { uint8_t can_id_type = 0; uint32_t can_id = 0; uint8_t payload_len = 0; uint8_t payload[8] = {0}; memset(payload, 0, 8); g_s_can_index = data[0]; can_id_type = data[1]; memcpy(&can_id, &data[2], 4); small_big_transfer32(&can_id); payload_len = data[6]; memcpy(payload, &data[7], payload_len); DLOG_I("tx_can_data,index:%d,type:%d,can_id:0x%x,payload_len:%d,payload:%s", g_s_can_index, can_id_type, can_id, payload_len, SYS_Hex2str(payload, payload_len)); return HAL_CanTxData(can_id_type, can_id, payload, payload_len); } void MOD_CanRxDataProcess(uint8_t* data, uint8_t data_len) { uint8_t can_id_type; uint32_t can_id; uint8_t can_payload_len; uint8_t can_payload_buf[8]; uint8_t tmp_len = 0; can_id_type = data[0]; memset(can_payload_buf, 0, 8); memcpy(&can_id, &data[1], 4); can_payload_len = data[5]; memcpy(can_payload_buf, &data[6], can_payload_len); DLOG_I("rx_can_data,type:%d,can_id:0x%x,payload_len:%d,payload:%s", can_id_type, can_id, can_payload_len, SYS_Hex2str(can_payload_buf, can_payload_len)); tmp_len = 0; g_s_send_can_buf[tmp_len] = TRANSFER_GET_CAN_RSP_CMD; tmp_len += 1; g_s_send_can_buf[tmp_len] = g_s_can_index; g_s_can_index ++; if (0x7D == g_s_can_index) { g_s_can_index = 0; } tmp_len += 1; g_s_send_can_buf[tmp_len] = can_id_type; tmp_len += 1; g_s_send_can_buf[tmp_len] = (can_id>>24)&0xFF; tmp_len += 1; g_s_send_can_buf[tmp_len] = (can_id>>16)&0xFF; tmp_len += 1; g_s_send_can_buf[tmp_len] = (can_id>>8)&0xFF; tmp_len += 1; g_s_send_can_buf[tmp_len] = can_id&0xFF; tmp_len += 1; g_s_send_can_buf[tmp_len] = can_payload_len; tmp_len += 1; memcpy(&g_s_send_can_buf[tmp_len], &can_payload_buf, can_payload_len); tmp_len += can_payload_len; MOD_SpiDataSend(BLE_CMD_TRANSFER, g_s_send_can_buf, tmp_len); }