mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-08 16:59:50 +03:00
Timeout back to tx_mode 1
This commit is contained in:
@@ -461,7 +461,10 @@ void TxService::send_telegram(const QueuedTxTelegram & tx_telegram) {
|
|||||||
|
|
||||||
length++; // add one since we want to now include the CRC
|
length++; // add one since we want to now include the CRC
|
||||||
|
|
||||||
#if defined(ESP32)
|
#if defined(ESP8266)
|
||||||
|
Settings settings;
|
||||||
|
if (settings.ems_tx_mode() <= 5) {
|
||||||
|
#endif
|
||||||
// This logging causes errors with timer based tx-modes on esp8266!
|
// This logging causes errors with timer based tx-modes on esp8266!
|
||||||
LOG_DEBUG(F("Sending %s Tx [#%d], telegram: %s"),
|
LOG_DEBUG(F("Sending %s Tx [#%d], telegram: %s"),
|
||||||
(telegram->operation == Telegram::Operation::TX_WRITE) ? F("write") : F("read"),
|
(telegram->operation == Telegram::Operation::TX_WRITE) ? F("write") : F("read"),
|
||||||
@@ -474,6 +477,8 @@ void TxService::send_telegram(const QueuedTxTelegram & tx_telegram) {
|
|||||||
LOG_NOTICE(F("[DEBUG] Tx: %s"), Helpers::data_to_hex(telegram_raw, length).c_str());
|
LOG_NOTICE(F("[DEBUG] Tx: %s"), Helpers::data_to_hex(telegram_raw, length).c_str());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(ESP8266)
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
// send the telegram to the UART Tx
|
// send the telegram to the UART Tx
|
||||||
uint16_t status = EMSuart::transmit(telegram_raw, length);
|
uint16_t status = EMSuart::transmit(telegram_raw, length);
|
||||||
|
|||||||
@@ -275,10 +275,14 @@ void EMSuart::send_poll(uint8_t data) {
|
|||||||
ETS_UART_INTR_DISABLE();
|
ETS_UART_INTR_DISABLE();
|
||||||
volatile uint8_t _usrxc = (USS(EMSUART_UART) >> USRXC) & 0xFF;
|
volatile uint8_t _usrxc = (USS(EMSUART_UART) >> USRXC) & 0xFF;
|
||||||
USF(EMSUART_UART) = data;
|
USF(EMSUART_UART) = data;
|
||||||
while (((USS(EMSUART_UART) >> USRXC) & 0xFF) == _usrxc) {
|
uint8_t timeoutcnt = EMSUART_TX_TIMEOUT;
|
||||||
|
while ((((USS(EMSUART_UART) >> USRXC) & 0xFF) == _usrxc) && (--timeoutcnt > 0)) {
|
||||||
|
delayMicroseconds(EMSUART_TX_BUSY_WAIT); // burn CPU cycles...
|
||||||
}
|
}
|
||||||
USC0(EMSUART_UART) |= (1 << UCBRK); // set <BRK>
|
USC0(EMSUART_UART) |= (1 << UCBRK); // set <BRK>
|
||||||
while (!(USIR(EMSUART_UART) & (1 << UIBD))) {
|
timeoutcnt = EMSUART_TX_TIMEOUT;
|
||||||
|
while (!(USIR(EMSUART_UART) & (1 << UIBD)) && (--timeoutcnt > 0)) {
|
||||||
|
delayMicroseconds(EMSUART_TX_BUSY_WAIT);
|
||||||
}
|
}
|
||||||
USC0(EMSUART_UART) &= ~(1 << UCBRK); // clear <BRK>
|
USC0(EMSUART_UART) &= ~(1 << UCBRK); // clear <BRK>
|
||||||
ETS_UART_INTR_ENABLE();
|
ETS_UART_INTR_ENABLE();
|
||||||
@@ -376,9 +380,10 @@ uint16_t ICACHE_FLASH_ATTR EMSuart::transmit(uint8_t * buf, uint8_t len) {
|
|||||||
// send the bytes along the serial line
|
// send the bytes along the serial line
|
||||||
for (uint8_t i = 0; i < len; i++) {
|
for (uint8_t i = 0; i < len; i++) {
|
||||||
volatile uint8_t _usrxc = (USS(EMSUART_UART) >> USRXC) & 0xFF;
|
volatile uint8_t _usrxc = (USS(EMSUART_UART) >> USRXC) & 0xFF;
|
||||||
|
uint8_t timeoutcnt = EMSUART_TX_TIMEOUT;
|
||||||
USF(EMSUART_UART) = buf[i]; // send each Tx byte
|
USF(EMSUART_UART) = buf[i]; // send each Tx byte
|
||||||
// wait for echo
|
// wait for echo
|
||||||
while (((USS(EMSUART_UART) >> USRXC) & 0xFF) == _usrxc) {
|
while ((((USS(EMSUART_UART) >> USRXC) & 0xFF) == _usrxc) && (--timeoutcnt > 0)) {
|
||||||
delayMicroseconds(EMSUART_TX_BUSY_WAIT); // burn CPU cycles...
|
delayMicroseconds(EMSUART_TX_BUSY_WAIT); // burn CPU cycles...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -391,10 +396,10 @@ uint16_t ICACHE_FLASH_ATTR EMSuart::transmit(uint8_t * buf, uint8_t len) {
|
|||||||
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
|
||||||
USC0(EMSUART_UART) |= (1 << UCBRK); // set <BRK>
|
USC0(EMSUART_UART) |= (1 << UCBRK); // set <BRK>
|
||||||
|
uint8_t timeoutcnt = EMSUART_TX_TIMEOUT;
|
||||||
// wait until BRK detected...
|
// wait until BRK detected...
|
||||||
while (!(USIR(EMSUART_UART) & (1 << UIBD))) {
|
while (!(USIR(EMSUART_UART) & (1 << UIBD)) && (--timeoutcnt > 0)) {
|
||||||
// delayMicroseconds(EMSUART_TX_BIT_TIME);
|
delayMicroseconds(EMSUART_TX_BUSY_WAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
USC0(EMSUART_UART) &= ~(1 << UCBRK); // clear <BRK>
|
USC0(EMSUART_UART) &= ~(1 << UCBRK); // clear <BRK>
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
|
|
||||||
// EMS 1.0
|
// EMS 1.0
|
||||||
#define EMSUART_TX_BUSY_WAIT (EMSUART_TX_BIT_TIME / 8) // 13
|
#define EMSUART_TX_BUSY_WAIT (EMSUART_TX_BIT_TIME / 8) // 13
|
||||||
|
#define EMSUART_TX_TIMEOUT (22 * EMSUART_TX_BIT_TIME / EMSUART_TX_BUSY_WAIT) // 176
|
||||||
|
|
||||||
// HT3/Junkers - Time to send one Byte (8 Bits, 1 Start Bit, 1 Stop Bit) plus 7 bit delay. The -8 is for lag compensation.
|
// HT3/Junkers - Time to send one Byte (8 Bits, 1 Start Bit, 1 Stop Bit) plus 7 bit delay. The -8 is for lag compensation.
|
||||||
#define EMSUART_TX_WAIT_HT3 (EMSUART_TX_BIT_TIME * 17) - 8 // 1760
|
#define EMSUART_TX_WAIT_HT3 (EMSUART_TX_BIT_TIME * 17) - 8 // 1760
|
||||||
|
|||||||
Reference in New Issue
Block a user