soft_can.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #ifndef __SOFT_CAN_H
  2. #define __SOFT_CAN_H
  3. #include "stdbool.h"
  4. #include "common.h"
  5. //雷达/流量计/称重/前板CAN通讯 CAN1
  6. //水泵/喷头/电池/播撒器CAN通讯 CAN2
  7. #define CANID1 1
  8. #define CANID2 2
  9. //莫之比避障前后
  10. #define CAN_OBSTACLE_1 (0x000EFF11)
  11. #define CAN_OBSTACLE_2 (0x000EFF12)
  12. //莫之比仿地
  13. #define CAN_UAVH30_MSG (0x000EFF0B)
  14. //莫之比MASK
  15. #define CAN_MICOB_FILTER_ID (0x000EFF01)
  16. #define CAN_MICOB_MASK_ID ((uint32_t)0x1F0FFFE0)
  17. //莫之比升级系列扩展ID
  18. #define CAN_UAVRH_FILTER_ID (0x000007E0)
  19. #define CAN_UAVRH_MASK_ID ((uint32_t)0x1FFFFFE0)
  20. //恩曌仿地
  21. #define CAN_MIMO_T_ID (0x300)
  22. //恩曌前避障(单点)
  23. #define CAN_MIMO_FOBS_SIG (0x301)
  24. //恩曌后避障(单点)
  25. #define CAN_MIMO_BOBS_SIG (0x302)
  26. //恩曌360雷达新协议
  27. #define CAN_360MIMO_1ID (0x501)
  28. #define CAN_360MIMO_2ID (0x502)
  29. //Z70转接板
  30. #define CAN_Z70_MSG (0x7010)
  31. //VK协议
  32. #define FRAME_TYPE_MASK 0x1C000000 // 1 1100 0000 0000 0000 0000 0000 0000(29位扩展ID)
  33. #define CAN_FMTYPE_DATA 0x00 // 数据帧
  34. #define CAN_FMTYPE_REQ 0x01 // 请求帧
  35. // 第18~12位,目标nodeID,, ID最大0x7F
  36. // 第11~5位, 源nodeID, ID最大0x7F
  37. #define DES_ID_MASK 0x0007F000 // 0 0000 0000 0111 1111 0000 0000 0000(29位扩展ID)
  38. #define SRC_ID_MASK 0x00000FE0 // 0 0000 0000 0000 0000 1111 1110 0000(29位扩展ID)
  39. #define CAN_NODEID_MC 0x01 // 主控nodeid
  40. #define CAN_NODEID_LED 0x02 // led灯板nodeid
  41. #define CAN_NODEID_4G 0x03 // 4G模块nodeid
  42. #define CAN_NODEID_LIQUED 0x15 //液位计nodeid
  43. #define CAN_NODEID_FLOW 0x16 //流量计nodeid
  44. #define CAN_NODEID_ENGINE 0x17 //发动机nodeid
  45. #define CAN_NODEID_LASER 0x18 //激光雷达nodeid
  46. #define CAN_NODEID_WEIGHT 0x19 //称重传感器、播撒器 nodeid
  47. #define CAN_NODEID_RADAR_UPDATE 0x20 //设备升级
  48. #define CAN_NODEID_DISTRIBUTOR 0x21 //分电板
  49. #define CAN_NODEID_PUMP_NOZZLE 0x22 //水泵离心喷头
  50. // 第25~19位,消息ID
  51. #define MSG_ID_MASK 0x03F80000 // 0 0011 1111 1000 0000 0000 0000 0000(29位扩展ID)
  52. // 飞控发出给LED的消息序号
  53. #define CAN_MSGID_MCTOLED_BLINK 0x01 // 灯闪烁
  54. // 飞控发出给LED的配置消息序号
  55. #define CAN_MSGID_MCTOLED_CONF 0x02 // 底板配置
  56. // 飞控发出给LED的AD状态消息序号
  57. #define CAN_MSGID_MCTOLED_ADOC 0x03 // AD开关
  58. // LED发出给飞控的消息序号
  59. #define CAN_MSGID_LEDTOMC_VOLT 0x01 // 电压监测
  60. // LED发出给飞控的版本序号
  61. #define CAN_MSGID_LEDTOMC_VER 0x02 // 版本信息
  62. // 液位计发出给飞控的消息
  63. #define CAN_MSGID_LEDTOMC_LIQUID 0x03 // 液位计信息(目前没有到)
  64. //流量计发出给飞控的信息
  65. #define CAN_MSGID_FLOWTOMC_INFO 0x04 //流量计信息 0x2012c0
  66. #define CAN_MSGID_FLOWTOMC_ACK 0x05 //流量计ACK
  67. //发动机发出给飞控的信息
  68. #define CAN_MSGID_ENGINE_INFO 0x06 //CAN发动机信息(目前没有到)
  69. #define CAN_MSGID_RADAR_START 0X07 //雷达升级开始
  70. #define CAN_MSGID_RADAR_ING 0X08 //雷达升级中
  71. #define CAN_MSGID_RADAR_END 0X09 //雷达升级结束 1000 0001 0100 0010 0000
  72. //水泵信息
  73. #define CAN_MSGID_PUMP 0x10
  74. //离心喷头信息
  75. #define CAN_MSGID_NOZZLE 0x11
  76. //防地雷达发出给飞控的信息0x901300
  77. #define CAN_MSGID_RADAR_INFO 0x12
  78. //飞控发出给防地雷达的信息0x981300
  79. #define CAN_MSGID_RADAR_VERSION_INFO 0x13
  80. //前避障雷达发出给飞控的信息
  81. #define CAN_MSGID_FRADAR_INFO 0x14
  82. //飞控发出给前避障雷达的信息
  83. #define CAN_MSGID_FRADAR_VERSION_INFO 0x15
  84. //后避障雷达发出给飞控的信息
  85. #define CAN_MSGID_BRADAR_INFO 0x16
  86. //飞控发出给后避障雷达的信息
  87. #define CAN_MSGID_BRADAR_VERSION_INFO 0x17
  88. // CANfilterID,(扩展帧 29位)
  89. // filterID中,按照目标和源ID进行过滤,目标ID为自己的固定不变,源ID需要把所有的需要接收的node合并一起组成
  90. #define CAN_MC_FILTER_ID ((unsigned int)(CAN_FMTYPE_DATA<<26 | CAN_MSGID_LEDTOMC_VOLT<<19 | \
  91. CAN_NODEID_MC<<12 | CAN_NODEID_LED<<5))
  92. // CANmaskID, (扩展帧 29位) 0
  93. // maskID中为1的位,需要filterID和消息帧中对应位的值完全一样,才能通过过滤
  94. // 消息类型位全置1,目标nodeID的位全置1, 消息ID以及源节点ID处寻找相同位的做过滤
  95. #define CAN_MC_MASK_ID ((unsigned int)(FRAME_TYPE_MASK | \
  96. (MSG_ID_MASK & (((0x7f & (~(0x00 | CAN_MSGID_LEDTOMC_VOLT | CAN_MSGID_LEDTOMC_VER | CAN_MSGID_ENGINE_INFO \
  97. | CAN_MSGID_FLOWTOMC_INFO | CAN_MSGID_FLOWTOMC_ACK | CAN_MSGID_RADAR_START| CAN_MSGID_RADAR_INFO |CAN_MSGID_FRADAR_INFO | CAN_MSGID_BRADAR_INFO |CAN_MSGID_RADAR_ING | CAN_MSGID_RADAR_END)))|\
  98. (0x7f & CAN_MSGID_LEDTOMC_VOLT & CAN_MSGID_LEDTOMC_VER & CAN_MSGID_FLOWTOMC_INFO & CAN_MSGID_BRADAR_INFO & CAN_MSGID_RADAR_INFO & CAN_MSGID_FRADAR_INFO & CAN_MSGID_FLOWTOMC_ACK & CAN_MSGID_ENGINE_INFO \
  99. & CAN_MSGID_RADAR_START& CAN_MSGID_RADAR_ING & CAN_MSGID_RADAR_END))<<19)) | \
  100. DES_ID_MASK | \
  101. (SRC_ID_MASK & (((0x7f & (~(0x00 | CAN_NODEID_LED | CAN_NODEID_4G | CAN_NODEID_LIQUED | CAN_NODEID_FLOW | \
  102. CAN_NODEID_ENGINE | CAN_NODEID_LASER |CAN_NODEID_WEIGHT | CAN_NODEID_RADAR_UPDATE | CAN_NODEID_DISTRIBUTOR | CAN_NODEID_PUMP_NOZZLE))) |\
  103. (0x7f & CAN_NODEID_LED & CAN_NODEID_4G & CAN_NODEID_LIQUED & CAN_NODEID_FLOW & \
  104. CAN_NODEID_ENGINE & CAN_NODEID_LASER & CAN_NODEID_WEIGHT & CAN_NODEID_RADAR_UPDATE & CAN_NODEID_DISTRIBUTOR & CAN_NODEID_PUMP_NOZZLE))<<5))))
  105. //海盈智能电池
  106. #define HEREWIN_FILTER_ID 0x0000FE00 // 1111 1110 0000 0000
  107. #define HEREWIN_MASK_ID 0x0300F0FF //0011 0000 0000 1111 0000 1111 1111
  108. //正方
  109. #define CAN_ZHENGFANG (0x15359826)
  110. #define CAN_ZHENGFANG_MASk (0x1FFF0000)
  111. //格式
  112. #define CAN_TATTU_MSG (0x01109216)
  113. #define CAN_NEWTATTU_MSG (0x01109200)
  114. #define CAN_NEWTATTU_MSG2 (0x011092FF)
  115. //EZ雷达协议升级
  116. #define CAN_EZ_R_UPDATE (0x3D)
  117. extern uint8_t RxData[8];
  118. extern CAN_RxHeaderTypeDef RxHeader;
  119. #pragma pack(1)
  120. typedef struct
  121. {
  122. char Head[3];
  123. uint32_t Id;
  124. uint32_t Ide;
  125. uint32_t Dlc;
  126. uint32_t FilterIndex;
  127. uint8_t Data[8];
  128. bool complete_flag;
  129. }canpack;
  130. extern canpack canbuffer;
  131. #pragma pack()
  132. void CAN1_filter_init(void);
  133. void CAN2_filter_init(void);
  134. void Can_Send_Msg_Func(uint8_t can_num, unsigned char *data, unsigned char length, unsigned int id,
  135. uint32_t id_type);
  136. void L1L2_GPIO_check();
  137. void put_date_to_can(uint8_t *buf,uint8_t par1,uint8_t par2,uint8_t par3,uint8_t par4,uint8_t par5,
  138. uint8_t par6,uint8_t par7,uint8_t par8);
  139. #endif