Skip to content
Snippets Groups Projects
LinkConfiguration.cc 4.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • /****************************************************************************
     *
     *   (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
     *
     * QGroundControl is licensed according to the terms in the file
     * COPYING.md in the root of the source code directory.
     *
     ****************************************************************************/
    
    
    
    /*!
        @file
           @brief Link specific configuration base class
           @author Gus Grubba <mavlink@grubba.com>
    */
    
    #include "LinkConfiguration.h"
    
    Gus Grubba's avatar
    Gus Grubba committed
    #ifndef NO_SERIAL_LINK
    
    dogmaphobic's avatar
    dogmaphobic committed
    #endif
    
    #include "TCPLink.h"
    
    Don Gagne's avatar
    Don Gagne committed
    #include "LogReplayLink.h"
    
    dogmaphobic's avatar
    dogmaphobic committed
    #ifdef QGC_ENABLE_BLUETOOTH
    
    dogmaphobic's avatar
    dogmaphobic committed
    #include "BluetoothLink.h"
    #endif
    
    #ifdef QT_DEBUG
    
    
    #define LINK_SETTING_ROOT "LinkConfigurations"
    
    LinkConfiguration::LinkConfiguration(const QString& name)
    
        : _link(nullptr)
    
    Don Gagne's avatar
    Don Gagne committed
        , _name(name)
    
    dogmaphobic's avatar
    dogmaphobic committed
        , _dynamic(false)
    
        , _autoConnect(false)
    
        , _highLatency(false)
    
    Don Gagne's avatar
    Don Gagne committed
        if (_name.isEmpty()) {
            qWarning() << "Internal error";
        }
    
    }
    
    LinkConfiguration::LinkConfiguration(LinkConfiguration* copy)
    {
    
    Don Gagne's avatar
    Don Gagne committed
        _link       = copy->link();
    
    dogmaphobic's avatar
    dogmaphobic committed
        _name       = copy->name();
        _dynamic    = copy->isDynamic();
    
        _autoConnect= copy->isAutoConnect();
    
        _highLatency= copy->isHighLatency();
    
        Q_ASSERT(!_name.isEmpty());
    }
    
    void LinkConfiguration::copyFrom(LinkConfiguration* source)
    {
    
        Q_ASSERT(source != nullptr);
    
    Don Gagne's avatar
    Don Gagne committed
        _link       = source->link();
    
    dogmaphobic's avatar
    dogmaphobic committed
        _name       = source->name();
        _dynamic    = source->isDynamic();
    
        _autoConnect= source->isAutoConnect();
    
        _highLatency= source->isHighLatency();
    
    }
    
    /*!
      Where the settings are saved
      @return The root path of the setting.
    */
    const QString LinkConfiguration::settingsRoot()
    {
        return QString(LINK_SETTING_ROOT);
    }
    
    /*!
      Configuration Factory
      @return A new instance of the given type
    */
    LinkConfiguration* LinkConfiguration::createSettings(int type, const QString& name)
    {
    
        LinkConfiguration* config = nullptr;
    
    Gus Grubba's avatar
    Gus Grubba committed
    #ifndef NO_SERIAL_LINK
    
            case LinkConfiguration::TypeSerial:
                config = new SerialConfiguration(name);
                break;
    
    dogmaphobic's avatar
    dogmaphobic committed
    #endif
    
            case LinkConfiguration::TypeUdp:
                config = new UDPConfiguration(name);
                break;
    
            case LinkConfiguration::TypeTcp:
                config = new TCPConfiguration(name);
                break;
    
    dogmaphobic's avatar
    dogmaphobic committed
    #ifdef QGC_ENABLE_BLUETOOTH
    
    dogmaphobic's avatar
    dogmaphobic committed
        case LinkConfiguration::TypeBluetooth:
            config = new BluetoothConfiguration(name);
            break;
    #endif
    
    Don Gagne's avatar
    Don Gagne committed
            case LinkConfiguration::TypeLogReplay:
                config = new LogReplayLinkConfiguration(name);
                break;
    
    #ifdef QT_DEBUG
    
            case LinkConfiguration::TypeMock:
                config = new MockConfiguration(name);
                break;
    
        }
        return config;
    }
    
    /*!
      Duplicate link settings
      @return A new copy of the given settings instance
    */
    LinkConfiguration* LinkConfiguration::duplicateSettings(LinkConfiguration* source)
    {
    
        LinkConfiguration* dupe = nullptr;
    
    Gus Grubba's avatar
    Gus Grubba committed
    #ifndef NO_SERIAL_LINK
    
                dupe = new SerialConfiguration(qobject_cast<SerialConfiguration*>(source));
    
    dogmaphobic's avatar
    dogmaphobic committed
    #endif
    
                dupe = new UDPConfiguration(qobject_cast<UDPConfiguration*>(source));
    
                dupe = new TCPConfiguration(qobject_cast<TCPConfiguration*>(source));
    
    dogmaphobic's avatar
    dogmaphobic committed
    #ifdef QGC_ENABLE_BLUETOOTH
            case TypeBluetooth:
    
                dupe = new BluetoothConfiguration(qobject_cast<BluetoothConfiguration*>(source));
    
    dogmaphobic's avatar
    dogmaphobic committed
                break;
    
    dogmaphobic's avatar
    dogmaphobic committed
    #endif
    
    Don Gagne's avatar
    Don Gagne committed
            case TypeLogReplay:
    
                dupe = new LogReplayLinkConfiguration(qobject_cast<LogReplayLinkConfiguration*>(source));
    
    Don Gagne's avatar
    Don Gagne committed
                break;
    
    #ifdef QT_DEBUG
    
                dupe = new MockConfiguration(qobject_cast<MockConfiguration*>(source));
    
            case TypeLast:
                break;
    
    Don Gagne's avatar
    Don Gagne committed
    
    void LinkConfiguration::setName(const QString name)
    {
        _name = name;
        emit nameChanged(name);
    }
    
    void LinkConfiguration::setLink(LinkInterface* link)
    {
    
        if(_link != link) {
            _link = link;
            emit linkChanged(link);
        }
    
    Don Gagne's avatar
    Don Gagne committed
    }