Skip to content
Snippets Groups Projects
LinkManager.h 2.77 KiB
Newer Older
  • Learn to ignore specific revisions
  • pixhawk's avatar
    pixhawk committed
    /*=====================================================================
    
    pixhawk's avatar
    pixhawk committed
    PIXHAWK Micro Air Vehicle Flying Robotics Toolkit
    
    pixhawk's avatar
    pixhawk committed
    (c) 2009, 2010 PIXHAWK PROJECT  <http://pixhawk.ethz.ch>
    
    pixhawk's avatar
    pixhawk committed
    This file is part of the PIXHAWK project
    
    pixhawk's avatar
    pixhawk committed
        PIXHAWK 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, either version 3 of the License, or
        (at your option) any later version.
    
    pixhawk's avatar
    pixhawk committed
        PIXHAWK 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 for more details.
    
    pixhawk's avatar
    pixhawk committed
        You should have received a copy of the GNU General Public License
        along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
    
    pixhawk's avatar
    pixhawk committed
    ======================================================================*/
    
    pixhawk's avatar
    pixhawk committed
    /**
     * @file
     *   @brief Manage communication links
     *
     *   @author Lorenz Meier <mavteam@student.ethz.ch>
     *
     */
    
    #ifndef _LINKMANAGER_H_
    #define _LINKMANAGER_H_
    
    #include <QThread>
    #include <QList>
    
    #include <QMultiMap>
    
    pixhawk's avatar
    pixhawk committed
    #include <LinkInterface.h>
    
    #include <SerialLink.h>
    
    pixhawk's avatar
    pixhawk committed
    #include <ProtocolInterface.h>
    
    /**
     * The Link Manager organizes the physical Links. It can manage arbitrary
     * links and takes care of connecting them as well assigning the correct
     * protocol instance to transport the link data into the application.
     *
     **/
    
    pixhawk's avatar
    pixhawk committed
        Q_OBJECT
    
    public:
        static LinkManager* instance();
        ~LinkManager();
    
        void run();
    
        QList<LinkInterface*> getLinksForProtocol(ProtocolInterface* protocol);
    
    
        ProtocolInterface* getProtocolForLink(LinkInterface* link);
    
    
    pixhawk's avatar
    pixhawk committed
        /** @brief Get the link for this id */
        LinkInterface* getLinkForId(int id);
    
        /** @brief Get a list of all links */
        const QList<LinkInterface*> getLinks();
    
    
        /** @brief Get a list of all serial links */
        const QList<SerialLink*> getSerialLinks();
    
    
        /** @brief Get a list of all protocols */
    
        const QList<ProtocolInterface*> getProtocols() {
            return protocolLinks.uniqueKeys();
        }
    
    pixhawk's avatar
    pixhawk committed
    public slots:
    
        void add(LinkInterface* link);
        void addProtocol(LinkInterface* link, ProtocolInterface* protocol);
    
    
        void removeObj(QObject* obj);
    
        bool removeLink(LinkInterface* link);
    
    
    pixhawk's avatar
    pixhawk committed
        bool connectAll();
        bool connectLink(LinkInterface* link);
    
        bool disconnectAll();
        bool disconnectLink(LinkInterface* link);
    
    protected:
        LinkManager();
        QList<LinkInterface*> links;
    
        QMultiMap<ProtocolInterface*,LinkInterface*> protocolLinks;
    
    pixhawk's avatar
    pixhawk committed
    
    private:
        static LinkManager* _instance;
    
    signals:
        void newLink(LinkInterface* link);
    
        void linkRemoved(LinkInterface* link);
    
    pixhawk's avatar
    pixhawk committed
    
    };
    
    #endif // _LINKMANAGER_H_