Skip to content

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

Closed
@mlaga97

Description

@mlaga97

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):

  • Name: Generic STM32G030
  • Hardware Revision: N/A
  • Extra hardware used if any: N/A

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);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions