File indexing completed on 2023-12-10 11:57:37

0001 /*
0002     SPDX-FileCopyrightText: 2014-2015 Harald Sitter <sitter@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #ifndef PA_DEVICE_H
0008 #define PA_DEVICE_H
0009 
0010 #include <QString>
0011 
0012 #include "port.h"
0013 #include "volumeobject.h"
0014 
0015 namespace PulseAudioQt
0016 {
0017 class Port;
0018 class DevicePrivate;
0019 
0020 /**
0021  * A PulseAudio device. Can be either a Sink or Source.
0022  */
0023 class PULSEAUDIOQT_EXPORT Device : public VolumeObject
0024 {
0025     Q_OBJECT
0026     Q_PROPERTY(State state READ state NOTIFY stateChanged)
0027     Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
0028     Q_PROPERTY(QString formFactor READ formFactor NOTIFY formFactorChanged)
0029     Q_PROPERTY(quint32 cardIndex READ cardIndex NOTIFY cardIndexChanged)
0030     Q_PROPERTY(QList<Port *> ports READ ports NOTIFY portsChanged)
0031     Q_PROPERTY(quint32 activePortIndex READ activePortIndex WRITE setActivePortIndex NOTIFY activePortIndexChanged)
0032     Q_PROPERTY(bool default READ isDefault WRITE setDefault NOTIFY defaultChanged)
0033 
0034 public:
0035     enum State {
0036         /** This state is used when the server does not support sink/source state introspection. */
0037         InvalidState = 0,
0038         /** Running, sink/source is playing/recording and used by at least one non-corked sink-input/source-output.  */
0039         RunningState,
0040         /** When idle, the sink/source is playing/recording but there is no non-corked sink-input/source-output attached to it. */
0041         IdleState,
0042         /** When suspended, actual sink/source access can be closed, for instance. */
0043         SuspendedState,
0044         UnknownState,
0045     };
0046     Q_ENUM(State);
0047 
0048     ~Device();
0049 
0050     /**
0051      * The state of this device.
0052      */
0053     State state() const;
0054 
0055     /**
0056      * A human readable description of this device.
0057      */
0058     QString description() const;
0059 
0060     /**
0061      * The device's form factor.
0062      * One of "internal", "speaker", "handset", "tv", "webcam", "microphone", "headset", "headphone", "hands-free", "car", "hifi", "computer", "portable".
0063      * This is based on PA_PROP_DEVICE_FORM_FACTOR.
0064      */
0065     QString formFactor() const;
0066 
0067     /**
0068      * Index of the card that owns this device.
0069      */
0070     quint32 cardIndex() const;
0071 
0072     /**
0073      * The ports associated with this device.
0074      */
0075     QList<Port *> ports() const;
0076 
0077     /**
0078      * The currently active port, by index.
0079      */
0080     quint32 activePortIndex() const;
0081 
0082     /**
0083      * Set the currently active port, by index.
0084      */
0085     virtual void setActivePortIndex(quint32 port_index) = 0;
0086 
0087     /**
0088      * Whether this is the default device.
0089      */
0090     virtual bool isDefault() const = 0;
0091 
0092     /**
0093      * Set whether this is the default device.
0094      */
0095     virtual void setDefault(bool enable) = 0;
0096 
0097 Q_SIGNALS:
0098     void stateChanged();
0099     void descriptionChanged();
0100     void formFactorChanged();
0101     void cardIndexChanged();
0102     void portsChanged();
0103     void activePortIndexChanged();
0104     void defaultChanged();
0105 
0106 protected:
0107     /** @private */
0108     explicit Device(QObject *parent);
0109     /** @private */
0110     DevicePrivate *d;
0111 
0112 private:
0113     friend class SinkPrivate;
0114     friend class SourcePrivate;
0115 };
0116 
0117 } // PulseAudioQt
0118 
0119 #endif // DEVICE_H