rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
serial_can.h
Go to the documentation of this file.
1/**
2 * @file serial_can.h
3 *
4 * @date Aug 1, 2020
5 * @author andreika <prometheus.pcb@gmail.com>
6 * @author Andrey Belomutskiy, (c) 2012-2020
7 */
8
9#pragma once
10
11#include "isotp.h"
12#include "can_listener.h"
13
15public:
17 : CanListener(CAN_ECU_SERIAL_RX_ID)
18 {
19 }
20
21 virtual void decodeFrame(const CANRxFrame& frame, efitick_t nowNt);
22
23 bool get(CanRxMessage &item, int timeout) {
24 return rxFifo.get(item, timeout);
25 }
26
27protected:
28 // CanStreamerState has non-sync fifo, unify?
29 fifo_buffer_sync<CanRxMessage, CAN_FIFO_FRAME_SIZE> rxFifo;
30};
31
32#if HAL_USE_CAN
34public:
35 CanTransport(CanRxMessageSource *p_source) : source(p_source) {}
36 void init();
37
38 virtual can_msg_t transmit(CanTxMessage &ctfp, can_sysinterval_t timeout) override;
39 virtual can_msg_t receive(CANRxFrame *crfp, can_sysinterval_t timeout) override;
40 virtual void onTpFirstFrame() override;
41
43};
44
45void tsOverCanInit();
46
47// we don't have canStreamSendTimeout() because we need to "bufferize" the stream and send it in fixed-length packets
48msg_t canStreamAddToTxTimeout(size_t *np, const uint8_t *txbuf, sysinterval_t timeout);
49msg_t canStreamFlushTx(sysinterval_t timeout);
50
51msg_t canStreamReceiveTimeout(size_t *np, uint8_t *rxbuf, sysinterval_t timeout);
52#endif /* HAL_USE_CAN */
int32_t can_msg_t
Definition can_mocks.h:6
int32_t can_sysinterval_t
Definition can_mocks.h:7
CanRxMessageSource * source
Definition serial_can.h:42
virtual void onTpFirstFrame() override
CanTransport(CanRxMessageSource *p_source)
Definition serial_can.h:35
virtual can_msg_t transmit(CanTxMessage &ctfp, can_sysinterval_t timeout) override
virtual can_msg_t receive(CANRxFrame *crfp, can_sysinterval_t timeout) override
bool get(CanRxMessage &item, int timeout)
Definition serial_can.h:23
fifo_buffer_sync< CanRxMessage, CAN_FIFO_FRAME_SIZE > rxFifo
Definition serial_can.h:29
virtual void decodeFrame(const CANRxFrame &frame, efitick_t nowNt)
msg_t canStreamReceiveTimeout(size_t *np, uint8_t *rxbuf, sysinterval_t timeout)
void tsOverCanInit()
msg_t canStreamAddToTxTimeout(size_t *np, const uint8_t *txbuf, sysinterval_t timeout)
msg_t canStreamFlushTx(sysinterval_t timeout)