File: mediaendpoint.h

package info (click to toggle)
bluez-qt 5.62.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 1,708 kB
  • sloc: cpp: 14,071; xml: 424; ansic: 318; sh: 22; makefile: 9
file content (155 lines) | stat: -rw-r--r-- 4,407 bytes parent folder | download
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
 * BluezQt - Asynchronous BlueZ wrapper library
 *
 * Copyright (C) 2018 Manuel Weichselbaumer <mincequi@web.de>
 *
 * 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; either
 * version 2.1 of the License, or (at your option) version 3, or any
 * later version accepted by the membership of KDE e.V. (or its
 * successor approved by the membership of KDE e.V.), which shall
 * act as a proxy defined in Section 6 of version 3 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, see <http://www.gnu.org/licenses/>.
 */

#ifndef BLUEZQT_MEDIAENDPOINT_H
#define BLUEZQT_MEDIAENDPOINT_H

#include <QObject>

#include "bluezqt_export.h"
#include "request.h"

class QDBusObjectPath;

namespace BluezQt
{

/**
 * @class BluezQt::MediaEndpoint MediaEndpoint.h <BluezQt/MediaEndpoint>
 *
 * Bluetooth MediaEndpoint.
 *
 * This class represents a Bluetooth MediaEndpoint.
 */
class BLUEZQT_EXPORT MediaEndpoint : public QObject
{
    Q_OBJECT

public:
    /** Role which this MediaEndpoint acts as. */
    enum class Role {
        AudioSource,
        AudioSink
    };

    // KF6 TODO: use types from mediatypes.h
    /** Codec which this MediaEndpoint supports. */
    enum class Codec {
        Sbc,
        Aac
    };

    /** Configuration for MediaEndpoint construction. */
    struct Configuration {
        Role role;
        Codec codec;
    };

    /**
     * Creates a new MediaEndpoint object.
     *
     * @param parent
     */
    explicit MediaEndpoint(const Configuration &configuration, QObject *parent = nullptr);

    /**
     * Destroys a MediaEndpoint object.
     */
    ~MediaEndpoint();

    /**
     * D-Bus object path of the MediaEndpoint.
     *
     * The path where the MediaEndpoint will be registered.
     *
     * @note You must provide valid object path!
     *
     * @return object path of MediaEndpoint
     */
    virtual QDBusObjectPath objectPath() const;

    /**
     * Properties of the endpoint.
     *
     * @return Properties of the endpoint
     */
    virtual const QVariantMap &properties() const;

    /**
     * Set configuration for the transport.
     *
     * @param transport transport to be configured
     * @param properties properties to be set for transport
     */
    virtual void setConfiguration(const QString &transportObjectPath, const QVariantMap &properties);

    /**
     * Select preferable configuration from the supported capabilities.
     *
     * @note There is no need to cache the selected configuration since on success
     *       the configuration is send back as parameter of SetConfiguration.
     *
     * @param capabilities supported capabilities
     * @param request request to be used for sending reply
     */
    virtual void selectConfiguration(const QByteArray &capabilities, const Request<QByteArray> &request);

    /**
     * Clear transport configuration.
     */
    virtual void clearConfiguration(const QString &transportObjectPath);

    /**
     * Indicates that the MediaEndpoint was unregistered.
     *
     * This method gets called when the Bluetooth daemon
     * unregisters the MediaEndpoint.
     *
     * An MediaEndpoint can use it to do cleanup tasks. There is no need
     * to unregister the MediaEndpoint, because when this method gets called
     * it has already been unregistered.
     */
    virtual void release();

Q_SIGNALS:
    /**
     * Indicates that configuration was selected.
     */
    void configurationSelected(const QByteArray &capabilities, const QByteArray &configuration);

    /**
     * Indicates that configuration was set for transport.
     */
    void configurationSet(const QString &transportObjectPath, const QVariantMap &properties);

    /**
     * Indicates that configuration was cleared for transport.
     */
    void configurationCleared(const QString &transportObjectPath);

private:
    class MediaEndpointPrivate *const d;
};

} // namespace BluezQt

#endif // BLUEZQT_MEDIAENDPOINT_H