mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-09 17:29:50 +03:00
add check for max telegram length
This commit is contained in:
@@ -67,9 +67,9 @@ static void ICACHE_FLASH_ATTR emsuart_recvTask(os_event_t * events) {
|
|||||||
|
|
||||||
// validate and transmit the EMS buffer, excluding the BRK
|
// validate and transmit the EMS buffer, excluding the BRK
|
||||||
if (length == 2) {
|
if (length == 2) {
|
||||||
// it's a poll or status code, single byte
|
// it's a poll or status code, single byte and ok to send on
|
||||||
ems_parseTelegram((uint8_t *)pCurrent->buffer, 1);
|
ems_parseTelegram((uint8_t *)pCurrent->buffer, 1);
|
||||||
} else if ((length > 4) && (pCurrent->buffer[length - 2] != 0x00)) {
|
} else if ((length > 4) && (length <= EMS_MAXBUFFERSIZE) && (pCurrent->buffer[length - 2] != 0x00)) {
|
||||||
// ignore double BRK at the end, possibly from the Tx loopback
|
// ignore double BRK at the end, possibly from the Tx loopback
|
||||||
// also telegrams with no data value
|
// also telegrams with no data value
|
||||||
ems_parseTelegram((uint8_t *)pCurrent->buffer, length - 1); // transmit EMS buffer, excluding the BRK
|
ems_parseTelegram((uint8_t *)pCurrent->buffer, length - 1); // transmit EMS buffer, excluding the BRK
|
||||||
@@ -159,16 +159,6 @@ void ICACHE_FLASH_ATTR emsuart_start() {
|
|||||||
ETS_UART_INTR_ENABLE();
|
ETS_UART_INTR_ENABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* set loopback mode and clear Tx/Rx FIFO
|
|
||||||
*/
|
|
||||||
static inline void ICACHE_FLASH_ATTR emsuart_loopback(bool enable) {
|
|
||||||
if (enable)
|
|
||||||
USC0(EMSUART_UART) |= (1 << UCLBE); // enable loopback
|
|
||||||
else
|
|
||||||
USC0(EMSUART_UART) &= ~(1 << UCLBE); // disable loopback
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Send to Tx, ending with a <BRK>
|
* Send to Tx, ending with a <BRK>
|
||||||
*/
|
*/
|
||||||
@@ -205,7 +195,7 @@ void ICACHE_FLASH_ATTR emsuart_tx_buffer(uint8_t * buf, uint8_t len) {
|
|||||||
// worst case, we'll see an additional Rx-BRK...
|
// worst case, we'll see an additional Rx-BRK...
|
||||||
if (!(USIS(EMSUART_UART) & (1 << UIBD))) {
|
if (!(USIS(EMSUART_UART) & (1 << UIBD))) {
|
||||||
// no bus collision - send terminating BRK signal
|
// no bus collision - send terminating BRK signal
|
||||||
emsuart_loopback(true);
|
USC0(EMSUART_UART) |= (1 << UCLBE); // enable loopback
|
||||||
USC0(EMSUART_UART) |= (1 << UCBRK); // set <BRK>
|
USC0(EMSUART_UART) |= (1 << UCBRK); // set <BRK>
|
||||||
|
|
||||||
// wait until BRK detected...
|
// wait until BRK detected...
|
||||||
@@ -215,8 +205,8 @@ void ICACHE_FLASH_ATTR emsuart_tx_buffer(uint8_t * buf, uint8_t len) {
|
|||||||
|
|
||||||
USC0(EMSUART_UART) &= ~(1 << UCBRK); // clear <BRK>
|
USC0(EMSUART_UART) &= ~(1 << UCBRK); // clear <BRK>
|
||||||
|
|
||||||
USIC(EMSUART_UART) = (1 << UIBD); // clear BRK detect IRQ
|
USIC(EMSUART_UART) = (1 << UIBD); // clear BRK detect IRQ
|
||||||
emsuart_loopback(false); // disable loopback mode
|
USC0(EMSUART_UART) &= ~(1 << UCLBE); // disable loopback
|
||||||
}
|
}
|
||||||
|
|
||||||
ETS_UART_INTR_ENABLE(); // receive anything from FIFO...
|
ETS_UART_INTR_ENABLE(); // receive anything from FIFO...
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#define EMSUART_CONFIG 0x1C // 8N1 (8 bits, no stop bits, 1 parity)
|
#define EMSUART_CONFIG 0x1C // 8N1 (8 bits, no stop bits, 1 parity)
|
||||||
#define EMSUART_BAUD 9600 // uart baud rate for the EMS circuit
|
#define EMSUART_BAUD 9600 // uart baud rate for the EMS circuit
|
||||||
|
|
||||||
#define EMS_MAXBUFFERS 10 // buffers for circular filling to avoid collisions
|
#define EMS_MAXBUFFERS 5 // buffers for circular filling to avoid collisions
|
||||||
#define EMS_MAXBUFFERSIZE 32 // max size of the buffer. packets are max 32 bytes to support EMS 1.0
|
#define EMS_MAXBUFFERSIZE 32 // max size of the buffer. packets are max 32 bytes to support EMS 1.0
|
||||||
|
|
||||||
#define EMSUART_BIT_TIME 104 // bit time @9600 baud
|
#define EMSUART_BIT_TIME 104 // bit time @9600 baud
|
||||||
|
|||||||
Reference in New Issue
Block a user