SDRAngel  4.11.5
Developer docs for <a href="https://github.com/f4exb/sdrangel">SDRangel<\a>, an Open Source Qt5 / OpenGL 3.0+ SDR and signal analyzer frontend to various hardware.
bladerf1outputplugin.cpp
Go to the documentation of this file.
1 // Copyright (C) 2015 Edouard Griffiths, F4EXB //
3 // //
4 // This program is free software; you can redistribute it and/or modify //
5 // it under the terms of the GNU General Public License as published by //
6 // the Free Software Foundation as version 3 of the License, or //
7 // (at your option) any later version. //
8 // //
9 // This program is distributed in the hope that it will be useful, //
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
12 // GNU General Public License V3 for more details. //
13 // //
14 // You should have received a copy of the GNU General Public License //
15 // along with this program. If not, see <http://www.gnu.org/licenses/>. //
17 
18 #include <QtPlugin>
19 #include <libbladeRF.h>
20 #include "plugin/pluginapi.h"
21 #include "util/simpleserializer.h"
22 
23 #include "bladerf1outputplugin.h"
24 
25 #ifdef SERVER_MODE
26 #include "bladerf1output.h"
27 #else
28 #include "bladerf1outputgui.h"
29 #endif
30 
32  QString("BladeRF1 Output"),
33  QString("4.5.4"),
34  QString("(c) Edouard Griffiths, F4EXB"),
35  QString("https://github.com/f4exb/sdrangel"),
36  true,
37  QString("https://github.com/f4exb/sdrangel")
38 };
39 
40 const QString Bladerf1OutputPlugin::m_hardwareID = "BladeRF1";
42 
44  QObject(parent)
45 {
46 }
47 
49 {
50  return m_pluginDescriptor;
51 }
52 
54 {
55  pluginAPI->registerSampleSink(m_deviceTypeID, this);
56 }
57 
59 {
60  SamplingDevices result;
61  struct bladerf_devinfo *devinfo = 0;
62 
63  int count = bladerf_get_device_list(&devinfo);
64 
65  if (devinfo)
66  {
67  for(int i = 0; i < count; i++)
68  {
69  struct bladerf *dev;
70 
71  int status = bladerf_open_with_devinfo(&dev, &devinfo[i]);
72 
73  if (status == BLADERF_ERR_NODEV)
74  {
75  qCritical("BladerfOutputPlugin::enumSampleSinks: No device at index %d", i);
76  continue;
77  }
78  else if (status != 0)
79  {
80  qCritical("BladerfOutputPlugin::enumSampleSinks: Failed to open device at index %d", i);
81  continue;
82  }
83 
84  const char *boardName = bladerf_get_board_name(dev);
85 
86  if (strcmp(boardName, "bladerf1") == 0)
87  {
88  QString displayedName(QString("BladeRF1[%1] %2").arg(devinfo[i].instance).arg(devinfo[i].serial));
89 
90  result.append(SamplingDevice(displayedName,
93  QString(devinfo[i].serial),
94  i,
97  1,
98  0));
99 
100  }
101 
102  bladerf_close(dev);
103  }
104 
105  bladerf_free_device_list(devinfo); // Valgrind memcheck
106  }
107 
108  return result;
109 }
110 
111 #ifdef SERVER_MODE
113  const QString& sinkId,
114  QWidget **widget,
115  DeviceUISet *deviceUISet)
116 {
117  (void) sinkId;
118  (void) widget;
119  (void) deviceUISet;
120  return 0;
121 }
122 #else
124  const QString& sinkId,
125  QWidget **widget,
126  DeviceUISet *deviceUISet)
127 {
128  if(sinkId == m_deviceTypeID)
129  {
130  Bladerf1OutputGui* gui = new Bladerf1OutputGui(deviceUISet);
131  *widget = gui;
132  return gui;
133  }
134  else
135  {
136  return 0;
137  }
138 }
139 #endif
140 
142 {
143  if(sinkId == m_deviceTypeID)
144  {
145  Bladerf1Output* output = new Bladerf1Output(deviceAPI);
146  return output;
147  }
148  else
149  {
150  return 0;
151  }
152 }
static const QString m_hardwareID
void registerSampleSink(const QString &sinkName, PluginInterface *plugin)
Definition: pluginapi.cpp:24
static const PluginDescriptor m_pluginDescriptor
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
virtual DeviceSampleSink * createSampleSinkPluginInstance(const QString &sinkId, DeviceAPI *deviceAPI)
int32_t i
Definition: decimators.h:244
#define BLADERF1OUTPUT_DEVICE_TYPE_ID
Exposes a single output stream that can be one of the streams of a physical device.
void initPlugin(PluginAPI *pluginAPI)
const PluginDescriptor & getPluginDescriptor() const
Bladerf1OutputPlugin(QObject *parent=NULL)
virtual PluginInstanceGUI * createSampleSinkPluginInstanceGUI(const QString &sinkId, QWidget **widget, DeviceUISet *deviceUISet)
virtual SamplingDevices enumSampleSinks()
static const QString m_deviceTypeID
QList< SamplingDevice > SamplingDevices