mirror of https://github.com/rusefi/rusefi-1.git
43 lines
969 B
C++
43 lines
969 B
C++
/*
|
|
* @file connector_uart_dma.h
|
|
*
|
|
* @date Jun 21, 2020
|
|
* @author Andrey Belomutskiy, (c) 2012-2020
|
|
*/
|
|
|
|
#pragma once
|
|
#include "global.h"
|
|
#include "tunerstudio_io.h"
|
|
|
|
#if HAL_USE_UART && EFI_USE_UART_DMA
|
|
|
|
// See uart_dma_s
|
|
#define TS_FIFO_BUFFER_SIZE (BLOCKING_FACTOR + 30)
|
|
// This must be a power of 2!
|
|
#define TS_DMA_BUFFER_SIZE 32
|
|
|
|
class UartDmaTsChannel : public UartTsChannel {
|
|
public:
|
|
UartDmaTsChannel(UARTDriver& uartDriver);
|
|
|
|
void start(uint32_t baud) override;
|
|
|
|
// Override only read from UartTsChannel
|
|
size_t readTimeout(uint8_t* buffer, size_t size, int timeout) override;
|
|
|
|
void copyDataFromDMA();
|
|
|
|
private:
|
|
// RX FIFO implementation
|
|
// circular DMA buffer
|
|
uint8_t dmaBuffer[TS_DMA_BUFFER_SIZE];
|
|
// current read position for the DMA buffer
|
|
volatile int readPos;
|
|
// secondary FIFO buffer for async. transfer
|
|
uint8_t buffer[TS_FIFO_BUFFER_SIZE];
|
|
// input FIFO Rx queue
|
|
input_queue_t fifoRxQueue;
|
|
};
|
|
|
|
#endif // HAL_USE_UART && EFI_USE_UART_DMA
|