2020-06-10 04:13:56 +02:00
|
|
|
#pragma once
|
|
|
|
#include <imgui.h>
|
|
|
|
#include <imgui_internal.h>
|
|
|
|
#include <vector>
|
|
|
|
#include <mutex>
|
|
|
|
#include <GL/glew.h>
|
2020-07-19 15:59:44 +02:00
|
|
|
#include <imutils.h>
|
2020-08-05 21:13:53 +02:00
|
|
|
#include <bandplan.h>
|
2020-06-10 04:13:56 +02:00
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
#define WATERFALL_RESOLUTION 1000000
|
|
|
|
|
2020-06-10 04:13:56 +02:00
|
|
|
namespace ImGui {
|
2020-07-11 21:15:10 +02:00
|
|
|
|
2020-06-10 04:13:56 +02:00
|
|
|
class WaterFall {
|
|
|
|
public:
|
|
|
|
WaterFall();
|
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
void draw();
|
2020-06-10 04:13:56 +02:00
|
|
|
void pushFFT(std::vector<float> data, int n);
|
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
void updatePallette(float colors[][3], int colorCount);
|
|
|
|
|
|
|
|
void setCenterFrequency(float freq);
|
|
|
|
float getCenterFrequency();
|
|
|
|
|
|
|
|
void setBandwidth(float bandWidth);
|
|
|
|
float getBandwidth();
|
|
|
|
|
|
|
|
void setVFOOffset(float offset);
|
|
|
|
float getVFOOfset();
|
|
|
|
|
|
|
|
void setVFOBandwidth(float bandwidth);
|
|
|
|
float getVFOBandwidth();
|
|
|
|
|
2020-07-19 15:59:44 +02:00
|
|
|
void setVFOReference(int ref);
|
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
void setViewBandwidth(float bandWidth);
|
2020-07-19 15:59:44 +02:00
|
|
|
float getViewBandwidth();
|
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
void setViewOffset(float offset);
|
2020-07-19 15:59:44 +02:00
|
|
|
float getViewOffset();
|
2020-07-11 21:15:10 +02:00
|
|
|
|
|
|
|
void setFFTMin(float min);
|
|
|
|
float getFFTMin();
|
|
|
|
|
|
|
|
void setFFTMax(float max);
|
|
|
|
float getFFTMax();
|
|
|
|
|
|
|
|
void setWaterfallMin(float min);
|
|
|
|
float getWaterfallMin();
|
|
|
|
|
|
|
|
void setWaterfallMax(float max);
|
|
|
|
float getWaterfallMax();
|
|
|
|
|
|
|
|
void setZoom(float zoomLevel);
|
|
|
|
void setOffset(float zoomOffset);
|
|
|
|
|
|
|
|
void autoRange();
|
|
|
|
|
2020-07-19 15:59:44 +02:00
|
|
|
bool centerFreqMoved = false;
|
|
|
|
bool vfoFreqChanged = false;
|
2020-08-05 21:13:53 +02:00
|
|
|
bool bandplanEnabled = false;
|
|
|
|
bandplan::BandPlan_t* bandplan = NULL;
|
2020-07-19 15:59:44 +02:00
|
|
|
|
|
|
|
enum {
|
|
|
|
REF_LOWER,
|
|
|
|
REF_CENTER,
|
|
|
|
REF_UPPER,
|
|
|
|
_REF_COUNT
|
|
|
|
};
|
|
|
|
|
2020-06-10 18:52:07 +02:00
|
|
|
|
2020-06-10 04:13:56 +02:00
|
|
|
private:
|
2020-07-11 21:15:10 +02:00
|
|
|
void drawWaterfall();
|
|
|
|
void drawFFT();
|
2020-07-19 15:59:44 +02:00
|
|
|
void drawVFO();
|
2020-08-05 21:13:53 +02:00
|
|
|
void drawBandPlan();
|
2020-07-11 21:15:10 +02:00
|
|
|
void onPositionChange();
|
|
|
|
void onResize();
|
|
|
|
void updateWaterfallFb();
|
|
|
|
void updateWaterfallTexture();
|
2020-06-10 04:13:56 +02:00
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
bool waterfallUpdate = false;
|
|
|
|
|
|
|
|
uint32_t waterfallPallet[WATERFALL_RESOLUTION];
|
2020-06-10 18:52:07 +02:00
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
ImVec2 widgetPos;
|
|
|
|
ImVec2 widgetEndPos;
|
|
|
|
ImVec2 widgetSize;
|
|
|
|
|
|
|
|
ImVec2 lastWidgetPos;
|
|
|
|
ImVec2 lastWidgetSize;
|
|
|
|
|
2020-07-19 15:59:44 +02:00
|
|
|
ImVec2 fftAreaMin;
|
|
|
|
ImVec2 fftAreaMax;
|
|
|
|
ImVec2 freqAreaMin;
|
|
|
|
ImVec2 freqAreaMax;
|
|
|
|
ImVec2 waterfallAreaMin;
|
|
|
|
ImVec2 waterfallAreaMax;
|
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
ImGuiWindow* window;
|
|
|
|
|
|
|
|
GLuint textureId;
|
|
|
|
|
|
|
|
std::mutex buf_mtx;
|
|
|
|
|
2020-07-19 21:26:37 +02:00
|
|
|
float vRange;
|
|
|
|
|
|
|
|
int maxVSteps;
|
|
|
|
int maxHSteps;
|
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
int dataWidth; // Width of the FFT and waterfall
|
|
|
|
int fftHeight; // Height of the fft graph
|
|
|
|
int waterfallHeight; // Height of the waterfall
|
|
|
|
|
|
|
|
float viewBandwidth;
|
|
|
|
float viewOffset;
|
|
|
|
|
|
|
|
float lowerFreq;
|
|
|
|
float upperFreq;
|
|
|
|
float range;
|
|
|
|
|
2020-07-19 15:59:44 +02:00
|
|
|
float lastDrag;
|
|
|
|
|
|
|
|
int vfoRef = REF_CENTER;
|
|
|
|
|
2020-07-11 21:15:10 +02:00
|
|
|
// Absolute values
|
|
|
|
float centerFreq;
|
|
|
|
float wholeBandwidth;
|
|
|
|
|
|
|
|
// VFO
|
|
|
|
float vfoOffset;
|
|
|
|
float vfoBandwidth;
|
|
|
|
|
|
|
|
// Ranges
|
|
|
|
float fftMin;
|
|
|
|
float fftMax;
|
|
|
|
float waterfallMin;
|
|
|
|
float waterfallMax;
|
|
|
|
|
|
|
|
std::vector<std::vector<float>> rawFFTs;
|
|
|
|
float* latestFFT;
|
|
|
|
|
|
|
|
uint32_t* waterfallFb;
|
|
|
|
|
2020-06-10 04:13:56 +02:00
|
|
|
};
|
|
|
|
};
|