blob: 62fe6f4471e975f8d9bdbf505e43d5ce5f2df635 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/*
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/>.
*/
#pragma once
#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
// returns name of key pressed, or an empty string if nothing
// happened
std::string 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);
void set_tx_gain(double gain) { m_txgain = gain; }
void set_rx_gain(double gain) { m_rxgain = gain; }
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;
};
|