stm32duino / Arduino_Core_STM32

STM32 core support for Arduino
https://github.com/stm32duino/Arduino_Core_STM32/wiki
Other
2.7k stars 948 forks source link

`HardwareSerial::flush()` returns immediately if called as `Stream*->flush()` interface #2369

Closed mlaga97 closed 1 month ago

mlaga97 commented 1 month ago

Please, before reporting any issue

Any questions/feedback/suggestions should be discussed on the stm32duino forum:

⚠ When reporting any issue, please try to provide all relevant information to help on its resolution.

Describe the bug HardwareSerial::flush() returns early if called via Stream* interface

To Reproduce

const int PIN_EN = PA1;
const int PIN_TX = PA2;
const int PIN_RX = PA3;

HardwareSerial Serial1(PIN_RX, PIN_TX);
Stream* streamTest = &Serial1;

void setup() {
  Serial1.begin(115200);
  pinMode(PIN_EN, OUTPUT);
}

void loop() {
  // Calling directly
  Serial1.print("aaaaaa");

  digitalWrite(PIN_EN, HIGH);
  Serial1.flush();
  digitalWrite(PIN_EN, LOW); // Goes low only after data has been fully transmitted

  delay(1);

  // Calling via generic stream interface
  streamTest->print("bbbbbb");

  digitalWrite(PIN_EN, HIGH);
  streamTest->flush();
  digitalWrite(PIN_EN, LOW); // Goes low immediately

  delay(1);
}

Expected behavior In the above code, streamTest->flush() should return only once the data has been fully flushed.

Screenshots Selection_001

Desktop (please complete the following information):

Board (please complete the following information):

Additional context This appears to be a side effect of #2124, as reverting that commit results in the issue going away.

It seems as though the optional parameter is preventing HardwareSerial::flush(uint32_t timeout = 0) from properly overloading Stream::flush(void).

Therefore, another method of resolving is by modifying HardwareSerial.h from

virtual void flush(uint32_t timeout = 0);

to

virtual void flush()
{
  flush(0);
}
virtual void flush(uint32_t timeout);
mlaga97 commented 1 month ago

Need to search better. #2254

fpistm commented 1 month ago

Hi @mlaga97 No worry, fix will be available within next release in the coming weeks.