3#include "fifo_buffer.h"
12#define PRINT efiPrintf
16#if EFI_PROD_CODE | EFI_SIMULATOR
17#define can_msg_t msg_t
18#define can_sysinterval_t sysinterval_t
19#define CAN_MSG_OK MSG_OK
20#define CAN_MSG_TIMEOUT MSG_TIMEOUT
25#define CAN_FLOW_STATUS_OK 0
26#define CAN_FLOW_STATUS_WAIT_MORE 1
27#define CAN_FLOW_STATUS_ABORT 2
127#ifndef CAN_FIFO_BUF_SIZE
128#define CAN_FIFO_BUF_SIZE 76
131#define CAN_FIFO_FRAME_SIZE 8
154 IsoTpBase(p_txTransport, p_busIndex, p_rxFrameId, p_txFrameId),
174#define ISOTP_RX_QUEUE_LEN 4
178 IsoTpRx(
size_t p_busIndex, uint32_t p_rxFrameId, uint32_t p_txFrameId)
181 IsoTpBase(nullptr, p_busIndex, p_rxFrameId, p_txFrameId)
225 fifo_buffer_sync<CANRxFrame, ISOTP_RX_QUEUE_LEN>
rxFifoBuf;
230 IsoTpRxTx(
size_t p_busIndex, uint32_t p_rxFrameId, uint32_t p_txFrameId)
232 IsoTpRx(p_busIndex, p_rxFrameId, p_txFrameId)
void registerCanListener(CanListener &listener)
void unregisterCanListener(CanListener &listener)
int32_t can_sysinterval_t
CanRxMessage(const CanRxMessage &msg)
CanRxMessage(const CANRxFrame &f)
CanRxMessage & operator=(const CanRxMessage &msg)
virtual bool get(CanRxMessage &item, int timeout)=0
fifo_buffer< uint8_t, CAN_FIFO_BUF_SIZE > txFifoBuf
fifo_buffer< uint8_t, CAN_FIFO_BUF_SIZE > rxFifoBuf
can_msg_t streamFlushTx(can_sysinterval_t timeout)
int sendDataTimeout(const uint8_t *txbuf, int numBytes, can_sysinterval_t timeout)
int sendFrame(const IsoTpFrameHeader &header, const uint8_t *data, int num, can_sysinterval_t timeout)
int receiveFrame(const CANRxFrame &rxmsg, uint8_t *buf, int num, can_sysinterval_t timeout)
ICanReceiver * rxTransport
can_msg_t streamReceiveTimeout(size_t *np, uint8_t *rxbuf, can_sysinterval_t timeout)
CanStreamerState(ICanTransmitter *p_txTransport, ICanReceiver *p_rxTransport, size_t p_busIndex, uint32_t p_rxFrameId, uint32_t p_txFrameId)
int getDataFromFifo(uint8_t *rxbuf, size_t &numBytes)
can_msg_t streamAddToTxTimeout(size_t *np, const uint8_t *txbuf, can_sysinterval_t timeout)
virtual can_msg_t receive(CANRxFrame *crfp, can_sysinterval_t timeout)=0
virtual void onTpFirstFrame()=0
virtual can_msg_t transmit(CanTxMessage &ctfp, can_sysinterval_t timeout)=0
can_msg_t transmit(CanTxMessage &ctfp, can_sysinterval_t timeout)
int sendFrame(const IsoTpFrameHeader &header, const uint8_t *data, int num, can_sysinterval_t timeout)
ICanTransmitter * txTransport
size_t isoHeaderByteIndex
IsoTpBase(ICanTransmitter *p_txTransport, size_t p_busIndex, uint32_t p_rxFrameId, uint32_t p_txFrameId)
int readTimeout(uint8_t *rxbuf, size_t *size, sysinterval_t timeout)
uint8_t waitingForFrameIndex
virtual void decodeFrame(const CANRxFrame &frame, efitick_t nowNt)
fifo_buffer_sync< CANRxFrame, ISOTP_RX_QUEUE_LEN > rxFifoBuf
IsoTpRx(size_t p_busIndex, uint32_t p_rxFrameId, uint32_t p_txFrameId)
int writeTimeout(const uint8_t *txbuf, size_t size, sysinterval_t timeout)
IsoTpRxTx(size_t p_busIndex, uint32_t p_rxFrameId, uint32_t p_txFrameId)
@ ISO_TP_FRAME_CONSECUTIVE
@ ISO_TP_FRAME_FLOW_CONTROL
uint8_t data8[8]
Frame data.