summaryrefslogtreecommitdiff
path: root/libresourceqt/src/resource-engine.h
blob: 66b37bd7cf831ba7ba318a6456dcfc95be3cd517 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*************************************************************************
This file is part of libresourceqt

Copyright (C) 2010 Nokia Corporation.

This library is free software; you can redistribute
it and/or modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation
version 2.1 of the License.

This library 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
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA.
*************************************************************************/

#ifndef RESOURCE_ENGINE_H
#define RESOURCE_ENGINE_H

#include <QObject>
#include <QMap>
#include <QString>
#include <dbus/dbus.h>
#include <res-conn.h>
#include <policy/resource-set.h>
#include <dbusconnectioneventloop.h>

namespace ResourcePolicy {

quint32 resourceTypeToLibresourceType(ResourceType type);

class ResourceEngine: public QObject
{
    Q_OBJECT
    Q_DISABLE_COPY( ResourceEngine )
#ifdef TEST_RESOURCE_ENGINE_H
    friend class ::TestResourceEngine;
#endif

public:
    ResourceEngine(ResourceSet *resourceSet);
    ~ResourceEngine();

    bool initialize();

    bool connectToManager();
    bool disconnectFromManager();
    bool isConnectedToManager();
    bool isConnectingToManager();

    bool acquireResources();
    bool releaseResources();
    bool updateResources();

    bool registerAudioProperties(const QString &audioGroup, quint32 pid,
                                  const QString &name, const QString &value);

    void handleConnectionIsUp(resconn_t *connection);

    void disconnected();
    void receivedGrant(resmsg_notify_t *notifyMessage);
    void receivedAdvice(resmsg_notify_t *notifyMessage);

    void handleStatusMessage(quint32 requestNo);
    void handleError(quint32 requestNo, qint32 code, const char *message);

    quint32 id();
    bool toBeDeleted();

signals:
    void resourcesBecameAvailable(quint32 bitmaskOfAvailableResources);
    void resourcesGranted(quint32 bitmaskOfGrantedResources);
    void resourcesDenied();
    void resourcesReleased();
    void resourcesLost(quint32 bitmaskOfGrantedResources);
    void connectedToManager();
    void disconnectedFromManager();
    void errorCallback(quint32 code, const char* );

private:
    bool connected;
    ResourceSet *resourceSet;
    DBusConnection *dbusConnection;
    resset_t *libresourceSet;
    quint32 requestId;
    QMap<quint32, resmsg_type_t> messageMap;
    quint32 connectionMode;
    static quint32 libresourceUsers;
    static resconn_t *libresourceConnection;
    quint32 identifier;
    bool aboutToBeDeleted;
    bool isConnecting;
};
}

#endif