| /* |
| * Copyright (c) 2019 Alexander Wachter |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_SUBSYS_CANBUS_ISOTP_ISOTP_INTERNAL_H_ |
| #define ZEPHYR_SUBSYS_CANBUS_ISOTP_ISOTP_INTERNAL_H_ |
| |
| #include <zephyr/canbus/isotp.h> |
| #include <zephyr/sys/slist.h> |
| |
| /* 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 8 |
| #define ISOTP_PADDED_FRAME_DL_MIN 8 |
| #define ISOTP_PAD_BYTE 0xCC |
| |
| #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_4BIT_SF_MAX_CAN_DL 8 |
| |
| #define ISOTP_BS_TIMEOUT_MS (CONFIG_ISOTP_BS_TIMEOUT) |
| #define ISOTP_A_TIMEOUT_MS (CONFIG_ISOTP_A_TIMEOUT) |
| #define ISOTP_CR_TIMEOUT_MS (CONFIG_ISOTP_CR_TIMEOUT) |
| |
| /* Just before the sender would time out*/ |
| #define ISOTP_ALLOC_TIMEOUT_MS (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_CANBUS_ISOTP_ISOTP_INTERNAL_H_ */ |