summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKari Oikarinen <kari.oikarinen@qt.io>2016-11-16 16:14:58 +0200
committerKari Oikarinen <kari.oikarinen@qt.io>2016-11-21 13:52:44 +0000
commita78c8070594bb6827620c3c0ff09a5d06daf69bc (patch)
tree010a91893257f19f5c50fde5d7e16263a6c6b18e
parentadbb8ba3eb8d6f0203b9d5e5246f9cf67990af9d (diff)
Allow configuring previously hardcoded paths in qdbd
Instead of hardcoding, allow giving as command line options: - Directory to the USB Function File System endpoints to use - Location of the configfs gadget configuration - Name of the Function File System function that provides RNDIS Task-number: QTBUG-56987 Change-Id: Idebd4888effc6adee7568ef4911141a9bcb40dc4 Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
-rw-r--r--qdbd/configuration.cpp57
-rw-r--r--qdbd/configuration.h42
-rw-r--r--qdbd/handshakeexecutor.cpp24
-rw-r--r--qdbd/main.cpp13
-rw-r--r--qdbd/qdbd.pro2
-rw-r--r--qdbd/usb-gadget/usbgadget.cpp9
6 files changed, 135 insertions, 12 deletions
diff --git a/qdbd/configuration.cpp b/qdbd/configuration.cpp
new file mode 100644
index 0000000..3a3e825
--- /dev/null
+++ b/qdbd/configuration.cpp
@@ -0,0 +1,57 @@
+/******************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Debug Bridge.
+**
+** $QT_BEGIN_LICENSE:COMM$
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** $QT_END_LICENSE$
+**
+******************************************************************************/
+#include "configuration.h"
+
+#include <QtCore/qdir.h>
+
+QString Configuration::functionFsDir()
+{
+ return s_functionFsDir;
+}
+
+QString Configuration::gadgetConfigFsDir()
+{
+ return s_gadgetConfigFsDir;
+}
+
+QString Configuration::rndisFunctionName()
+{
+ return s_rndisFunctionName;
+}
+
+void Configuration::setFunctionFsDir(const QString &path)
+{
+ s_functionFsDir = QDir::cleanPath(path);
+}
+
+void Configuration::setGadgetConfigFsDir(const QString &path)
+{
+ s_gadgetConfigFsDir = QDir::cleanPath(path);
+}
+
+void Configuration::setRndisFunctionName(const QString &name)
+{
+ s_rndisFunctionName = name;
+}
+
+QString Configuration::s_functionFsDir = "/dev/usb-ffs/qdb";
+QString Configuration::s_gadgetConfigFsDir = "/sys/kernel/config/usb_gadget/g1";
+QString Configuration::s_rndisFunctionName = "rndis.usb0";
diff --git a/qdbd/configuration.h b/qdbd/configuration.h
new file mode 100644
index 0000000..8a4c32f
--- /dev/null
+++ b/qdbd/configuration.h
@@ -0,0 +1,42 @@
+/******************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Debug Bridge.
+**
+** $QT_BEGIN_LICENSE:COMM$
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** $QT_END_LICENSE$
+**
+******************************************************************************/
+#ifndef CONFIGURATION_H
+#define CONFIGURATION_H
+
+#include <QtCore/qstring.h>
+
+class Configuration
+{
+public:
+ static QString functionFsDir();
+ static QString gadgetConfigFsDir();
+ static QString rndisFunctionName();
+ static void setFunctionFsDir(const QString &path);
+ static void setGadgetConfigFsDir(const QString &path);
+ static void setRndisFunctionName(const QString &name);
+
+private:
+ static QString s_functionFsDir;
+ static QString s_gadgetConfigFsDir;
+ static QString s_rndisFunctionName;
+};
+
+#endif // CONFIGURATION_H
diff --git a/qdbd/handshakeexecutor.cpp b/qdbd/handshakeexecutor.cpp
index f40ff97..45149f1 100644
--- a/qdbd/handshakeexecutor.cpp
+++ b/qdbd/handshakeexecutor.cpp
@@ -20,19 +20,25 @@
******************************************************************************/
#include "handshakeexecutor.h"
+#include "configuration.h"
#include "libqdb/stream.h"
#include <QtCore/qdebug.h>
#include <QtCore/qfile.h>
#include <QtNetwork/qnetworkinterface.h>
-const QString gadgetConfigFsPath = "/sys/kernel/config/usb_gadget/g1/";
+QString rndisFunctionPath()
+{
+ return Configuration::gadgetConfigFsDir() + "/functions/" + Configuration::rndisFunctionName();
+}
QString deviceIpAddress()
{
- QFile file{gadgetConfigFsPath + "functions/rndis.usb0/ifname"};
- if (!file.open(QIODevice::ReadOnly))
+ QFile file{rndisFunctionPath() + "/ifname"};
+ if (!file.open(QIODevice::ReadOnly)) {
+ qCritical() << "Could not find network interface name from RNDIS configuration at" << rndisFunctionPath();
return "";
+ }
const auto interfaceName = QString{file.readAll()}.trimmed();
const auto interface = QNetworkInterface::interfaceFromName(interfaceName);
@@ -50,17 +56,21 @@ QString deviceIpAddress()
QString deviceSerial()
{
- QFile file{gadgetConfigFsPath + "strings/0x409/serialnumber"};
- if (!file.open(QIODevice::ReadOnly))
+ QFile file{Configuration::gadgetConfigFsDir() + "/strings/0x409/serialnumber"};
+ if (!file.open(QIODevice::ReadOnly)) {
+ qCritical() << "Could not find device serial number from configfs configuration at" << Configuration::gadgetConfigFsDir();
return "";
+ }
return QString{file.readAll()}.trimmed();
}
QString hostSideMac()
{
- QFile file{gadgetConfigFsPath + "functions/rndis.usb0/host_addr"};
- if (!file.open(QIODevice::ReadOnly))
+ QFile file{rndisFunctionPath() + "/host_addr"};
+ if (!file.open(QIODevice::ReadOnly)) {
+ qCritical() << "Could not find host MAC address from RNDIS configuration at" << rndisFunctionPath();
return "";
+ }
return QString{file.readAll()}.trimmed();
}
diff --git a/qdbd/main.cpp b/qdbd/main.cpp
index 17397ac..f7b289c 100644
--- a/qdbd/main.cpp
+++ b/qdbd/main.cpp
@@ -18,6 +18,7 @@
** $QT_END_LICENSE$
**
******************************************************************************/
+#include "configuration.h"
#include "libqdb/protocol/qdbtransport.h"
#include "usb-gadget/usbgadget.h"
#include "server.h"
@@ -35,8 +36,20 @@ int main(int argc, char *argv[])
parser.addHelpOption();
parser.addOption({"debug-transport", "Show each transmitted message"});
parser.addOption({"debug-connection", "Show enqueued messages"});
+ parser.addOption({"ffs-dir", "Directory to the USB Function File System endpoints to use", "directory"});
+ parser.addOption({"gadget-configfs-dir",
+ "Location of the configfs gadget configuration (including the gadget name)",
+ "directory"});
+ parser.addOption({"rndis-function-name", "Name of the Function File System function that provides RNDIS", "name"});
parser.process(app);
+ if (parser.isSet("ffs-dir"))
+ Configuration::setFunctionFsDir(parser.value("ffs-dir"));
+ if (parser.isSet("gadget-configfs-dir"))
+ Configuration::setGadgetConfigFsDir(parser.value("gadget-configfs-dir"));
+ if (parser.isSet("rndis-function-name"))
+ Configuration::setRndisFunctionName(parser.value("rndis-function-name"));
+
QString filterRules;
if (!parser.isSet("debug-transport")) {
filterRules.append("transport=false\n");
diff --git a/qdbd/qdbd.pro b/qdbd/qdbd.pro
index 929d753..c055aaa 100644
--- a/qdbd/qdbd.pro
+++ b/qdbd/qdbd.pro
@@ -10,6 +10,7 @@ CONFIG -= app_bundle
TEMPLATE = app
SOURCES += \
+ configuration.cpp \
createexecutor.cpp \
echoexecutor.cpp \
executor.cpp \
@@ -21,6 +22,7 @@ SOURCES += \
usb-gadget/usbgadgetwriter.cpp \
HEADERS += \
+ configuration.h \
createexecutor.h \
echoexecutor.h \
executor.h \
diff --git a/qdbd/usb-gadget/usbgadget.cpp b/qdbd/usb-gadget/usbgadget.cpp
index d660b22..0b1b530 100644
--- a/qdbd/usb-gadget/usbgadget.cpp
+++ b/qdbd/usb-gadget/usbgadget.cpp
@@ -20,6 +20,7 @@
******************************************************************************/
#include "usbgadget.h"
+#include "configuration.h"
#include "libqdb/make_unique.h"
#include "libqdb/qdbconstants.h"
#include "usb-gadget/usbgadgetreader.h"
@@ -105,12 +106,10 @@ const struct {
},
};
-const QString usbFunctionFsPath = "/dev/usb-ffs/qdb/";
-
UsbGadget::UsbGadget()
- : m_controlEndpoint(usbFunctionFsPath + "ep0"),
- m_outEndpoint(usbFunctionFsPath + "ep1"),
- m_inEndpoint(usbFunctionFsPath + "ep2"),
+ : m_controlEndpoint(Configuration::functionFsDir() + "/ep0"),
+ m_outEndpoint(Configuration::functionFsDir() + "/ep1"),
+ m_inEndpoint(Configuration::functionFsDir() + "/ep2"),
m_readThread{nullptr},
m_writeThread{nullptr},
m_reader{nullptr},