mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-29 23:28:39 -05:00
Add 'R' toggle key + fixes from initial testing
This commit is contained in:
parent
f8e51df8cd
commit
38fab6ac51
@ -756,7 +756,7 @@ bool AppConfig::load() {
|
|||||||
DataNode *rec_node = cfg.rootNode()->getNext("recording");
|
DataNode *rec_node = cfg.rootNode()->getNext("recording");
|
||||||
|
|
||||||
if (rec_node->hasAnother("path")) {
|
if (rec_node->hasAnother("path")) {
|
||||||
DataNode *rec_path = cfg.rootNode()->getNext("path");
|
DataNode *rec_path = rec_node->getNext("path");
|
||||||
recordingPath = rec_path->element()->toString();
|
recordingPath = rec_path->element()->toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2502,6 +2502,7 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) {
|
|||||||
case 'S':
|
case 'S':
|
||||||
case 'P':
|
case 'P':
|
||||||
case 'M':
|
case 'M':
|
||||||
|
case 'R':
|
||||||
return 1;
|
return 1;
|
||||||
case '0':
|
case '0':
|
||||||
case '1':
|
case '1':
|
||||||
@ -2642,6 +2643,11 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) {
|
|||||||
wxGetApp().setSoloMode(!wxGetApp().getSoloMode());
|
wxGetApp().setSoloMode(!wxGetApp().getSoloMode());
|
||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
|
case 'R':
|
||||||
|
if (activeDemod) {
|
||||||
|
activeDemod->setRecording(!activeDemod->isRecording());
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'P':
|
case 'P':
|
||||||
wxGetApp().getSpectrumProcessor()->setPeakHold(!wxGetApp().getSpectrumProcessor()->getPeakHold());
|
wxGetApp().getSpectrumProcessor()->setPeakHold(!wxGetApp().getSpectrumProcessor()->getPeakHold());
|
||||||
if (wxGetApp().getDemodSpectrumProcessor()) {
|
if (wxGetApp().getDemodSpectrumProcessor()) {
|
||||||
|
@ -360,7 +360,11 @@ bool BookmarkMgr::getExpandState(std::string groupName) {
|
|||||||
|
|
||||||
void BookmarkMgr::updateActiveList() {
|
void BookmarkMgr::updateActiveList() {
|
||||||
|
|
||||||
std::lock_guard < std::recursive_mutex > lockData(busy_lock);
|
std::lock_guard < std::recursive_mutex > lockData(busy_lock);
|
||||||
|
|
||||||
|
if (wxGetApp().isShuttingDown()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BookmarkView *bmv = wxGetApp().getAppFrame()->getBookmarkView();
|
BookmarkView *bmv = wxGetApp().getAppFrame()->getBookmarkView();
|
||||||
|
|
||||||
|
@ -203,6 +203,7 @@ CubicSDR::CubicSDR() : frequency(0), offset(0), ppm(0), snap(1), sampleRate(DEFA
|
|||||||
sampleRateInitialized.store(false);
|
sampleRateInitialized.store(false);
|
||||||
agcMode.store(true);
|
agcMode.store(true);
|
||||||
soloMode.store(false);
|
soloMode.store(false);
|
||||||
|
shuttingDown.store(false);
|
||||||
fdlgTarget = FrequencyDialog::FDIALOG_TARGET_DEFAULT;
|
fdlgTarget = FrequencyDialog::FDIALOG_TARGET_DEFAULT;
|
||||||
stoppedDev = nullptr;
|
stoppedDev = nullptr;
|
||||||
}
|
}
|
||||||
@ -384,6 +385,8 @@ bool CubicSDR::OnInit() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int CubicSDR::OnExit() {
|
int CubicSDR::OnExit() {
|
||||||
|
shuttingDown.store(true);
|
||||||
|
|
||||||
#if USE_HAMLIB
|
#if USE_HAMLIB
|
||||||
if (rigIsActive()) {
|
if (rigIsActive()) {
|
||||||
std::cout << "Terminating Rig thread.." << std::endl << std::flush;
|
std::cout << "Terminating Rig thread.." << std::endl << std::flush;
|
||||||
@ -1025,6 +1028,11 @@ bool CubicSDR::getSoloMode() {
|
|||||||
return soloMode.load();
|
return soloMode.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CubicSDR::isShuttingDown()
|
||||||
|
{
|
||||||
|
return shuttingDown.load();
|
||||||
|
}
|
||||||
|
|
||||||
int CubicSDR::FilterEvent(wxEvent& event) {
|
int CubicSDR::FilterEvent(wxEvent& event) {
|
||||||
if (!appframe) {
|
if (!appframe) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -171,6 +171,8 @@ public:
|
|||||||
void setSoloMode(bool solo);
|
void setSoloMode(bool solo);
|
||||||
bool getSoloMode();
|
bool getSoloMode();
|
||||||
|
|
||||||
|
bool isShuttingDown();
|
||||||
|
|
||||||
#ifdef USE_HAMLIB
|
#ifdef USE_HAMLIB
|
||||||
RigThread *getRigThread();
|
RigThread *getRigThread();
|
||||||
void initRig(int rigModel, std::string rigPort, int rigSerialRate);
|
void initRig(int rigModel, std::string rigPort, int rigSerialRate);
|
||||||
@ -195,6 +197,7 @@ private:
|
|||||||
std::atomic_llong sampleRate;
|
std::atomic_llong sampleRate;
|
||||||
std::string antennaName;
|
std::string antennaName;
|
||||||
std::atomic_bool agcMode;
|
std::atomic_bool agcMode;
|
||||||
|
std::atomic_bool shuttingDown;
|
||||||
|
|
||||||
SDRThread *sdrThread = nullptr;
|
SDRThread *sdrThread = nullptr;
|
||||||
SDREnumerator *sdrEnum = nullptr;
|
SDREnumerator *sdrEnum = nullptr;
|
||||||
|
@ -58,7 +58,6 @@ void DemodulatorMgr::terminateAll() {
|
|||||||
|
|
||||||
DemodulatorInstancePtr d = demods.back();
|
DemodulatorInstancePtr d = demods.back();
|
||||||
demods.pop_back();
|
demods.pop_back();
|
||||||
wxGetApp().removeDemodulator(d);
|
|
||||||
deleteThread(d);
|
deleteThread(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ void DemodulatorThread::onBindOutput(std::string name, ThreadQueueBasePtr thread
|
|||||||
audioVisOutputQueue = std::static_pointer_cast<DemodulatorThreadOutputQueue>(threadQueue);
|
audioVisOutputQueue = std::static_pointer_cast<DemodulatorThreadOutputQueue>(threadQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name == "AudioSinkOutput") {
|
if (name == "AudioSink") {
|
||||||
std::lock_guard < std::mutex > lock(m_mutexAudioVisOutputQueue);
|
std::lock_guard < std::mutex > lock(m_mutexAudioVisOutputQueue);
|
||||||
|
|
||||||
audioSinkOutputQueue = std::static_pointer_cast<AudioThreadInputQueue>(threadQueue);
|
audioSinkOutputQueue = std::static_pointer_cast<AudioThreadInputQueue>(threadQueue);
|
||||||
|
@ -104,18 +104,26 @@ void PrimaryGLContext::DrawDemodInfo(DemodulatorInstancePtr demod, RGBA4f color,
|
|||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
bool soloMode = wxGetApp().getSoloMode();
|
bool soloMode = wxGetApp().getSoloMode();
|
||||||
|
bool isRecording = demod->isRecording();
|
||||||
bool isSolo = soloMode && demod == wxGetApp().getDemodMgr().getLastActiveDemodulator();
|
bool isSolo = soloMode && demod == wxGetApp().getDemodMgr().getLastActiveDemodulator();
|
||||||
|
|
||||||
|
RGBA4f labelBg(0, 0, 0, 0.35f);
|
||||||
|
|
||||||
if (isSolo) {
|
if (isSolo) {
|
||||||
glColor4f(0.8f, 0.8f, 0, 0.35f);
|
labelBg.r = labelBg.g = 0.8f;
|
||||||
} else if (demod->isMuted()) {
|
} else if (demod->isMuted()) {
|
||||||
glColor4f(0.8f, 0, 0, 0.35f);
|
labelBg.r = 0.8f;
|
||||||
} else if (soloMode) {
|
} else if (soloMode) {
|
||||||
glColor4f(0.2f, 0, 0, 0.35f);
|
labelBg.r = 0.2f;
|
||||||
} else {
|
|
||||||
glColor4f(0, 0, 0, 0.35f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Better recording indicator... pulsating red circle?
|
||||||
|
if (isRecording) {
|
||||||
|
labelBg.g = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
glColor4f(labelBg.r, labelBg.g, labelBg.b, labelBg.a);
|
||||||
|
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glVertex3f(uxPos - ofsLeft, hPos + labelHeight, 0.0);
|
glVertex3f(uxPos - ofsLeft, hPos + labelHeight, 0.0);
|
||||||
glVertex3f(uxPos - ofsLeft, -1.0, 0.0);
|
glVertex3f(uxPos - ofsLeft, -1.0, 0.0);
|
||||||
@ -168,6 +176,10 @@ void PrimaryGLContext::DrawDemodInfo(DemodulatorInstancePtr demod, RGBA4f color,
|
|||||||
demodLabel.append(" [V]");
|
demodLabel.append(" [V]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isRecording) {
|
||||||
|
demodLabel.append(" [R]");
|
||||||
|
}
|
||||||
|
|
||||||
if (demod->getDemodulatorType() == "USB") {
|
if (demod->getDemodulatorType() == "USB") {
|
||||||
GLFont::getFont(16, GLFont::getScaleFactor()).drawString(demodLabel, uxPos, hPos, GLFont::GLFONT_ALIGN_LEFT, GLFont::GLFONT_ALIGN_CENTER, 0, 0, true);
|
GLFont::getFont(16, GLFont::getScaleFactor()).drawString(demodLabel, uxPos, hPos, GLFont::GLFONT_ALIGN_LEFT, GLFont::GLFONT_ALIGN_CENTER, 0, 0, true);
|
||||||
} else if (demod->getDemodulatorType() == "LSB") {
|
} else if (demod->getDemodulatorType() == "LSB") {
|
||||||
|
Loading…
Reference in New Issue
Block a user