mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 13:11:20 -05:00 
			
		
		
		
	LimeSDR input: implemented basic stream reporting
This commit is contained in:
		
							parent
							
								
									1a1c793014
								
							
						
					
					
						commit
						db67e07ab9
					
				@ -28,8 +28,10 @@
 | 
			
		||||
#include "limesdr/devicelimesdrparam.h"
 | 
			
		||||
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgConfigureLimeSDR, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgGetStreamInfo, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgSetReferenceConfig, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgReportLimeSDRToGUI, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(LimeSDRInput::MsgReportStreamInfo, Message)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LimeSDRInput::LimeSDRInput(DeviceSourceAPI *deviceAPI) :
 | 
			
		||||
@ -333,6 +335,53 @@ bool LimeSDRInput::handleMessage(const Message& message)
 | 
			
		||||
        m_settings = conf.getSettings();
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    else if (MsgGetStreamInfo::match(message))
 | 
			
		||||
    {
 | 
			
		||||
        qDebug() << "LimeSDRInput::handleMessage: MsgGetStreamInfo";
 | 
			
		||||
        lms_stream_status_t status;
 | 
			
		||||
 | 
			
		||||
        if (LMS_GetStreamStatus(&m_streamId, &status) < 0)
 | 
			
		||||
        {
 | 
			
		||||
            qDebug("LimeSDRInput::handleMessage: canot get stream status");
 | 
			
		||||
            MsgReportStreamInfo *report = MsgReportStreamInfo::create(
 | 
			
		||||
                    false, // Success
 | 
			
		||||
                    status.active,
 | 
			
		||||
                    status.fifoFilledCount,
 | 
			
		||||
                    status.fifoSize,
 | 
			
		||||
                    status.underrun,
 | 
			
		||||
                    status.overrun,
 | 
			
		||||
                    status.droppedPackets,
 | 
			
		||||
                    status.sampleRate,
 | 
			
		||||
                    status.linkRate,
 | 
			
		||||
                    status.timestamp);
 | 
			
		||||
            m_deviceAPI->getDeviceOutputMessageQueue()->push(report);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            qDebug() << "LimeSDRInput::handleMessage: got stream status at %llu" << status.timestamp
 | 
			
		||||
                    << " fifoFilledCount: " << status.fifoFilledCount
 | 
			
		||||
                    << " fifoSize: " << status.fifoSize
 | 
			
		||||
                    << " underrun: " << status.underrun
 | 
			
		||||
                    << " overrun: " << status.overrun
 | 
			
		||||
                    << " droppedPackets: " << status.droppedPackets
 | 
			
		||||
                    << " sampleRate: " << status.sampleRate
 | 
			
		||||
                    << " linkRate: " << status.linkRate;
 | 
			
		||||
            MsgReportStreamInfo *report = MsgReportStreamInfo::create(
 | 
			
		||||
                    true, // Success
 | 
			
		||||
                    status.active,
 | 
			
		||||
                    status.fifoFilledCount,
 | 
			
		||||
                    status.fifoSize,
 | 
			
		||||
                    status.underrun,
 | 
			
		||||
                    status.overrun,
 | 
			
		||||
                    status.droppedPackets,
 | 
			
		||||
                    status.sampleRate,
 | 
			
		||||
                    status.linkRate,
 | 
			
		||||
                    status.timestamp);
 | 
			
		||||
            m_deviceAPI->getDeviceOutputMessageQueue()->push(report);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
@ -71,6 +71,21 @@ public:
 | 
			
		||||
        { }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    class MsgGetStreamInfo : public Message {
 | 
			
		||||
        MESSAGE_CLASS_DECLARATION
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
        static MsgGetStreamInfo* create()
 | 
			
		||||
        {
 | 
			
		||||
            return new MsgGetStreamInfo();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        MsgGetStreamInfo() :
 | 
			
		||||
            Message()
 | 
			
		||||
        { }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    class MsgReportLimeSDRToGUI : public Message {
 | 
			
		||||
        MESSAGE_CLASS_DECLARATION
 | 
			
		||||
 | 
			
		||||
@ -97,6 +112,85 @@ public:
 | 
			
		||||
        { }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    class MsgReportStreamInfo : public Message {
 | 
			
		||||
        MESSAGE_CLASS_DECLARATION
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
        bool     getSuccess() const { return m_success; }
 | 
			
		||||
        bool     getActive() const { return m_active; }
 | 
			
		||||
        uint32_t getFifoFilledCount() const { return m_fifoFilledCount; }
 | 
			
		||||
        uint32_t getFifoSize() const { return m_fifoSize; }
 | 
			
		||||
        uint32_t getUnderrun() const { return m_underrun; }
 | 
			
		||||
        uint32_t getOverrun() const { return m_overrun; }
 | 
			
		||||
        uint32_t getDroppedPackets() const { return m_droppedPackets; }
 | 
			
		||||
        float    getSampleRate() const { return m_sampleRate; }
 | 
			
		||||
        float    getLinkRate() const { return m_linkRate; }
 | 
			
		||||
        uint64_t getTimestamp() const { return m_timestamp; }
 | 
			
		||||
 | 
			
		||||
        static MsgReportStreamInfo* create(
 | 
			
		||||
                bool     active,
 | 
			
		||||
                uint32_t fifoFilledCount,
 | 
			
		||||
                uint32_t fifoSize,
 | 
			
		||||
                uint32_t underrun,
 | 
			
		||||
                uint32_t overrun,
 | 
			
		||||
                uint32_t droppedPackets,
 | 
			
		||||
                float    sampleRate,
 | 
			
		||||
                float    linkRate,
 | 
			
		||||
                uint64_t timestamp
 | 
			
		||||
                )
 | 
			
		||||
        {
 | 
			
		||||
            return new MsgReportStreamInfo(
 | 
			
		||||
                    active,
 | 
			
		||||
                    fifoFilledCount,
 | 
			
		||||
                    fifoSize,
 | 
			
		||||
                    underrun,
 | 
			
		||||
                    overrun,
 | 
			
		||||
                    droppedPackets,
 | 
			
		||||
                    sampleRate,
 | 
			
		||||
                    linkRate,
 | 
			
		||||
                    timestamp
 | 
			
		||||
                    );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        bool     m_success;
 | 
			
		||||
        // everything from lms_stream_status_t
 | 
			
		||||
        bool     m_active; //!< Indicates whether the stream is currently active
 | 
			
		||||
        uint32_t m_fifoFilledCount; //!< Number of samples in FIFO buffer
 | 
			
		||||
        uint32_t m_fifoSize; //!< Size of FIFO buffer
 | 
			
		||||
        uint32_t m_underrun; //!< FIFO underrun count
 | 
			
		||||
        uint32_t m_overrun; //!< FIFO overrun count
 | 
			
		||||
        uint32_t m_droppedPackets; //!< Number of dropped packets by HW
 | 
			
		||||
        float    m_sampleRate; //!< Sampling rate of the stream
 | 
			
		||||
        float    m_linkRate; //!< Combined data rate of all stream of the same direction (TX or RX)
 | 
			
		||||
        uint64_t m_timestamp; //!< Current HW timestamp
 | 
			
		||||
 | 
			
		||||
        MsgReportStreamInfo(
 | 
			
		||||
                bool     success,
 | 
			
		||||
                bool     active,
 | 
			
		||||
                uint32_t fifoFilledCount,
 | 
			
		||||
                uint32_t fifoSize,
 | 
			
		||||
                uint32_t underrun,
 | 
			
		||||
                uint32_t overrun,
 | 
			
		||||
                uint32_t droppedPackets,
 | 
			
		||||
                float    sampleRate,
 | 
			
		||||
                float    linkRate,
 | 
			
		||||
                uint64_t timestamp
 | 
			
		||||
                ) :
 | 
			
		||||
            Message(),
 | 
			
		||||
            m_success(success),
 | 
			
		||||
            m_active(active),
 | 
			
		||||
            m_fifoFilledCount(fifoFilledCount),
 | 
			
		||||
            m_fifoSize(fifoSize),
 | 
			
		||||
            m_underrun(underrun),
 | 
			
		||||
            m_overrun(overrun),
 | 
			
		||||
            m_droppedPackets(droppedPackets),
 | 
			
		||||
            m_sampleRate(sampleRate),
 | 
			
		||||
            m_linkRate(linkRate),
 | 
			
		||||
            m_timestamp(timestamp)
 | 
			
		||||
        { }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    LimeSDRInput(DeviceSourceAPI *deviceAPI);
 | 
			
		||||
    virtual ~LimeSDRInput();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,8 @@ LimeSDRInputGUI::LimeSDRInputGUI(DeviceSourceAPI *deviceAPI, QWidget* parent) :
 | 
			
		||||
    m_sampleSource(0),
 | 
			
		||||
    m_sampleRate(0),
 | 
			
		||||
    m_lastEngineState((DSPDeviceSourceEngine::State)-1),
 | 
			
		||||
    m_doApplySettings(true)
 | 
			
		||||
    m_doApplySettings(true),
 | 
			
		||||
    m_statusCounter(0)
 | 
			
		||||
{
 | 
			
		||||
    m_limeSDRInput = new LimeSDRInput(m_deviceAPI);
 | 
			
		||||
    m_sampleSource = (DeviceSampleSource *) m_limeSDRInput;
 | 
			
		||||
@ -179,6 +180,29 @@ void LimeSDRInputGUI::handleMessagesToGUI()
 | 
			
		||||
 | 
			
		||||
            delete message;
 | 
			
		||||
        }
 | 
			
		||||
        else if (LimeSDRInput::MsgReportStreamInfo::match(*message))
 | 
			
		||||
        {
 | 
			
		||||
            LimeSDRInput::MsgReportStreamInfo *report = (LimeSDRInput::MsgReportStreamInfo *) message;
 | 
			
		||||
 | 
			
		||||
            if (report->getSuccess())
 | 
			
		||||
            {
 | 
			
		||||
                if (report->getActive())
 | 
			
		||||
                {
 | 
			
		||||
                    ui->streamStatusLabel->setStyleSheet("QLabel { background-color : green; }");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    ui->streamStatusLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                ui->streamSampleRateText->setText(tr("%1kS").arg(QString::number(report->getSampleRate() / 1000.0f, 'f', 0)));
 | 
			
		||||
                ui->streamLinkRateText->setText(tr("%1kB").arg(QString::number(report->getLinkRate() / 1000.0f, 'f', 0)));
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                ui->streamStatusLabel->setStyleSheet("QLabel { background-color : red; }");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -253,6 +277,17 @@ void LimeSDRInputGUI::updateStatus()
 | 
			
		||||
 | 
			
		||||
        m_lastEngineState = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (m_statusCounter < 1)
 | 
			
		||||
    {
 | 
			
		||||
        m_statusCounter++;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        LimeSDRInput::MsgGetStreamInfo* message = LimeSDRInput::MsgGetStreamInfo::create();
 | 
			
		||||
        m_sampleSource->getInputMessageQueue()->push(message);
 | 
			
		||||
        m_statusCounter = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LimeSDRInputGUI::blockApplySettings(bool block)
 | 
			
		||||
 | 
			
		||||
@ -61,6 +61,7 @@ private:
 | 
			
		||||
    quint64 m_deviceCenterFrequency; //!< Center frequency in device
 | 
			
		||||
    int m_lastEngineState;
 | 
			
		||||
    bool m_doApplySettings;
 | 
			
		||||
    int m_statusCounter;
 | 
			
		||||
 | 
			
		||||
    void displaySettings();
 | 
			
		||||
    void sendSettings();
 | 
			
		||||
 | 
			
		||||
@ -591,6 +591,89 @@
 | 
			
		||||
     </item>
 | 
			
		||||
    </layout>
 | 
			
		||||
   </item>
 | 
			
		||||
   <item>
 | 
			
		||||
    <layout class="QHBoxLayout" name="statusLayout">
 | 
			
		||||
     <property name="leftMargin">
 | 
			
		||||
      <number>6</number>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="topMargin">
 | 
			
		||||
      <number>6</number>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="rightMargin">
 | 
			
		||||
      <number>6</number>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="bottomMargin">
 | 
			
		||||
      <number>6</number>
 | 
			
		||||
     </property>
 | 
			
		||||
     <item>
 | 
			
		||||
      <widget class="QLabel" name="streamStatusLabel">
 | 
			
		||||
       <property name="minimumSize">
 | 
			
		||||
        <size>
 | 
			
		||||
         <width>24</width>
 | 
			
		||||
         <height>24</height>
 | 
			
		||||
        </size>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="maximumSize">
 | 
			
		||||
        <size>
 | 
			
		||||
         <width>24</width>
 | 
			
		||||
         <height>24</height>
 | 
			
		||||
        </size>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string/>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="pixmap">
 | 
			
		||||
        <pixmap resource="../../../sdrbase/resources/res.qrc">:/stream.png</pixmap>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </item>
 | 
			
		||||
     <item>
 | 
			
		||||
      <widget class="QLabel" name="streamSampleRateText">
 | 
			
		||||
       <property name="minimumSize">
 | 
			
		||||
        <size>
 | 
			
		||||
         <width>50</width>
 | 
			
		||||
         <height>0</height>
 | 
			
		||||
        </size>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>00000kS</string>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="alignment">
 | 
			
		||||
        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </item>
 | 
			
		||||
     <item>
 | 
			
		||||
      <widget class="QLabel" name="streamLinkRateText">
 | 
			
		||||
       <property name="minimumSize">
 | 
			
		||||
        <size>
 | 
			
		||||
         <width>50</width>
 | 
			
		||||
         <height>0</height>
 | 
			
		||||
        </size>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>00000kB</string>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="alignment">
 | 
			
		||||
        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </item>
 | 
			
		||||
     <item>
 | 
			
		||||
      <spacer name="horizontalSpacer_3">
 | 
			
		||||
       <property name="orientation">
 | 
			
		||||
        <enum>Qt::Horizontal</enum>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="sizeHint" stdset="0">
 | 
			
		||||
        <size>
 | 
			
		||||
         <width>40</width>
 | 
			
		||||
         <height>20</height>
 | 
			
		||||
        </size>
 | 
			
		||||
       </property>
 | 
			
		||||
      </spacer>
 | 
			
		||||
     </item>
 | 
			
		||||
    </layout>
 | 
			
		||||
   </item>
 | 
			
		||||
   <item>
 | 
			
		||||
    <layout class="QHBoxLayout" name="padLayout">
 | 
			
		||||
     <item>
 | 
			
		||||
 | 
			
		||||
@ -76,5 +76,6 @@
 | 
			
		||||
        <file>picture.png</file>
 | 
			
		||||
        <file>camera.png</file>
 | 
			
		||||
        <file>filter_bandpass.png</file>
 | 
			
		||||
        <file>stream.png</file>
 | 
			
		||||
    </qresource>
 | 
			
		||||
</RCC>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								sdrbase/resources/stream.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sdrbase/resources/stream.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 487 B  | 
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user