You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.0 KiB
C++
109 lines
3.0 KiB
C++
/*
|
|
SPDX-FileCopyrightText: 2014-2015 Harald Sitter <sitter@kde.org>
|
|
|
|
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
|
*/
|
|
|
|
#ifndef CARD_H
|
|
#define CARD_H
|
|
|
|
#include <pulse/introspect.h>
|
|
|
|
#include <QMap>
|
|
#include <QVariant>
|
|
|
|
#include "port.h"
|
|
#include "profile.h"
|
|
#include "pulseobject.h"
|
|
|
|
namespace QPulseAudio
|
|
{
|
|
class CardPort : public Port
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QVariantMap properties READ properties NOTIFY propertiesChanged)
|
|
public:
|
|
explicit CardPort(QObject *parent = nullptr)
|
|
: Port(parent)
|
|
{
|
|
}
|
|
~CardPort() override
|
|
{
|
|
}
|
|
|
|
// int direction; /**< A #pa_direction enum, indicating the direction of this port. */
|
|
// uint32_t n_profiles; /**< Number of entries in profile array */
|
|
// pa_card_profile_info** profiles; /**< \deprecated Superseded by profiles2 */
|
|
// int64_t latency_offset; /**< Latency offset of the port that gets added to the sink/source latency when the port is active. \since 3.0 */
|
|
// pa_card_profile_info2** profiles2; /**< Array of pointers to available profiles, or NULL. Array is terminated by an entry set to NULL. \since 5.0 */
|
|
|
|
void update(const pa_card_port_info *info)
|
|
{
|
|
setInfo(info);
|
|
|
|
QVariantMap properties;
|
|
void *it = nullptr;
|
|
while (const char *key = pa_proplist_iterate(info->proplist, &it)) {
|
|
Q_ASSERT(key);
|
|
const char *value = pa_proplist_gets(info->proplist, key);
|
|
if (!value) {
|
|
qCDebug(PLASMAPA) << "property" << key << "not a string";
|
|
continue;
|
|
}
|
|
Q_ASSERT(value);
|
|
properties.insert(QString::fromUtf8(key), QString::fromUtf8(value));
|
|
}
|
|
|
|
if (m_properties != properties) {
|
|
m_properties = properties;
|
|
Q_EMIT propertiesChanged();
|
|
}
|
|
}
|
|
|
|
QVariantMap properties() const
|
|
{
|
|
return m_properties;
|
|
}
|
|
|
|
Q_SIGNALS:
|
|
void propertiesChanged();
|
|
|
|
private:
|
|
QVariantMap m_properties;
|
|
};
|
|
|
|
class Card : public PulseObject
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QString name READ name NOTIFY nameChanged)
|
|
Q_PROPERTY(QList<QObject *> profiles READ profiles NOTIFY profilesChanged)
|
|
Q_PROPERTY(quint32 activeProfileIndex READ activeProfileIndex WRITE setActiveProfileIndex NOTIFY activeProfileIndexChanged)
|
|
Q_PROPERTY(QList<QObject *> ports READ ports NOTIFY portsChanged)
|
|
public:
|
|
explicit Card(QObject *parent);
|
|
|
|
void update(const pa_card_info *info);
|
|
|
|
QString name() const;
|
|
QList<QObject *> profiles() const;
|
|
quint32 activeProfileIndex() const;
|
|
void setActiveProfileIndex(quint32 profileIndex);
|
|
QList<QObject *> ports() const;
|
|
|
|
Q_SIGNALS:
|
|
void nameChanged();
|
|
void profilesChanged();
|
|
void activeProfileIndexChanged();
|
|
void portsChanged();
|
|
|
|
private:
|
|
QString m_name;
|
|
QList<QObject *> m_profiles;
|
|
quint32 m_activeProfileIndex = -1;
|
|
QList<QObject *> m_ports;
|
|
};
|
|
|
|
} // QPulseAudio
|
|
|
|
#endif // CARD_H
|