1 /* 2 * Copyright (c) 2015-2020 ARM Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Licensed under the Apache License, Version 2.0 (the License); you may 7 * not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * $Date: 31. March 2020 19 * $Revision: V1.3 20 * 21 * Project: CAN (Controller Area Network) Driver definitions 22 */ 23 24 /* History: 25 * Version 1.3 26 * Removed volatile from ARM_CAN_STATUS 27 * Version 1.2 28 * Added ARM_CAN_UNIT_STATE_BUS_OFF unit state and 29 * ARM_CAN_EVENT_UNIT_INACTIVE unit event 30 * Version 1.1 31 * ARM_CAN_STATUS made volatile 32 * Version 1.0 33 * Initial release 34 */ 35 36 #ifndef DRIVER_CAN_H_ 37 #define DRIVER_CAN_H_ 38 39 #ifdef __cplusplus 40 extern "C" 41 { 42 #endif 43 44 #include "Driver_Common.h" 45 46 #define ARM_CAN_API_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1,3) /* API version */ 47 48 49 #define _ARM_Driver_CAN_(n) Driver_CAN##n 50 #define ARM_Driver_CAN_(n) _ARM_Driver_CAN_(n) 51 52 53 /****** CAN Bitrate selection codes *****/ 54 typedef enum _ARM_CAN_BITRATE_SELECT { 55 ARM_CAN_BITRATE_NOMINAL, ///< Select nominal (flexible data-rate arbitration) bitrate 56 ARM_CAN_BITRATE_FD_DATA ///< Select flexible data-rate data bitrate 57 } ARM_CAN_BITRATE_SELECT; 58 59 /****** CAN Bit Propagation Segment codes (PROP_SEG) *****/ 60 #define ARM_CAN_BIT_PROP_SEG_Pos 0UL ///< bits 7..0 61 #define ARM_CAN_BIT_PROP_SEG_Msk (0xFFUL << ARM_CAN_BIT_PROP_SEG_Pos) 62 #define ARM_CAN_BIT_PROP_SEG(x) (((x) << ARM_CAN_BIT_PROP_SEG_Pos) & ARM_CAN_BIT_PROP_SEG_Msk) 63 64 /****** CAN Bit Phase Buffer Segment 1 (PHASE_SEG1) codes *****/ 65 #define ARM_CAN_BIT_PHASE_SEG1_Pos 8UL ///< bits 15..8 66 #define ARM_CAN_BIT_PHASE_SEG1_Msk (0xFFUL << ARM_CAN_BIT_PHASE_SEG1_Pos) 67 #define ARM_CAN_BIT_PHASE_SEG1(x) (((x) << ARM_CAN_BIT_PHASE_SEG1_Pos) & ARM_CAN_BIT_PHASE_SEG1_Msk) 68 69 /****** CAN Bit Phase Buffer Segment 2 (PHASE_SEG2) codes *****/ 70 #define ARM_CAN_BIT_PHASE_SEG2_Pos 16UL ///< bits 23..16 71 #define ARM_CAN_BIT_PHASE_SEG2_Msk (0xFFUL << ARM_CAN_BIT_PHASE_SEG2_Pos) 72 #define ARM_CAN_BIT_PHASE_SEG2(x) (((x) << ARM_CAN_BIT_PHASE_SEG2_Pos) & ARM_CAN_BIT_PHASE_SEG2_Msk) 73 74 /****** CAN Bit (Re)Synchronization Jump Width Segment (SJW) *****/ 75 #define ARM_CAN_BIT_SJW_Pos 24UL ///< bits 28..24 76 #define ARM_CAN_BIT_SJW_Msk (0x1FUL << ARM_CAN_BIT_SJW_Pos) 77 #define ARM_CAN_BIT_SJW(x) (((x) << ARM_CAN_BIT_SJW_Pos) & ARM_CAN_BIT_SJW_Msk) 78 79 /****** CAN Mode codes *****/ 80 typedef enum _ARM_CAN_MODE { 81 ARM_CAN_MODE_INITIALIZATION, ///< Initialization mode 82 ARM_CAN_MODE_NORMAL, ///< Normal operation mode 83 ARM_CAN_MODE_RESTRICTED, ///< Restricted operation mode 84 ARM_CAN_MODE_MONITOR, ///< Bus monitoring mode 85 ARM_CAN_MODE_LOOPBACK_INTERNAL, ///< Loopback internal mode 86 ARM_CAN_MODE_LOOPBACK_EXTERNAL ///< Loopback external mode 87 } ARM_CAN_MODE; 88 89 /****** CAN Filter Operation codes *****/ 90 typedef enum _ARM_CAN_FILTER_OPERATION { 91 ARM_CAN_FILTER_ID_EXACT_ADD, ///< Add exact id filter 92 ARM_CAN_FILTER_ID_EXACT_REMOVE, ///< Remove exact id filter 93 ARM_CAN_FILTER_ID_RANGE_ADD, ///< Add range id filter 94 ARM_CAN_FILTER_ID_RANGE_REMOVE, ///< Remove range id filter 95 ARM_CAN_FILTER_ID_MASKABLE_ADD, ///< Add maskable id filter 96 ARM_CAN_FILTER_ID_MASKABLE_REMOVE ///< Remove maskable id filter 97 } ARM_CAN_FILTER_OPERATION; 98 99 /****** CAN Object Configuration codes *****/ 100 typedef enum _ARM_CAN_OBJ_CONFIG { 101 ARM_CAN_OBJ_INACTIVE, ///< CAN object inactive 102 ARM_CAN_OBJ_TX, ///< CAN transmit object 103 ARM_CAN_OBJ_RX, ///< CAN receive object 104 ARM_CAN_OBJ_RX_RTR_TX_DATA, ///< CAN object that on RTR reception automatically transmits Data Frame 105 ARM_CAN_OBJ_TX_RTR_RX_DATA ///< CAN object that transmits RTR and automatically receives Data Frame 106 } ARM_CAN_OBJ_CONFIG; 107 108 /** 109 \brief CAN Object Capabilities 110 */ 111 typedef struct _ARM_CAN_OBJ_CAPABILITIES { 112 uint32_t tx : 1; ///< Object supports transmission 113 uint32_t rx : 1; ///< Object supports reception 114 uint32_t rx_rtr_tx_data : 1; ///< Object supports RTR reception and automatic Data Frame transmission 115 uint32_t tx_rtr_rx_data : 1; ///< Object supports RTR transmission and automatic Data Frame reception 116 uint32_t multiple_filters : 1; ///< Object allows assignment of multiple filters to it 117 uint32_t exact_filtering : 1; ///< Object supports exact identifier filtering 118 uint32_t range_filtering : 1; ///< Object supports range identifier filtering 119 uint32_t mask_filtering : 1; ///< Object supports mask identifier filtering 120 uint32_t message_depth : 8; ///< Number of messages buffers (FIFO) for that object 121 uint32_t reserved : 16; ///< Reserved (must be zero) 122 } ARM_CAN_OBJ_CAPABILITIES; 123 124 /****** CAN Control Function Operation codes *****/ 125 #define ARM_CAN_CONTROL_Pos 0UL 126 #define ARM_CAN_CONTROL_Msk (0xFFUL << ARM_CAN_CONTROL_Pos) 127 #define ARM_CAN_SET_FD_MODE (1UL << ARM_CAN_CONTROL_Pos) ///< Set FD operation mode; arg: 0 = disable, 1 = enable 128 #define ARM_CAN_ABORT_MESSAGE_SEND (2UL << ARM_CAN_CONTROL_Pos) ///< Abort sending of CAN message; arg = object 129 #define ARM_CAN_CONTROL_RETRANSMISSION (3UL << ARM_CAN_CONTROL_Pos) ///< Enable/disable automatic retransmission; arg: 0 = disable, 1 = enable (default state) 130 #define ARM_CAN_SET_TRANSCEIVER_DELAY (4UL << ARM_CAN_CONTROL_Pos) ///< Set transceiver delay; arg = delay in time quanta 131 132 /****** CAN ID Frame Format codes *****/ 133 #define ARM_CAN_ID_IDE_Pos 31UL 134 #define ARM_CAN_ID_IDE_Msk (1UL << ARM_CAN_ID_IDE_Pos) 135 136 /****** CAN Identifier encoding *****/ 137 #define ARM_CAN_STANDARD_ID(id) (id & 0x000007FFUL) ///< CAN identifier in standard format (11-bits) 138 #define ARM_CAN_EXTENDED_ID(id) ((id & 0x1FFFFFFFUL) | ARM_CAN_ID_IDE_Msk)///< CAN identifier in extended format (29-bits) 139 140 /** 141 \brief CAN Message Information 142 */ 143 typedef struct _ARM_CAN_MSG_INFO { 144 uint32_t id; ///< CAN identifier with frame format specifier (bit 31) 145 uint32_t rtr : 1; ///< Remote transmission request frame 146 uint32_t edl : 1; ///< Flexible data-rate format extended data length 147 uint32_t brs : 1; ///< Flexible data-rate format with bitrate switch 148 uint32_t esi : 1; ///< Flexible data-rate format error state indicator 149 uint32_t dlc : 4; ///< Data length code 150 uint32_t reserved : 24; 151 } ARM_CAN_MSG_INFO; 152 153 /****** CAN specific error code *****/ 154 #define ARM_CAN_INVALID_BITRATE_SELECT (ARM_DRIVER_ERROR_SPECIFIC - 1) ///< Bitrate selection not supported 155 #define ARM_CAN_INVALID_BITRATE (ARM_DRIVER_ERROR_SPECIFIC - 2) ///< Requested bitrate not supported 156 #define ARM_CAN_INVALID_BIT_PROP_SEG (ARM_DRIVER_ERROR_SPECIFIC - 3) ///< Propagation segment value not supported 157 #define ARM_CAN_INVALID_BIT_PHASE_SEG1 (ARM_DRIVER_ERROR_SPECIFIC - 4) ///< Phase segment 1 value not supported 158 #define ARM_CAN_INVALID_BIT_PHASE_SEG2 (ARM_DRIVER_ERROR_SPECIFIC - 5) ///< Phase segment 2 value not supported 159 #define ARM_CAN_INVALID_BIT_SJW (ARM_DRIVER_ERROR_SPECIFIC - 6) ///< SJW value not supported 160 #define ARM_CAN_NO_MESSAGE_AVAILABLE (ARM_DRIVER_ERROR_SPECIFIC - 7) ///< Message is not available 161 162 /****** CAN Status codes *****/ 163 #define ARM_CAN_UNIT_STATE_INACTIVE (0U) ///< Unit state: Not active on bus (initialization) 164 #define ARM_CAN_UNIT_STATE_ACTIVE (1U) ///< Unit state: Active on bus (can generate active error frame) 165 #define ARM_CAN_UNIT_STATE_PASSIVE (2U) ///< Unit state: Error passive (can not generate active error frame) 166 #define ARM_CAN_UNIT_STATE_BUS_OFF (3U) ///< Unit state: Bus-off (can recover to active state) 167 #define ARM_CAN_LEC_NO_ERROR (0U) ///< Last error code: No error 168 #define ARM_CAN_LEC_BIT_ERROR (1U) ///< Last error code: Bit error 169 #define ARM_CAN_LEC_STUFF_ERROR (2U) ///< Last error code: Bit stuffing error 170 #define ARM_CAN_LEC_CRC_ERROR (3U) ///< Last error code: CRC error 171 #define ARM_CAN_LEC_FORM_ERROR (4U) ///< Last error code: Illegal fixed-form bit 172 #define ARM_CAN_LEC_ACK_ERROR (5U) ///< Last error code: Acknowledgment error 173 174 /** 175 \brief CAN Status 176 */ 177 typedef struct _ARM_CAN_STATUS { 178 uint32_t unit_state : 4; ///< Unit bus state 179 uint32_t last_error_code : 4; ///< Last error code 180 uint32_t tx_error_count : 8; ///< Transmitter error count 181 uint32_t rx_error_count : 8; ///< Receiver error count 182 uint32_t reserved : 8; 183 } ARM_CAN_STATUS; 184 185 186 /****** CAN Unit Event *****/ 187 #define ARM_CAN_EVENT_UNIT_INACTIVE (0U) ///< Unit entered Inactive state 188 #define ARM_CAN_EVENT_UNIT_ACTIVE (1U) ///< Unit entered Error Active state 189 #define ARM_CAN_EVENT_UNIT_WARNING (2U) ///< Unit entered Error Warning state (one or both error counters >= 96) 190 #define ARM_CAN_EVENT_UNIT_PASSIVE (3U) ///< Unit entered Error Passive state 191 #define ARM_CAN_EVENT_UNIT_BUS_OFF (4U) ///< Unit entered Bus-off state 192 193 /****** CAN Send/Receive Event *****/ 194 #define ARM_CAN_EVENT_SEND_COMPLETE (1UL << 0) ///< Send complete 195 #define ARM_CAN_EVENT_RECEIVE (1UL << 1) ///< Message received 196 #define ARM_CAN_EVENT_RECEIVE_OVERRUN (1UL << 2) ///< Received message overrun 197 198 199 // Function documentation 200 /** 201 \fn ARM_DRIVER_VERSION ARM_CAN_GetVersion (void) 202 \brief Get driver version. 203 \return \ref ARM_DRIVER_VERSION 204 205 \fn ARM_CAN_CAPABILITIES ARM_CAN_GetCapabilities (void) 206 \brief Get driver capabilities. 207 \return \ref ARM_CAN_CAPABILITIES 208 209 \fn int32_t ARM_CAN_Initialize (ARM_CAN_SignalUnitEvent_t cb_unit_event, 210 ARM_CAN_SignalObjectEvent_t cb_object_event) 211 \brief Initialize CAN interface and register signal (callback) functions. 212 \param[in] cb_unit_event Pointer to \ref ARM_CAN_SignalUnitEvent callback function 213 \param[in] cb_object_event Pointer to \ref ARM_CAN_SignalObjectEvent callback function 214 \return \ref execution_status 215 216 \fn int32_t ARM_CAN_Uninitialize (void) 217 \brief De-initialize CAN interface. 218 \return \ref execution_status 219 220 \fn int32_t ARM_CAN_PowerControl (ARM_POWER_STATE state) 221 \brief Control CAN interface power. 222 \param[in] state Power state 223 - \ref ARM_POWER_OFF : power off: no operation possible 224 - \ref ARM_POWER_LOW : low power mode: retain state, detect and signal wake-up events 225 - \ref ARM_POWER_FULL : power on: full operation at maximum performance 226 \return \ref execution_status 227 228 \fn uint32_t ARM_CAN_GetClock (void) 229 \brief Retrieve CAN base clock frequency. 230 \return base clock frequency 231 232 \fn int32_t ARM_CAN_SetBitrate (ARM_CAN_BITRATE_SELECT select, uint32_t bitrate, uint32_t bit_segments) 233 \brief Set bitrate for CAN interface. 234 \param[in] select Bitrate selection 235 - \ref ARM_CAN_BITRATE_NOMINAL : nominal (flexible data-rate arbitration) bitrate 236 - \ref ARM_CAN_BITRATE_FD_DATA : flexible data-rate data bitrate 237 \param[in] bitrate Bitrate 238 \param[in] bit_segments Bit segments settings 239 - \ref ARM_CAN_BIT_PROP_SEG(x) : number of time quanta for propagation time segment 240 - \ref ARM_CAN_BIT_PHASE_SEG1(x) : number of time quanta for phase buffer segment 1 241 - \ref ARM_CAN_BIT_PHASE_SEG2(x) : number of time quanta for phase buffer Segment 2 242 - \ref ARM_CAN_BIT_SJW(x) : number of time quanta for (re-)synchronization jump width 243 \return \ref execution_status 244 245 \fn int32_t ARM_CAN_SetMode (ARM_CAN_MODE mode) 246 \brief Set operating mode for CAN interface. 247 \param[in] mode Operating mode 248 - \ref ARM_CAN_MODE_INITIALIZATION : initialization mode 249 - \ref ARM_CAN_MODE_NORMAL : normal operation mode 250 - \ref ARM_CAN_MODE_RESTRICTED : restricted operation mode 251 - \ref ARM_CAN_MODE_MONITOR : bus monitoring mode 252 - \ref ARM_CAN_MODE_LOOPBACK_INTERNAL : loopback internal mode 253 - \ref ARM_CAN_MODE_LOOPBACK_EXTERNAL : loopback external mode 254 \return \ref execution_status 255 256 \fn ARM_CAN_OBJ_CAPABILITIES ARM_CAN_ObjectGetCapabilities (uint32_t obj_idx) 257 \brief Retrieve capabilities of an object. 258 \param[in] obj_idx Object index 259 \return \ref ARM_CAN_OBJ_CAPABILITIES 260 261 \fn int32_t ARM_CAN_ObjectSetFilter (uint32_t obj_idx, ARM_CAN_FILTER_OPERATION operation, uint32_t id, uint32_t arg) 262 \brief Add or remove filter for message reception. 263 \param[in] obj_idx Object index of object that filter should be or is assigned to 264 \param[in] operation Operation on filter 265 - \ref ARM_CAN_FILTER_ID_EXACT_ADD : add exact id filter 266 - \ref ARM_CAN_FILTER_ID_EXACT_REMOVE : remove exact id filter 267 - \ref ARM_CAN_FILTER_ID_RANGE_ADD : add range id filter 268 - \ref ARM_CAN_FILTER_ID_RANGE_REMOVE : remove range id filter 269 - \ref ARM_CAN_FILTER_ID_MASKABLE_ADD : add maskable id filter 270 - \ref ARM_CAN_FILTER_ID_MASKABLE_REMOVE : remove maskable id filter 271 \param[in] id ID or start of ID range (depending on filter type) 272 \param[in] arg Mask or end of ID range (depending on filter type) 273 \return \ref execution_status 274 275 \fn int32_t ARM_CAN_ObjectConfigure (uint32_t obj_idx, ARM_CAN_OBJ_CONFIG obj_cfg) 276 \brief Configure object. 277 \param[in] obj_idx Object index 278 \param[in] obj_cfg Object configuration state 279 - \ref ARM_CAN_OBJ_INACTIVE : deactivate object 280 - \ref ARM_CAN_OBJ_RX : configure object for reception 281 - \ref ARM_CAN_OBJ_TX : configure object for transmission 282 - \ref ARM_CAN_OBJ_RX_RTR_TX_DATA : configure object that on RTR reception automatically transmits Data Frame 283 - \ref ARM_CAN_OBJ_TX_RTR_RX_DATA : configure object that transmits RTR and automatically receives Data Frame 284 \return \ref execution_status 285 286 \fn int32_t ARM_CAN_MessageSend (uint32_t obj_idx, ARM_CAN_MSG_INFO *msg_info, const uint8_t *data, uint8_t size) 287 \brief Send message on CAN bus. 288 \param[in] obj_idx Object index 289 \param[in] msg_info Pointer to CAN message information 290 \param[in] data Pointer to data buffer 291 \param[in] size Number of data bytes to send 292 \return value >= 0 number of data bytes accepted to send 293 \return value < 0 \ref execution_status 294 295 \fn int32_t ARM_CAN_MessageRead (uint32_t obj_idx, ARM_CAN_MSG_INFO *msg_info, uint8_t *data, uint8_t size) 296 \brief Read message received on CAN bus. 297 \param[in] obj_idx Object index 298 \param[out] msg_info Pointer to read CAN message information 299 \param[out] data Pointer to data buffer for read data 300 \param[in] size Maximum number of data bytes to read 301 \return value >= 0 number of data bytes read 302 \return value < 0 \ref execution_status 303 304 \fn int32_t ARM_CAN_Control (uint32_t control, uint32_t arg) 305 \brief Control CAN interface. 306 \param[in] control Operation 307 - \ref ARM_CAN_SET_FD_MODE : set FD operation mode 308 - \ref ARM_CAN_ABORT_MESSAGE_SEND : abort sending of CAN message 309 - \ref ARM_CAN_CONTROL_RETRANSMISSION : enable/disable automatic retransmission 310 - \ref ARM_CAN_SET_TRANSCEIVER_DELAY : set transceiver delay 311 \param[in] arg Argument of operation 312 \return \ref execution_status 313 314 \fn ARM_CAN_STATUS ARM_CAN_GetStatus (void) 315 \brief Get CAN status. 316 \return CAN status \ref ARM_CAN_STATUS 317 318 \fn void ARM_CAN_SignalUnitEvent (uint32_t event) 319 \brief Signal CAN unit event. 320 \param[in] event \ref CAN_unit_events 321 \return none 322 323 \fn void ARM_CAN_SignalObjectEvent (uint32_t obj_idx, uint32_t event) 324 \brief Signal CAN object event. 325 \param[in] obj_idx Object index 326 \param[in] event \ref CAN_events 327 \return none 328 */ 329 330 typedef void (*ARM_CAN_SignalUnitEvent_t) (uint32_t event); ///< Pointer to \ref ARM_CAN_SignalUnitEvent : Signal CAN Unit Event. 331 typedef void (*ARM_CAN_SignalObjectEvent_t) (uint32_t obj_idx, uint32_t event); ///< Pointer to \ref ARM_CAN_SignalObjectEvent : Signal CAN Object Event. 332 333 334 /** 335 \brief CAN Device Driver Capabilities. 336 */ 337 typedef struct _ARM_CAN_CAPABILITIES { 338 uint32_t num_objects : 8; ///< Number of \ref can_objects available 339 uint32_t reentrant_operation : 1; ///< Support for reentrant calls to \ref ARM_CAN_MessageSend, \ref ARM_CAN_MessageRead, \ref ARM_CAN_ObjectConfigure and abort message sending used by \ref ARM_CAN_Control 340 uint32_t fd_mode : 1; ///< Support for CAN with flexible data-rate mode (CAN_FD) (set by \ref ARM_CAN_Control) 341 uint32_t restricted_mode : 1; ///< Support for restricted operation mode (set by \ref ARM_CAN_SetMode) 342 uint32_t monitor_mode : 1; ///< Support for bus monitoring mode (set by \ref ARM_CAN_SetMode) 343 uint32_t internal_loopback : 1; ///< Support for internal loopback mode (set by \ref ARM_CAN_SetMode) 344 uint32_t external_loopback : 1; ///< Support for external loopback mode (set by \ref ARM_CAN_SetMode) 345 uint32_t reserved : 18; ///< Reserved (must be zero) 346 } ARM_CAN_CAPABILITIES; 347 348 349 /** 350 \brief Access structure of the CAN Driver. 351 */ 352 typedef struct _ARM_DRIVER_CAN { 353 ARM_DRIVER_VERSION (*GetVersion) (void); ///< Pointer to \ref ARM_CAN_GetVersion : Get driver version. 354 ARM_CAN_CAPABILITIES (*GetCapabilities) (void); ///< Pointer to \ref ARM_CAN_GetCapabilities : Get driver capabilities. 355 int32_t (*Initialize) (ARM_CAN_SignalUnitEvent_t cb_unit_event, 356 ARM_CAN_SignalObjectEvent_t cb_object_event); ///< Pointer to \ref ARM_CAN_Initialize : Initialize CAN interface. 357 int32_t (*Uninitialize) (void); ///< Pointer to \ref ARM_CAN_Uninitialize : De-initialize CAN interface. 358 int32_t (*PowerControl) (ARM_POWER_STATE state); ///< Pointer to \ref ARM_CAN_PowerControl : Control CAN interface power. 359 uint32_t (*GetClock) (void); ///< Pointer to \ref ARM_CAN_GetClock : Retrieve CAN base clock frequency. 360 int32_t (*SetBitrate) (ARM_CAN_BITRATE_SELECT select, 361 uint32_t bitrate, 362 uint32_t bit_segments); ///< Pointer to \ref ARM_CAN_SetBitrate : Set bitrate for CAN interface. 363 int32_t (*SetMode) (ARM_CAN_MODE mode); ///< Pointer to \ref ARM_CAN_SetMode : Set operating mode for CAN interface. 364 ARM_CAN_OBJ_CAPABILITIES (*ObjectGetCapabilities) (uint32_t obj_idx); ///< Pointer to \ref ARM_CAN_ObjectGetCapabilities : Retrieve capabilities of an object. 365 int32_t (*ObjectSetFilter) (uint32_t obj_idx, 366 ARM_CAN_FILTER_OPERATION operation, 367 uint32_t id, 368 uint32_t arg); ///< Pointer to \ref ARM_CAN_ObjectSetFilter : Add or remove filter for message reception. 369 int32_t (*ObjectConfigure) (uint32_t obj_idx, 370 ARM_CAN_OBJ_CONFIG obj_cfg); ///< Pointer to \ref ARM_CAN_ObjectConfigure : Configure object. 371 int32_t (*MessageSend) (uint32_t obj_idx, 372 ARM_CAN_MSG_INFO *msg_info, 373 const uint8_t *data, 374 uint8_t size); ///< Pointer to \ref ARM_CAN_MessageSend : Send message on CAN bus. 375 int32_t (*MessageRead) (uint32_t obj_idx, 376 ARM_CAN_MSG_INFO *msg_info, 377 uint8_t *data, 378 uint8_t size); ///< Pointer to \ref ARM_CAN_MessageRead : Read message received on CAN bus. 379 int32_t (*Control) (uint32_t control, 380 uint32_t arg); ///< Pointer to \ref ARM_CAN_Control : Control CAN interface. 381 ARM_CAN_STATUS (*GetStatus) (void); ///< Pointer to \ref ARM_CAN_GetStatus : Get CAN status. 382 } const ARM_DRIVER_CAN; 383 384 #ifdef __cplusplus 385 } 386 #endif 387 388 #endif /* DRIVER_CAN_H_ */ 389