Add support for CLI on AUX1/AUX2
This commit is contained in:
@@ -141,6 +141,24 @@ static void* auxSerialInit(const etx_serial_init* params)
|
||||
return aux_serial_init(&auxSerialState, params);
|
||||
}
|
||||
|
||||
void (*aux1RxCb)(uint8_t*, uint32_t);
|
||||
|
||||
static void aux1_on_rx_byte(uint8_t data)
|
||||
{
|
||||
if (aux1RxCb) aux1RxCb(&data, 1);
|
||||
}
|
||||
|
||||
void aux1SetRxCb(void*, void (*cb)(uint8_t*, uint32_t))
|
||||
{
|
||||
aux1RxCb = cb;
|
||||
if (aux1RxCb) {
|
||||
auxSerialCb.on_receive = aux1_on_rx_byte;
|
||||
stm32_usart_deinit_rx_dma(&auxUSART);
|
||||
} else {
|
||||
auxSerialCb.on_receive = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
const etx_serial_driver_t AuxSerialDriver = {
|
||||
.init = auxSerialInit,
|
||||
.deinit = aux_serial_deinit,
|
||||
@@ -149,7 +167,7 @@ const etx_serial_driver_t AuxSerialDriver = {
|
||||
.waitForTxCompleted = aux_wait_tx_completed,
|
||||
.getByte = aux_get_byte,
|
||||
.getBaudrate = nullptr,
|
||||
.setReceiveCb = nullptr,
|
||||
.setReceiveCb = aux1SetRxCb,
|
||||
.setBaudrateCb = nullptr,
|
||||
};
|
||||
|
||||
@@ -202,15 +220,33 @@ static uint8_t aux2SerialOnSend(uint8_t* data)
|
||||
|
||||
static etx_serial_callbacks_t aux2SerialCb = {
|
||||
.on_send = aux2SerialOnSend,
|
||||
.on_receive = nullptr,
|
||||
.on_receive = nullptr, // TODO: clear on DeInit
|
||||
.on_error = nullptr,
|
||||
};
|
||||
|
||||
void* aux2SerialInit(const etx_serial_init* params)
|
||||
static void* aux2SerialInit(const etx_serial_init* params)
|
||||
{
|
||||
return aux_serial_init(&aux2SerialState, params);
|
||||
}
|
||||
|
||||
void (*aux2RxCb)(uint8_t*, uint32_t);
|
||||
|
||||
static void aux2_on_rx_byte(uint8_t data)
|
||||
{
|
||||
if (aux2RxCb) aux2RxCb(&data, 1);
|
||||
}
|
||||
|
||||
void aux2SetRxCb(void*, void (*cb)(uint8_t*, uint32_t))
|
||||
{
|
||||
aux2RxCb = cb;
|
||||
if (aux2RxCb) {
|
||||
aux2SerialCb.on_receive = aux2_on_rx_byte;
|
||||
stm32_usart_deinit_rx_dma(&aux2USART);
|
||||
} else {
|
||||
aux2SerialCb.on_receive = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void AUX2_SERIAL_USART_IRQHandler(void)
|
||||
{
|
||||
DEBUG_INTERRUPT(INT_SER2);
|
||||
@@ -225,7 +261,7 @@ const etx_serial_driver_t Aux2SerialDriver = {
|
||||
.waitForTxCompleted = aux_wait_tx_completed,
|
||||
.getByte = aux_get_byte,
|
||||
.getBaudrate = nullptr,
|
||||
.setReceiveCb = nullptr,
|
||||
.setReceiveCb = aux2SetRxCb,
|
||||
.setBaudrateCb = nullptr,
|
||||
};
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
|
||||
void stm32_usart_init_rx_dma(const stm32_usart_t* usart, void* buffer, uint32_t length)
|
||||
{
|
||||
if (!usart->rxDMA) return;
|
||||
|
||||
// Disable IRQ based RX
|
||||
LL_USART_DisableIT_RXNE(usart->USARTx);
|
||||
|
||||
@@ -49,6 +51,18 @@ void stm32_usart_init_rx_dma(const stm32_usart_t* usart, void* buffer, uint32_t
|
||||
LL_DMA_EnableStream(usart->rxDMA, usart->rxDMA_Stream);
|
||||
}
|
||||
|
||||
void stm32_usart_deinit_rx_dma(const stm32_usart_t* usart)
|
||||
{
|
||||
if (!usart->rxDMA) return;
|
||||
|
||||
LL_DMA_DeInit(usart->rxDMA, usart->rxDMA_Stream);
|
||||
|
||||
// Enable IRQ based RX
|
||||
LL_USART_EnableIT_RXNE(usart->USARTx);
|
||||
NVIC_SetPriority(usart->IRQn, usart->IRQ_Prio);
|
||||
NVIC_EnableIRQ(usart->IRQn);
|
||||
}
|
||||
|
||||
void stm32_usart_init(const stm32_usart_t* usart, const etx_serial_init* params)
|
||||
{
|
||||
LL_USART_DeInit(usart->USARTx);
|
||||
@@ -118,6 +132,9 @@ void stm32_usart_init(const stm32_usart_t* usart, const etx_serial_init* params)
|
||||
|
||||
void stm32_usart_deinit(const stm32_usart_t* usart)
|
||||
{
|
||||
if (usart->rxDMA) {
|
||||
LL_DMA_DeInit(usart->rxDMA, usart->rxDMA_Stream);
|
||||
}
|
||||
if (usart->txDMA) {
|
||||
LL_DMA_DeInit(usart->txDMA, usart->txDMA_Stream);
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ struct stm32_usart_t {
|
||||
void stm32_usart_init(const stm32_usart_t* usart, const etx_serial_init* params);
|
||||
void stm32_usart_init_rx_dma(const stm32_usart_t* usart, void* buffer, uint32_t length);
|
||||
void stm32_usart_deinit(const stm32_usart_t* usart);
|
||||
void stm32_usart_deinit_rx_dma(const stm32_usart_t* usart);
|
||||
void stm32_usart_send_byte(const stm32_usart_t* usart, uint8_t byte);
|
||||
void stm32_usart_send_buffer(const stm32_usart_t* usart, const uint8_t * data, uint32_t size);
|
||||
void stm32_usart_wait_for_tx_dma(const stm32_usart_t* usart);
|
||||
|
||||
Reference in New Issue
Block a user