1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/*
* File: uart.hpp
* Author: naopross
*
* Created on May 2, 2018, 7:04 PM
*/
#ifndef UART_HPP
#define UART_HPP
#include <cstdint>
#include <cstddef>
#include <string>
extern "C" {
void usart_1_isr();
void usart_2_isr();
void usart_3_isr();
void usart_4_isr();
}
namespace uart
{
const unsigned devices_count = 4;
enum class status : unsigned int
{
rx_data_available = 1<<0,
rx_overrun_error = 1<<1,
framing_error = 1<<2,
parity_error = 1<<3,
receiver_ide = 1<<4,
tx_complete = 1<<8,
tx_full = 1<<9,
};
enum class transfer_status : unsigned int
{
rx_full = 1<<0,
rx_data_present = 1<<1,
rx_empty = 1<<2,
tx_full = 1<<3,
tx_empty = 1<<4,
};
std::string rx_buffer[devices_count];
std::string tx_buffer[devices_count];
template<unsigned dev>
void initialize();
template<unsigned dev>
uint8_t peek(uint16_t offset);
template<unsigned dev>
uint8_t read(void);
template<unsigned dev>
unsigned read(uint8_t *buffer, const unsigned numbytes);
template<unsigned dev>
void write(const uint8_t byte);
template<unsigned dev>
unsigned write(const uint8_t *buffer, const unsigned numbytes);
template<unsigned dev>
status status();
template<unsigned dev>
transfer_status tranfer_status();
template<unsigned dev>
unsigned rx_buffer_size();
template<unsigned dev>
unsigned tx_buffer_size();
template<unsigned dev>
bool rx_buffer_empty();
template<unsigned dev>
bool tx_buffer_full();
}
#endif /* UART_HPP */
|