2020-10-09 02:52:30 -04:00
///////////////////////////////////////////////////////////////////////////////////
2023-11-19 00:43:20 -05:00
// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany //
// written by Christian Daniel //
// Copyright (C) 2015-2022 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
// Copyright (C) 2019 Davide Gerhard <rainbow@irh.it> //
// Copyright (C) 2021-2023 Jon Beniston, M7RCE <jon@beniston.com> //
2020-10-09 02:52:30 -04: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_MAINCORE_H_
# define SDRBASE_MAINCORE_H_
# include <vector>
2020-10-16 02:35:06 -04:00
# include <QMap>
2020-10-09 02:52:30 -04:00
# include <QTimer>
2022-03-15 17:21:06 -04:00
# include <QElapsedTimer>
2021-01-13 18:03:55 -05:00
# include <QDateTime>
2022-03-11 23:45:24 -05:00
# include <QObject>
2022-12-20 16:06:39 -05:00
# include <QGeoPositionInfo>
2023-01-02 10:30:34 -05:00
# include <QGeoPositionInfoSource>
2020-10-09 02:52:30 -04:00
# include "export.h"
# include "settings/mainsettings.h"
# include "util/message.h"
2022-02-28 17:32:23 -05:00
# include "pipes/messagepipes.h"
2022-02-20 21:06:16 -05:00
# include "pipes/datapipes.h"
2021-01-13 12:07:38 -05:00
# include "channel/channelapi.h"
2024-02-16 11:31:12 -05:00
# include "availablechannelorfeature.h"
2020-10-09 02:52:30 -04:00
class DeviceSet ;
class FeatureSet ;
2020-10-13 02:15:21 -04:00
class Feature ;
2020-10-09 02:52:30 -04:00
class PluginManager ;
class MessageQueue ;
2022-12-20 16:06:39 -05:00
class QGeoPositionInfoSource ;
2020-10-09 02:52:30 -04:00
namespace qtwebapp {
class LoggerWithFile ;
}
2020-11-29 03:26:32 -05:00
namespace SWGSDRangel
{
class SWGChannelReport ;
2020-12-13 07:04:36 -05:00
class SWGChannelSettings ;
2021-01-13 12:07:38 -05:00
class SWGMapItem ;
class SWGTargetAzimuthElevation ;
2021-10-12 06:07:56 -04:00
class SWGStarTrackerTarget ;
class SWGStarTrackerDisplaySettings ;
class SWGStarTrackerDisplayLoSSettings ;
2024-02-14 08:20:33 -05:00
class SWGSkyMapTarget ;
2020-11-29 03:26:32 -05:00
}
2022-03-11 23:45:24 -05:00
class SDRBASE_API MainCore : public QObject
2020-10-09 02:52:30 -04:00
{
2022-03-11 23:45:24 -05:00
Q_OBJECT
2020-10-09 02:52:30 -04:00
public :
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgDVSerial : public Message {
2020-10-10 14:08:11 -04:00
MESSAGE_CLASS_DECLARATION
public :
bool getActive ( ) const { return m_active ; }
static MsgDVSerial * create ( bool active )
{
return new MsgDVSerial ( active ) ;
}
private :
bool m_active ;
MsgDVSerial ( bool active ) :
Message ( ) ,
m_active ( active )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgLoadPreset : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
const Preset * getPreset ( ) const { return m_preset ; }
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
static MsgLoadPreset * create ( const Preset * preset , int deviceSetIndex )
{
return new MsgLoadPreset ( preset , deviceSetIndex ) ;
}
private :
const Preset * m_preset ;
int m_deviceSetIndex ;
MsgLoadPreset ( const Preset * preset , int deviceSetIndex ) :
Message ( ) ,
m_preset ( preset ) ,
m_deviceSetIndex ( deviceSetIndex )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgSavePreset : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
Preset * getPreset ( ) const { return m_preset ; }
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
bool isNewPreset ( ) const { return m_newPreset ; }
static MsgSavePreset * create ( Preset * preset , int deviceSetIndex , bool newPreset )
{
return new MsgSavePreset ( preset , deviceSetIndex , newPreset ) ;
}
private :
Preset * m_preset ;
int m_deviceSetIndex ;
bool m_newPreset ;
MsgSavePreset ( Preset * preset , int deviceSetIndex , bool newPreset ) :
Message ( ) ,
m_preset ( preset ) ,
m_deviceSetIndex ( deviceSetIndex ) ,
m_newPreset ( newPreset )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgDeletePreset : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
const Preset * getPreset ( ) const { return m_preset ; }
static MsgDeletePreset * create ( const Preset * preset )
{
return new MsgDeletePreset ( preset ) ;
}
private :
const Preset * m_preset ;
MsgDeletePreset ( const Preset * preset ) :
Message ( ) ,
m_preset ( preset )
{ }
} ;
2022-05-08 13:33:10 -04:00
class SDRBASE_API MsgLoadConfiguration : public Message {
MESSAGE_CLASS_DECLARATION
public :
const Configuration * getConfiguration ( ) const { return m_configuration ; }
static MsgLoadConfiguration * create ( const Configuration * configuration )
{
return new MsgLoadConfiguration ( configuration ) ;
}
private :
const Configuration * m_configuration ;
MsgLoadConfiguration ( const Configuration * configuration ) :
Message ( ) ,
m_configuration ( configuration )
{ }
} ;
class SDRBASE_API MsgSaveConfiguration : public Message {
MESSAGE_CLASS_DECLARATION
public :
Configuration * getConfiguration ( ) const { return m_configuration ; }
bool isNewConfiguration ( ) const { return m_newConfiguration ; }
static MsgSaveConfiguration * create ( Configuration * configuration , bool newConfiguration )
{
return new MsgSaveConfiguration ( configuration , newConfiguration ) ;
}
private :
Configuration * m_configuration ;
bool m_newConfiguration ;
MsgSaveConfiguration ( Configuration * configuration , bool newConfiguration ) :
Message ( ) ,
m_configuration ( configuration ) ,
m_newConfiguration ( newConfiguration )
{ }
} ;
class SDRBASE_API MsgDeleteConfiguration : public Message {
MESSAGE_CLASS_DECLARATION
public :
const Configuration * getConfiguration ( ) const { return m_configuration ; }
static MsgDeleteConfiguration * create ( const Configuration * configuration )
{
return new MsgDeleteConfiguration ( configuration ) ;
}
private :
const Configuration * m_configuration ;
MsgDeleteConfiguration ( const Configuration * configuration ) :
Message ( ) ,
m_configuration ( configuration )
{ }
} ;
2022-05-09 15:31:14 -04:00
class SDRBASE_API MsgAddWorkspace : public Message {
MESSAGE_CLASS_DECLARATION
public :
static MsgAddWorkspace * create ( )
{
return new MsgAddWorkspace ( ) ;
}
private :
MsgAddWorkspace ( ) :
Message ( )
{ }
} ;
class SDRBASE_API MsgDeleteEmptyWorkspaces : public Message {
MESSAGE_CLASS_DECLARATION
public :
static MsgDeleteEmptyWorkspaces * create ( )
{
return new MsgDeleteEmptyWorkspaces ( ) ;
}
private :
MsgDeleteEmptyWorkspaces ( ) :
Message ( )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgLoadFeatureSetPreset : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
const FeatureSetPreset * getPreset ( ) const { return m_preset ; }
int getFeatureSetIndex ( ) const { return m_featureSetIndex ; }
static MsgLoadFeatureSetPreset * create ( const FeatureSetPreset * preset , int featureSetIndex ) {
return new MsgLoadFeatureSetPreset ( preset , featureSetIndex ) ;
}
private :
const FeatureSetPreset * m_preset ;
int m_featureSetIndex ;
MsgLoadFeatureSetPreset ( const FeatureSetPreset * preset , int featureSetIndex ) :
Message ( ) ,
m_preset ( preset ) ,
m_featureSetIndex ( featureSetIndex )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgSaveFeatureSetPreset : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
FeatureSetPreset * getPreset ( ) const { return m_preset ; }
int getFeatureSetIndex ( ) const { return m_featureSetIndex ; }
bool isNewPreset ( ) const { return m_newPreset ; }
static MsgSaveFeatureSetPreset * create ( FeatureSetPreset * preset , int featureSetIndex , bool newPreset )
{
return new MsgSaveFeatureSetPreset ( preset , featureSetIndex , newPreset ) ;
}
private :
FeatureSetPreset * m_preset ;
int m_featureSetIndex ;
bool m_newPreset ;
MsgSaveFeatureSetPreset ( FeatureSetPreset * preset , int featureSetIndex , bool newPreset ) :
Message ( ) ,
m_preset ( preset ) ,
m_featureSetIndex ( featureSetIndex ) ,
m_newPreset ( newPreset )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgDeleteFeatureSetPreset : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
const FeatureSetPreset * getPreset ( ) const { return m_preset ; }
static MsgDeleteFeatureSetPreset * create ( const FeatureSetPreset * preset )
{
return new MsgDeleteFeatureSetPreset ( preset ) ;
}
private :
const FeatureSetPreset * m_preset ;
MsgDeleteFeatureSetPreset ( const FeatureSetPreset * preset ) :
Message ( ) ,
m_preset ( preset )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgDeleteInstance : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
static MsgDeleteInstance * create ( )
{
return new MsgDeleteInstance ( ) ;
}
private :
MsgDeleteInstance ( ) :
Message ( )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgAddDeviceSet : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
int getDirection ( ) const { return m_direction ; }
2021-08-21 07:14:48 -04:00
static MsgAddDeviceSet * create ( int direction ) {
2020-10-09 02:52:30 -04:00
return new MsgAddDeviceSet ( direction ) ;
}
private :
int m_direction ;
MsgAddDeviceSet ( int direction ) :
Message ( ) ,
m_direction ( direction )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgRemoveLastDeviceSet : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
2021-08-21 07:14:48 -04:00
static MsgRemoveLastDeviceSet * create ( ) {
2020-10-09 02:52:30 -04:00
return new MsgRemoveLastDeviceSet ( ) ;
}
private :
MsgRemoveLastDeviceSet ( ) :
Message ( )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgSetDevice : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
int getDeviceIndex ( ) const { return m_deviceIndex ; }
int getDeviceType ( ) const { return m_deviceType ; }
static MsgSetDevice * create ( int deviceSetIndex , int deviceIndex , int deviceType )
{
return new MsgSetDevice ( deviceSetIndex , deviceIndex , deviceType ) ;
}
private :
int m_deviceSetIndex ;
int m_deviceIndex ;
int m_deviceType ;
MsgSetDevice ( int deviceSetIndex , int deviceIndex , int deviceType ) :
Message ( ) ,
m_deviceSetIndex ( deviceSetIndex ) ,
m_deviceIndex ( deviceIndex ) ,
m_deviceType ( deviceType )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgAddChannel : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
int getChannelRegistrationIndex ( ) const { return m_channelRegistrationIndex ; }
2022-01-12 20:45:25 -05:00
int getDirection ( ) const { return m_direction ; }
2020-10-09 02:52:30 -04:00
2022-01-12 20:45:25 -05:00
static MsgAddChannel * create ( int deviceSetIndex , int channelRegistrationIndex , int direction )
2020-10-09 02:52:30 -04:00
{
2022-01-12 20:45:25 -05:00
return new MsgAddChannel ( deviceSetIndex , channelRegistrationIndex , direction ) ;
2020-10-09 02:52:30 -04:00
}
private :
int m_deviceSetIndex ;
int m_channelRegistrationIndex ;
2022-01-12 20:45:25 -05:00
int m_direction ;
2020-10-09 02:52:30 -04:00
2022-01-12 20:45:25 -05:00
MsgAddChannel ( int deviceSetIndex , int channelRegistrationIndex , int direction ) :
2020-10-09 02:52:30 -04:00
Message ( ) ,
m_deviceSetIndex ( deviceSetIndex ) ,
m_channelRegistrationIndex ( channelRegistrationIndex ) ,
2022-01-12 20:45:25 -05:00
m_direction ( direction )
2020-10-09 02:52:30 -04:00
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgDeleteChannel : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
int getChannelIndex ( ) const { return m_channelIndex ; }
static MsgDeleteChannel * create ( int deviceSetIndex , int channelIndex )
{
return new MsgDeleteChannel ( deviceSetIndex , channelIndex ) ;
}
private :
int m_deviceSetIndex ;
int m_channelIndex ;
MsgDeleteChannel ( int deviceSetIndex , int channelIndex ) :
Message ( ) ,
m_deviceSetIndex ( deviceSetIndex ) ,
m_channelIndex ( channelIndex )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgApplySettings : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
static MsgApplySettings * create ( ) {
return new MsgApplySettings ( ) ;
}
private :
MsgApplySettings ( ) :
Message ( )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgAddFeature : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
int getFeatureSetIndex ( ) const { return m_featureSetIndex ; }
int getFeatureRegistrationIndex ( ) const { return m_featureRegistrationIndex ; }
static MsgAddFeature * create ( int featureSetIndex , int featureRegistrationIndex )
{
return new MsgAddFeature ( featureSetIndex , featureRegistrationIndex ) ;
}
private :
int m_featureSetIndex ;
int m_featureRegistrationIndex ;
MsgAddFeature ( int featureSetIndex , int featureRegistrationIndex ) :
Message ( ) ,
m_featureSetIndex ( featureSetIndex ) ,
m_featureRegistrationIndex ( featureRegistrationIndex )
{ }
} ;
2020-10-11 07:19:27 -04:00
class SDRBASE_API MsgDeleteFeature : public Message {
2020-10-09 02:52:30 -04:00
MESSAGE_CLASS_DECLARATION
public :
int getFeatureSetIndex ( ) const { return m_featureSetIndex ; }
int getFeatureIndex ( ) const { return m_featureIndex ; }
static MsgDeleteFeature * create ( int m_featureSetIndex , int m_featureIndex ) {
return new MsgDeleteFeature ( m_featureSetIndex , m_featureIndex ) ;
}
private :
int m_featureSetIndex ;
int m_featureIndex ;
MsgDeleteFeature ( int m_featureSetIndex , int m_featureIndex ) :
Message ( ) ,
m_featureSetIndex ( m_featureSetIndex ) ,
m_featureIndex ( m_featureIndex )
{ }
} ;
2020-11-29 03:26:32 -05:00
class SDRBASE_API MsgChannelReport : public Message {
MESSAGE_CLASS_DECLARATION
public :
const ChannelAPI * getChannelAPI ( ) const { return m_channelAPI ; }
SWGSDRangel : : SWGChannelReport * getSWGReport ( ) const { return m_swgReport ; }
static MsgChannelReport * create (
const ChannelAPI * channelAPI ,
SWGSDRangel : : SWGChannelReport * swgReport )
{
return new MsgChannelReport ( channelAPI , swgReport ) ;
}
private :
const ChannelAPI * m_channelAPI ;
SWGSDRangel : : SWGChannelReport * m_swgReport ;
MsgChannelReport (
const ChannelAPI * channelAPI ,
SWGSDRangel : : SWGChannelReport * swgReport
) :
Message ( ) ,
m_channelAPI ( channelAPI ) ,
m_swgReport ( swgReport )
{ }
} ;
2021-06-29 15:47:27 -04:00
class SDRBASE_API MsgChannelDemodQuery : public Message {
MESSAGE_CLASS_DECLARATION
public :
static MsgChannelDemodQuery * create ( ) {
return new MsgChannelDemodQuery ( ) ;
}
private :
MsgChannelDemodQuery ( ) :
Message ( )
{ }
} ;
2020-12-19 19:53:03 -05:00
class SDRBASE_API MsgChannelDemodReport : public Message {
MESSAGE_CLASS_DECLARATION
public :
const ChannelAPI * getChannelAPI ( ) const { return m_channelAPI ; }
int getSampleRate ( ) const { return m_sampleRate ; }
static MsgChannelDemodReport * create ( const ChannelAPI * channelAPI , int sampleRate ) {
return new MsgChannelDemodReport ( channelAPI , sampleRate ) ;
}
private :
const ChannelAPI * m_channelAPI ;
int m_sampleRate ;
MsgChannelDemodReport ( const ChannelAPI * channelAPI , int sampleRate ) :
Message ( ) ,
m_channelAPI ( channelAPI ) ,
m_sampleRate ( sampleRate )
{ }
} ;
2020-12-13 07:04:36 -05:00
class SDRBASE_API MsgChannelSettings : public Message {
MESSAGE_CLASS_DECLARATION
public :
const ChannelAPI * getChannelAPI ( ) const { return m_channelAPI ; }
const QList < QString > & getChannelSettingsKeys ( ) const { return m_channelSettingsKeys ; }
SWGSDRangel : : SWGChannelSettings * getSWGSettings ( ) const { return m_swgSettings ; }
bool getForce ( ) const { return m_force ; }
static MsgChannelSettings * create (
const ChannelAPI * channelAPI ,
const QList < QString > & channelSettingsKey ,
SWGSDRangel : : SWGChannelSettings * swgSettings ,
bool force )
{
return new MsgChannelSettings ( channelAPI , channelSettingsKey , swgSettings , force ) ;
}
private :
const ChannelAPI * m_channelAPI ;
QList < QString > m_channelSettingsKeys ;
SWGSDRangel : : SWGChannelSettings * m_swgSettings ;
bool m_force ;
MsgChannelSettings (
const ChannelAPI * channelAPI ,
const QList < QString > & channelSettingsKeys ,
SWGSDRangel : : SWGChannelSettings * swgSettings ,
bool force
) :
Message ( ) ,
m_channelAPI ( channelAPI ) ,
m_channelSettingsKeys ( channelSettingsKeys ) ,
m_swgSettings ( swgSettings ) ,
m_force ( force )
{ }
} ;
2022-05-13 16:24:48 -04:00
class SDRBASE_API MsgMoveDeviceUIToWorkspace : public Message {
MESSAGE_CLASS_DECLARATION
public :
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
int getWorkspaceIndex ( ) const { return m_workspaceIndex ; }
static MsgMoveDeviceUIToWorkspace * create ( int deviceSetIndex , int workspceIndex ) {
return new MsgMoveDeviceUIToWorkspace ( deviceSetIndex , workspceIndex ) ;
}
private :
int m_deviceSetIndex ;
int m_workspaceIndex ;
MsgMoveDeviceUIToWorkspace ( int deviceSetIndex , int workspceIndex ) :
Message ( ) ,
m_deviceSetIndex ( deviceSetIndex ) ,
m_workspaceIndex ( workspceIndex )
{ }
} ;
class SDRBASE_API MsgMoveMainSpectrumUIToWorkspace : public Message {
MESSAGE_CLASS_DECLARATION
public :
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
int getWorkspaceIndex ( ) const { return m_workspaceIndex ; }
static MsgMoveMainSpectrumUIToWorkspace * create ( int deviceSetIndex , int workspceIndex ) {
return new MsgMoveMainSpectrumUIToWorkspace ( deviceSetIndex , workspceIndex ) ;
}
private :
int m_deviceSetIndex ;
int m_workspaceIndex ;
MsgMoveMainSpectrumUIToWorkspace ( int deviceSetIndex , int workspceIndex ) :
Message ( ) ,
m_deviceSetIndex ( deviceSetIndex ) ,
m_workspaceIndex ( workspceIndex )
{ }
} ;
class SDRBASE_API MsgMoveFeatureUIToWorkspace : public Message {
MESSAGE_CLASS_DECLARATION
public :
int getFeatureIndex ( ) const { return m_featureIndex ; }
int getWorkspaceIndex ( ) const { return m_workspaceIndex ; }
static MsgMoveFeatureUIToWorkspace * create ( int featureIndex , int workspceIndex ) {
return new MsgMoveFeatureUIToWorkspace ( featureIndex , workspceIndex ) ;
}
private :
int m_featureIndex ;
int m_workspaceIndex ;
MsgMoveFeatureUIToWorkspace ( int featureIndex , int workspceIndex ) :
Message ( ) ,
m_featureIndex ( featureIndex ) ,
m_workspaceIndex ( workspceIndex )
{ }
} ;
class SDRBASE_API MsgMoveChannelUIToWorkspace : public Message {
MESSAGE_CLASS_DECLARATION
public :
int getDeviceSetIndex ( ) const { return m_deviceSetIndex ; }
int getChannelIndex ( ) const { return m_channelIndex ; }
int getWorkspaceIndex ( ) const { return m_workspaceIndex ; }
static MsgMoveChannelUIToWorkspace * create ( int deviceSetIndex , int channelIndex , int workspceIndex ) {
return new MsgMoveChannelUIToWorkspace ( deviceSetIndex , channelIndex , workspceIndex ) ;
}
private :
int m_deviceSetIndex ;
int m_channelIndex ;
int m_workspaceIndex ;
MsgMoveChannelUIToWorkspace ( int deviceSetIndex , int channelIndex , int workspceIndex ) :
Message ( ) ,
m_deviceSetIndex ( deviceSetIndex ) ,
m_channelIndex ( channelIndex ) ,
m_workspaceIndex ( workspceIndex )
{ }
} ;
2021-01-13 12:07:38 -05:00
// Message to Map feature to display an item on the map
class SDRBASE_API MsgMapItem : public Message {
MESSAGE_CLASS_DECLARATION
public :
2022-03-29 14:12:15 -04:00
const QObject * getPipeSource ( ) const { return m_pipeSource ; }
2021-01-13 12:07:38 -05:00
SWGSDRangel : : SWGMapItem * getSWGMapItem ( ) const { return m_swgMapItem ; }
2022-03-29 14:12:15 -04:00
static MsgMapItem * create ( const QObject * pipeSource , SWGSDRangel : : SWGMapItem * swgMapItem )
2021-01-13 12:07:38 -05:00
{
return new MsgMapItem ( pipeSource , swgMapItem ) ;
}
private :
2022-03-29 14:12:15 -04:00
const QObject * m_pipeSource ;
2021-01-13 12:07:38 -05:00
SWGSDRangel : : SWGMapItem * m_swgMapItem ;
2022-03-29 14:12:15 -04:00
MsgMapItem ( const QObject * pipeSource , SWGSDRangel : : SWGMapItem * swgMapItem ) :
2021-01-13 12:07:38 -05:00
Message ( ) ,
m_pipeSource ( pipeSource ) ,
m_swgMapItem ( swgMapItem )
{ }
} ;
// Message to pass received packets between channels and features
class SDRBASE_API MsgPacket : public Message {
MESSAGE_CLASS_DECLARATION
public :
2022-03-29 17:03:54 -04:00
const QObject * getPipeSource ( ) const { return m_pipeSource ; }
2021-01-13 12:07:38 -05:00
QByteArray getPacket ( ) const { return m_packet ; }
QDateTime getDateTime ( ) const { return m_dateTime ; }
2022-03-29 17:03:54 -04:00
static MsgPacket * create ( const QObject * pipeSource , QByteArray packet )
2021-01-13 12:07:38 -05:00
{
return new MsgPacket ( pipeSource , packet , QDateTime : : currentDateTime ( ) ) ;
}
2022-03-29 17:03:54 -04:00
static MsgPacket * create ( const QObject * pipeSource , QByteArray packet , QDateTime dateTime )
2021-01-13 12:07:38 -05:00
{
return new MsgPacket ( pipeSource , packet , dateTime ) ;
}
private :
2022-03-29 17:03:54 -04:00
const QObject * m_pipeSource ;
2021-01-13 12:07:38 -05:00
QByteArray m_packet ;
QDateTime m_dateTime ;
2022-03-29 17:03:54 -04:00
MsgPacket ( const QObject * pipeSource , QByteArray packet , QDateTime dateTime ) :
2021-01-13 12:07:38 -05:00
Message ( ) ,
m_pipeSource ( pipeSource ) ,
m_packet ( packet ) ,
m_dateTime ( dateTime )
{
}
} ;
// Message to pass target azimuth and elevation between channels & features
class SDRBASE_API MsgTargetAzimuthElevation : public Message {
MESSAGE_CLASS_DECLARATION
public :
2022-03-28 14:12:25 -04:00
const QObject * getPipeSource ( ) const { return m_pipeSource ; }
2021-01-13 12:07:38 -05:00
SWGSDRangel : : SWGTargetAzimuthElevation * getSWGTargetAzimuthElevation ( ) const { return m_swgTargetAzimuthElevation ; }
2022-03-28 14:12:25 -04:00
static MsgTargetAzimuthElevation * create ( const QObject * pipeSource , SWGSDRangel : : SWGTargetAzimuthElevation * swgTargetAzimuthElevation )
2021-01-13 12:07:38 -05:00
{
return new MsgTargetAzimuthElevation ( pipeSource , swgTargetAzimuthElevation ) ;
}
private :
2022-03-28 14:12:25 -04:00
const QObject * m_pipeSource ;
2021-01-13 12:07:38 -05:00
SWGSDRangel : : SWGTargetAzimuthElevation * m_swgTargetAzimuthElevation ;
2022-03-28 14:12:25 -04:00
MsgTargetAzimuthElevation ( const QObject * pipeSource , SWGSDRangel : : SWGTargetAzimuthElevation * swgTargetAzimuthElevation ) :
2021-01-13 12:07:38 -05:00
Message ( ) ,
m_pipeSource ( pipeSource ) ,
m_swgTargetAzimuthElevation ( swgTargetAzimuthElevation )
{ }
} ;
2021-10-12 06:07:56 -04:00
// Messages between Star Tracker and Radio Astronomy plugins
class SDRBASE_API MsgStarTrackerTarget : public Message {
MESSAGE_CLASS_DECLARATION
public :
2022-03-27 02:01:02 -04:00
const QObject * getPipeSource ( ) const { return m_pipeSource ; }
2021-10-12 06:07:56 -04:00
SWGSDRangel : : SWGStarTrackerTarget * getSWGStarTrackerTarget ( ) const { return m_swgStarTrackerTarget ; }
2022-03-27 02:01:02 -04:00
static MsgStarTrackerTarget * create ( const QObject * pipeSource , SWGSDRangel : : SWGStarTrackerTarget * swgStarTrackerTarget )
2021-10-12 06:07:56 -04:00
{
return new MsgStarTrackerTarget ( pipeSource , swgStarTrackerTarget ) ;
}
private :
2022-03-27 02:01:02 -04:00
const QObject * m_pipeSource ;
2021-10-12 06:07:56 -04:00
SWGSDRangel : : SWGStarTrackerTarget * m_swgStarTrackerTarget ;
2022-03-27 02:01:02 -04:00
MsgStarTrackerTarget ( const QObject * pipeSource , SWGSDRangel : : SWGStarTrackerTarget * swgStarTrackerTarget ) :
2021-10-12 06:07:56 -04:00
Message ( ) ,
m_pipeSource ( pipeSource ) ,
m_swgStarTrackerTarget ( swgStarTrackerTarget )
{ }
} ;
class SDRBASE_API MsgStarTrackerDisplaySettings : public Message {
MESSAGE_CLASS_DECLARATION
public :
2022-03-29 17:03:54 -04:00
const QObject * getPipeSource ( ) const { return m_pipeSource ; }
2021-10-12 06:07:56 -04:00
SWGSDRangel : : SWGStarTrackerDisplaySettings * getSWGStarTrackerDisplaySettings ( ) const { return m_swgStarTrackerDisplaySettings ; }
2022-03-29 17:03:54 -04:00
static MsgStarTrackerDisplaySettings * create ( const QObject * pipeSource , SWGSDRangel : : SWGStarTrackerDisplaySettings * swgStarTrackerDisplaySettings )
2021-10-12 06:07:56 -04:00
{
return new MsgStarTrackerDisplaySettings ( pipeSource , swgStarTrackerDisplaySettings ) ;
}
private :
2022-03-29 17:03:54 -04:00
const QObject * m_pipeSource ;
2021-10-12 06:07:56 -04:00
SWGSDRangel : : SWGStarTrackerDisplaySettings * m_swgStarTrackerDisplaySettings ;
2022-03-29 17:03:54 -04:00
MsgStarTrackerDisplaySettings ( const QObject * pipeSource , SWGSDRangel : : SWGStarTrackerDisplaySettings * swgStarTrackerDisplaySettings ) :
2021-10-12 06:07:56 -04:00
Message ( ) ,
m_pipeSource ( pipeSource ) ,
m_swgStarTrackerDisplaySettings ( swgStarTrackerDisplaySettings )
{ }
} ;
class SDRBASE_API MsgStarTrackerDisplayLoSSettings : public Message {
MESSAGE_CLASS_DECLARATION
public :
2022-03-29 17:03:54 -04:00
const QObject * getPipeSource ( ) const { return m_pipeSource ; }
2021-10-12 06:07:56 -04:00
SWGSDRangel : : SWGStarTrackerDisplayLoSSettings * getSWGStarTrackerDisplayLoSSettings ( ) const { return m_swgStarTrackerDisplayLoSSettings ; }
2022-03-29 17:03:54 -04:00
static MsgStarTrackerDisplayLoSSettings * create ( const QObject * pipeSource , SWGSDRangel : : SWGStarTrackerDisplayLoSSettings * swgStarTrackerDisplayLoSSettings )
2021-10-12 06:07:56 -04:00
{
return new MsgStarTrackerDisplayLoSSettings ( pipeSource , swgStarTrackerDisplayLoSSettings ) ;
}
private :
2022-03-29 17:03:54 -04:00
const QObject * m_pipeSource ;
2021-10-12 06:07:56 -04:00
SWGSDRangel : : SWGStarTrackerDisplayLoSSettings * m_swgStarTrackerDisplayLoSSettings ;
2022-03-29 17:03:54 -04:00
MsgStarTrackerDisplayLoSSettings ( const QObject * pipeSource , SWGSDRangel : : SWGStarTrackerDisplayLoSSettings * swgStarTrackerDisplayLoSSettings ) :
2021-10-12 06:07:56 -04:00
Message ( ) ,
m_pipeSource ( pipeSource ) ,
m_swgStarTrackerDisplayLoSSettings ( swgStarTrackerDisplayLoSSettings )
{ }
} ;
2024-02-14 08:20:33 -05:00
class SDRBASE_API MsgSkyMapTarget : public Message {
MESSAGE_CLASS_DECLARATION
public :
const QObject * getPipeSource ( ) const { return m_pipeSource ; }
SWGSDRangel : : SWGSkyMapTarget * getSWGSkyMapTarget ( ) const { return m_swgSkyMapTarget ; }
2021-01-13 12:07:38 -05:00
2024-02-14 08:20:33 -05:00
static MsgSkyMapTarget * create ( const QObject * pipeSource , SWGSDRangel : : SWGSkyMapTarget * swgSkyMapTarget )
{
return new MsgSkyMapTarget ( pipeSource , swgSkyMapTarget ) ;
}
private :
const QObject * m_pipeSource ;
SWGSDRangel : : SWGSkyMapTarget * m_swgSkyMapTarget ;
MsgSkyMapTarget ( const QObject * pipeSource , SWGSDRangel : : SWGSkyMapTarget * swgSkyMapTarget ) :
Message ( ) ,
m_pipeSource ( pipeSource ) ,
m_swgSkyMapTarget ( swgSkyMapTarget )
{ }
} ;
2021-01-13 12:07:38 -05:00
2020-10-09 02:52:30 -04:00
MainCore ( ) ;
~ MainCore ( ) ;
static MainCore * instance ( ) ;
const QTimer & getMasterTimer ( ) const { return m_masterTimer ; }
2022-03-15 17:21:06 -04:00
qint64 getElapsedNsecs ( ) const { return m_masterElapsedTimer . nsecsElapsed ( ) ; } //!< Elapsed nanoseconds since main core construction
qint64 getStartMsecsSinceEpoch ( ) const { return m_startMsecsSinceEpoch ; } //!< Epoch timestamp in millisecodns close to elapsed timer start
2020-10-09 02:52:30 -04:00
const MainSettings & getSettings ( ) const { return m_settings ; }
2023-08-24 10:51:50 -04:00
MainSettings & getMutableSettings ( ) { return m_settings ; }
2020-10-09 02:52:30 -04:00
MessageQueue * getMainMessageQueue ( ) { return m_mainMessageQueue ; }
2022-12-20 16:06:39 -05:00
PluginManager * getPluginManager ( ) const { return m_pluginManager ; }
2020-10-09 02:52:30 -04:00
std : : vector < DeviceSet * > & getDeviceSets ( ) { return m_deviceSets ; }
std : : vector < FeatureSet * > & getFeatureeSets ( ) { return m_featureSets ; }
void setLoggingOptions ( ) ;
2022-03-11 23:45:24 -05:00
DeviceAPI * getDevice ( unsigned int deviceSetIndex ) ;
2020-11-14 16:08:06 -05:00
ChannelAPI * getChannel ( unsigned int deviceSetIndex , int channelIndex ) ;
Feature * getFeature ( unsigned int featureSetIndex , int featureIndex ) ;
2020-12-12 10:31:38 -05:00
bool existsChannel ( const ChannelAPI * channel ) const { return m_channelsMap . contains ( const_cast < ChannelAPI * > ( channel ) ) ; }
bool existsFeature ( const Feature * feature ) const { return m_featuresMap . contains ( const_cast < Feature * > ( feature ) ) ; }
2020-10-10 18:22:42 -04:00
// slave mode
void appendFeatureSet ( ) ;
2020-11-14 16:08:06 -05:00
void removeFeatureSet ( unsigned int index ) ;
2020-10-10 18:22:42 -04:00
void removeLastFeatureSet ( ) ;
2020-10-11 02:27:58 -04:00
void appendDeviceSet ( int deviceType ) ;
void removeLastDeviceSet ( ) ;
2022-04-12 10:20:45 -04:00
void removeDeviceSet ( int deviceSetIndex ) ;
2020-10-16 02:35:06 -04:00
// slave mode - channels
void addChannelInstance ( DeviceSet * deviceSet , ChannelAPI * channelAPI ) ;
void removeChannelInstanceAt ( DeviceSet * deviceSet , int channelIndex ) ;
void removeChannelInstance ( ChannelAPI * channelAPI ) ;
void clearChannels ( DeviceSet * deviceSet ) ;
// slave mode - features
void addFeatureInstance ( FeatureSet * featureSet , Feature * feature ) ;
void removeFeatureInstanceAt ( FeatureSet * featureSet , int featureIndex ) ;
void removeFeatureInstance ( Feature * feature ) ;
void clearFeatures ( FeatureSet * featureSet ) ;
2020-11-29 03:26:32 -05:00
// pipes
2022-03-02 17:57:35 -05:00
MessagePipes & getMessagePipes ( ) { return m_messagePipes ; }
2022-02-20 21:06:16 -05:00
DataPipes & getDataPipes ( ) { return m_dataPipes ; }
2022-12-20 16:06:39 -05:00
// Position
const QGeoPositionInfo & getPosition ( ) const ;
2020-10-09 02:52:30 -04:00
2024-02-16 11:31:12 -05:00
// Lists of available channels and features. List should be ordered by indexes. Plugins should use AvailableChannelOrFeatureHandler to maintain this list
AvailableChannelOrFeatureList getAvailableChannels ( const QStringList & uris ) ; // Get list of available channels with given URIs or all if empty list.
AvailableChannelOrFeatureList getAvailableFeatures ( const QStringList & uris ) ; // Get list of available features with given URIs or all if empty list.
AvailableChannelOrFeatureList getAvailableChannelsAndFeatures ( const QStringList & uris , const QString & kinds ) ; // Get list of available channels and features with given URIs or all if empty list.
2024-02-14 08:20:33 -05:00
2023-12-05 07:32:53 -05:00
// Ids
QChar getDeviceSetTypeId ( const DeviceSet * deviceSet ) ; //!< Get Type Id (E.g. 'R', 'T' or 'M') for the given device set
QString getDeviceSetId ( const DeviceSet * deviceSet ) ; //!< Get Id (E.g. "R2") for the given device set
QString getChannelId ( const ChannelAPI * channel ) ; //!< Get Id (E.g. "R1:2") for the given channel
static bool getDeviceSetTypeFromId ( const QString & deviceSetId , QChar & type ) ; //!< "R1" -> 'R'
static bool getDeviceSetIndexFromId ( const QString & deviceSetId , unsigned int & deviceSetIndex ) ; //!< "R1" -> 1
static bool getDeviceAndChannelIndexFromId ( const QString & channelId , unsigned int & deviceSetIndex , unsigned int & channelIndex ) ; //!< "R3:4" -> 3, 4
static bool getFeatureIndexFromId ( const QString & featureId , unsigned int & featureSetIndex , unsigned int & featureIndex ) ; //!< "F0:2" -> 0, 2
QStringList getDeviceSetIds ( bool rx , bool tx , bool mimo ) ; //!< Get list of all device set Ids. E.g: {"R0", "R1", "T1", "M2"}
std : : vector < ChannelAPI * > getChannels ( const QString & uri ) ; //!< Get all channels from any device set with the given URI
QStringList getChannelIds ( const QString & uri ) ; //!< Get all Ids for channels from any device set with the given URI. E.g. "sdrangel.channel.xyzdemod" -> {"R2:1", "M0:0.1"}
2020-10-09 02:52:30 -04:00
friend class MainServer ;
friend class MainWindow ;
2020-10-11 06:39:30 -04:00
friend class WebAPIAdapter ;
2022-04-04 10:13:42 -04:00
friend class CommandsDialog ;
2022-04-13 12:43:37 -04:00
friend class DeviceSetPresetsDialog ;
2022-04-19 01:03:28 -04:00
friend class ConfigurationsDialog ;
2020-10-09 02:52:30 -04:00
2022-12-20 16:06:39 -05:00
public slots :
void positionUpdated ( const QGeoPositionInfo & info ) ;
2023-01-02 10:30:34 -05:00
void positionUpdateTimeout ( ) ;
void positionError ( QGeoPositionInfoSource : : Error positioningError ) ;
2023-02-17 16:57:09 -05:00
# ifdef ANDROID
void updateWakeLock ( ) ;
# endif
2022-12-20 16:06:39 -05:00
2022-03-11 23:45:24 -05:00
signals :
void deviceSetAdded ( int index , DeviceAPI * device ) ;
void deviceChanged ( int index ) ;
2022-08-27 05:18:17 -04:00
void deviceStateChanged ( int index , DeviceAPI * device ) ;
2022-03-11 23:45:24 -05:00
void deviceSetRemoved ( int index ) ;
void channelAdded ( int deviceSetIndex , ChannelAPI * channel ) ;
void channelRemoved ( int deviceSetIndex , ChannelAPI * oldChannel ) ;
void featureSetAdded ( int index ) ;
void featureSetRemoved ( int index ) ;
void featureAdded ( int featureSetIndex , Feature * feature ) ;
void featureRemoved ( int featureSetIndex , Feature * oldFeature ) ;
2020-10-09 02:52:30 -04:00
private :
MainSettings m_settings ;
qtwebapp : : LoggerWithFile * m_logger ;
MessageQueue * m_mainMessageQueue ;
int m_masterTabIndex ;
QTimer m_masterTimer ;
2022-03-15 17:21:06 -04:00
QElapsedTimer m_masterElapsedTimer ;
qint64 m_startMsecsSinceEpoch ;
2020-10-09 02:52:30 -04:00
std : : vector < DeviceSet * > m_deviceSets ;
std : : vector < FeatureSet * > m_featureSets ;
2020-10-16 02:35:06 -04:00
QMap < DeviceSet * , int > m_deviceSetsMap ; //!< Device set instance to device set index map
QMap < FeatureSet * , int > m_featureSetsMap ; //!< Feature set instance to feature set index map
QMap < ChannelAPI * , DeviceSet * > m_channelsMap ; //!< Channel to device set map
QMap < Feature * , FeatureSet * > m_featuresMap ; //!< Feature to feature set map
2020-10-09 02:52:30 -04:00
PluginManager * m_pluginManager ;
2022-03-02 17:57:35 -05:00
MessagePipes m_messagePipes ;
2022-02-20 21:06:16 -05:00
DataPipes m_dataPipes ;
2022-12-20 16:06:39 -05:00
QGeoPositionInfoSource * m_positionSource ;
QGeoPositionInfo m_position ;
2020-10-16 02:35:06 -04:00
2022-12-20 16:06:39 -05:00
void initPosition ( ) ;
2020-10-16 02:35:06 -04:00
void debugMaps ( ) ;
2020-10-09 02:52:30 -04:00
} ;
# endif // SDRBASE_MAINCORE_H_