start refactoring transmitting

This commit is contained in:
Wolfgang Hottgenroth 2020-11-25 11:04:36 +01:00
parent c14d4fe892
commit 354a1670ee
Signed by: wn
GPG Key ID: 6C1E5E531E0D5D7F

View File

@ -18,7 +18,6 @@
#include <oled.h> #include <oled.h>
#include <ringbuffer.h> #include <ringbuffer.h>
#include <mbus/mbus-protocol.h> #include <mbus/mbus-protocol.h>
static const char MBUS_TOPIC[] = "IoT/MBGW3/Measurement"; static const char MBUS_TOPIC[] = "IoT/MBGW3/Measurement";
@ -272,7 +271,18 @@ void mbusCommISR() {
mbusCommHandle.receiveBuffer.buffer[mbusCommHandle.receiveBuffer.writeIdx] = data; mbusCommHandle.receiveBuffer.buffer[mbusCommHandle.receiveBuffer.writeIdx] = data;
mbusCommHandle.receiveBuffer.writeIdx += 1; mbusCommHandle.receiveBuffer.writeIdx += 1;
} }
return; } else if ((isrflags & USART_SR_TXE) != RESET) {
if (mbusCommHandle.sendBuffer.readIdx < mbusCommHandle.sendBuffer.writeIdx) {
mbusUart.Instance->DR = mbusCommHandle.sendBuffer.buffer[mbusCommHandle.sendBuffer.readIdx];
mbusCommHandle.sendBuffer.readIdx += 1;
if (mbusCommHandle.sendBuffer.readIdx == mbusCommHandle.sendBuffer.writeIdx) {
__HAL_UART_DISABLE_IT(&mbusUart, UART_IT_TXE);
__HAL_UART_ENABLE_IT(&mbusUart, UART_IT_TC);
}
}
} else if ((isrflags & USART_SR_TC) != RESET) {
__HAL_UART_DISABLE_IT(&mbusUart, UART_IT_TC);
mbusCommHandle.state = MBCS_SENDING_DONE;
} else { } else {
if ((isrflags & USART_SR_FE) != RESET) { if ((isrflags & USART_SR_FE) != RESET) {
mbusCommStats.uartFramingErrCnt += 1; mbusCommStats.uartFramingErrCnt += 1;
@ -330,7 +340,11 @@ void mbusCommExec() {
} else { } else {
mbusCommHandle.retryCnt = 0; mbusCommHandle.retryCnt = 0;
// FIXME sending possibly needs to be done in a different way // FIXME sending possibly needs to be done in a different way
HAL_UART_Transmit(&mbusUart, mbusCommHandle.sendBuffer.buffer, 5, HAL_MAX_DELAY); // HAL_UART_Transmit(&mbusUart, mbusCommHandle.sendBuffer.buffer, 5, HAL_MAX_DELAY);
// enable transmitter interrupt
__HAL_UART_ENABLE_IT(&mbusUart, UART_IT_TXE);
// transition from here to SENDING_DONE is initiate by mbusCommTxCpltCallback // transition from here to SENDING_DONE is initiate by mbusCommTxCpltCallback
// interrupt callback // interrupt callback
mbusCommHandle.state = MBCS_SENDING_DONE; mbusCommHandle.state = MBCS_SENDING_DONE;
@ -719,6 +733,7 @@ void mbusCommInit() {
__HAL_UART_ENABLE_IT(&mbusUart, UART_IT_ERR); __HAL_UART_ENABLE_IT(&mbusUart, UART_IT_ERR);
__HAL_UART_ENABLE_IT(&mbusUart, UART_IT_RXNE); __HAL_UART_ENABLE_IT(&mbusUart, UART_IT_RXNE);
// init buffers
mbusCommHandle.receiveBuffer.size = 256; mbusCommHandle.receiveBuffer.size = 256;
mbusCommHandle.receiveBuffer.buffer = (uint8_t*) malloc(mbusCommHandle.receiveBuffer.size); mbusCommHandle.receiveBuffer.buffer = (uint8_t*) malloc(mbusCommHandle.receiveBuffer.size);
mbusCommHandle.receiveBuffer.readIdx = 0; mbusCommHandle.receiveBuffer.readIdx = 0;