From 22d6fd49edb1e5613a3c11cb0d043dc1347c2587 Mon Sep 17 00:00:00 2001
From: Erik Strand <erik.strand@cba.mit.edu>
Date: Wed, 28 Nov 2018 10:59:53 -0500
Subject: [PATCH] Echo characters from the serial device

---
 main.cpp | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/main.cpp b/main.cpp
index 47c77be..43d7f2c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -22,6 +22,46 @@ int main() {
     std::cout << "Searching for serial ports.\n";
     list_ports();
 
+    const char* desired_port = "/dev/cu.usbserial-AC01YB5P";
+    constexpr uint32_t baud_rate = 115200;
+    constexpr uint32_t byte_buffer_size = 512;
+    char byte_buffer[byte_buffer_size];
+
+    struct sp_port *port;
+    std::cout << "Opening port " << desired_port << '\n';
+    sp_return error = sp_get_port_by_name(desired_port,&port);
+    if (error == SP_OK) {
+    error = sp_open(port, SP_MODE_READ);
+    if (error == SP_OK) {
+        sp_set_baudrate(port, baud_rate);
+        while (true) {
+            int bytes_waiting = sp_input_waiting(port);
+            if (bytes_waiting > 0) {
+                std::cout << bytes_waiting << " bytes in the buffer: ";
+                int byte_num = 0;
+                byte_num = sp_nonblocking_read(port, byte_buffer, byte_buffer_size);
+                bool button_pressed = false;
+                for (decltype(byte_num) i = 0; i < byte_num; ++i){
+                    if (byte_buffer[i] == '1') {
+                        button_pressed = true;
+                    }
+                    std::cout << byte_buffer[i];
+                }
+                if (button_pressed) {
+                    std::cout << "   the button is pressed!";
+                }
+                std::cout << std::endl;
+            }
+        }
+        // Execution can never make it here, but I'll close the port on principle.
+        sp_close(port);
+        } else {
+            std::cout << "Error opening serial device\n";
+        }
+    } else {
+        std::cout << "Error finding serial device\n";
+    }
+
     return 0;
 }
 
-- 
GitLab