net: socketcan: decouple SocketCAN and CAN controller headers
Decouple the zephyr/net/socketcan.h and zephyr/drivers/can.h header files by moving the SocketCAN utilities to their own header. This is preparation for including the SocketCAN types defined in socketcan.h in a native posix (Linux) SocketCAN driver context without name clashes. Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
This commit is contained in:
parent
626c117cd9
commit
27eb12ed48
5 changed files with 102 additions and 62 deletions
|
|
@ -13,7 +13,6 @@
|
|||
#ifndef ZEPHYR_INCLUDE_NET_SOCKETCAN_H_
|
||||
#define ZEPHYR_INCLUDE_NET_SOCKETCAN_H_
|
||||
|
||||
#include <zephyr/drivers/can.h>
|
||||
#include <zephyr/types.h>
|
||||
#include <zephyr/net/net_ip.h>
|
||||
#include <zephyr/net/net_if.h>
|
||||
|
|
@ -119,67 +118,6 @@ struct socketcan_filter {
|
|||
socketcan_id_t can_mask;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Translate a @a socketcan_frame struct to a @a can_frame struct.
|
||||
*
|
||||
* @param sframe Pointer to sockecan_frame struct.
|
||||
* @param zframe Pointer to can_frame struct.
|
||||
*/
|
||||
static inline void socketcan_to_can_frame(const struct socketcan_frame *sframe,
|
||||
struct can_frame *zframe)
|
||||
{
|
||||
zframe->id_type = (sframe->can_id & BIT(31)) >> 31;
|
||||
zframe->rtr = (sframe->can_id & BIT(30)) >> 30;
|
||||
zframe->id = sframe->can_id & BIT_MASK(29);
|
||||
zframe->dlc = sframe->can_dlc;
|
||||
memcpy(zframe->data, sframe->data, MIN(sizeof(sframe->data), sizeof(zframe->data)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Translate a @a can_frame struct to a @a socketcan_frame struct.
|
||||
*
|
||||
* @param zframe Pointer to can_frame struct.
|
||||
* @param sframe Pointer to socketcan_frame struct.
|
||||
*/
|
||||
static inline void socketcan_from_can_frame(const struct can_frame *zframe,
|
||||
struct socketcan_frame *sframe)
|
||||
{
|
||||
sframe->can_id = (zframe->id_type << 31) | (zframe->rtr << 30) | zframe->id;
|
||||
sframe->can_dlc = zframe->dlc;
|
||||
memcpy(sframe->data, zframe->data, MIN(sizeof(zframe->data), sizeof(sframe->data)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Translate a @a socketcan_filter struct to a @a can_filter struct.
|
||||
*
|
||||
* @param sfilter Pointer to socketcan_filter struct.
|
||||
* @param zfilter Pointer to can_filter struct.
|
||||
*/
|
||||
static inline void socketcan_to_can_filter(const struct socketcan_filter *sfilter,
|
||||
struct can_filter *zfilter)
|
||||
{
|
||||
zfilter->id_type = (sfilter->can_id & BIT(31)) >> 31;
|
||||
zfilter->rtr = (sfilter->can_id & BIT(30)) >> 30;
|
||||
zfilter->id = sfilter->can_id & BIT_MASK(29);
|
||||
zfilter->rtr_mask = (sfilter->can_mask & BIT(30)) >> 30;
|
||||
zfilter->id_mask = sfilter->can_mask & BIT_MASK(29);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Translate a @a can_filter struct to a @a socketcan_filter struct.
|
||||
*
|
||||
* @param zfilter Pointer to can_filter struct.
|
||||
* @param sfilter Pointer to socketcan_filter struct.
|
||||
*/
|
||||
static inline void socketcan_from_can_filter(const struct can_filter *zfilter,
|
||||
struct socketcan_filter *sfilter)
|
||||
{
|
||||
sfilter->can_id = (zfilter->id_type << 31) |
|
||||
(zfilter->rtr << 30) | zfilter->id;
|
||||
sfilter->can_mask = (zfilter->rtr_mask << 30) |
|
||||
(zfilter->id_type << 31) | zfilter->id_mask;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
|||
99
include/zephyr/net/socketcan_utils.h
Normal file
99
include/zephyr/net/socketcan_utils.h
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
/** @file
|
||||
* @brief SocketCAN utilities.
|
||||
*
|
||||
* Utilities for SocketCAN support.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#ifndef ZEPHYR_INCLUDE_NET_SOCKETCAN_UTILS_H_
|
||||
#define ZEPHYR_INCLUDE_NET_SOCKETCAN_UTILS_H_
|
||||
|
||||
#include <zephyr/drivers/can.h>
|
||||
#include <zephyr/net/socketcan.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief SocketCAN utilities
|
||||
* @defgroup socket_can Network Core Library
|
||||
* @ingroup networking
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Translate a @a socketcan_frame struct to a @a can_frame struct.
|
||||
*
|
||||
* @param sframe Pointer to sockecan_frame struct.
|
||||
* @param zframe Pointer to can_frame struct.
|
||||
*/
|
||||
static inline void socketcan_to_can_frame(const struct socketcan_frame *sframe,
|
||||
struct can_frame *zframe)
|
||||
{
|
||||
zframe->id_type = (sframe->can_id & BIT(31)) >> 31;
|
||||
zframe->rtr = (sframe->can_id & BIT(30)) >> 30;
|
||||
zframe->id = sframe->can_id & BIT_MASK(29);
|
||||
zframe->dlc = sframe->can_dlc;
|
||||
memcpy(zframe->data, sframe->data, MIN(sizeof(sframe->data), sizeof(zframe->data)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Translate a @a can_frame struct to a @a socketcan_frame struct.
|
||||
*
|
||||
* @param zframe Pointer to can_frame struct.
|
||||
* @param sframe Pointer to socketcan_frame struct.
|
||||
*/
|
||||
static inline void socketcan_from_can_frame(const struct can_frame *zframe,
|
||||
struct socketcan_frame *sframe)
|
||||
{
|
||||
sframe->can_id = (zframe->id_type << 31) | (zframe->rtr << 30) | zframe->id;
|
||||
sframe->can_dlc = zframe->dlc;
|
||||
memcpy(sframe->data, zframe->data, MIN(sizeof(zframe->data), sizeof(sframe->data)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Translate a @a socketcan_filter struct to a @a can_filter struct.
|
||||
*
|
||||
* @param sfilter Pointer to socketcan_filter struct.
|
||||
* @param zfilter Pointer to can_filter struct.
|
||||
*/
|
||||
static inline void socketcan_to_can_filter(const struct socketcan_filter *sfilter,
|
||||
struct can_filter *zfilter)
|
||||
{
|
||||
zfilter->id_type = (sfilter->can_id & BIT(31)) >> 31;
|
||||
zfilter->rtr = (sfilter->can_id & BIT(30)) >> 30;
|
||||
zfilter->id = sfilter->can_id & BIT_MASK(29);
|
||||
zfilter->rtr_mask = (sfilter->can_mask & BIT(30)) >> 30;
|
||||
zfilter->id_mask = sfilter->can_mask & BIT_MASK(29);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Translate a @a can_filter struct to a @a socketcan_filter struct.
|
||||
*
|
||||
* @param zfilter Pointer to can_filter struct.
|
||||
* @param sfilter Pointer to socketcan_filter struct.
|
||||
*/
|
||||
static inline void socketcan_from_can_filter(const struct can_filter *zfilter,
|
||||
struct socketcan_filter *sfilter)
|
||||
{
|
||||
sfilter->can_id = (zfilter->id_type << 31) |
|
||||
(zfilter->rtr << 30) | zfilter->id;
|
||||
sfilter->can_mask = (zfilter->rtr_mask << 30) |
|
||||
(zfilter->id_type << 31) | zfilter->id_mask;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ZEPHYR_INCLUDE_NET_SOCKETCAN_H_ */
|
||||
|
|
@ -11,6 +11,7 @@ LOG_MODULE_REGISTER(net_socket_can_sample, LOG_LEVEL_DBG);
|
|||
|
||||
#include <zephyr/net/socket.h>
|
||||
#include <zephyr/net/socketcan.h>
|
||||
#include <zephyr/net/socketcan_utils.h>
|
||||
|
||||
#ifdef CONFIG_SAMPLE_SOCKETCAN_LOOPBACK_MODE
|
||||
#include <zephyr/drivers/can.h>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ LOG_MODULE_REGISTER(net_sock_can, CONFIG_NET_SOCKETS_LOG_LEVEL);
|
|||
#include <zephyr/sys/fdtable.h>
|
||||
#include <zephyr/net/canbus.h>
|
||||
#include <zephyr/net/socketcan.h>
|
||||
#include <zephyr/net/socketcan_utils.h>
|
||||
#include <zephyr/drivers/can.h>
|
||||
|
||||
#include "sockets_internal.h"
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include <zephyr/logging/log.h>
|
||||
#include <zephyr/net/socketcan.h>
|
||||
#include <zephyr/net/socketcan_utils.h>
|
||||
#include <zephyr/ztest.h>
|
||||
|
||||
LOG_MODULE_REGISTER(socket_can, LOG_LEVEL_ERR);
|
||||
|
|
|
|||
Loading…
Reference in a new issue