// // Created by zwsd // #pragma once #include "project_configs.h" #include "stm32basic/zbasic.h" #ifndef ENABLE_OLD_CAN_PROTOCOL #include "transmit_disfection_protocol/transmit_disfection_protocol.hpp" typedef void (*zcanbus_on_rx_t)(uint8_t from, uint8_t to, uint8_t *packet, size_t len); typedef void (*zcanbus_on_connected_t)(bool connected); typedef struct { public: uint8_t aData[8]; /*8byte table*/ uint8_t datalen; } stm32_can_packet_t; typedef struct { public: uint16_t id; CAN_RxHeaderTypeDef header; uint8_t from; uint8_t to; stm32_can_packet_t canPacket[20]; // 用于接收can消息 uint8_t canPacketNum = 0; bool dataIsReady; } canrxbuffer_t; void zcanbus_init(uint8_t deviceId); void zcanbus_reglistener(zcanbus_on_rx_t rxlistener); void zcanbus_reg_on_connected_listener(zcanbus_on_connected_t connectedlistener); void zcanbus_schedule(); bool zcanbus_is_connected(); bool zcanbus_send_packet(uint8_t to, uint8_t *packet, size_t len); bool zcanbus_send_packet(uint8_t to, uint8_t *packet, size_t len, int overtimems); bool zcanbus_send_sub_packet(uint8_t to, int npacket, int packetIndex, uint8_t *packet, size_t len, int overtimems); bool zcanbus_send_ack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, uint8_t *param, size_t len); bool zcanbus_send_ack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, int32_t val); bool zcanbus_send_ack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, bool _val); bool zcanbus_send_errorack(iflytop::zscanprotocol::zcanbus_packet_t *rxpacket, int32_t errcode); bool zcanbus_send_report(uint16_t function_id, uint8_t *param, size_t len, int32_t overtime); bool zcanbus_send_emergency_report(uint16_t function_id, uint8_t *param, size_t len, int32_t overtime); #endif