diff --git a/gui/main.cpp b/gui/main.cpp index ae6ecb4..29f74d3 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -1,19 +1,6 @@ -#include "stmdsp.hpp" #include "wxapp.hpp" -#include #include 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; -//} - diff --git a/gui/stmdsp.cpp b/gui/stmdsp.cpp index 5445264..4812884 100644 --- a/gui/stmdsp.cpp +++ b/gui/stmdsp.cpp @@ -6,12 +6,12 @@ namespace stmdsp { std::list& 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; } } diff --git a/gui/stmdsp.hpp b/gui/stmdsp.hpp index 7695abe..030038d 100644 --- a/gui/stmdsp.hpp +++ b/gui/stmdsp.hpp @@ -1,8 +1,9 @@ #ifndef STMDSP_HPP_ #define STMDSP_HPP_ -#include +#include #include +#include #include namespace stmdsp @@ -15,11 +16,45 @@ namespace stmdsp public: std::list& scan(); auto& devices() { - return m_devices; + return m_available_devices; } private: - std::list m_devices; + std::list 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 sample(unsigned long int count = 1) { + if (connected()) { + m_serial.write(std::vector {'r', + static_cast(count), + static_cast(count >> 8)}); + std::vector data (count); + m_serial.read(reinterpret_cast(data.data()), + data.size() * sizeof(adcsample_t)); + return data; + } else { + return {}; + } + } + + private: + serial::Serial m_serial; }; }