mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-06-08 08:54:49 -04:00
Deep redesign: Better support for FCD dongles #9: use fcd_traits template instead of hardcoded values
This commit is contained in:
@@ -26,6 +26,7 @@ include_directories(
|
||||
${CMAKE_SOURCE_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/include-gpl
|
||||
${CMAKE_SOURCE_DIR}/fcdhid
|
||||
${CMAKE_SOURCE_DIR}/fcdlib
|
||||
)
|
||||
|
||||
#include(${QT_USE_FILE})
|
||||
@@ -47,6 +48,7 @@ target_link_libraries(inputfcdpro
|
||||
${LIBUSB_LIBRARIES}
|
||||
asound
|
||||
fcdhid
|
||||
fcdlib
|
||||
sdrbase
|
||||
)
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "fcdprogui.h"
|
||||
#include "fcdproserializer.h"
|
||||
#include "fcdprothread.h"
|
||||
#include "fcdtraits.h"
|
||||
|
||||
MESSAGE_CLASS_DEFINITION(FCDProInput::MsgConfigureFCD, Message)
|
||||
|
||||
@@ -113,7 +114,7 @@ FCDProInput::FCDProInput() :
|
||||
m_dev(0),
|
||||
m_settings(),
|
||||
m_FCDThread(0),
|
||||
m_deviceDescription("Funcube Dongle Pro")
|
||||
m_deviceDescription(fcd_traits<Pro>::displayedName)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -138,7 +139,7 @@ bool FCDProInput::start(int device)
|
||||
return false;
|
||||
}
|
||||
|
||||
m_dev = fcdOpen(0x04D8, 0xFB56, device);
|
||||
m_dev = fcdOpen(fcd_traits<Pro>::vendorId, fcd_traits<Pro>::productId, device);
|
||||
|
||||
if (m_dev == 0)
|
||||
{
|
||||
@@ -197,7 +198,7 @@ const QString& FCDProInput::getDeviceDescription() const
|
||||
|
||||
int FCDProInput::getSampleRate() const
|
||||
{
|
||||
return 96000;
|
||||
return fcd_traits<Pro>::sampleRate;
|
||||
}
|
||||
|
||||
quint64 FCDProInput::getCenterFrequency() const
|
||||
@@ -259,7 +260,7 @@ void FCDProInput::applySettings(const Settings& settings, bool force)
|
||||
|
||||
if (signalChange)
|
||||
{
|
||||
DSPSignalNotification *notif = new DSPSignalNotification(96000, m_settings.centerFrequency);
|
||||
DSPSignalNotification *notif = new DSPSignalNotification(fcd_traits<Pro>::sampleRate, m_settings.centerFrequency);
|
||||
getOutputMessageQueue()->push(notif);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,10 +20,11 @@
|
||||
#include "util/simpleserializer.h"
|
||||
#include "fcdproplugin.h"
|
||||
#include "fcdprogui.h"
|
||||
#include "fcdtraits.h"
|
||||
|
||||
const PluginDescriptor FCDProPlugin::m_pluginDescriptor = {
|
||||
QString("FunCube Pro Input"),
|
||||
QString("---"),
|
||||
QString(fcd_traits<Pro>::pluginDisplayedName),
|
||||
QString(fcd_traits<Pro>::pluginVersion),
|
||||
QString("(c) Edouard Griffiths, F4EXB"),
|
||||
QString("https://github.com/f4exb/sdrangel"),
|
||||
true,
|
||||
@@ -44,7 +45,7 @@ void FCDProPlugin::initPlugin(PluginAPI* pluginAPI)
|
||||
{
|
||||
m_pluginAPI = pluginAPI;
|
||||
|
||||
m_pluginAPI->registerSampleSource("org.osmocom.sdr.samplesource.fcdpro", this);
|
||||
m_pluginAPI->registerSampleSource(fcd_traits<Pro>::interfaceIID, this);
|
||||
}
|
||||
|
||||
PluginInterface::SampleSourceDevices FCDProPlugin::enumSampleSources()
|
||||
@@ -52,15 +53,15 @@ PluginInterface::SampleSourceDevices FCDProPlugin::enumSampleSources()
|
||||
SampleSourceDevices result;
|
||||
|
||||
int i = 1;
|
||||
struct hid_device_info *device_info = hid_enumerate(0x04D8, 0xFB56);
|
||||
struct hid_device_info *device_info = hid_enumerate(fcd_traits<Pro>::vendorId, fcd_traits<Pro>::productId);
|
||||
|
||||
while (device_info != 0)
|
||||
{
|
||||
QString serialNumber = QString::fromWCharArray(device_info->serial_number);
|
||||
QString displayedName(QString("FunCube Dongle Pro #%1 ").arg(i) + serialNumber);
|
||||
QString displayedName(QString("%1 #%2 %3").arg(fcd_traits<Pro>::displayedName).arg(i).arg(serialNumber));
|
||||
SimpleSerializer s(1);
|
||||
s.writeS32(1, 0);
|
||||
result.append(SampleSourceDevice(displayedName, "org.osmocom.sdr.samplesource.fcdpro", s.final()));
|
||||
result.append(SampleSourceDevice(displayedName, fcd_traits<Pro>::interfaceIID, s.final()));
|
||||
|
||||
device_info = device_info->next;
|
||||
i++;
|
||||
@@ -71,7 +72,7 @@ PluginInterface::SampleSourceDevices FCDProPlugin::enumSampleSources()
|
||||
|
||||
PluginGUI* FCDProPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
|
||||
{
|
||||
if(sourceName == "org.osmocom.sdr.samplesource.fcdpro")
|
||||
if(sourceName == fcd_traits<Pro>::interfaceIID)
|
||||
{
|
||||
FCDProGui* gui = new FCDProGui(m_pluginAPI);
|
||||
m_pluginAPI->setInputGUI(gui);
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
#include <errno.h>
|
||||
#include "dsp/samplefifo.h"
|
||||
#include "fcdprothread.h"
|
||||
#include "fcdproinput.h"
|
||||
#include "fcdtraits.h"
|
||||
|
||||
FCDProThread::FCDProThread(SampleFifo* sampleFifo, QObject* parent) :
|
||||
QThread(parent),
|
||||
fcd_handle(NULL),
|
||||
m_running(false),
|
||||
m_convertBuffer(FCD_BLOCKSIZE),
|
||||
m_convertBuffer(fcd_traits<Pro>::convBufSize),
|
||||
m_sampleFifo(sampleFifo)
|
||||
{
|
||||
start();
|
||||
@@ -58,7 +58,7 @@ void FCDProThread::stopWork()
|
||||
|
||||
void FCDProThread::run()
|
||||
{
|
||||
if ( !OpenSource("hw:CARD=V10") )
|
||||
if ( !OpenSource(fcd_traits<Pro>::alsaDeviceName) )
|
||||
{
|
||||
qCritical() << "FCDThread::run: cannot open FCD sound card";
|
||||
return;
|
||||
@@ -69,7 +69,7 @@ void FCDProThread::run()
|
||||
|
||||
while(m_running)
|
||||
{
|
||||
if (work(FCD_BLOCKSIZE) < 0)
|
||||
if (work(fcd_traits<Pro>::convBufSize) < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
#include "dsp/inthalfbandfilter.h"
|
||||
#include <alsa/asoundlib.h>
|
||||
|
||||
#define FCD_BLOCKSIZE (1<<11)
|
||||
|
||||
class FCDProThread : public QThread {
|
||||
Q_OBJECT
|
||||
|
||||
|
||||
Reference in New Issue
Block a user