# ISO-TP configuration options

# Copyright (c) 2019 Alexander Wachter
# SPDX-License-Identifier: Apache-2.0

menuconfig ISOTP
	bool "ISO-TP Transport [EXPERIMENTAL]"
	select NET_BUF
	select POLL
	select EXPERIMENTAL
	help
	  Enable ISO TP support for CAN

if ISOTP

module = ISOTP
module-str = ISOTP
source "subsys/logging/Kconfig.template.log_config"

config ISOTP_WFTMAX
	int "WFTmax (Max WAIT frames before aborting)."
	default 10
	range 0 254
	help
	  This value defines the maximum number of WAIT frames before the transmission
	  is aborted.

config ISOTP_BS_TIMEOUT
	int "Bs timeout [ms] (timeout for receiving the frame control)"
	default 1000
	range 200 10000
	help
	  Timeout for the reception of the next FC frame. ISO 15765-2: 1000ms

config ISOTP_A_TIMEOUT
	int "Ar and As timeout [ms] (sending and receiving timeout)"
	default 1000
	range 200 10000
	help
	  As (sender transmit timeout) and Ar (receiver transmit timeout).
	  ISO 15765-2: 1000ms

config ISOTP_CR_TIMEOUT
	int "Cr timeout [ms] (timeout for consecutive frames)"
	default 1000
	range 200 10000
	help
	  Cr (receiver consecutive frame) timeout.
	  ISO 15765-2: 1000ms

config ISOTP_REQUIRE_RX_PADDING
	bool "Require padding for received messages"
	help
	  If enabled, SFs and the last CF must always have a DLC of 8 bytes
	  (for classic CAN) and unused bytes must be padded by the sending
	  device. This setting allows to be compliant to AUTOSAR Specification
	  of CAN Transport Layer.

	  By default, received CAN frames with or without padding are accepted.

config ISOTP_ENABLE_TX_PADDING
	bool "Padding for transmitted messages"
	help
	  Add padding bytes 0xCC (as recommended by Bosch) if the PDU payload
	  does not fit exactly into the CAN frame.

config ISOTP_RX_BUF_COUNT
	int "Number of data buffers for receiving data"
	default 4
	help
	  Each data buffer will occupy ISOTP_RX_BUF_SIZE + smallish
	  header (sizeof(struct net_buf)) amount of data.

config ISOTP_RX_BUF_SIZE
	int "Size of one buffer data block"
	default 56
	help
	  This value defines the size of a single block in the pool. The number of
	  blocks is given by ISOTP_RX_BUF_COUNT. To be efficient use a multiple of
	  CAN_DL - 1 (for classic can : 8 - 1 = 7).

config ISOTP_RX_SF_FF_BUF_COUNT
	int "Number of SF and FF data buffers for receiving data"
	default 4
	help
	  This buffer is used for first and single frames. It is extra because the
	  buffer has to be ready for the first reception in isr context and therefor
	  is allocated when binding.
	  Each buffer will occupy CAN_DL - 1 byte + header (sizeof(struct net_buf))
	  amount of data.

config ISOTP_USE_TX_BUF
	bool "Buffer tx writes"
	default n
	help
	  Copy the outgoing data to a net buffer so that the calling function
	  can discard the data.

if ISOTP_USE_TX_BUF

config ISOTP_TX_BUF_COUNT
	int "Number of data buffers for sending data"
	default 4
	help
	  Each data buffer will occupy CONFIG_NET_BUF_DATA_SIZE + smallish
	  header (sizeof(struct net_buf)) amount of data. If context buffers
	  are used, use the same size here.

config ISOTP_BUF_TX_DATA_POOL_SIZE
	int "Size of the memory pool where buffers are allocated from"
	default 256
	help
	  This value defines the size of the memory pool where the buffers
	  for sending are allocated from.

endif # ISOTP_USE_TX_BUF

config ISOTP_ENABLE_CONTEXT_BUFFERS
	bool "Buffered tx contexts"
	default y
	help
	  This option enables buffered sending contexts. This makes send and
	  forget possible. A memory slab is used to buffer the context.

config ISOTP_TX_CONTEXT_BUF_COUNT
	int "Amount of context buffers for sending data"
	default 4
	depends on ISOTP_ENABLE_CONTEXT_BUFFERS
	help
	  This defines the size of the memory slab where the buffers are
	  allocated from.

endif # ISOTP
