From 8a19a66af00921cf003429ca79bb129e98815962 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 3 Jul 2017 13:42:11 +0200 Subject: [PATCH] LimeSDR input: implemented temperature reading --- .../limesdrinput/limesdrinput.cpp | 42 +++++++++++++++++++ .../samplesource/limesdrinput/limesdrinput.h | 35 ++++++++++++++++ .../limesdrinput/limesdrinputgui.cpp | 19 ++++++++- .../limesdrinput/limesdrinputgui.h | 1 + .../limesdrinput/limesdrinputgui.ui | 26 ++++++++++++ 5 files changed, 122 insertions(+), 1 deletion(-) diff --git a/plugins/samplesource/limesdrinput/limesdrinput.cpp b/plugins/samplesource/limesdrinput/limesdrinput.cpp index a5570a0c9..b5e4700ea 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinput.cpp @@ -31,9 +31,11 @@ MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgConfigureLimeSDR, Message) MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgGetStreamInfo, Message) +MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgGetDeviceInfo, Message) MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgSetReferenceConfig, Message) MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgReportLimeSDRToGUI, Message) MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgReportStreamInfo, Message) +MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgReportDeviceInfo, Message) LimeSDRInput::LimeSDRInput(DeviceSourceAPI *deviceAPI) : @@ -440,6 +442,46 @@ bool LimeSDRInput::handleMessage(const Message& message) return true; } + else if (MsgGetDeviceInfo::match(message)) + { + if (m_deviceAPI->isBuddyLeader()) + { + double temp = 0.0; + + if (m_deviceShared.m_deviceParams->getDevice() && (LMS_GetChipTemperature(m_deviceShared.m_deviceParams->getDevice(), 0, &temp) == 0)) + { + qDebug("LimeSDRInput::handleMessage: MsgGetDeviceInfo: temperature: %f", temp); + } + else + { + qDebug("LimeSDRInput::handleMessage: MsgGetDeviceInfo: cannot get temperature"); + } + + // send to oneself + MsgReportDeviceInfo *report = MsgReportDeviceInfo::create(temp); + m_deviceAPI->getDeviceOutputMessageQueue()->push(report); + + // send to source buddies + const std::vector& sourceBuddies = m_deviceAPI->getSourceBuddies(); + std::vector::const_iterator itSource = sourceBuddies.begin(); + + for (; itSource != sourceBuddies.end(); ++itSource) + { + MsgReportDeviceInfo *report = MsgReportDeviceInfo::create(temp); + (*itSource)->getDeviceOutputMessageQueue()->push(report); + } + + // send to sink buddies + const std::vector& sinkBuddies = m_deviceAPI->getSinkBuddies(); + std::vector::const_iterator itSink = sinkBuddies.begin(); + + for (; itSink != sinkBuddies.end(); ++itSink) + { + MsgReportDeviceInfo *report = MsgReportDeviceInfo::create(temp); + (*itSink)->getDeviceOutputMessageQueue()->push(report); + } + } + } else { return false; diff --git a/plugins/samplesource/limesdrinput/limesdrinput.h b/plugins/samplesource/limesdrinput/limesdrinput.h index 2e1f05f91..8b4c705c4 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.h +++ b/plugins/samplesource/limesdrinput/limesdrinput.h @@ -86,6 +86,21 @@ public: { } }; + class MsgGetDeviceInfo : public Message { + MESSAGE_CLASS_DECLARATION + + public: + static MsgGetDeviceInfo* create() + { + return new MsgGetDeviceInfo(); + } + + private: + MsgGetDeviceInfo() : + Message() + { } + }; + class MsgReportLimeSDRToGUI : public Message { MESSAGE_CLASS_DECLARATION @@ -193,6 +208,26 @@ public: { } }; + class MsgReportDeviceInfo : public Message { + MESSAGE_CLASS_DECLARATION + + public: + float getTemperature() const { return m_temperature; } + + static MsgReportDeviceInfo* create(float temperature) + { + return new MsgReportDeviceInfo(temperature); + } + + private: + float m_temperature; + + MsgReportDeviceInfo(float temperature) : + Message(), + m_temperature(temperature) + { } + }; + LimeSDRInput(DeviceSourceAPI *deviceAPI); virtual ~LimeSDRInput(); diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp index f0f17019c..cf7c4466b 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp @@ -36,7 +36,8 @@ LimeSDRInputGUI::LimeSDRInputGUI(DeviceSourceAPI *deviceAPI, QWidget* parent) : m_sampleRate(0), m_lastEngineState((DSPDeviceSourceEngine::State)-1), m_doApplySettings(true), - m_statusCounter(0) + m_statusCounter(0), + m_deviceStatusCounter(0) { m_limeSDRInput = new LimeSDRInput(m_deviceAPI); m_sampleSource = (DeviceSampleSource *) m_limeSDRInput; @@ -235,6 +236,11 @@ void LimeSDRInputGUI::handleMessagesToGUI() ui->streamStatusLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }"); } } + else if (LimeSDRInput::MsgReportDeviceInfo::match(*message)) + { + LimeSDRInput::MsgReportDeviceInfo *report = (LimeSDRInput::MsgReportDeviceInfo *) message; + ui->temperatureText->setText(tr("%1C").arg(QString::number(report->getTemperature(), 'f', 0))); + } } } @@ -335,6 +341,17 @@ void LimeSDRInputGUI::updateStatus() m_sampleSource->getInputMessageQueue()->push(message); m_statusCounter = 0; } + + if (m_deviceStatusCounter < 10) + { + m_deviceStatusCounter++; + } + else + { + LimeSDRInput::MsgGetDeviceInfo* message = LimeSDRInput::MsgGetDeviceInfo::create(); + m_sampleSource->getInputMessageQueue()->push(message); + m_deviceStatusCounter = 0; + } } void LimeSDRInputGUI::blockApplySettings(bool block) diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.h b/plugins/samplesource/limesdrinput/limesdrinputgui.h index dee2fc795..1b330d5e1 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.h +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.h @@ -62,6 +62,7 @@ private: int m_lastEngineState; bool m_doApplySettings; int m_statusCounter; + int m_deviceStatusCounter; void displaySettings(); void setNCODisplay(); diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.ui b/plugins/samplesource/limesdrinput/limesdrinputgui.ui index 3475a3596..c2213cabc 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputgui.ui +++ b/plugins/samplesource/limesdrinput/limesdrinputgui.ui @@ -874,6 +874,32 @@ QToolTip{background-color: white; color: black;} + + + + Qt::Vertical + + + + + + + + 24 + 0 + + + + Board temperature (degrees C) + + + 00C + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + +