diff options
author | Kari Oikarinen <kari.oikarinen@qt.io> | 2016-11-16 16:14:58 +0200 |
---|---|---|
committer | Kari Oikarinen <kari.oikarinen@qt.io> | 2016-11-21 13:52:44 +0000 |
commit | a78c8070594bb6827620c3c0ff09a5d06daf69bc (patch) | |
tree | 010a91893257f19f5c50fde5d7e16263a6c6b18e | |
parent | adbb8ba3eb8d6f0203b9d5e5246f9cf67990af9d (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.cpp | 57 | ||||
-rw-r--r-- | qdbd/configuration.h | 42 | ||||
-rw-r--r-- | qdbd/handshakeexecutor.cpp | 24 | ||||
-rw-r--r-- | qdbd/main.cpp | 13 | ||||
-rw-r--r-- | qdbd/qdbd.pro | 2 | ||||
-rw-r--r-- | qdbd/usb-gadget/usbgadget.cpp | 9 |
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}, |