mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 21:20:31 -05:00 
			
		
		
		
	BladerRF2 input support (4)
This commit is contained in:
		
							parent
							
								
									945d30d91b
								
							
						
					
					
						commit
						df505fcdef
					
				@ -16,6 +16,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "devicebladerf2shared.h"
 | 
					#include "devicebladerf2shared.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MESSAGE_CLASS_DEFINITION(DeviceBladeRF2Shared::MsgReportBuddyChange, Message)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DeviceBladeRF2Shared::DeviceBladeRF2Shared() :
 | 
					DeviceBladeRF2Shared::DeviceBladeRF2Shared() :
 | 
				
			||||||
    m_dev(0),
 | 
					    m_dev(0),
 | 
				
			||||||
    m_channel(-1),
 | 
					    m_channel(-1),
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@
 | 
				
			|||||||
#ifndef DEVICES_BLADERF2_DEVICEBLADERF2SHARED_H_
 | 
					#ifndef DEVICES_BLADERF2_DEVICEBLADERF2SHARED_H_
 | 
				
			||||||
#define DEVICES_BLADERF2_DEVICEBLADERF2SHARED_H_
 | 
					#define DEVICES_BLADERF2_DEVICEBLADERF2SHARED_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "util/message.h"
 | 
				
			||||||
#include "devicebladerf2.h"
 | 
					#include "devicebladerf2.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SampleSinkFifo;
 | 
					class SampleSinkFifo;
 | 
				
			||||||
@ -56,6 +57,35 @@ public:
 | 
				
			|||||||
        virtual SampleSourceFifo *getFifo(unsigned int channel) = 0;
 | 
					        virtual SampleSourceFifo *getFifo(unsigned int channel) = 0;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class MsgReportBuddyChange : public Message {
 | 
				
			||||||
 | 
					        MESSAGE_CLASS_DECLARATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        bool getBiasTee() const { return m_biasTee; }
 | 
				
			||||||
 | 
					        bool getRxElseTx() const { return m_rxElseTx; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        static MsgReportBuddyChange* create(
 | 
				
			||||||
 | 
					                bool biasTee,
 | 
				
			||||||
 | 
					                bool rxElseTx)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return new MsgReportBuddyChange(
 | 
				
			||||||
 | 
					                    biasTee,
 | 
				
			||||||
 | 
					                    rxElseTx);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        bool     m_biasTee;
 | 
				
			||||||
 | 
					        bool     m_rxElseTx;            //!< tells which side initiated the message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        MsgReportBuddyChange(
 | 
				
			||||||
 | 
					                bool biasTee,
 | 
				
			||||||
 | 
					                bool rxElseTx) :
 | 
				
			||||||
 | 
					            Message(),
 | 
				
			||||||
 | 
					            m_biasTee(biasTee),
 | 
				
			||||||
 | 
					            m_rxElseTx(rxElseTx)
 | 
				
			||||||
 | 
					        { }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DeviceBladeRF2Shared();
 | 
					    DeviceBladeRF2Shared();
 | 
				
			||||||
    ~DeviceBladeRF2Shared();
 | 
					    ~DeviceBladeRF2Shared();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -431,6 +431,24 @@ bool BladeRF2Input::handleMessage(const Message& message)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    else if (DeviceBladeRF2Shared::MsgReportBuddyChange::match(message))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        DeviceBladeRF2Shared::MsgReportBuddyChange& report = (DeviceBladeRF2Shared::MsgReportBuddyChange&) message;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (report.getRxElseTx())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            m_settings.m_biasTee   = report.getBiasTee();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (getMessageQueueToGUI())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            DeviceBladeRF2Shared::MsgReportBuddyChange *reportToGUI = DeviceBladeRF2Shared::MsgReportBuddyChange::create(
 | 
				
			||||||
 | 
					                    m_settings.m_biasTee, true);
 | 
				
			||||||
 | 
					            getMessageQueueToGUI()->push(reportToGUI);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    else if (MsgFileRecord::match(message))
 | 
					    else if (MsgFileRecord::match(message))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        MsgFileRecord& conf = (MsgFileRecord&) message;
 | 
					        MsgFileRecord& conf = (MsgFileRecord&) message;
 | 
				
			||||||
@ -480,7 +498,9 @@ bool BladeRF2Input::handleMessage(const Message& message)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool force)
 | 
					bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool force)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    bool forwardChange = false;
 | 
					    bool forwardChangeOwnDSP = false;
 | 
				
			||||||
 | 
					    bool forwardChangeRxDSP  = false;
 | 
				
			||||||
 | 
					    bool forwardChangeAllDSP __attribute__((unused)) = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct bladerf *dev = m_deviceShared.m_dev->getDev();
 | 
					    struct bladerf *dev = m_deviceShared.m_dev->getDev();
 | 
				
			||||||
    qDebug() << "BladeRF2Input::applySettings: m_dev: " << dev;
 | 
					    qDebug() << "BladeRF2Input::applySettings: m_dev: " << dev;
 | 
				
			||||||
