You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.8 KiB

12 months ago
12 months ago
12 months ago
  1. //
  2. // Created by zwsd
  3. //
  4. #pragma once
  5. #include "project_configs.h"
  6. #include "stm32basic/zbasic.h"
  7. #ifndef ENABLE_OLD_CAN_PROTOCOL
  8. #include "transmit_disfection_protocol/transmit_disfection_protocol.hpp"
  9. typedef void (*zcanbus_on_rx_t)(uint8_t from, uint8_t to, uint8_t *packet, size_t len);
  10. typedef void (*zcanbus_on_connected_t)(bool connected);
  11. typedef struct {
  12. public:
  13. uint8_t aData[8]; /*8byte table*/
  14. uint8_t datalen;
  15. } stm32_can_packet_t;
  16. typedef struct {
  17. public:
  18. uint16_t id;
  19. CAN_RxHeaderTypeDef header;
  20. uint8_t from;
  21. uint8_t to;
  22. stm32_can_packet_t canPacket[20]; // 用于接收can消息
  23. uint8_t canPacketNum = 0;
  24. bool dataIsReady;
  25. } canrxbuffer_t;
  26. void zcanbus_init(uint8_t deviceId);
  27. void zcanbus_reglistener(zcanbus_on_rx_t rxlistener);
  28. void zcanbus_reg_on_connected_listener(zcanbus_on_connected_t connectedlistener);
  29. void zcanbus_schedule();
  30. bool zcanbus_is_connected();
  31. bool zcanbus_send_packet(uint8_t to, uint8_t *packet, size_t len);
  32. bool zcanbus_send_packet(uint8_t to, uint8_t *packet, size_t len, int overtimems);
  33. bool zcanbus_send_sub_packet(uint8_t to, int npacket, int packetIndex, uint8_t *packet, size_t len, int overtimems);
  34. bool zcanbus_send_ack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, uint8_t *param, size_t len);
  35. bool zcanbus_send_ack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, int32_t val);
  36. bool zcanbus_send_ack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, bool _val);
  37. bool zcanbus_send_errorack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, int32_t errcode);
  38. bool zcanbus_send_report(uint16_t function_id, uint8_t *param, size_t len, int32_t overtime);
  39. bool zcanbus_send_emergency_report(uint16_t function_id, uint8_t *param, size_t len, int32_t overtime);
  40. #endif