LinkManager.h 2.77 KB
Newer Older
pixhawk's avatar
pixhawk committed
1
/*=====================================================================
2

pixhawk's avatar
pixhawk committed
3
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit
4

pixhawk's avatar
pixhawk committed
5
(c) 2009, 2010 PIXHAWK PROJECT  <http://pixhawk.ethz.ch>
6

pixhawk's avatar
pixhawk committed
7
This file is part of the PIXHAWK project
8

pixhawk's avatar
pixhawk committed
9
10
11
12
    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.
13

pixhawk's avatar
pixhawk committed
14
15
16
17
    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.
18

pixhawk's avatar
pixhawk committed
19
20
    You should have received a copy of the GNU General Public License
    along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
21

pixhawk's avatar
pixhawk committed
22
======================================================================*/
23

pixhawk's avatar
pixhawk committed
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
 * @file
 *   @brief Manage communication links
 *
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *
 */

#ifndef _LINKMANAGER_H_
#define _LINKMANAGER_H_

#include <QThread>
#include <QList>
37
#include <QMultiMap>
38
#include <QMutex>
pixhawk's avatar
pixhawk committed
39
#include <LinkInterface.h>
40
#include <SerialLink.h>
pixhawk's avatar
pixhawk committed
41
42
43
44
45
46
47
48
#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.
 *
 **/
49
50
class LinkManager : public QObject
{
pixhawk's avatar
pixhawk committed
51
52
53
54
55
56
57
58
59
60
    Q_OBJECT

public:
    static LinkManager* instance();
    ~LinkManager();

    void run();

    QList<LinkInterface*> getLinksForProtocol(ProtocolInterface* protocol);

61
62
    ProtocolInterface* getProtocolForLink(LinkInterface* link);

pixhawk's avatar
pixhawk committed
63
64
65
66
67
68
    /** @brief Get the link for this id */
    LinkInterface* getLinkForId(int id);

    /** @brief Get a list of all links */
    const QList<LinkInterface*> getLinks();

69
70
71
    /** @brief Get a list of all serial links */
    const QList<SerialLink*> getSerialLinks();

72
    /** @brief Get a list of all protocols */
73
74
75
    const QList<ProtocolInterface*> getProtocols() {
        return protocolLinks.uniqueKeys();
    }
76

pixhawk's avatar
pixhawk committed
77
78
79
80
81
public slots:

    void add(LinkInterface* link);
    void addProtocol(LinkInterface* link, ProtocolInterface* protocol);

82
    void removeObj(QObject* obj);
83
84
    bool removeLink(LinkInterface* link);

pixhawk's avatar
pixhawk committed
85
86
87
88
89
90
91
92
93
    bool connectAll();
    bool connectLink(LinkInterface* link);

    bool disconnectAll();
    bool disconnectLink(LinkInterface* link);

protected:
    LinkManager();
    QList<LinkInterface*> links;
94
    QMultiMap<ProtocolInterface*,LinkInterface*> protocolLinks;
95
    QMutex dataMutex;
pixhawk's avatar
pixhawk committed
96
97
98
99
100
101

private:
    static LinkManager* _instance;

signals:
    void newLink(LinkInterface* link);
102
    void linkRemoved(LinkInterface* link);
pixhawk's avatar
pixhawk committed
103
104
105
106

};

#endif // _LINKMANAGER_H_