Aruna
aruna::driver::ESP32_UART Class Reference

#include <ESP32_UART.h>

Inheritance diagram for aruna::driver::ESP32_UART:
Collaboration diagram for aruna::driver::ESP32_UART:

Public Member Functions

 ESP32_UART (uart_port_t UART_NUM, int TXD_PIN, int RXD_PIN, int RTS_PIN, int CTS_PIN, uart_config_t UART_CONFIG, uart_mode_t UART_MODE, unsigned int TX_BUF_SIZE, unsigned int RX_BUF_SIZE)
 Create a uart driver with custom settings. More...
 
 ~ESP32_UART ()
 
uint32_t get_read_buffer_length () override
 Get amount of bytes in the read buffer. More...
 
uint32_t get_baudrate () override
 Get baudrate of UART. More...
 
flowcontrol_t get_flowcontrol () override
 get flowcontrol of UART More...
 
parity_t get_parity () override
 Get parity of UART. More...
 
stop_bit_t get_stop_bit () override
 get stop bit More...
 
word_length_t get_word_length () override
 Set UART data bits length. More...
 
- Public Member Functions inherited from aruna::driver::UART
 UART ()
 UART object to write and read data. More...
 
 ~UART ()
 
size_t write (uint8_t *data, size_t dataSize)
 Write data to the UART. More...
 
size_t try_write (uint8_t *data, size_t dataSize)
 Write data to the UART. More...
 
size_t read (uint8_t *buffer, size_t length)
 read data from the UART. More...
 
size_t try_read (uint8_t *buffer, size_t length)
 read data from the UART. More...
 
uint32_t set_baudrate (uint32_t new_baudrate)
 Set baudrate of the UART. More...
 
err_t set_flowcontrol (flowcontrol_t new_flowcontrol)
 Set software or hardware flowcontrol. More...
 
err_t set_parity (parity_t parity_bit)
 Set parity bit. More...
 
err_t set_stop_bit (stop_bit_t stop_bit)
 set stop bit More...
 
err_t set_word_length (word_length_t word_length)
 Set UART data bits length. More...
 
uint32_t get_speed () override
 Get speed of link (bits per second) More...
 

Private Member Functions

size_t _write (uint8_t *data, size_t dataSize) override
 write data to the link/bus. More...
 
size_t _read (uint8_t *buffer, size_t length) override
 Read bytes and out them in the buffer. More...
 
uint32_t _set_baudrate (uint32_t new_baudrate) override
 Set baudrate of the UART. More...
 
err_t _set_flowcontrol (flowcontrol_t new_flowcontrol) override
 Set software or hardware flowcontrol. More...
 
err_t _set_parity (parity_t parity_bit) override
 Set parity bit. More...
 
err_t _set_stop_bit (stop_bit_t stop_bit) override
 set stop bit More...
 
err_t _set_word_length (word_length_t word_length) override
 Set UART data bits length. More...
 

Private Attributes

const uart_port_t UART_NUM
 
bool software_flowcontrol = false
 
QueueHandle_t uart_queue
 

Additional Inherited Members

- Public Types inherited from aruna::driver::UART
enum  flowcontrol_t {
  flowcontrol_t::HARDWARE, flowcontrol_t::SOFTWARE, flowcontrol_t::HARDWARE_SOFTWARE, flowcontrol_t::DISABLED,
  flowcontrol_t::NONE
}
 
enum  parity_t { parity_t::EVEN, parity_t::ODD, parity_t::DISABLED, parity_t::NONE }
 
enum  stop_bit_t { stop_bit_t::ONE, stop_bit_t::ONE_HALF, stop_bit_t::TWO, stop_bit_t::NONE }
 
enum  word_length_t {
  word_length_t::FIVE, word_length_t::SIX, word_length_t::SEVEN, word_length_t::EIGHT,
  word_length_t::NONE
}
 
- Static Protected Attributes inherited from aruna::driver::UART
static const uint8_t XON = 0x11
 
