mod_candataprocess.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "stdint.h"
  2. #include "string.h"
  3. #include "mod_candataprocess.h"
  4. #include "mod_spi.h"
  5. #include "sys_log.h"
  6. #include "sys_common.h"
  7. #include "hal_can.h"
  8. #define CAN_PAYLOAD_MAX_LEN 8
  9. #define SEND_CAN_BUF_MAX_LEN 64
  10. static uint8_t g_s_can_index;
  11. static uint8_t g_s_send_can_buf[SEND_CAN_BUF_MAX_LEN];
  12. int MOD_CanTransferData(uint8_t* data, uint8_t len)
  13. {
  14. uint8_t can_id_type = 0;
  15. uint32_t can_id = 0;
  16. uint8_t payload_len = 0;
  17. uint8_t payload[8] = {0};
  18. memset(payload, 0, 8);
  19. g_s_can_index = data[0];
  20. can_id_type = data[1];
  21. memcpy(&can_id, &data[2], 4);
  22. small_big_transfer32(&can_id);
  23. payload_len = data[6];
  24. memcpy(payload, &data[7], payload_len);
  25. 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,
  26. SYS_Hex2str(payload, payload_len));
  27. return HAL_CanTxData(can_id_type, can_id, payload, payload_len);
  28. }
  29. void MOD_CanRxDataProcess(uint8_t* data, uint8_t data_len)
  30. {
  31. uint8_t can_id_type;
  32. uint32_t can_id;
  33. uint8_t can_payload_len;
  34. uint8_t can_payload_buf[8];
  35. uint8_t tmp_len = 0;
  36. can_id_type = data[0];
  37. memset(can_payload_buf, 0, 8);
  38. memcpy(&can_id, &data[1], 4);
  39. can_payload_len = data[5];
  40. memcpy(can_payload_buf, &data[6], can_payload_len);
  41. DLOG_I("rx_can_data,type:%d,can_id:0x%x,payload_len:%d,payload:%s",
  42. can_id_type,
  43. can_id,
  44. can_payload_len,
  45. SYS_Hex2str(can_payload_buf, can_payload_len));
  46. tmp_len = 0;
  47. g_s_send_can_buf[tmp_len] = TRANSFER_GET_CAN_RSP_CMD;
  48. tmp_len += 1;
  49. g_s_send_can_buf[tmp_len] = g_s_can_index;
  50. g_s_can_index ++;
  51. if (0x7D == g_s_can_index)
  52. {
  53. g_s_can_index = 0;
  54. }
  55. tmp_len += 1;
  56. g_s_send_can_buf[tmp_len] = can_id_type;
  57. tmp_len += 1;
  58. g_s_send_can_buf[tmp_len] = (can_id>>24)&0xFF;
  59. tmp_len += 1;
  60. g_s_send_can_buf[tmp_len] = (can_id>>16)&0xFF;
  61. tmp_len += 1;
  62. g_s_send_can_buf[tmp_len] = (can_id>>8)&0xFF;
  63. tmp_len += 1;
  64. g_s_send_can_buf[tmp_len] = can_id&0xFF;
  65. tmp_len += 1;
  66. g_s_send_can_buf[tmp_len] = can_payload_len;
  67. tmp_len += 1;
  68. memcpy(&g_s_send_can_buf[tmp_len], &can_payload_buf, can_payload_len);
  69. tmp_len += can_payload_len;
  70. MOD_SpiDataSend(BLE_CMD_TRANSFER, g_s_send_can_buf, tmp_len);
  71. }