1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-05 07:24:44 -04:00

Deep redesign: Better support for FCD dongles #9: use fcd_traits template instead of hardcoded values

This commit is contained in:
f4exb
2015-09-05 05:50:29 +02:00
parent f56a3d9385
commit 208d3deb6e
14 changed files with 154 additions and 34 deletions
@@ -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(inputfcdproplus
${LIBUSB_LIBRARIES}
asound
fcdhid
fcdlib
sdrbase
)
@@ -26,6 +26,7 @@
#include "fcdproplusgui.h"
#include "fcdproplusserializer.h"
#include "fcdproplusthread.h"
#include "fcdtraits.h"
MESSAGE_CLASS_DEFINITION(FCDProPlusInput::MsgConfigureFCD, Message)
//MESSAGE_CLASS_DEFINITION(FCDInput::MsgReportFCD, Message)
@@ -114,7 +115,7 @@ FCDProPlusInput::FCDProPlusInput() :
m_dev(0),
m_settings(),
m_FCDThread(0),
m_deviceDescription("Funcube Dongle Pro+")
m_deviceDescription(fcd_traits<ProPlus>::displayedName)
{
}
@@ -139,7 +140,7 @@ bool FCDProPlusInput::start(int device)
return false;
}
m_dev = fcdOpen(0x04D8, 0xFB31, device);
m_dev = fcdOpen(fcd_traits<ProPlus>::vendorId, fcd_traits<ProPlus>::productId, device);
if (m_dev == 0)
{
@@ -198,7 +199,7 @@ const QString& FCDProPlusInput::getDeviceDescription() const
int FCDProPlusInput::getSampleRate() const
{
return 192000;
return fcd_traits<ProPlus>::sampleRate;
}
quint64 FCDProPlusInput::getCenterFrequency() const
@@ -260,7 +261,7 @@ void FCDProPlusInput::applySettings(const Settings& settings, bool force)
if (signalChange)
{
DSPSignalNotification *notif = new DSPSignalNotification(192000, m_settings.centerFrequency);
DSPSignalNotification *notif = new DSPSignalNotification(fcd_traits<ProPlus>::sampleRate, m_settings.centerFrequency);
getOutputMessageQueue()->push(notif);
}
}
@@ -20,10 +20,11 @@
#include "util/simpleserializer.h"
#include "fcdproplusplugin.h"
#include "fcdproplusgui.h"
#include "fcdtraits.h"
const PluginDescriptor FCDProPlusPlugin::m_pluginDescriptor = {
QString("FunCube Pro+ Input"),
QString("---"),
QString(fcd_traits<ProPlus>::pluginDisplayedName),
QString(fcd_traits<ProPlus>::pluginVersion),
QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"),
true,
@@ -44,7 +45,7 @@ void FCDProPlusPlugin::initPlugin(PluginAPI* pluginAPI)
{
m_pluginAPI = pluginAPI;
m_pluginAPI->registerSampleSource("org.osmocom.sdr.samplesource.fcdproplus", this);
m_pluginAPI->registerSampleSource(fcd_traits<ProPlus>::interfaceIID, this);
}
PluginInterface::SampleSourceDevices FCDProPlusPlugin::enumSampleSources()
@@ -52,15 +53,15 @@ PluginInterface::SampleSourceDevices FCDProPlusPlugin::enumSampleSources()
SampleSourceDevices result;
int i = 1;
struct hid_device_info *device_info = hid_enumerate(0x04D8, 0xFB31);
struct hid_device_info *device_info = hid_enumerate(fcd_traits<ProPlus>::vendorId, fcd_traits<ProPlus>::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<ProPlus>::displayedName).arg(i).arg(serialNumber));
SimpleSerializer s(1);
s.writeS32(1, 0);
result.append(SampleSourceDevice(displayedName, "org.osmocom.sdr.samplesource.fcdproplus", s.final()));
result.append(SampleSourceDevice(displayedName, fcd_traits<ProPlus>::interfaceIID, s.final()));
device_info = device_info->next;
i++;
@@ -71,7 +72,7 @@ PluginInterface::SampleSourceDevices FCDProPlusPlugin::enumSampleSources()
PluginGUI* FCDProPlusPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.fcdproplus")
if(sourceName == fcd_traits<ProPlus>::interfaceIID)
{
FCDProPlusGui* gui = new FCDProPlusGui(m_pluginAPI);
m_pluginAPI->setInputGUI(gui);
@@ -20,13 +20,13 @@
#include <errno.h>
#include "dsp/samplefifo.h"
#include "fcdproplusthread.h"
#include "fcdproplusinput.h"
#include "fcdtraits.h"
FCDProPlusThread::FCDProPlusThread(SampleFifo* sampleFifo, QObject* parent) :
QThread(parent),
fcd_handle(NULL),
m_running(false),
m_convertBuffer(FCD_BLOCKSIZE),
m_convertBuffer(fcd_traits<ProPlus>::convBufSize),
m_sampleFifo(sampleFifo)
{
start();
@@ -58,7 +58,7 @@ void FCDProPlusThread::stopWork()
void FCDProPlusThread::run()
{
if ( !OpenSource("hw:CARD=V20") )
if ( !OpenSource(fcd_traits<ProPlus>::alsaDeviceName) )
{
qCritical() << "FCDThread::run: cannot open FCD sound card";
return;
@@ -69,7 +69,7 @@ void FCDProPlusThread::run()
while(m_running)
{
if (work(FCD_BLOCKSIZE) < 0)
if (work(fcd_traits<ProPlus>::convBufSize) < 0)
{
break;
}
@@ -25,8 +25,6 @@
#include "dsp/inthalfbandfilter.h"
#include <alsa/asoundlib.h>
#define FCD_BLOCKSIZE (1<<13)
class FCDProPlusThread : public QThread {
Q_OBJECT