static const uint8_t XOFF = 0x13
 

Detailed Description

Definition at line 15 of file ESP32_UART.h.

Constructor & Destructor Documentation

◆ ESP32_UART()

aruna::driver::ESP32_UART::ESP32_UART ( uart_port_t  UART_NUM = UART_NUM_0,
int  TXD_PIN = UART_PIN_NO_CHANGE,
int  RXD_PIN = UART_PIN_NO_CHANGE,
int  RTS_PIN = UART_PIN_NO_CHANGE,
int  CTS_PIN = UART_PIN_NO_CHANGE,
uart_config_t  UART_CONFIG = (uart_config_t) { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .rx_flow_ctrl_thresh = 122, .use_ref_tick = false },
uart_mode_t  UART_MODE = UART_MODE_UART,
unsigned int  TX_BUF_SIZE = 256,
unsigned int  RX_BUF_SIZE = 512 
)

Create a uart driver with custom settings.

Parameters
UART_NUM,0,1or 2
TXD_PIN,configurateuart pin.
RXD_PIN,configurateuart pin.
RTS_PIN,configurateuart pin.
CTS_PIN,configurateuart pin.
UART_CONFIG,uart_config_tobject
UART_MODE,useto enable RS485
TX_BUF_SIZE,transmitbuffer
RX_BUF_SIZE,receivebuffer

Definition at line 15 of file ESP32_UART.cpp.

