Uart improvments (#1024)

* uart: Add support for specifying the number of bits and parity.

ESP8266SwSerial doesn't really check parity but just read the parity bit
and ignore it when receiving data.

Signed-off-by: 0hax <0hax@protonmail.com>

* uart: support begin and end methods.

A component may need to reset uart buffer/status by using begin() and
end() methods. This is useful for example when a component needs to be
sure it is not reading garbage from previously received data over uart.
For end() methods with software serial, disabling interrupt is
currently impossible because of a bug in esp8266 Core:
https://github.com/esp8266/Arduino/issues/6049

Signed-off-by: 0hax <0hax@protonmail.com>

* esphal: add support for detaching an interrupt.

That's needed when a component needs to enable/disable interrupt on a
gpio.

Signed-off-by: 0hax <0hax@protonmail.com>

* uart: rename CONF_NR_BITS to CONF_DATA_BITS_NUMBER.

Signed-off-by: 0hax <0hax@protonmail.com>

* uart: use static const uint32_t instead of #define.

Signed-off-by: 0hax <0hax@protonmail.com>

* uart: use an enum to handle parity.

Signed-off-by: 0hax <0hax@protonmail.com>

* uart: split between esp32 and esp8266.

Signed-off-by: 0hax <0hax@protonmail.com>

* uart: check_uart_settings for parity and number of data bits.

Signed-off-by: 0hax <0hax@protonmail.com>

* name param data_bits

* add new params to test

Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
This commit is contained in:
0hax
2020-05-24 23:59:07 +02:00
committed by GitHub
parent 4de44a99eb
commit fb2b7ade41
8 changed files with 572 additions and 343 deletions
+2 -1
View File
@@ -94,11 +94,13 @@ class GPIOPin {
bool is_inverted() const;
template<typename T> void attach_interrupt(void (*func)(T *), T *arg, int mode) const;
void detach_interrupt() const;
ISRInternalGPIOPin *to_isr() const;
protected:
void attach_interrupt_(void (*func)(void *), void *arg, int mode) const;
void detach_interrupt_() const;
const uint8_t pin_;
const uint8_t mode_;
@@ -114,5 +116,4 @@ class GPIOPin {
template<typename T> void GPIOPin::attach_interrupt(void (*func)(T *), T *arg, int mode) const {
this->attach_interrupt_(reinterpret_cast<void (*)(void *)>(func), arg, mode);
}
} // namespace esphome