#pragma once #include #define CAN_FLAG_ECHO (0x20) #define CAN_FLAG_RTR (0x40) #define CAN_FLAG_EXTID (0x80) #define CAN_ERROR_FLAG_BUSOFF (1<<0) #define CAN_ERROR_FLAG_RX_OVF (1<<1) #define CAN_ERROR_FLAG_TX_ERR (1<<2) typedef struct { uint32_t id; uint8_t data[8]; uint8_t dlc; uint8_t flags; /* for self receive */ uint8_t dummy; /* in pcan ticks */ uint16_t timestamp; } can_message_t; void pcan_can_init( void ); void pcan_can_poll( void ); void pcan_can_set_bitrate( uint16_t brp, uint8_t tseg1, uint8_t tseg2, uint8_t sjw ); int pcan_can_send_message( const can_message_t *msg ); void pcan_can_install_rx_callback( void (*cb)( can_message_t * ) ); void pcan_can_install_error_callback( void (*cb)( uint8_t, uint8_t, uint8_t ) ); void pcan_can_set_bus_active( uint16_t mode ); void pcan_can_set_silent( uint8_t silent_mode ); void pcan_can_set_loopback( uint8_t loopback );