@ -493,7 +513,7 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force)
 | 
					    if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        forwardChange = true;
 | 
					        forwardChangeOwnDSP = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (dev != 0)
 | 
					        if (dev != 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -542,7 +562,7 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if ((m_settings.m_log2Decim != settings.m_log2Decim) || force)
 | 
					    if ((m_settings.m_log2Decim != settings.m_log2Decim) || force)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        forwardChange = true;
 | 
					        forwardChangeOwnDSP = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (m_deviceShared.m_inputThread != 0)
 | 
					        if (m_deviceShared.m_inputThread != 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -563,7 +583,7 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo
 | 
				
			|||||||
                (DeviceSampleSource::fcPos_t) settings.m_fcPos,
 | 
					                (DeviceSampleSource::fcPos_t) settings.m_fcPos,
 | 
				
			||||||
                settings.m_devSampleRate);
 | 
					                settings.m_devSampleRate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        forwardChange = true;
 | 
					        forwardChangeOwnDSP = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (dev != 0)
 | 
					        if (dev != 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -578,7 +598,43 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (forwardChange)
 | 
					    if ((m_settings.m_biasTee != settings.m_biasTee) || force)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_deviceShared.m_dev->setBiasTeeRx(settings.m_biasTee);
 | 
				
			||||||
 | 
					        forwardChangeRxDSP = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((m_settings.m_globalGain != settings.m_globalGain) || force)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (dev)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int status = bladerf_set_gain(dev, BLADERF_CHANNEL_RX(m_deviceShared.m_channel), settings.m_globalGain);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (status < 0) {
 | 
				
			||||||
 | 
					                qWarning("BladeRF2Input::applySettings: bladerf_set_gain(%d) failed: %s",
 | 
				
			||||||
 | 
					                        settings.m_globalGain, bladerf_strerror(status));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                qDebug("BladeRF2Input::applySettings: bladerf_set_gain(%d)", settings.m_globalGain);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((m_settings.m_gainMode != settings.m_gainMode) || force)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (dev)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int status = bladerf_set_gain_mode(dev, BLADERF_CHANNEL_RX(m_deviceShared.m_channel), (bladerf_gain_mode) settings.m_gainMode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (status < 0) {
 | 
				
			||||||
 | 
					                qWarning("BladeRF2Input::applySettings: bladerf_set_gain_mode(%d) failed: %s",
 | 
				
			||||||
 | 
					                        settings.m_gainMode, bladerf_strerror(status));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                qDebug("BladeRF2Input::applySettings: bladerf_set_gain_mode(%d)", settings.m_gainMode);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (forwardChangeOwnDSP)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim);
 | 
					        int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim);
 | 
				
			||||||
        DSPSignalNotification *notif = new DSPSignalNotification(sampleRate, settings.m_centerFrequency);
 | 
					        DSPSignalNotification *notif = new DSPSignalNotification(sampleRate, settings.m_centerFrequency);
 | 
				
			||||||
@ -586,6 +642,20 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo
 | 
				
			|||||||
        m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
 | 
					        m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (forwardChangeRxDSP)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // send to source buddies
 | 
				
			||||||
 | 
					        const std::vector<DeviceSourceAPI*>& sourceBuddies = m_deviceAPI->getSourceBuddies();
 | 
				
			||||||
 | 
					        std::vector<DeviceSourceAPI*>::const_iterator itSource = sourceBuddies.begin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (; itSource != sourceBuddies.end(); ++itSource)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            DeviceBladeRF2Shared::MsgReportBuddyChange *report = DeviceBladeRF2Shared::MsgReportBuddyChange::create(
 | 
				
			||||||
 | 
					                    settings.m_biasTee, true);
 | 
				
			||||||
 | 
					            (*itSource)->getSampleSourceInputMessageQueue()->push(report);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_settings = settings;
 | 
					    m_settings = settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    qDebug() << "BladeRF2Input::applySettings: "
 | 
					    qDebug() << "BladeRF2Input::applySettings: "
 | 
				
			||||||
@ -594,8 +664,11 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo
 | 
				
			|||||||
            << " m_log2Decim: " << m_settings.m_log2Decim
 | 
					            << " m_log2Decim: " << m_settings.m_log2Decim
 | 
				
			||||||
            << " m_fcPos: " << m_settings.m_fcPos
 | 
					            << " m_fcPos: " << m_settings.m_fcPos
 | 
				
			||||||
            << " m_devSampleRate: " << m_settings.m_devSampleRate
 | 
					            << " m_devSampleRate: " << m_settings.m_devSampleRate
 | 
				
			||||||
 | 
					            << " m_globalGain: " << m_settings.m_globalGain
 | 
				
			||||||
 | 
					            << " m_gainMode: " << m_settings.m_gainMode
 | 
				
			||||||
            << " m_dcBlock: " << m_settings.m_dcBlock
 | 
					            << " m_dcBlock: " << m_settings.m_dcBlock
 | 
				
			||||||
            << " m_iqCorrection: " << m_settings.m_iqCorrection;
 | 
					            << " m_iqCorrection: " << m_settings.m_iqCorrection
 | 
				
			||||||
 | 
					            << " m_biasTee: " << m_settings.m_biasTee;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -590,9 +590,12 @@ bool LimeSDRInput::handleMessage(const Message& message)
 | 
				
			|||||||
                m_settings.m_centerFrequency + ncoShift);
 | 
					                m_settings.m_centerFrequency + ncoShift);
 | 
				
			||||||
        m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
 | 
					        m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (getMessageQueueToGUI())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
            DeviceLimeSDRShared::MsgReportBuddyChange *reportToGUI = DeviceLimeSDRShared::MsgReportBuddyChange::create(
 | 
					            DeviceLimeSDRShared::MsgReportBuddyChange *reportToGUI = DeviceLimeSDRShared::MsgReportBuddyChange::create(
 | 
				
			||||||
                    m_settings.m_devSampleRate, m_settings.m_log2HardDecim, m_settings.m_centerFrequency, true);
 | 
					                    m_settings.m_devSampleRate, m_settings.m_log2HardDecim, m_settings.m_centerFrequency, true);
 | 
				
			||||||
            getMessageQueueToGUI()->push(reportToGUI);
 | 
					            getMessageQueueToGUI()->push(reportToGUI);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -603,9 +606,12 @@ bool LimeSDRInput::handleMessage(const Message& message)
 | 
				
			|||||||
        m_settings.m_extClock     = report.getExtClock();
 | 
					        m_settings.m_extClock     = report.getExtClock();
 | 
				
			||||||
        m_settings.m_extClockFreq = report.getExtClockFeq();
 | 
					        m_settings.m_extClockFreq = report.getExtClockFeq();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (getMessageQueueToGUI())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
            DeviceLimeSDRShared::MsgReportClockSourceChange *reportToGUI = DeviceLimeSDRShared::MsgReportClockSourceChange::create(
 | 
					            DeviceLimeSDRShared::MsgReportClockSourceChange *reportToGUI = DeviceLimeSDRShared::MsgReportClockSourceChange::create(
 | 
				
			||||||
                    m_settings.m_extClock, m_settings.m_extClockFreq);
 | 
					                    m_settings.m_extClock, m_settings.m_extClockFreq);
 | 
				
			||||||
            getMessageQueueToGUI()->push(reportToGUI);
 | 
					            getMessageQueueToGUI()->push(reportToGUI);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user