| /* |
| * 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 |
| |
| #define ISOTP_BS (CONFIG_ISOTP_BS_TIMEOUT) |
| #define ISOTP_A (CONFIG_ISOTP_A_TIMEOUT) |
| #define ISOTP_CR (CONFIG_ISOTP_CR_TIMEOUT) |
| |
| /* Just before the sender would time out*/ |
| #define ISOTP_ALLOC_TIMEOUT (CONFIG_ISOTP_A_TIMEOUT - 100) |
| |
| #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_ */ |