Fix logger uart conflict check (#858)

* Fix logger uart conflict check

* Fix class for check func

* Fix syntax

Hope lint is OK with moving the end of the conditional outside the #IFDEF

* Move end of conditional inside ifdef and remove extra whitespace

* Simplify

clang-format did not like the ifdefs and was reformatting in a way that killed clang-tidy.

Simple solution is to use logger's hw_serial as source of truth

Also simplifies the code - uart doesn't need to know what the logger uart settings mean
This commit is contained in:
Brandon Davidson 2019-11-14 04:36:55 -08:00 committed by Otto Winter
parent 694395ac91
commit aca306d120
3 changed files with 17 additions and 13 deletions

View File

@ -32,6 +32,7 @@ class Logger : public Component {
/// Manually set the baud rate for serial, set to 0 to disable.
void set_baud_rate(uint32_t baud_rate);
uint32_t get_baud_rate() const { return baud_rate_; }
HardwareSerial *get_hw_serial() const { return hw_serial_; }
/// Get the UART used by the logger.
UARTSelection get_uart() const;

View File

@ -46,12 +46,7 @@ void UARTComponent::dump_config() {
}
ESP_LOGCONFIG(TAG, " Baud Rate: %u baud", this->baud_rate_);
ESP_LOGCONFIG(TAG, " Stop bits: %u", this->stop_bits_);
#ifdef USE_LOGGER
if (this->hw_serial_ == &Serial && logger::global_logger->get_baud_rate() != 0) {
ESP_LOGW(TAG, " You're using the same serial port for logging and the UART component. Please "
"disable logging over the serial port by setting logger->baud_rate to 0.");
}
#endif
this->check_logger_conflict_();
}
void UARTComponent::write_byte(uint8_t data) {
@ -156,13 +151,7 @@ void UARTComponent::dump_config() {
} else {
ESP_LOGCONFIG(TAG, " Using software serial");
}
#ifdef USE_LOGGER
if (this->hw_serial_ == &Serial && logger::global_logger->get_baud_rate() != 0) {
ESP_LOGW(TAG, " You're using the same serial port for logging and the UART component. Please "
"disable logging over the serial port by setting logger->baud_rate to 0.");
}
#endif
this->check_logger_conflict_();
}
void UARTComponent::write_byte(uint8_t data) {
@ -378,6 +367,19 @@ int UARTComponent::peek() {
return data;
}
void UARTComponent::check_logger_conflict_() {
#ifdef USE_LOGGER
if (this->hw_serial_ == nullptr || logger::global_logger->get_baud_rate() == 0) {
return;
}
if (this->hw_serial_ == logger::global_logger->get_hw_serial()) {
ESP_LOGW(TAG, " You're using the same serial port for logging and the UART component. Please "
"disable logging over the serial port by setting logger->baud_rate to 0.");
}
#endif
}
void UARTDevice::check_uart_settings(uint32_t baud_rate, uint8_t stop_bits) {
if (this->parent_->baud_rate_ != baud_rate) {
ESP_LOGE(TAG, " Invalid baud_rate: Integration requested baud_rate %u but you have %u!", baud_rate,

View File

@ -76,6 +76,7 @@ class UARTComponent : public Component, public Stream {
void set_stop_bits(uint8_t stop_bits) { this->stop_bits_ = stop_bits; }
protected:
void check_logger_conflict_();
bool check_read_timeout_(size_t len = 1);
friend class UARTDevice;