B15F
Board 15 Famulus Edition
usart.cpp
1 #include "usart.h"
2 
4 {
5  closeDevice();
6 }
7 
8 void USART::openDevice(std::string device)
9 {
10  // Benutze blockierenden Modus
11  file_desc = open(device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
12  if (file_desc <= 0)
13  throw USARTException("Fehler beim Öffnen des Gerätes");
14 
15  struct termios options;
16  int code = tcgetattr(file_desc, &options);
17  if (code)
18  throw USARTException("Fehler beim Lesen der Geräteparameter");
19 
20  options.c_cflag = CS8 | CLOCAL | CREAD;
21  options.c_iflag = IGNPAR;
22  options.c_oflag = 0;
23  options.c_lflag = 0;
24  options.c_cc[VMIN] = 0; // #bytes read returns at least
25  options.c_cc[VTIME] = timeout;
26  code = cfsetspeed(&options, baudrate);
27  if (code)
28  throw USARTException("Fehler beim Setzen der Baudrate");
29 
30  code = tcsetattr(file_desc, TCSANOW, &options);
31  if (code)
32  throw USARTException("Fehler beim Setzen der Geräteparameter");
33 
36 }
37 
39 {
40  if (file_desc > 0)
41  {
42  int code = close(file_desc);
43  if (code)
44  throw USARTException("Fehler beim Schließen des Gerätes");
45  file_desc = -1;
46  }
47 }
48 
50 {
51  int code = tcflush(file_desc, TCIFLUSH);
52  if (code)
53  throw USARTException("Fehler beim Leeren des Eingangspuffers");
54 }
55 
57 {
58  int code = tcflush(file_desc, TCOFLUSH);
59  if (code)
60  throw USARTException("Fehler beim Leeren des Ausgangspuffers");
61 }
62 
64 {
65  int code = tcdrain(file_desc);
66  if (code)
67  throw USARTException("Fehler beim Versenden des Ausgangspuffers");
68 }
69 
70 void USART::receive(uint8_t *buffer, uint16_t offset, uint8_t len)
71 {
72  int n = read(file_desc, buffer + offset, len);
73  if (n != len)
74  throw USARTException(
75  std::string(__FUNCTION__) + " failed: " + std::string(__FILE__) + "#" + std::to_string(__LINE__));
76 }
77 
78 void USART::transmit(uint8_t *buffer, uint16_t offset, uint8_t len)
79 {
80  int n = write(file_desc, buffer + offset, len);
81  if (n != len)
82  throw USARTException(
83  std::string(__FUNCTION__) + " failed: " + std::string(__FILE__) + "#" + std::to_string(__LINE__));
84 }
85 
87 {
88  return baudrate;
89 }
90 
92 {
93  return timeout;
94 }
95 
96 void USART::setBaudrate(uint32_t baudrate)
97 {
98  this->baudrate = baudrate;
99 }
100 
101 void USART::setTimeout(uint8_t timeout)
102 {
103  this->timeout = timeout;
104 }
USART::getBaudrate
uint32_t getBaudrate(void)
Definition: usart.cpp:86
USARTException
Definition: usartexception.h:9
USART::closeDevice
void closeDevice(void)
Definition: usart.cpp:38
USART::transmit
void transmit(uint8_t *buffer, uint16_t offset, uint8_t len)
Definition: usart.cpp:78
USART::receive
void receive(uint8_t *buffer, uint16_t offset, uint8_t len)
Definition: usart.cpp:70
USART::clearInputBuffer
void clearInputBuffer(void)
Definition: usart.cpp:49
USART::getTimeout
uint8_t getTimeout(void)
Definition: usart.cpp:91
USART::clearOutputBuffer
void clearOutputBuffer(void)
Definition: usart.cpp:56
USART::setBaudrate
void setBaudrate(uint32_t baudrate)
Definition: usart.cpp:96
USART::~USART
virtual ~USART(void)
Definition: usart.cpp:3
USART::openDevice
void openDevice(std::string device)
Definition: usart.cpp:8
USART::setTimeout
void setTimeout(uint8_t timeout)
Definition: usart.cpp:101
USART::flushOutputBuffer
void flushOutputBuffer(void)
Definition: usart.cpp:63