diff options
Diffstat (limited to 'pointcloud.hpp')
-rw-r--r-- | pointcloud.hpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/pointcloud.hpp b/pointcloud.hpp new file mode 100644 index 0000000..a2dc7c3 --- /dev/null +++ b/pointcloud.hpp @@ -0,0 +1,66 @@ +/* + Copyright (C) 2015 + Matthias P. Braendli, matthias.braendli@mpb.li + + http://opendigitalradio.org + */ +/* + This file is part of ODR-DPD. + + ODR-DPD is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + ODR-DPD is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ODR-DPD. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "utils.hpp" +#include <exception> +#include <deque> +#include <vector> +#include <complex> +#include <mutex> + +// Exception to quit the program +class sdl_quit : public std::exception {}; + +struct Point { + double x, y, z; + uint8_t r, g, b; +}; + + +class PointCloud +{ + public: + PointCloud(size_t num_points); + + // Must call this regularly + void handle_event(void); + + // The caller must guarantee that the two vectors have the same size + void push_samples(std::pair<std::vector<complexf>, std::vector<complexf> > &data); + + // Update the display. Must be called from the same thread as the + // one that constructed this instance. + void draw(void); + + private: + std::vector<Point> generate_border(void); + + size_t m_num_points; + + double m_rxgain; + double m_txgain; + + std::mutex m_mutex; + std::deque<Point> m_points; +}; + |