This commit is an implementation of 6LoCAN, a 6Lo adaption layer for Controller Area Networks. 6LoCAN is not yet standardised. Signed-off-by: Alexander Wachter <alexander.wachter@student.tugraz.at>
99 lines
2.5 KiB
C
99 lines
2.5 KiB
C
/*
|
|
* Copyright (c) 2019 Alexander Wachter
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_SUBSYS_NET_L2_CANBUS_INTERNAL_H_
|
|
#define ZEPHYR_SUBSYS_NET_L2_CANBUS_INTERNAL_H_
|
|
|
|
|
|
#ifdef NET_CAN_USE_CAN_FD
|
|
#define NET_CAN_DL 64
|
|
#else
|
|
#define NET_CAN_DL 8
|
|
#endif/*NET_CAN_USE_CAN_FD*/
|
|
|
|
/* Protocol control information*/
|
|
#define NET_CAN_PCI_SF 0x00 /* Single frame*/
|
|
#define NET_CAN_PCI_FF 0x01 /* First frame */
|
|
#define NET_CAN_PCI_CF 0x02 /* Consecutive frame */
|
|
#define NET_CAN_PCI_FC 0x03 /* Flow control frame */
|
|
|
|
#define NET_CAN_PCI_TYPE_BYTE 0
|
|
#define NET_CAN_PCI_TYPE_POS 4
|
|
#define NET_CAN_PCI_TYPE_MASK 0xF0
|
|
#define NET_CAN_PCI_TYPE_SF (NET_CAN_PCI_SF << NET_CAN_PCI_TYPE_POS)
|
|
#define NET_CAN_PCI_TYPE_FF (NET_CAN_PCI_FF << NET_CAN_PCI_TYPE_POS)
|
|
#define NET_CAN_PCI_TYPE_CF (NET_CAN_PCI_CF << NET_CAN_PCI_TYPE_POS)
|
|
#define NET_CAN_PCI_TYPE_FC (NET_CAN_PCI_FC << NET_CAN_PCI_TYPE_POS)
|
|
|
|
#define NET_CAN_PCI_SF_DL_MASK 0x0F
|
|
|
|
#define NET_CAN_PCI_FF_DL_UPPER_BYTE 0
|
|
#define NET_CAN_PCI_FF_DL_UPPER_MASK 0x0F
|
|
#define NET_CAN_PCI_FF_DL_LOWER_BYTE 1
|
|
|
|
#define NET_CAN_PCI_FS_BYTE 0
|
|
#define NET_CAN_PCI_FS_MASK 0x0F
|
|
#define NET_CAN_PCI_BS_BYTE 1
|
|
#define NET_CAN_PCI_ST_MIN_BYTE 2
|
|
|
|
#define NET_CAN_PCI_FS_CTS 0x0
|
|
#define NET_CAN_PCI_FS_WAIT 0x1
|
|
#define NET_CAN_PCI_FS_OVFLW 0x2
|
|
|
|
#define NET_CAN_PCI_SN_MASK 0x0F
|
|
|
|
#define NET_CAN_FF_DL_MIN (NET_CAN_CAN_DL)
|
|
|
|
#define NET_CAN_WFT_FIRST 0xFF
|
|
|
|
#define NET_CAN_BS_TIME K_MSEC(1000)
|
|
#define NET_CAN_A_TIME K_MSEC(1000)
|
|
|
|
#define NET_CAN_FF_CF_TIME K_MSEC(1)
|
|
|
|
#define NET_CAN_STMIN_MAX 0xFA
|
|
#define NET_CAN_STMIN_MS_MAX 0x7F
|
|
#define NET_CAN_STMIN_US_BEGIN 0xF1
|
|
#define NET_CAN_STMIN_US_END 0xF9
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
enum net_can_isotp_tx_state {
|
|
NET_CAN_TX_STATE_UNUSED,
|
|
NET_CAN_TX_STATE_RESET,
|
|
NET_CAN_TX_STATE_WAIT_FC,
|
|
NET_CAN_TX_STATE_SEND_CF,
|
|
NET_CAN_TX_STATE_WAIT_ST,
|
|
NET_CAN_TX_STATE_WAIT_TX_BACKLOG,
|
|
NET_CAN_TX_STATE_FIN,
|
|
NET_CAN_TX_STATE_ERR
|
|
};
|
|
|
|
enum net_can_isotp_rx_state {
|
|
NET_CAN_RX_STATE_UNUSED,
|
|
NET_CAN_RX_STATE_RESET,
|
|
NET_CAN_RX_STATE_FF,
|
|
NET_CAN_RX_STATE_CF,
|
|
NET_CAN_RX_STATE_FIN,
|
|
NET_CAN_RX_STATE_TIMEOUT
|
|
};
|
|
|
|
struct canbus_l2_ctx {
|
|
struct canbus_isotp_tx_ctx tx_ctx[CONFIG_NET_PKT_TX_COUNT];
|
|
struct canbus_isotp_rx_ctx rx_ctx[CONFIG_NET_PKT_RX_COUNT];
|
|
struct k_mutex tx_ctx_mtx;
|
|
struct k_mutex rx_ctx_mtx;
|
|
struct k_sem tx_sem;
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ZEPHYR_SUBSYS_NET_L2_CANBUS_INTERNAL_H_ */
|