20  {
21  .baud_rate = 115200,
22  .data_bits = UART_DATA_8_BITS,
23  .parity = UART_PARITY_DISABLE,
24  .stop_bits = UART_STOP_BITS_1,
25  .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
26  .rx_flow_ctrl_thresh = 122,
27  .use_ref_tick = false
28  },
29  uart_mode_t UART_MODE = UART_MODE_UART,
30  unsigned int TX_BUF_SIZE = 256,
31  unsigned int RX_BUF_SIZE = 512) : UART_NUM(UART_NUM) {
32  // TODO logging zou moeten worden uitgeschakeld op de target UART.
33 
34  /* Configure parameters of an UART driver,
35  * communication pins and install the driver */
36 // set config
37  ESP_ERROR_CHECK(uart_param_config(UART_NUM, &UART_CONFIG));
38 // set pins
39  ESP_ERROR_CHECK(uart_set_pin(UART_NUM, TXD_PIN, RXD_PIN, RTS_PIN, CTS_PIN));
40 // install driver (driver can only be installed once, even if you uart_driver_delete is used)
41  ESP_ERROR_CHECK(uart_driver_install(UART_NUM, RX_BUF_SIZE, TX_BUF_SIZE, 20, &uart_queue, 0));
42 // Set correct mode
43  ESP_ERROR_CHECK(uart_set_mode(UART_NUM, UART_MODE));
44  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58
QueueHandle_t uart_queue
Definition: ESP32_UART.h:61

◆ ~ESP32_UART()

aruna::driver::ESP32_UART::~ESP32_UART ( )

Definition at line 56 of file ESP32_UART.cpp.

56  {
57  // TODO flush tx queue
58  // flush rx queue
59  xQueueReset(uart_queue);
60  ESP_ERROR_CHECK(uart_flush_input(UART_NUM));
61 
62  /*
63  * new driver cannot be installed even if uart_delete_driver is called.
64  * this causes an issue in driver selection because the winning driver gets restarted
65  */
66  ESP_ERROR_CHECK(uart_driver_delete(UART_NUM));
67  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58
QueueHandle_t uart_queue
Definition: ESP32_UART.h:61

Member Function Documentation

◆ _read()

size_t aruna::driver::ESP32_UART::_read ( uint8_t *  buffer,
size_t  buffer_size 
)
overrideprivatevirtual

Read bytes and out them in the buffer.

Parameters
bufferbuffer to read
buffer_sizeamount of bytes to read
Returns
amount of byte read

Implements aruna::comm::Link.

Definition at line 69 of file ESP32_UART.cpp.

69  {
70  return uart_read_bytes(this->UART_NUM, buffer, length, 4);
71  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ _set_baudrate()

uint32_t aruna::driver::ESP32_UART::_set_baudrate ( uint32_t  new_baudrate)
overrideprivatevirtual

Set baudrate of the UART.

Parameters
new_baudratebaudrate to change to.
Returns
new baudrate

Implements aruna::driver::UART.

Definition at line 73 of file ESP32_UART.cpp.

73  {
74  ESP_ERROR_CHECK(uart_set_baudrate(UART_NUM, new_baudrate));
75  return get_baudrate();
76  }
uint32_t get_baudrate() override
Get baudrate of UART.
Definition: ESP32_UART.cpp:50
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58
Here is the call graph for this function:

◆ _set_flowcontrol()

err_t aruna::driver::ESP32_UART::_set_flowcontrol ( flowcontrol_t  new_flowcontrol)
overrideprivatevirtual

Set software or hardware flowcontrol.

Parameters
new_flowcontrol
Returns
err_t::OK if set correctly

Implements aruna::driver::UART.

Definition at line 78 of file ESP32_UART.cpp.

78  {
79  esp_err_t hw, sw;
80  err_t err = err_t::OK;
81  switch (new_flowcontrol) {
83  hw = uart_set_hw_flow_ctrl(UART_NUM, UART_HW_FLOWCTRL_CTS_RTS, 0);
84  sw = uart_set_sw_flow_ctrl(UART_NUM, false, XON, XOFF);
85  software_flowcontrol = false;
86  break;
88  hw = uart_set_hw_flow_ctrl(UART_NUM, UART_HW_FLOWCTRL_DISABLE, 0);
89  sw = uart_set_sw_flow_ctrl(UART_NUM, true, XON, XOFF);
90  software_flowcontrol = true;
91  break;
93  hw = uart_set_hw_flow_ctrl(UART_NUM, UART_HW_FLOWCTRL_CTS_RTS, 0);
94  sw = uart_set_sw_flow_ctrl(UART_NUM, true, XON, XOFF);
95  software_flowcontrol = true;
96  break;
99  default:
100  hw = uart_set_hw_flow_ctrl(UART_NUM, UART_HW_FLOWCTRL_DISABLE, 0);
101  sw = uart_set_sw_flow_ctrl(UART_NUM, false, XON, XOFF);
102  software_flowcontrol = false;
103  break;
104  }
105  err = hw || sw ? err_t::FAIL : err_t::OK;
106 
107  return err;
108  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58
static const uint8_t XON
Definition: UART.h:90
static const uint8_t XOFF
Definition: UART.h:91

◆ _set_parity()

err_t aruna::driver::ESP32_UART::_set_parity ( parity_t  parity_bit)
overrideprivatevirtual

Set parity bit.

Parameters
parity_bitEVEN, UNEVEN or DISABLED
Returns
err_t::OK if no errors.

Implements aruna::driver::UART.

Definition at line 110 of file ESP32_UART.cpp.

110  {
111  uart_parity_t esp_parity;
112  switch (parity_bit) {
113  case parity_t::EVEN:
114  esp_parity = UART_PARITY_EVEN;
115  break;
116  case parity_t::ODD:
117  esp_parity = UART_PARITY_ODD;
118  break;
119  case parity_t::DISABLED:
120  default:
121  esp_parity = UART_PARITY_DISABLE;
122  break;
123  }
124  if (uart_set_parity(UART_NUM, esp_parity))
126  else
127  return err_t::OK;
128  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ _set_stop_bit()

err_t aruna::driver::ESP32_UART::_set_stop_bit ( stop_bit_t  stop_bit)
overrideprivatevirtual

set stop bit

Parameters
stop_bit1 1.5 or 2 bits
Returns
err_t::OK if no errors

Implements aruna::driver::UART.

Definition at line 130 of file ESP32_UART.cpp.

130  {
131 // TODO maak een map of bimap
132 //https://stackoverflow.com/questions/21760343/is-there-a-more-efficient-implementation-for-a-bidirectional-map
133  uart_stop_bits_t esp_stop;
134  switch (stop_bit) {
136  esp_stop = UART_STOP_BITS_1_5;
137  break;
138  case stop_bit_t::TWO:
139  esp_stop = UART_STOP_BITS_2;
140  break;
141  case stop_bit_t::ONE:
142  default:
143  esp_stop = UART_STOP_BITS_1;
144  break;
145 
146  }
147  if (uart_set_stop_bits(UART_NUM, esp_stop))
148  return err_t::FAIL;
149  else
150  return err_t::OK;
151  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ _set_word_length()

err_t aruna::driver::ESP32_UART::_set_word_length ( word_length_t  word_length)
overrideprivatevirtual

Set UART data bits length.

Parameters
word_lengthfive to eight bits
Returns
err_t::OK if success.

Implements aruna::driver::UART.

Definition at line 252 of file ESP32_UART.cpp.

252  {
253  uart_word_length_t esp_word;
254  switch (word_length) {
255  case word_length_t::FIVE:
256  esp_word = UART_DATA_5_BITS;
257  break;
258  case word_length_t::SIX:
259  esp_word = UART_DATA_6_BITS;
260  break;
262  esp_word = UART_DATA_7_BITS;
263  break;
265  default:
266  esp_word = UART_DATA_8_BITS;
267  break;
268  }
269  esp_err_t esp_err = uart_set_word_length(UART_NUM, esp_word);
270  err_t err;
271  err = esp_err ? err_t::FAIL : err_t::OK;
272  return err;
273  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ _write()

size_t aruna::driver::ESP32_UART::_write ( uint8_t *  data,
size_t  data_size 
)
overrideprivatevirtual

write data to the link/bus.

Parameters
databytes to write
data_sizelength of data
Returns
amount of bytes written.

Implements aruna::comm::Link.

Definition at line 46 of file ESP32_UART.cpp.

46  {
47  return uart_write_bytes(UART_NUM, (const char *) data, dataSize);
48  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ get_baudrate()

unsigned int aruna::driver::ESP32_UART::get_baudrate ( )
overridevirtual

Get baudrate of UART.

Returns
baudrate

Reimplemented from aruna::driver::UART.

Definition at line 50 of file ESP32_UART.cpp.

50  {
51  uint32_t br = 0;
52  uart_get_baudrate(UART_NUM, &br);
53  return br;
54  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58
Here is the caller graph for this function:

◆ get_flowcontrol()

UART::flowcontrol_t aruna::driver::ESP32_UART::get_flowcontrol ( )
overridevirtual

get flowcontrol of UART

Returns
flowcontrol

Reimplemented from aruna::driver::UART.

Definition at line 159 of file ESP32_UART.cpp.

159  {
160  uart_hw_flowcontrol_t esp_hw;
161  flowcontrol_t aruna_fc;
162  ESP_ERROR_CHECK(uart_get_hw_flow_ctrl(UART_NUM, &esp_hw));
163  switch (esp_hw) {
164  case UART_HW_FLOWCTRL_DISABLE:
165  aruna_fc = flowcontrol_t::DISABLED;
166  break;
167  case UART_HW_FLOWCTRL_RTS:
168  case UART_HW_FLOWCTRL_CTS:
169  case UART_HW_FLOWCTRL_CTS_RTS:
170  aruna_fc = flowcontrol_t::HARDWARE;
171  break;
172  case UART_HW_FLOWCTRL_MAX:
173  default:
174  aruna_fc = flowcontrol_t::NONE;
175  break;
176  }
179  else if (software_flowcontrol)
180  aruna_fc = flowcontrol_t::SOFTWARE;
181 
182  return aruna_fc;
183  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ get_parity()

UART::parity_t aruna::driver::ESP32_UART::get_parity ( )
overridevirtual

Get parity of UART.

Returns
parity bit setting.

Reimplemented from aruna::driver::UART.

Definition at line 185 of file ESP32_UART.cpp.

185  {
186  uart_parity_t esp_parity;
187  parity_t aruna_parity;
188  ESP_ERROR_CHECK(uart_get_parity(UART_NUM, &esp_parity));
189  switch (esp_parity) {
190  case UART_PARITY_EVEN:
191  aruna_parity = parity_t::EVEN;
192  break;
193  case UART_PARITY_ODD:
194  aruna_parity = parity_t::ODD;
195  break;
196  case UART_PARITY_DISABLE:
197  default:
198  aruna_parity = parity_t::DISABLED;
199  break;
200  }
201  return aruna_parity;
202  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ get_read_buffer_length()

uint32_t aruna::driver::ESP32_UART::get_read_buffer_length ( )
overridevirtual

Get amount of bytes in the read buffer.

Returns
number of bytes in read buffer.

Implements aruna::driver::UART.

Definition at line 153 of file ESP32_UART.cpp.

153  {
154  size_t len = 0;
155  ESP_ERROR_CHECK(uart_get_buffered_data_len(UART_NUM, &len));
156  return len;
157  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ get_stop_bit()

UART::stop_bit_t aruna::driver::ESP32_UART::get_stop_bit ( )
overridevirtual

get stop bit

Returns
ONE ONE_HALF or TWO

Reimplemented from aruna::driver::UART.

Definition at line 204 of file ESP32_UART.cpp.

204  {
205  uart_stop_bits_t esp_stop;
206  stop_bit_t aruna_stop;
207  ESP_ERROR_CHECK(uart_get_stop_bits(UART_NUM, &esp_stop));
208  switch (esp_stop) {
209  case UART_STOP_BITS_1:
210  aruna_stop = stop_bit_t::ONE;
211  break;
212  case UART_STOP_BITS_1_5:
213  aruna_stop = stop_bit_t::ONE_HALF;
214  break;
215  case UART_STOP_BITS_2:
216  aruna_stop = stop_bit_t::TWO;
217  break;
218  case UART_STOP_BITS_MAX:
219  default:
220  aruna_stop = stop_bit_t::NONE;
221  break;
222  }
223 
224  return aruna_stop;
225  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

◆ get_word_length()

UART::word_length_t aruna::driver::ESP32_UART::get_word_length ( )
overridevirtual

Set UART data bits length.

Returns
word length.

Reimplemented from aruna::driver::UART.

Definition at line 227 of file ESP32_UART.cpp.

227  {
228  uart_word_length_t esp_word;
229  word_length_t aruna_word;
230  ESP_ERROR_CHECK(uart_get_word_length(UART_NUM, &esp_word));
231  switch (esp_word) {
232  case UART_DATA_5_BITS:
233  aruna_word = word_length_t::FIVE;
234  break;
235  case UART_DATA_6_BITS:
236  aruna_word = word_length_t::SIX;
237  break;
238  case UART_DATA_7_BITS:
239  aruna_word = word_length_t::SEVEN;
240  break;
241  case UART_DATA_8_BITS:
242  aruna_word = word_length_t::EIGHT;
243  break;
244  case UART_DATA_BITS_MAX:
245  default:
246  aruna_word = word_length_t::NONE;
247  break;
248  }
249  return aruna_word;
250  }
const uart_port_t UART_NUM
Definition: ESP32_UART.h:58

Member Data Documentation

◆ software_flowcontrol

bool aruna::driver::ESP32_UART::software_flowcontrol = false
private

Definition at line 59 of file ESP32_UART.h.

◆ UART_NUM

const uart_port_t aruna::driver::ESP32_UART::UART_NUM
private

Definition at line 58 of file ESP32_UART.h.

◆ uart_queue

QueueHandle_t aruna::driver::ESP32_UART::uart_queue
private

Definition at line 61 of file ESP32_UART.h.


The documentation for this class was generated from the following files: