1 /* 2 * Copyright (c) 2019 Intel Corporation 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 /** @file 8 * @brief CAN bus socket API definitions. 9 */ 10 11 #ifndef ZEPHYR_INCLUDE_NET_CANBUS_H_ 12 #define ZEPHYR_INCLUDE_NET_CANBUS_H_ 13 14 #include <zephyr/types.h> 15 #include <zephyr/net/net_ip.h> 16 #include <zephyr/net/net_if.h> 17 #include <zephyr/drivers/can.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /** 24 * CAN L2 network driver API. 25 */ 26 struct canbus_api { 27 /** 28 * The net_if_api must be placed in first position in this 29 * struct so that we are compatible with network interface API. 30 */ 31 struct net_if_api iface_api; 32 33 /** Send a CAN packet by socket */ 34 int (*send)(const struct device *dev, struct net_pkt *pkt); 35 36 /** Close the related CAN socket */ 37 void (*close)(const struct device *dev, int filter_id); 38 39 /** Set socket CAN option */ 40 int (*setsockopt)(const struct device *dev, void *obj, int level, 41 int optname, 42 const void *optval, socklen_t optlen); 43 44 /** Get socket CAN option */ 45 int (*getsockopt)(const struct device *dev, void *obj, int level, 46 int optname, 47 const void *optval, socklen_t *optlen); 48 }; 49 50 /* Make sure that the network interface API is properly setup inside 51 * CANBUS API struct (it is the first one). 52 */ 53 BUILD_ASSERT(offsetof(struct canbus_api, iface_api) == 0); 54 55 #ifdef __cplusplus 56 } 57 #endif 58 59 #endif /* ZEPHYR_INCLUDE_NET_CANBUS_H_ */ 60