| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #ifndef INCLUDE_PLUGININTERFACE_H
 | 
					
						
							|  |  |  | #define INCLUDE_PLUGININTERFACE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QtPlugin>
 | 
					
						
							|  |  |  | #include <QString>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-20 13:49:21 +01:00
										 |  |  | #include "export.h"
 | 
					
						
							| 
									
										
										
										
											2018-03-03 20:23:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct SDRBASE_API PluginDescriptor { | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	// general plugin description
 | 
					
						
							|  |  |  | 	const QString displayedName; | 
					
						
							|  |  |  | 	const QString version; | 
					
						
							|  |  |  | 	const QString copyright; | 
					
						
							|  |  |  | 	const QString website; | 
					
						
							|  |  |  | 	bool licenseIsGPL; | 
					
						
							|  |  |  | 	const QString sourceCodeURL; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PluginAPI; | 
					
						
							| 
									
										
										
										
											2019-05-08 22:11:53 +02:00
										 |  |  | class DeviceAPI; | 
					
						
							| 
									
										
										
										
											2017-10-30 00:02:28 +01:00
										 |  |  | class DeviceUISet; | 
					
						
							| 
									
										
										
										
											2017-09-26 00:22:08 +02:00
										 |  |  | class PluginInstanceGUI; | 
					
						
							| 
									
										
										
										
											2016-05-17 03:41:01 +02:00
										 |  |  | class QWidget; | 
					
						
							| 
									
										
										
										
											2017-09-14 08:49:31 +02:00
										 |  |  | class DeviceSampleSource; | 
					
						
							|  |  |  | class DeviceSampleSink; | 
					
						
							| 
									
										
										
										
											2019-05-18 06:30:37 +02:00
										 |  |  | class DeviceSampleMIMO; | 
					
						
							| 
									
										
										
										
											2017-11-08 08:31:00 +01:00
										 |  |  | class BasebandSampleSink; | 
					
						
							|  |  |  | class BasebandSampleSource; | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | class ChannelAPI; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-03 20:23:38 +01:00
										 |  |  | class SDRBASE_API PluginInterface { | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-10-13 22:23:43 +02:00
										 |  |  | 	struct SamplingDevice | 
					
						
							| 
									
										
										
										
											2015-09-30 06:57:40 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-11-01 20:06:33 +01:00
										 |  |  |         enum SamplingDeviceType | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             PhysicalDevice, | 
					
						
							|  |  |  |             BuiltInDevice | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-07 18:58:20 +02:00
										 |  |  |         enum StreamType | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             StreamSingleRx, //!< Exposes a single input stream that can be one of the streams of a physical device
 | 
					
						
							|  |  |  |             StreamSingleTx, //!< Exposes a single output stream that can be one of the streams of a physical device
 | 
					
						
							| 
									
										
										
										
											2019-05-20 16:31:15 +02:00
										 |  |  |             StreamMIMO      //!< May expose any number of input and/or output streams
 | 
					
						
							| 
									
										
										
										
											2019-05-07 18:58:20 +02:00
										 |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-01 20:06:33 +01:00
										 |  |  | 		QString displayedName;    //!< The human readable name
 | 
					
						
							|  |  |  | 		QString hardwareId;       //!< The internal id that identifies the type of hardware (i.e. HackRF, BladeRF, ...)
 | 
					
						
							|  |  |  | 		QString id;               //!< The internal plugin ID corresponding to the device (i.e. for HackRF input, for HackRF output ...)
 | 
					
						
							| 
									
										
										
										
											2017-11-02 09:17:38 +01:00
										 |  |  | 		QString serial;           //!< The device serial number defined by the vendor or a fake one (SDRplay)
 | 
					
						
							| 
									
										
										
										
											2017-11-01 20:06:33 +01:00
										 |  |  | 		int sequence;             //!< The device sequence. >0 when more than one device of the same type is connected
 | 
					
						
							|  |  |  | 		SamplingDeviceType type;  //!< The sampling device type for behavior information
 | 
					
						
							| 
									
										
										
										
											2019-05-07 18:58:20 +02:00
										 |  |  | 		StreamType streamType;    //!< This is the type of stream supported
 | 
					
						
							| 
									
										
										
										
											2017-11-19 01:05:16 +01:00
										 |  |  | 		int deviceNbItems;        //!< Number of items (or streams) in the device. >1 for composite devices.
 | 
					
						
							| 
									
										
										
										
											2017-11-01 20:06:33 +01:00
										 |  |  | 		int deviceItemIndex;      //!< For composite devices this is the Rx or Tx stream index. -1 if not initialized
 | 
					
						
							|  |  |  | 		int claimed;              //!< This is the device set index if claimed else -1
 | 
					
						
							| 
									
										
										
										
											2015-09-30 06:57:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 22:23:43 +02:00
										 |  |  | 		SamplingDevice(const QString& _displayedName, | 
					
						
							| 
									
										
										
										
											2016-12-29 12:41:10 +01:00
										 |  |  |                 const QString& _hardwareId, | 
					
						
							| 
									
										
										
										
											2015-09-30 06:57:40 +02:00
										 |  |  | 				const QString& _id, | 
					
						
							|  |  |  | 				const QString& _serial, | 
					
						
							| 
									
										
										
										
											2017-11-01 10:37:00 +01:00
										 |  |  | 				int _sequence, | 
					
						
							| 
									
										
										
										
											2017-11-01 20:06:33 +01:00
										 |  |  | 				SamplingDeviceType _type, | 
					
						
							| 
									
										
										
										
											2019-05-07 18:58:20 +02:00
										 |  |  | 				StreamType _streamType, | 
					
						
							| 
									
										
										
										
											2017-11-19 01:05:16 +01:00
										 |  |  | 				int _deviceNbItems, | 
					
						
							| 
									
										
										
										
											2017-11-01 10:37:00 +01:00
										 |  |  | 				int _deviceItemIndex) : | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 			displayedName(_displayedName), | 
					
						
							| 
									
										
										
										
											2016-12-29 12:41:10 +01:00
										 |  |  | 			hardwareId(_hardwareId), | 
					
						
							| 
									
										
										
										
											2015-09-30 06:57:40 +02:00
										 |  |  | 			id(_id), | 
					
						
							|  |  |  | 			serial(_serial), | 
					
						
							| 
									
										
										
										
											2017-11-01 10:37:00 +01:00
										 |  |  | 			sequence(_sequence), | 
					
						
							| 
									
										
										
										
											2017-11-01 20:06:33 +01:00
										 |  |  | 			type(_type), | 
					
						
							| 
									
										
										
										
											2019-05-07 18:58:20 +02:00
										 |  |  | 			streamType(_streamType), | 
					
						
							| 
									
										
										
										
											2017-11-19 01:05:16 +01:00
										 |  |  | 			deviceNbItems(_deviceNbItems), | 
					
						
							| 
									
										
										
										
											2017-11-01 10:37:00 +01:00
										 |  |  | 			deviceItemIndex(_deviceItemIndex), | 
					
						
							|  |  |  | 			claimed(-1) | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 		{ } | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2016-10-13 22:23:43 +02:00
										 |  |  | 	typedef QList<SamplingDevice> SamplingDevices; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |     virtual ~PluginInterface() { } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	virtual const PluginDescriptor& getPluginDescriptor() const = 0; | 
					
						
							|  |  |  | 	virtual void initPlugin(PluginAPI* pluginAPI) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 23:42:08 +02:00
										 |  |  | 	// channel Rx plugins
 | 
					
						
							| 
									
										
										
										
											2017-10-30 01:11:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-07 23:49:27 +01:00
										 |  |  |     virtual PluginInstanceGUI* createRxChannelGUI( | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |             DeviceUISet *deviceUISet, | 
					
						
							|  |  |  |             BasebandSampleSink *rxChannel) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) deviceUISet; | 
					
						
							|  |  |  |         (void) rxChannel; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 09:54:42 +01:00
										 |  |  |     virtual BasebandSampleSink* createRxChannelBS( | 
					
						
							| 
									
										
										
										
											2019-05-08 22:11:53 +02:00
										 |  |  |             DeviceAPI *deviceAPI) | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         (void) deviceAPI; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-11-08 08:31:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     virtual ChannelAPI* createRxChannelCS( | 
					
						
							| 
									
										
										
										
											2019-05-08 22:11:53 +02:00
										 |  |  |             DeviceAPI *deviceAPI) | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         (void) deviceAPI; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-12-17 23:15:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 08:31:00 +01:00
										 |  |  |     // channel Tx plugins
 | 
					
						
							| 
									
										
										
										
											2017-10-30 01:11:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 00:05:49 +01:00
										 |  |  | 	virtual PluginInstanceGUI* createTxChannelGUI( | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |             DeviceUISet *deviceUISet, | 
					
						
							|  |  |  |             BasebandSampleSource *txChannel) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) deviceUISet; | 
					
						
							|  |  |  |         (void) txChannel; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-10-14 18:47:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 09:54:42 +01:00
										 |  |  |     virtual BasebandSampleSource* createTxChannelBS( | 
					
						
							| 
									
										
										
										
											2019-05-08 22:11:53 +02:00
										 |  |  |             DeviceAPI *deviceAPI) | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         (void) deviceAPI; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-11-08 08:31:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     virtual ChannelAPI* createTxChannelCS( | 
					
						
							| 
									
										
										
										
											2019-05-08 22:11:53 +02:00
										 |  |  |             DeviceAPI *deviceAPI) | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         (void) deviceAPI; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-12-17 23:15:42 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // device source plugins only
 | 
					
						
							| 
									
										
										
										
											2017-10-30 01:11:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 22:23:43 +02:00
										 |  |  | 	virtual SamplingDevices enumSampleSources() { return SamplingDevices(); } | 
					
						
							| 
									
										
										
										
											2017-10-30 00:02:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	virtual PluginInstanceGUI* createSampleSourcePluginInstanceGUI( | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |             const QString& sourceId, | 
					
						
							|  |  |  |             QWidget **widget, | 
					
						
							|  |  |  |             DeviceUISet *deviceUISet) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) sourceId; | 
					
						
							|  |  |  |         (void) widget; | 
					
						
							|  |  |  |         (void) deviceUISet; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-19 10:28:50 +02:00
										 |  |  |     virtual DeviceSampleSource* createSampleSourcePluginInstance( // creates the input "core"
 | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |             const QString& sourceId, | 
					
						
							| 
									
										
										
										
											2019-05-08 22:11:53 +02:00
										 |  |  |             DeviceAPI *deviceAPI) | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         (void) sourceId; | 
					
						
							|  |  |  |         (void) deviceAPI; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-09-26 00:22:08 +02:00
										 |  |  | 	virtual void deleteSampleSourcePluginInstanceGUI(PluginInstanceGUI *ui); | 
					
						
							| 
									
										
										
										
											2017-09-16 10:45:08 +02:00
										 |  |  | 	virtual void deleteSampleSourcePluginInstanceInput(DeviceSampleSource *source); | 
					
						
							| 
									
										
										
										
											2016-10-14 18:47:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// device sink plugins only
 | 
					
						
							| 
									
										
										
										
											2017-10-30 01:11:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-14 18:47:19 +02:00
										 |  |  | 	virtual SamplingDevices enumSampleSinks() { return SamplingDevices(); } | 
					
						
							| 
									
										
										
										
											2017-10-30 01:11:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	virtual PluginInstanceGUI* createSampleSinkPluginInstanceGUI( | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |             const QString& sinkId, | 
					
						
							|  |  |  |             QWidget **widget, | 
					
						
							|  |  |  |             DeviceUISet *deviceUISet) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) sinkId; | 
					
						
							|  |  |  |         (void) widget; | 
					
						
							|  |  |  |         (void) deviceUISet; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-19 10:28:50 +02:00
										 |  |  |     virtual DeviceSampleSink* createSampleSinkPluginInstance( // creates the output "core"
 | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |             const QString& sinkId, | 
					
						
							| 
									
										
										
										
											2019-05-08 22:11:53 +02:00
										 |  |  |             DeviceAPI *deviceAPI) | 
					
						
							| 
									
										
										
										
											2018-11-12 14:04:16 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         (void) sinkId; | 
					
						
							|  |  |  |         (void) deviceAPI; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-30 01:11:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-26 00:22:08 +02:00
										 |  |  |     virtual void deleteSampleSinkPluginInstanceGUI(PluginInstanceGUI *ui); | 
					
						
							| 
									
										
										
										
											2017-09-16 11:34:25 +02:00
										 |  |  |     virtual void deleteSampleSinkPluginInstanceOutput(DeviceSampleSink *sink); | 
					
						
							| 
									
										
										
										
											2019-05-18 06:30:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // device MIMO plugins only
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual SamplingDevices enumSampleMIMO() { return SamplingDevices(); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual PluginInstanceGUI* createSampleMIMOPluginInstanceGUI( | 
					
						
							|  |  |  |             const QString& mimoId, | 
					
						
							|  |  |  |             QWidget **widget, | 
					
						
							|  |  |  |             DeviceUISet *deviceUISet) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) mimoId; | 
					
						
							|  |  |  |         (void) widget; | 
					
						
							|  |  |  |         (void) deviceUISet; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-19 10:28:50 +02:00
										 |  |  |     virtual DeviceSampleMIMO* createSampleMIMOPluginInstance( // creates the MIMO "core"
 | 
					
						
							| 
									
										
										
										
											2019-05-18 06:30:37 +02:00
										 |  |  |             const QString& mimoId, | 
					
						
							|  |  |  |             DeviceAPI *deviceAPI) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) mimoId; | 
					
						
							|  |  |  |         (void) deviceAPI; | 
					
						
							|  |  |  |         return nullptr; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     virtual void deleteSampleMIMOPluginInstanceGUI(PluginInstanceGUI *ui); | 
					
						
							|  |  |  |     virtual void deleteSampleMIMOPluginInstanceMIMO(DeviceSampleMIMO *mimo); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-05 04:47:23 +02:00
										 |  |  | Q_DECLARE_INTERFACE(PluginInterface, "SDRangel.PluginInterface/0.1"); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif // INCLUDE_PLUGININTERFACE_H
 |