summaryrefslogtreecommitdiffstats
path: root/hal/uart.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'hal/uart.hpp')
-rw-r--r--hal/uart.hpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/hal/uart.hpp b/hal/uart.hpp
new file mode 100644
index 0000000..179dd4a
--- /dev/null
+++ b/hal/uart.hpp
@@ -0,0 +1,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 */
+