2019-02-12 04:17:26 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2019 Alexander Wachter
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef ZEPHYR_SUBSYS_NET_CAN_ISOTP_INTERNAL_H_
|
|
|
|
#define ZEPHYR_SUBSYS_NET_CAN_ISOTP_INTERNAL_H_
|
|
|
|
|
|
|
|
|
|
|
|
#include <canbus/isotp.h>
|
|
|
|
#include <sys/slist.h>
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Abbreviations
|
|
|
|
* BS Block Size
|
|
|
|
* CAN_DL CAN LL data size
|
|
|
|
* CF Consecutive Frame
|
|
|
|
* CTS Continue to send
|
|
|
|
* DLC Data length code
|
|
|
|
* FC Flow Control
|
|
|
|
* FF First Frame
|
|
|
|
* SF Single Frame
|
|
|
|
* FS Flow Status
|
|
|
|
* AE Adders Extension
|
|
|
|
* SN Sequence Number
|
|
|
|
* ST Separation time
|
|
|
|
* PCI Process Control Information
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* This is for future use when we have CAN-FD */
|
|
|
|
#ifdef ISOTP_USE_CAN_FD
|
|
|
|
/* #define ISOTP_CAN_DL CONFIG_ISOTP_TX_DL* */
|
|
|
|
#define ISOTP_CAN_DL 8
|
|
|
|
#else
|
|
|
|
#define ISOTP_CAN_DL 8
|
|
|
|
#endif/*ISOTP_USE_CAN_FD*/
|
|
|
|
|
|
|
|
/* Protocol control information*/
|
|
|
|
#define ISOTP_PCI_SF 0x00 /* Single frame*/
|
|
|
|
#define ISOTP_PCI_FF 0x01 /* First frame */
|
|
|
|
#define ISOTP_PCI_CF 0x02 /* Consecutive frame */
|
|
|
|
#define ISOTP_PCI_FC 0x03 /* Flow control frame */
|
|
|
|
|
|
|
|
#define ISOTP_PCI_TYPE_BYTE 0
|
|
|
|
#define ISOTP_PCI_TYPE_POS 4
|
|
|
|
#define ISOTP_PCI_TYPE_MASK 0xF0
|
|
|
|
#define ISOTP_PCI_TYPE_SF (ISOTP_PCI_SF << ISOTP_PCI_TYPE_POS)
|
|
|
|
#define ISOTP_PCI_TYPE_FF (ISOTP_PCI_FF << ISOTP_PCI_TYPE_POS)
|
|
|
|
#define ISOTP_PCI_TYPE_CF (ISOTP_PCI_CF << ISOTP_PCI_TYPE_POS)
|
|
|
|
#define ISOTP_PCI_TYPE_FC (ISOTP_PCI_FC << ISOTP_PCI_TYPE_POS)
|
|
|
|
|
|
|
|
#define ISOTP_PCI_SF_DL_MASK 0x0F
|
|
|
|
|
|
|
|
#define ISOTP_PCI_FF_DL_UPPER_BYTE 0
|
|
|
|
#define ISOTP_PCI_FF_DL_UPPER_MASK 0x0F
|
|
|
|
#define ISOTP_PCI_FF_DL_LOWER_BYTE 1
|
|
|
|
|
|
|
|
#define ISOTP_PCI_FS_BYTE 0
|
|
|
|
#define ISOTP_PCI_FS_MASK 0x0F
|
|
|
|
#define ISOTP_PCI_BS_BYTE 1
|
|
|
|
#define ISOTP_PCI_ST_MIN_BYTE 2
|
|
|
|
|
|
|
|
#define ISOTP_PCI_FS_CTS 0x0
|
|
|
|
#define ISOTP_PCI_FS_WAIT 0x1
|
|
|
|
#define ISOTP_PCI_FS_OVFLW 0x2
|
|
|
|
|
|
|
|
#define ISOTP_PCI_SN_MASK 0x0F
|
|
|
|
|
|
|
|
#define ISOTP_FF_DL_MIN (ISOTP_CAN_DL)
|
|
|
|
|
|
|
|
#define ISOTP_STMIN_MAX 0xFA
|
|
|
|
#define ISOTP_STMIN_MS_MAX 0x7F
|
|
|
|
#define ISOTP_STMIN_US_BEGIN 0xF1
|
|
|
|
#define ISOTP_STMIN_US_END 0xF9
|
|
|
|
|
|
|
|
#define ISOTP_WFT_FIRST 0xFF
|
|
|
|
|
2020-05-04 21:11:41 +08:00
|
|
|
#define ISOTP_BS (CONFIG_ISOTP_BS_TIMEOUT)
|
|
|
|
#define ISOTP_A (CONFIG_ISOTP_A_TIMEOUT)
|
|
|
|
#define ISOTP_CR (CONFIG_ISOTP_CR_TIMEOUT)
|
2019-02-12 04:17:26 +08:00
|
|
|
|
|
|
|
/* Just before the sender would time out*/
|
2020-05-04 21:11:41 +08:00
|
|
|
#define ISOTP_ALLOC_TIMEOUT (CONFIG_ISOTP_A_TIMEOUT - 100)
|
2019-02-12 04:17:26 +08:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
enum isotp_rx_state {
|
|
|
|
ISOTP_RX_STATE_WAIT_FF_SF,
|
|
|
|
ISOTP_RX_STATE_PROCESS_SF,
|
|
|
|
ISOTP_RX_STATE_PROCESS_FF,
|
|
|
|
ISOTP_RX_STATE_TRY_ALLOC,
|
|
|
|
ISOTP_RX_STATE_SEND_FC,
|
|
|
|
ISOTP_RX_STATE_WAIT_CF,
|
|
|
|
ISOTP_RX_STATE_SEND_WAIT,
|
|
|
|
ISOTP_RX_STATE_ERR,
|
|
|
|
ISOTP_RX_STATE_RECYCLE,
|
|
|
|
ISOTP_RX_STATE_UNBOUND
|
|
|
|
};
|
|
|
|
|
|
|
|
enum isotp_tx_state {
|
|
|
|
ISOTP_TX_STATE_RESET,
|
|
|
|
ISOTP_TX_SEND_SF,
|
|
|
|
ISOTP_TX_SEND_FF,
|
|
|
|
ISOTP_TX_WAIT_FC,
|
|
|
|
ISOTP_TX_SEND_CF,
|
|
|
|
ISOTP_TX_WAIT_ST,
|
|
|
|
ISOTP_TX_WAIT_BACKLOG,
|
|
|
|
ISOTP_TX_WAIT_FIN,
|
|
|
|
ISOTP_TX_ERR
|
|
|
|
};
|
|
|
|
|
|
|
|
struct isotp_global_ctx {
|
|
|
|
sys_slist_t alloc_list;
|
|
|
|
sys_slist_t ff_sf_alloc_list;
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* ZEPHYR_SUBSYS_NET_CAN_ISOTP_INTERNAL_H_ */
|