| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | // Copyright (C) 2019 Edouard Griffiths, F4EXB                                   //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							| 
									
										
										
										
											2019-08-03 11:21:46 +02:00
										 |  |  | // API for channels                                                              //
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is free software; you can redistribute it and/or modify          //
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by          //
 | 
					
						
							|  |  |  | // the Free Software Foundation as version 3 of the License, or                  //
 | 
					
						
							|  |  |  | // (at your option) any later version.                                           //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,               //
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | 
					
						
							|  |  |  | // GNU General Public License V3 for more details.                               //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // You should have received a copy of the GNU General Public License             //
 | 
					
						
							|  |  |  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef SDRBASE_CHANNEL_CHANNELAPI_H_
 | 
					
						
							|  |  |  | #define SDRBASE_CHANNEL_CHANNELAPI_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-13 00:57:33 +01:00
										 |  |  | #include <QObject>
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | #include <QString>
 | 
					
						
							|  |  |  | #include <QByteArray>
 | 
					
						
							| 
									
										
										
										
											2020-10-22 08:38:43 +02:00
										 |  |  | #include <QList>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | #include <stdint.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "export.h"
 | 
					
						
							| 
									
										
										
										
											2021-06-29 21:47:27 +02:00
										 |  |  | #include "util/messagequeue.h"
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class DeviceAPI; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace SWGSDRangel | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     class SWGChannelSettings; | 
					
						
							|  |  |  |     class SWGChannelReport; | 
					
						
							| 
									
										
										
										
											2020-03-09 04:01:23 +01:00
										 |  |  |     class SWGChannelActions; | 
					
						
							| 
									
										
										
										
											2022-05-13 22:24:48 +02:00
										 |  |  |     class SWGWorkspaceInfo; | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-29 23:03:54 +02:00
										 |  |  | class SDRBASE_API ChannelAPI : public QObject { | 
					
						
							| 
									
										
										
										
											2022-02-13 00:57:33 +01:00
										 |  |  |     Q_OBJECT | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | public: | 
					
						
							|  |  |  |     enum StreamType //!< This is the same enum as in PluginInterface
 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         StreamSingleSink,   //!< Exposes a single sink stream (input, Rx)
 | 
					
						
							|  |  |  |         StreamSingleSource, //!< Exposes a single source stream (output, Tx)
 | 
					
						
							| 
									
										
										
										
											2019-05-20 16:31:15 +02:00
										 |  |  |         StreamMIMO          //!< May expose any number of sink and/or source streams
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ChannelAPI(const QString& name, StreamType streamType); | 
					
						
							|  |  |  |     virtual ~ChannelAPI() {} | 
					
						
							|  |  |  |     virtual void destroy() = 0; | 
					
						
							| 
									
										
										
										
											2022-04-16 16:45:53 +02:00
										 |  |  |     virtual void setDeviceAPI(DeviceAPI*) = 0; | 
					
						
							|  |  |  |     virtual DeviceAPI *getDeviceAPI() = 0; | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     virtual void getIdentifier(QString& id) = 0; | 
					
						
							| 
									
										
										
										
											2022-03-26 09:51:06 +01:00
										 |  |  |     virtual QString getIdentifier() const = 0; | 
					
						
							| 
									
										
										
										
											2020-11-22 19:29:27 +01:00
										 |  |  |     const QString& getURI() const { return m_uri; } | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     virtual void getTitle(QString& title) = 0; | 
					
						
							|  |  |  |     virtual void setName(const QString& name) { m_name = name; } | 
					
						
							|  |  |  |     virtual const QString& getName() const { return m_name; } | 
					
						
							|  |  |  |     virtual qint64 getCenterFrequency() const = 0; //!< Applies to a default stream
 | 
					
						
							| 
									
										
										
										
											2022-01-06 22:47:41 +01:00
										 |  |  |     virtual void setCenterFrequency(qint64 frequency) = 0; | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     virtual QByteArray serialize() const = 0; | 
					
						
							|  |  |  |     virtual bool deserialize(const QByteArray& data) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-08 21:52:47 +01:00
										 |  |  |     virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } | 
					
						
							|  |  |  |     MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; } | 
					
						
							| 
									
										
										
										
											2022-02-13 00:57:33 +01:00
										 |  |  |     MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } | 
					
						
							| 
									
										
										
										
											2021-02-08 21:52:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-01 18:50:21 +02:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * API adapter for the channel settings GET requests | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     virtual int webapiSettingsGet( | 
					
						
							|  |  |  |             SWGSDRangel::SWGChannelSettings& response, | 
					
						
							|  |  |  |             QString& errorMessage) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) response; | 
					
						
							|  |  |  |         errorMessage = "Not implemented"; return 501; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-01 18:50:21 +02:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * API adapter for the channel settings PUT and PATCH requests | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     virtual int webapiSettingsPutPatch( | 
					
						
							|  |  |  |             bool force, | 
					
						
							|  |  |  |             const QStringList& channelSettingsKeys, | 
					
						
							|  |  |  |             SWGSDRangel::SWGChannelSettings& response, | 
					
						
							|  |  |  |             QString& errorMessage) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) force; | 
					
						
							|  |  |  |         (void) channelSettingsKeys; | 
					
						
							|  |  |  |         (void) response; | 
					
						
							|  |  |  |         errorMessage = "Not implemented"; return 501; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-01 18:50:21 +02:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * API adapter for the channel report GET requests | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     virtual int webapiReportGet( | 
					
						
							|  |  |  |             SWGSDRangel::SWGChannelReport& response, | 
					
						
							|  |  |  |             QString& errorMessage) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) response; | 
					
						
							|  |  |  |         errorMessage = "Not implemented"; return 501; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-09 04:01:23 +01:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * API adapter for the channel actions POST requests | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     virtual int webapiActionsPost( | 
					
						
							| 
									
										
										
										
											2020-03-09 19:56:09 +01:00
										 |  |  |             const QStringList& channelActionsKeys, | 
					
						
							| 
									
										
										
										
											2020-03-09 04:01:23 +01:00
										 |  |  |             SWGSDRangel::SWGChannelActions& query, | 
					
						
							|  |  |  |             QString& errorMessage) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) query; | 
					
						
							| 
									
										
										
										
											2020-03-09 19:56:09 +01:00
										 |  |  |         (void) channelActionsKeys; | 
					
						
							| 
									
										
										
										
											2020-03-09 04:01:23 +01:00
										 |  |  |         errorMessage = "Not implemented"; return 501; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-13 22:24:48 +02:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * API adapter for the channel UI workspace GET requests | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     virtual int webapiWorkspaceGet( | 
					
						
							|  |  |  |             SWGSDRangel::SWGWorkspaceInfo& query, | 
					
						
							|  |  |  |             QString& errorMessage) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         (void) query; | 
					
						
							|  |  |  |         errorMessage = "Not implemented"; return 501; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     int getIndexInDeviceSet() const { return m_indexInDeviceSet; } | 
					
						
							| 
									
										
										
										
											2022-03-18 17:08:04 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void setIndexInDeviceSet(int indexInDeviceSet) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         m_indexInDeviceSet = indexInDeviceSet; | 
					
						
							|  |  |  |         emit indexInDeviceSetChanged(indexInDeviceSet); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |     int getDeviceSetIndex() const { return m_deviceSetIndex; } | 
					
						
							|  |  |  |     void setDeviceSetIndex(int deviceSetIndex) { m_deviceSetIndex = deviceSetIndex; } | 
					
						
							|  |  |  |     uint64_t getUID() const { return m_uid; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // MIMO support
 | 
					
						
							|  |  |  |     StreamType getStreamType() const { return m_streamType; } | 
					
						
							|  |  |  |     virtual int getNbSinkStreams() const = 0; | 
					
						
							|  |  |  |     virtual int getNbSourceStreams() const = 0; | 
					
						
							|  |  |  |     virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-12 11:18:29 +01:00
										 |  |  |     void handlePipeMessageQueue(MessageQueue* messageQueue) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         Message* message; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         while ((message = messageQueue->pop()) != nullptr) { | 
					
						
							| 
									
										
										
										
											2022-03-23 22:32:23 +01:00
										 |  |  |             m_inputMessageQueue.push(message); | 
					
						
							| 
									
										
										
										
											2021-10-12 11:18:29 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-08 21:52:47 +01:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2022-02-13 00:57:33 +01:00
										 |  |  | 	virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed
 | 
					
						
							| 
									
										
										
										
											2021-06-29 21:47:27 +02:00
										 |  |  |     MessageQueue *m_guiMessageQueue;    //!< Input message queue to the GUI
 | 
					
						
							| 
									
										
										
										
											2022-02-13 00:57:33 +01:00
										 |  |  | 	MessageQueue m_inputMessageQueue;     //!< Queue for asynchronous inbound communication
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected slots: | 
					
						
							|  |  |  | 	void handleInputMessages(); | 
					
						
							| 
									
										
										
										
											2021-02-08 21:52:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | private: | 
					
						
							|  |  |  |     StreamType m_streamType; | 
					
						
							|  |  |  |     /** Unique identifier in a device set used for sorting. Used when there is no GUI.
 | 
					
						
							| 
									
										
										
										
											2020-10-05 16:28:58 +02:00
										 |  |  |      * In GUI version it is supported by GUI object name accessed through ChannelGUI. | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  |      */ | 
					
						
							|  |  |  |     QString m_name; | 
					
						
							| 
									
										
										
										
											2020-11-22 19:29:27 +01:00
										 |  |  |     /** Unique identifier attached to channel type */ | 
					
						
							|  |  |  |     QString m_uri; | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     int m_indexInDeviceSet; | 
					
						
							|  |  |  |     int m_deviceSetIndex; | 
					
						
							|  |  |  |     uint64_t m_uid; | 
					
						
							| 
									
										
										
										
											2022-03-18 17:08:04 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | signals: | 
					
						
							|  |  |  |     void indexInDeviceSetChanged(int index); | 
					
						
							| 
									
										
										
										
											2019-05-09 17:27:12 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-03 04:47:20 +02:00
										 |  |  | #endif // SDRBASE_CHANNEL_CHANNELAPI_H_
 |