]> code.bitgloo.com Git - clyne/stmdsp.git/commitdiff
drafted device interface
authorClyne Sullivan <clyne@bitgloo.com>
Fri, 19 Jun 2020 00:40:37 +0000 (20:40 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Fri, 19 Jun 2020 00:40:37 +0000 (20:40 -0400)
gui/main.cpp
gui/stmdsp.cpp
gui/stmdsp.hpp

index ae6ecb47d06ecbd535494f4904ba5b45b1e3add2..29f74d3de3acc72ab7e43f723bd209295344ce07 100644 (file)
@@ -1,19 +1,6 @@
-#include "stmdsp.hpp"
 #include "wxapp.hpp"
 
-#include <iostream>
 #include <wx/app.h>
 
 wxIMPLEMENT_APP(MainApp);
 
-//int main()
-//{
-//    stmdsp::scanner scanner;
-//
-//    scanner.scan();
-//    for (const auto& device : scanner.devices())
-//        std::cout << "Found stmdsp at: " << device.path() << std::endl;
-//
-//    return 0;
-//}
-
index 54452645a034c29b0c000b30172f22c7b3e10f5a..4812884f44a3bc6379f6c8c00c80983cda2380fa 100644 (file)
@@ -6,12 +6,12 @@ namespace stmdsp
 {
     std::list<std::string>& scanner::scan()
     {
-        auto serialDevices = serial::list_ports();
-        for (auto& device : serialDevices) {
+        auto devices = serial::list_ports();
+        for (auto& device : devices) {
             if (device.hardware_id.find(STMDSP_USB_ID) != std::string::npos)
-                m_devices.emplace_front(device.port);
+                m_available_devices.emplace_front(device.port);
         }
 
-        return m_devices;
+        return m_available_devices;
     }
 }
index 7695abe57e7507bfec8a8a08bdb16c54cab53b8d..030038d891487a275b99e278d5e76b8737184577 100644 (file)
@@ -1,8 +1,9 @@
 #ifndef STMDSP_HPP_
 #define STMDSP_HPP_
 
-#include <fstream>
+#include <cstdint>
 #include <list>
+#include <serial/serial.h>
 #include <string>
 
 namespace stmdsp
@@ -15,11 +16,45 @@ namespace stmdsp
     public:
         std::list<std::string>& scan();
         auto& devices() {
-            return m_devices;
+            return m_available_devices;
         }
 
     private:
-        std::list<std::string> m_devices;
+        std::list<std::string> m_available_devices;
+    };
+
+    using adcsample_t = uint16_t;
+
+    class device
+    {
+    public:
+        device(const std::string& file) :
+            m_serial(file, 115200, serial::Timeout::simpleTimeout(1000)) {}
+
+        ~device() {
+            m_serial.close();
+        }
+
+        bool connected() {
+            return m_serial.isOpen() && (m_serial.write("i"), m_serial.read(6) == "stmdsp");
+        }
+
+        std::vector<adcsample_t> sample(unsigned long int count = 1) {
+            if (connected()) {
+                m_serial.write(std::vector<uint8_t> {'r',
+                                                     static_cast<uint8_t>(count),
+                                                     static_cast<uint8_t>(count >> 8)});
+                std::vector<adcsample_t> data (count);
+                m_serial.read(reinterpret_cast<uint8_t *>(data.data()),
+                              data.size() * sizeof(adcsample_t));
+                return data;
+            } else {
+                return {};
+            }
+        }
+
+    private:
+        serial::Serial m_serial;
     };
 }