Aruna
UART.cpp
Go to the documentation of this file.
1 //
2 // Created by noeel on 16-11-20.
3 //
4 
5 #include "aruna/driver/UART.h"
6 
7 using namespace aruna;
8 using namespace aruna::driver;
9 
10 size_t UART::write(uint8_t *data, size_t dataSize) {
11  size_t ret = 0;
12  pthread_mutex_lock(&write_atomic);
13 // TODO this might end badly is comm::Link decite to do comm specific things in transmit.
14  ret = transmit(data, dataSize);
15  pthread_mutex_unlock(&write_atomic);
16  return ret;
17 }
18 
19 size_t UART::read(uint8_t *buffer, size_t length) {
20  size_t ret = 0;
21  pthread_mutex_lock(&read_atomic);
22  ret = receive(buffer, length);
23  pthread_mutex_unlock(&read_atomic);
24  return ret;
25 }
26 
27 uint32_t UART::set_baudrate(uint32_t new_baudrate) {
28  uint32_t ret = 0;
29  ret = _set_baudrate(new_baudrate);
30  this->baudrate = ret == new_baudrate ? new_baudrate : baudrate;
31  return ret;
32 }
33 
34 uint32_t UART::get_baudrate() {
35  return baudrate;
36 }
37 
39  err_t ret = err_t::OK;
40  ret = _set_flowcontrol(new_flowcontrol);
41  this->flowcontrol = ret != err_t::OK ? this->flowcontrol : new_flowcontrol;
42  return ret;
43 }
44 
46  return flowcontrol;
47 }
48 
50  err_t ret = err_t::OK;
51  ret = _set_parity(parity_bit);
52  this->parity = ret != err_t::OK ? this->parity : parity_bit;
53  return ret;
54 }
55 
57  return parity;
58 }
59 
61  err_t ret = err_t::OK;
62  ret = _set_stop_bit(stop_bit);
63  this->stopBit = ret != err_t::OK ? this->stopBit : stop_bit;
64  return ret;
65 }
66 
68  return stopBit;
69 }
70 
72 // write
73  pthread_mutexattr_t write_attr;
74  pthread_mutexattr_init(&write_attr);
75  pthread_mutex_init(&write_atomic, &write_attr);
76  pthread_mutexattr_destroy(&write_attr);
77 // read
78  pthread_mutexattr_t read_attr;
79  pthread_mutexattr_init(&read_attr);
80  pthread_mutex_init(&read_atomic, &read_attr);
81  pthread_mutexattr_destroy(&read_attr);
82 }
83 
85  pthread_mutex_destroy(&write_atomic);
86  pthread_mutex_destroy(&read_atomic);
87 }
88 
89 size_t UART::try_write(uint8_t *data, size_t dataSize) {
90  size_t ret = 0;
91  if (!pthread_mutex_trylock(&write_atomic)) {
92  ret = transmit(data, dataSize);
93  pthread_mutex_unlock(&write_atomic);
94  }
95  return ret;
96 }
97 
98 size_t UART::try_read(uint8_t *buffer, size_t length) {
99  size_t ret = 0;
100  if (!pthread_mutex_trylock(&read_atomic)) {
101  ret = transmit(buffer, length);
102  pthread_mutex_unlock(&read_atomic);
103  }
104  return ret;
105 }
106 
108  err_t ret = err_t::OK;
109  ret = _set_word_length(word_length);
110  this->wordLength = ret != err_t::OK ? this->wordLength : wordLength;
111  return ret;
112 }
113 
115  return wordLength;
116 }
117 
118 uint32_t UART::get_speed() {
119  return get_baudrate();
120 }
uint32_t set_baudrate(uint32_t new_baudrate)
Set baudrate of the UART.
Definition: UART.cpp:27
Definition: comm.cpp:14
flowcontrol_t flowcontrol
Definition: UART.h:45
size_t read(uint8_t *buffer, size_t length)
read data from the UART.
Definition: UART.cpp:19
UART()
UART object to write and read data.
Definition: UART.cpp:71
word_length_t wordLength
Definition: UART.h:48
err_t set_word_length(word_length_t word_length)
Set UART data bits length.
Definition: UART.cpp:107
uint32_t get_speed() override
Get speed of link (bits per second)
Definition: UART.cpp:118
pthread_mutex_t read_atomic
Definition: UART.h:50
err_t set_parity(parity_t parity_bit)
Set parity bit.
Definition: UART.cpp:49
virtual err_t _set_word_length(word_length_t word_length)=0
Set UART data bits length.
uint32_t baudrate
Definition: UART.h:44
virtual uint32_t _set_baudrate(uint32_t new_baudrate)=0
Set baudrate of the UART.
stop_bit_t stopBit
Definition: UART.h:47
pthread_mutex_t write_atomic
Definition: UART.h:49
size_t try_read(uint8_t *buffer, size_t length)
read data from the UART.
Definition: UART.cpp:98
virtual err_t _set_stop_bit(stop_bit_t stop_bit)=0
set stop bit
err_t set_stop_bit(stop_bit_t stop_bit)
set stop bit
Definition: UART.cpp:60
size_t write(uint8_t *data, size_t dataSize)
Write data to the UART.
Definition: UART.cpp:10
parity_t parity
Definition: UART.h:46
size_t try_write(uint8_t *data, size_t dataSize)
Write data to the UART.
Definition: UART.cpp:89
virtual err_t _set_parity(parity_t parity_bit)=0
Set parity bit.
virtual flowcontrol_t get_flowcontrol()
get flowcontrol of UART
Definition: UART.cpp:45
virtual parity_t get_parity()
Get parity of UART.
Definition: UART.cpp:56
virtual stop_bit_t get_stop_bit()
get stop bit
Definition: UART.cpp:67
virtual word_length_t get_word_length()
Set UART data bits length.
Definition: UART.cpp:114
virtual err_t _set_flowcontrol(flowcontrol_t new_flowcontrol)=0
Set software or hardware flowcontrol.
err_t set_flowcontrol(flowcontrol_t new_flowcontrol)
Set software or hardware flowcontrol.
Definition: UART.cpp:38
virtual uint32_t get_baudrate()
Get baudrate of UART.
Definition: UART.cpp:34