mirror of https://github.com/rusefi/wideband.git
TS serial: do BT setup only after 30sec timeout (#199)
This will avoid BT module restart after MCU restart. This will keep BT connection between MCU reboots. (cherry picked from commit 12443d73a0fa2a1fd0de0dcae3231473016b9efb) Co-authored-by: Andrey Gusakov <dron0gus@gmail.com>
This commit is contained in:
parent
2f79f62399
commit
2bb430d32b
|
@ -92,6 +92,7 @@ static void printErrorCounters() {
|
||||||
/* TunerStudio repeats connection attempts at ~1Hz rate.
|
/* TunerStudio repeats connection attempts at ~1Hz rate.
|
||||||
* So first char receive timeout should be less than 1s */
|
* So first char receive timeout should be less than 1s */
|
||||||
#define TS_COMMUNICATION_TIMEOUT TIME_MS2I(500) //0.5 Sec
|
#define TS_COMMUNICATION_TIMEOUT TIME_MS2I(500) //0.5 Sec
|
||||||
|
#define TS_BT_COMMUNICATION_TIMEOUT TIME_MS2I(30 * 1000) // 30 Sec
|
||||||
|
|
||||||
void tunerStudioDebug(TsChannelBase* tsChannel, const char *msg) {
|
void tunerStudioDebug(TsChannelBase* tsChannel, const char *msg) {
|
||||||
(void)tsChannel;
|
(void)tsChannel;
|
||||||
|
@ -426,6 +427,8 @@ static int tsProcessOne(TsChannelBase* tsChannel) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TunerstudioThread::ThreadTask() {
|
void TunerstudioThread::ThreadTask() {
|
||||||
|
bool btInitAttempted = false;
|
||||||
|
sysinterval_t btTimeout = 0;
|
||||||
auto channel = setupChannel();
|
auto channel = setupChannel();
|
||||||
|
|
||||||
// No channel configured for this thread, cancel.
|
// No channel configured for this thread, cancel.
|
||||||
|
@ -437,7 +440,17 @@ void TunerstudioThread::ThreadTask() {
|
||||||
while (true) {
|
while (true) {
|
||||||
if (tsProcessOne(channel) == 0) {
|
if (tsProcessOne(channel) == 0) {
|
||||||
//onDataArrived(true);
|
//onDataArrived(true);
|
||||||
|
btTimeout = 0;
|
||||||
} else {
|
} else {
|
||||||
|
btTimeout += TS_COMMUNICATION_TIMEOUT;
|
||||||
|
|
||||||
|
if ((btTimeout >= TS_BT_COMMUNICATION_TIMEOUT) &&
|
||||||
|
(btInitAttempted == false)) {
|
||||||
|
// Try to init BT module
|
||||||
|
channel->reStart();
|
||||||
|
// Try this only once
|
||||||
|
btInitAttempted = true;
|
||||||
|
}
|
||||||
//onDataArrived(false);
|
//onDataArrived(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
virtual void flush() { }
|
virtual void flush() { }
|
||||||
virtual bool isConfigured() const { return true; }
|
virtual bool isConfigured() const { return true; }
|
||||||
virtual bool isReady() const { return true; }
|
virtual bool isReady() const { return true; }
|
||||||
|
virtual int reStart() { }
|
||||||
virtual void stop() { }
|
virtual void stop() { }
|
||||||
|
|
||||||
// Base functions that use the above virtual implementation
|
// Base functions that use the above virtual implementation
|
||||||
|
@ -96,7 +97,10 @@ class SerialTsChannel : public SerialTsChannelBase {
|
||||||
public:
|
public:
|
||||||
SerialTsChannel(SerialDriver& driver) : SerialTsChannelBase("Serial"), m_driver(&driver) { }
|
SerialTsChannel(SerialDriver& driver) : SerialTsChannelBase("Serial"), m_driver(&driver) { }
|
||||||
|
|
||||||
int start(uint32_t baud) override;
|
int start(uint32_t newBaud) override;
|
||||||
|
// Close and open serial ports with specified baud rate
|
||||||
|
// Also will do BT module setup if BT is enabled
|
||||||
|
int reStart() override;
|
||||||
void stop() override;
|
void stop() override;
|
||||||
|
|
||||||
void write(const uint8_t* buffer, size_t size, bool isEndOfPacket) override;
|
void write(const uint8_t* buffer, size_t size, bool isEndOfPacket) override;
|
||||||
|
@ -107,6 +111,7 @@ private:
|
||||||
int bt_wait_ok(void);
|
int bt_wait_ok(void);
|
||||||
int bt_disconnect(void);
|
int bt_disconnect(void);
|
||||||
|
|
||||||
|
uint32_t baud;
|
||||||
SerialDriver* const m_driver;
|
SerialDriver* const m_driver;
|
||||||
};
|
};
|
||||||
#endif // HAL_USE_SERIAL
|
#endif // HAL_USE_SERIAL
|
||||||
|
@ -117,7 +122,8 @@ class UartTsChannel : public SerialTsChannelBase {
|
||||||
public:
|
public:
|
||||||
UartTsChannel(UARTDriver& driver) : SerialTsChannelBase("UART"), m_driver(&driver) { }
|
UartTsChannel(UARTDriver& driver) : SerialTsChannelBase("UART"), m_driver(&driver) { }
|
||||||
|
|
||||||
int start(uint32_t baud) override;
|
int start(uint32_t newBaud) override;
|
||||||
|
int reStart() override;
|
||||||
void stop() override;
|
void stop() override;
|
||||||
|
|
||||||
void write(const uint8_t* buffer, size_t size, bool isEndOfPacket) override;
|
void write(const uint8_t* buffer, size_t size, bool isEndOfPacket) override;
|
||||||
|
|
|
@ -61,7 +61,23 @@ int SerialTsChannel::bt_disconnect(void)
|
||||||
return bt_wait_ok();
|
return bt_wait_ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
int SerialTsChannel::start(uint32_t baud) {
|
int SerialTsChannel::start(uint32_t newBaud) {
|
||||||
|
SerialConfig cfg = {
|
||||||
|
.speed = newBaud,
|
||||||
|
.cr1 = 0,
|
||||||
|
.cr2 = USART_CR2_STOP1_BITS | USART_CR2_LINEN,
|
||||||
|
.cr3 = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
baud = newBaud;
|
||||||
|
|
||||||
|
sdStart(m_driver, &cfg);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this will also try to reinit BT module */
|
||||||
|
int SerialTsChannel::reStart() {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
SerialConfig cfg = {
|
SerialConfig cfg = {
|
||||||
.speed = baud,
|
.speed = baud,
|
||||||
|
@ -70,6 +86,9 @@ int SerialTsChannel::start(uint32_t baud) {
|
||||||
.cr3 = 0
|
.cr3 = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Stop first */
|
||||||
|
sdStop(m_driver);
|
||||||
|
|
||||||
if (BT_SERIAL_OVER_JDY33) {
|
if (BT_SERIAL_OVER_JDY33) {
|
||||||
/* try BT setup */
|
/* try BT setup */
|
||||||
int retry = 3;
|
int retry = 3;
|
||||||
|
@ -200,12 +219,6 @@ int SerialTsChannel::start(uint32_t baud) {
|
||||||
sdStart(m_driver, &cfg);
|
sdStart(m_driver, &cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret < 0) {
|
|
||||||
/* set requested baudrate and wait for direct uart connection */
|
|
||||||
cfg.speed = baud;
|
|
||||||
sdStart(m_driver, &cfg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,14 +236,14 @@ size_t SerialTsChannel::readTimeout(uint8_t* buffer, size_t size, int timeout) {
|
||||||
#endif // HAL_USE_SERIAL
|
#endif // HAL_USE_SERIAL
|
||||||
|
|
||||||
#if (HAL_USE_UART == TRUE) && (UART_USE_WAIT == TRUE)
|
#if (HAL_USE_UART == TRUE) && (UART_USE_WAIT == TRUE)
|
||||||
int UartTsChannel::start(uint32_t baud) {
|
int UartTsChannel::start(uint32_t newBaud) {
|
||||||
m_config.txend1_cb = NULL;
|
m_config.txend1_cb = NULL;
|
||||||
m_config.txend2_cb = NULL;
|
m_config.txend2_cb = NULL;
|
||||||
m_config.rxend_cb = NULL;
|
m_config.rxend_cb = NULL;
|
||||||
m_config.rxchar_cb = NULL;
|
m_config.rxchar_cb = NULL;
|
||||||
m_config.rxerr_cb = NULL;
|
m_config.rxerr_cb = NULL;
|
||||||
m_config.timeout_cb = NULL;
|
m_config.timeout_cb = NULL;
|
||||||
m_config.speed = baud;
|
m_config.speed = newBaud;
|
||||||
m_config.cr1 = 0;
|
m_config.cr1 = 0;
|
||||||
m_config.cr2 = 0/*USART_CR2_STOP1_BITS*/ | USART_CR2_LINEN;
|
m_config.cr2 = 0/*USART_CR2_STOP1_BITS*/ | USART_CR2_LINEN;
|
||||||
m_config.cr3 = 0;
|
m_config.cr3 = 0;
|
||||||
|
@ -240,6 +253,12 @@ int UartTsChannel::start(uint32_t baud) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int UartTsChannel::reStart() {
|
||||||
|
stop();
|
||||||
|
/* TODO: add BT setup? */
|
||||||
|
start(baud);
|
||||||
|
}
|
||||||
|
|
||||||
void UartTsChannel::stop() {
|
void UartTsChannel::stop() {
|
||||||
uartStop(m_driver);
|
uartStop(m_driver);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue