From cd5e75810d59ab6e92c88189015aee77448160e4 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 20 Jan 2010 16:30:37 +0100 Subject: 1st attempt at USB serial port enumerator for linux Enumerate the ACM ports which are created in /dev after plugging in the phone. Tested on Kubuntu (karmic koala), using 5800XM and N95. Linux has two USB drivers of interest. 1: CDC-ACM, this loads automatically, and creates /dev/ttyACM for the USB modem interface 2: USBSERIAL, this needs to be loaded manually using modprobe, and creates /dev/ttyUSB for each ACM interface on the phone The second ttyUSB port is the one we need, this enumerator does not pick the correct port yet. (1st port is ECACM:0, i.e. the modem, 2nd port is ECACM:1, i.e. the general purpose port used by TRK) according to lsusb, the 1st ACM descriptor has: class 2 (comms) subclass 2 (abstract - modem) protocol 1 (AT commands) 2nd ACM descriptor has: class 2 (comms) subclass 2 (abstract - modem) protocol 255 (vendor specific) Linux 2.6.33 RC3 has a hardcoded list of nokia phones in cdc-acm.c for which the protocol 255 ACM port will be recognised as a second ttyACM Task-number: QTBUG-7446 Reviewed-by: Miikka Heikkinen --- tools/runonphone/main.cpp | 4 +++ tools/runonphone/runonphone.pro | 6 ++++ tools/runonphone/serenum_stub.cpp | 53 ++++++++++++++++++++++++++++++++ tools/runonphone/serenum_unix.cpp | 64 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 tools/runonphone/serenum_stub.cpp create mode 100644 tools/runonphone/serenum_unix.cpp diff --git a/tools/runonphone/main.cpp b/tools/runonphone/main.cpp index d8c306f..c7fc43f 100644 --- a/tools/runonphone/main.cpp +++ b/tools/runonphone/main.cpp @@ -175,7 +175,11 @@ int main(int argc, char *argv[]) } if(loglevel > 0) outstream << "Connecting to target via " << serialPortName << endl; +#ifdef Q_OS_WIN launcher->setTrkServerName(QString("\\\\.\\") + serialPortName); +#else + launcher->setTrkServerName(serialPortName); +#endif launcher->setFileName(QString("c:\\sys\\bin\\") + exeFile); launcher->setCommandLineArgs(cmdLine); diff --git a/tools/runonphone/runonphone.pro b/tools/runonphone/runonphone.pro index cf0c055..cb27d1b 100644 --- a/tools/runonphone/runonphone.pro +++ b/tools/runonphone/runonphone.pro @@ -18,3 +18,9 @@ windows { -luuid \ -ladvapi32 } +unix:!symbian { + SOURCES += serenum_unix.cpp +} +else { + SOURCES += serenum_stub.cpp +} diff --git a/tools/runonphone/serenum_stub.cpp b/tools/runonphone/serenum_stub.cpp new file mode 100644 index 0000000..f39765e --- /dev/null +++ b/tools/runonphone/serenum_stub.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "serenum.h" +#include +#include +#include + +QList enumerateSerialPorts() +{ + QList list; + qWarning() << "enumerateSerialPorts not implemented" << endl; + return list; +} + diff --git a/tools/runonphone/serenum_unix.cpp b/tools/runonphone/serenum_unix.cpp new file mode 100644 index 0000000..ca6c437 --- /dev/null +++ b/tools/runonphone/serenum_unix.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "serenum.h" +#include +#include +#include +#include +#include + +QList enumerateSerialPorts() +{ + QList list; + QDir dir("/dev/serial/by-id/"); + QFileInfoList ports(dir.entryInfoList()); + foreach(QFileInfo info, ports) { + if (!info.isDir()) { + SerialPortId id; + id.friendlyName = info.fileName(); + id.portName = info.canonicalFilePath(); + list << id; + } + } + return list; +} + -- cgit v0.12