Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[usb] Add api for the available modes property. Contributes to JB#33745
  • Loading branch information
adenexter committed Aug 8, 2017
1 parent 97d8c03 commit 3b3406e
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
48 changes: 48 additions & 0 deletions src/qusbmoded.cpp
Expand Up @@ -41,6 +41,7 @@
#define USB_MODED_CALL_GET_CONFIG (0x02)
#define USB_MODED_CALL_MODE_REQUEST (0x04)
#define USB_MODED_CALL_GET_HIDDEN (0x08)
#define USB_MODED_CALL_GET_AVAILABLE_MODES (0x10)

class QUsbModed::Private
{
Expand All @@ -49,6 +50,7 @@ class QUsbModed::Private
static const QString UsbModeKeyMode;

QStringList iSupportedModes;
QStringList iAvailableModes;
QStringList iHiddenModes;
QString iConfigMode;
QString iCurrentMode;
Expand Down Expand Up @@ -99,6 +101,11 @@ QStringList QUsbModed::supportedModes() const
return iPrivate->iSupportedModes;
}

QStringList QUsbModed::availableModes() const
{
return iPrivate->iAvailableModes;
}

QStringList QUsbModed::hiddenModes() const
{
return iPrivate->iHiddenModes;
Expand Down Expand Up @@ -201,6 +208,10 @@ void QUsbModed::setup()
connect(iPrivate->iInterface,
SIGNAL(sig_usb_supported_modes_ind(QString)),
SLOT(onUsbSupportedModesChanged(QString)));
connect(iPrivate->iInterface,
&QUsbModedInterface::sig_usb_available_modes_ind,
this,
&QUsbModed::updateAvailableModes);
connect(iPrivate->iInterface,
SIGNAL(sig_usb_hidden_modes_ind(QString)),
SLOT(onUsbHiddenModesChanged(QString)));
Expand All @@ -215,6 +226,13 @@ void QUsbModed::setup()
SIGNAL(finished(QDBusPendingCallWatcher*)),
SLOT(onGetModesFinished(QDBusPendingCallWatcher*)));

iPrivate->iPendingCalls |= USB_MODED_CALL_GET_AVAILABLE_MODES;
connect(new QDBusPendingCallWatcher(
iPrivate->iInterface->get_available_modes(), iPrivate->iInterface),
&QDBusPendingCallWatcher::finished,
this,
&QUsbModed::onGetAvailableModesFinished);

iPrivate->iPendingCalls |= USB_MODED_CALL_GET_CONFIG;
connect(new QDBusPendingCallWatcher(
iPrivate->iInterface->get_config(), iPrivate->iInterface),
Expand Down Expand Up @@ -249,6 +267,21 @@ void QUsbModed::onGetModesFinished(QDBusPendingCallWatcher* aCall)
setupCallFinished(USB_MODED_CALL_GET_MODES);
}

void QUsbModed::onGetAvailableModesFinished(QDBusPendingCallWatcher* aCall)
{
QDBusPendingReply<QString> reply(*aCall);
QString modes;
if (!reply.isError()) {
modes = reply.value();
DEBUG_(modes);
} else {
DEBUG_(reply.error());
}
updateAvailableModes(modes);
aCall->deleteLater();
setupCallFinished(USB_MODED_CALL_GET_AVAILABLE_MODES);
}

void QUsbModed::onGetConfigFinished(QDBusPendingCallWatcher* aCall)
{
QDBusPendingReply<QString> reply(*aCall);
Expand Down Expand Up @@ -332,6 +365,21 @@ void QUsbModed::updateSupportedModes(QString aModes)
}
}

void QUsbModed::updateAvailableModes(const QString &aModes)
{
const QStringList result = aModes.split(',', QString::SkipEmptyParts);
const int n = result.count();
QStringList modes;
for (int i=0; i<n; i++) {
QString mode(result.at(i).trimmed());
if (!modes.contains(mode)) modes.append(mode);
}
if (iPrivate->iAvailableModes != modes) {
iPrivate->iAvailableModes = modes;
Q_EMIT availableModesChanged();
}
}

void QUsbModed::setupCallFinished(int aCallId)
{
ASSERT_(iPrivate->iPendingCalls & aCallId);
Expand Down
5 changes: 5 additions & 0 deletions src/qusbmoded.h
Expand Up @@ -45,6 +45,7 @@ class QUSBMODED_EXPORT QUsbModed : public QUsbMode
Q_OBJECT
Q_PROPERTY(bool available READ available NOTIFY availableChanged)
Q_PROPERTY(QStringList supportedModes READ supportedModes NOTIFY supportedModesChanged)
Q_PROPERTY(QStringList availableModes READ availableModes NOTIFY availableModesChanged)
Q_PROPERTY(QStringList hiddenModes READ hiddenModes NOTIFY hiddenModesChanged)
Q_PROPERTY(QString currentMode READ currentMode WRITE setCurrentMode NOTIFY currentModeChanged)
Q_PROPERTY(QString configMode READ configMode WRITE setConfigMode NOTIFY configModeChanged)
Expand All @@ -55,6 +56,7 @@ class QUSBMODED_EXPORT QUsbModed : public QUsbMode

bool available() const;
QStringList supportedModes() const;
QStringList availableModes() const;
QString currentMode() const;
QString configMode() const;

Expand All @@ -70,6 +72,7 @@ public Q_SLOTS:
Q_SIGNALS:
void availableChanged();
void supportedModesChanged();
void availableModesChanged();
void currentModeChanged();
void configModeChanged();
void usbStateError(QString error);
Expand All @@ -81,6 +84,7 @@ private Q_SLOTS:
void onServiceRegistered(QString service);
void onServiceUnregistered(QString service);
void onGetModesFinished(QDBusPendingCallWatcher* call);
void onGetAvailableModesFinished(QDBusPendingCallWatcher *call);
void onGetConfigFinished(QDBusPendingCallWatcher* call);
void onGetModeRequestFinished(QDBusPendingCallWatcher* call);
void onSetModeFinished(QDBusPendingCallWatcher* call);
Expand All @@ -97,6 +101,7 @@ private Q_SLOTS:
void setup();
void setupCallFinished(int callId);
void updateSupportedModes(QString modes);
void updateAvailableModes(const QString &modes);
void updateHiddenModes(QString modes);

private:
Expand Down

0 comments on commit 3b3406e

Please sign in to comment.