Line data Source code
1 0 : /* 2 : * Copyright (c) 2022 Vestas Wind Systems A/S 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_CAN_TRANSCEIVER_H_ 8 : #define ZEPHYR_INCLUDE_DRIVERS_CAN_TRANSCEIVER_H_ 9 : 10 : #include <zephyr/drivers/can.h> 11 : #include <zephyr/device.h> 12 : 13 : #ifdef __cplusplus 14 : extern "C" { 15 : #endif 16 : 17 : /** 18 : * @brief CAN Transceiver Driver APIs 19 : * @defgroup can_transceiver CAN Transceiver 20 : * @since 3.1 21 : * @version 0.1.0 22 : * @ingroup io_interfaces 23 : * @{ 24 : */ 25 : 26 : /** 27 : * @cond INTERNAL_HIDDEN 28 : * 29 : * For internal driver use only, skip these in public documentation. 30 : */ 31 : 32 : /** 33 : * @brief Callback API upon enabling CAN transceiver 34 : * See @a can_transceiver_enable() for argument description 35 : */ 36 : typedef int (*can_transceiver_enable_t)(const struct device *dev, can_mode_t mode); 37 : 38 : /** 39 : * @brief Callback API upon disabling CAN transceiver 40 : * See @a can_transceiver_disable() for argument description 41 : */ 42 : typedef int (*can_transceiver_disable_t)(const struct device *dev); 43 : 44 : __subsystem struct can_transceiver_driver_api { 45 : can_transceiver_enable_t enable; 46 : can_transceiver_disable_t disable; 47 : }; 48 : 49 : /** @endcond */ 50 : 51 : /** 52 : * @brief Enable CAN transceiver 53 : * 54 : * Enable the CAN transceiver. 55 : * 56 : * @note The CAN transceiver is controlled by the CAN controller driver and 57 : * should not normally be controlled by the application. 58 : * 59 : * @see can_start() 60 : * 61 : * @param dev Pointer to the device structure for the driver instance. 62 : * @param mode Operation mode. 63 : * @retval 0 If successful. 64 : * @retval -EIO General input/output error, failed to enable device. 65 : */ 66 1 : static inline int can_transceiver_enable(const struct device *dev, can_mode_t mode) 67 : { 68 : return DEVICE_API_GET(can_transceiver, dev)->enable(dev, mode); 69 : } 70 : 71 : /** 72 : * @brief Disable CAN transceiver 73 : * 74 : * Disable the CAN transceiver. 75 : 76 : * @note The CAN transceiver is controlled by the CAN controller driver and 77 : * should not normally be controlled by the application. 78 : * 79 : * @see can_stop() 80 : * 81 : * @param dev Pointer to the device structure for the driver instance. 82 : * @retval 0 If successful. 83 : * @retval -EIO General input/output error, failed to disable device. 84 : */ 85 1 : static inline int can_transceiver_disable(const struct device *dev) 86 : { 87 : return DEVICE_API_GET(can_transceiver, dev)->disable(dev); 88 : } 89 : 90 : /** 91 : * @} 92 : */ 93 : 94 : #ifdef __cplusplus 95 : } 96 : #endif 97 : 98 : #endif /* ZEPHYR_INCLUDE_DRIVERS_CAN_TRANSCEIVER_H_ */