1/*
2 * BluezQt - Asynchronous BlueZ wrapper library
3 *
4 * SPDX-FileCopyrightText: 2019 Manuel Weichselbaumer <mincequi@web.de>
5 *
6 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8
9#ifndef BLUEZQT_MEDIATRANSPORT_H
10#define BLUEZQT_MEDIATRANSPORT_H
11
12#include <QObject>
13
14#include "bluezqt_export.h"
15#include "mediatypes.h"
16#include "tpendingcall.h"
17
18#include <memory>
19
20namespace BluezQt
21{
22class PendingCall;
23
24/*!
25 * \inmodule BluezQt
26 * \class BluezQt::MediaTransport
27 * \inheaderfile BluezQt/MediaTransport
28 * \brief Media transport.
29 *
30 * This class represents a media transport interface.
31 */
32class BLUEZQT_EXPORT MediaTransport : public QObject
33{
34 Q_OBJECT
35 /*! \property BluezQt::MediaTransport::state */
36 Q_PROPERTY(State state READ state NOTIFY stateChanged)
37 /*! \property BluezQt::MediaTransport::volume */
38 Q_PROPERTY(quint16 volume READ volume NOTIFY volumeChanged)
39
40public:
41 /*!
42 * \enum BluezQt::MediaTransport::State
43 * \brief Indicates the state of the transport.
44 * \value Idle
45 * \value Pending
46 * \value Active
47 */
48 enum class State {
49 Idle,
50 Pending,
51 Active,
52 };
53 Q_ENUM(State)
54
55 ~MediaTransport() override;
56
57 /*!
58 * Returns the (audio) configuration of the transport.
59 */
60 AudioConfiguration audioConfiguration() const;
61
62 /*!
63 * Returns the state of the transport.
64 */
65 State state() const;
66
67 /*!
68 * Returns the volume of the transport.
69 *
70 * The volume is a percentage of the maximum. The value 0x00 corresponds to 0%.
71 * The value 0x7F corresponds to 100%. Scaling should be applied to achieve
72 * values between these two.
73 *
74 * The existence of this scale does not impose any
75 * restriction on the granularity of the volume control scale on the target.
76 *
77 * As this command specifies a percentage rather than an absolute dB level
78 * the controller should exercise caution when sending this command.
79 */
80 quint16 volume() const;
81
82 /*!
83 * Sets the \a volume of the transport.
84 *
85 * Only works when the transport was acquired by the sender.
86 *
87 * The volume of the transport should be within the range [0x00..0x7F] (0-127)
88 *
89 * Returns void pending call.
90 * \since 6.6
91 */
92 PendingCall *setVolume(quint16 volume);
93
94public Q_SLOTS:
95 /*!
96 * Acquires the transport file descriptor and the MTU for read
97 * and write respectively.
98 *
99 * Possible errors:
100 *
101 * \list
102 * \li PendingCall::NotAuthorized
103 * \li PendingCall::Failed
104 * \endlist
105 *
106 * Returns <fd, uint16, uint16> pending call.
107 */
108 TPendingCall<QDBusUnixFileDescriptor, uint16_t, uint16_t> *acquire();
109
110 /*!
111 * Acquire transport file descriptor only if the transport
112 * is in "pending" state at the time the message is
113 * received by BlueZ. Otherwise no request will be sent
114 * to the remote device and the function will just fail
115 * with org.bluez.Error.NotAvailable.
116 *
117 * Possible errors:
118 *
119 * \list
120 * \li PendingCall::NotAuthorized
121 * \li PendingCall::Failed
122 * \li PendingCall::NotAvailable
123 * \endlist
124 *
125 * Returns <fd, uint16, uint16> pending call.
126 */
127 TPendingCall<QDBusUnixFileDescriptor, uint16_t, uint16_t> *tryAcquire();
128
129 /*!
130 * Releases file descriptor.
131 */
132 TPendingCall<void> *release();
133
134Q_SIGNALS:
135 /*!
136 * Indicates that the transport's \a state has changed.
137 */
138 void stateChanged(State state);
139
140 /*!
141 * Indicates that the transport's \a volume has changed.
142 */
143 void volumeChanged(quint16 volume);
144
145private:
146 BLUEZQT_NO_EXPORT explicit MediaTransport(const QString &path, const QVariantMap &properties);
147
148 std::unique_ptr<class MediaTransportPrivate> const d;
149
150 friend class MediaTransportPrivate;
151 friend class DevicePrivate;
152};
153
154} // namespace BluezQt
155
156#endif
157

source code of bluez-qt/src/mediatransport.h