summaryrefslogtreecommitdiffstats
path: root/tools/runonphone/serenum_win.cpp
diff options
context:
space:
mode:
authorShane Kearns <shane.kearns@accenture.com>2009-12-18 17:24:56 (GMT)
committerShane Kearns <shane.kearns@sosco.com>2009-12-21 15:08:52 (GMT)
commitf61a32948da3cac4b83123267ae8c5d2fa0525f6 (patch)
tree18cc0b85c785ecc0a59fc5d1a3ec8dc463ad007b /tools/runonphone/serenum_win.cpp
parent4d20d1f9a307b8c3b032fd548bdfd077a91440f3 (diff)
downloadQt-f61a32948da3cac4b83123267ae8c5d2fa0525f6.zip
Qt-f61a32948da3cac4b83123267ae8c5d2fa0525f6.tar.gz
Qt-f61a32948da3cac4b83123267ae8c5d2fa0525f6.tar.bz2
Tool for launching symbian apps on the phone from windows command line
The tool uses TRK to launch the application. TRK is a debug agent, available as a signed package for consumer phones. For Nokia phones, it is distributed with carbide; for other manufacturers it can be downloaded from their developer websites. The launcher code is reused from Qt creator, with a patch to allow us to pass command line arguments to the process being launched. The "make run" target is enhanced to support running on target as well as the emulator. Like the "make sis" target, the last platform to have been built is the one that will be launched. The runonphone tool needs to be built in a Qt environment configured for windows, and requires at least windows XP (Symbian development requires windows XP SP2). Current proposal is to include a statically linked exe in the bin directory for binary packages. Reviewed-by: Janne Koskinen
Diffstat (limited to 'tools/runonphone/serenum_win.cpp')
-rw-r--r--tools/runonphone/serenum_win.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/tools/runonphone/serenum_win.cpp b/tools/runonphone/serenum_win.cpp
new file mode 100644
index 0000000..1cf5789
--- /dev/null
+++ b/tools/runonphone/serenum_win.cpp
@@ -0,0 +1,101 @@
+/**************************************************************************
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+#include "serenum.h"
+#include <QByteArray>
+#include <QString>
+#include <QDebug>
+#include <windows.h>
+#include <windef.h>
+#include <setupapi.h>
+#include <devguid.h>
+#include <winreg.h>
+#include <shlwapi.h>
+
+//{4d36e978-e325-11ce-bfc1-08002be10318}
+//DEFINE_GUID(GUID_DEVCLASS_PORTS, 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+
+QList<SerialPortId> enumerateSerialPorts()
+{
+ DWORD index=0;
+ SP_DEVINFO_DATA info;
+ GUID guid = GUID_DEVCLASS_PORTS;
+ HDEVINFO infoset = SetupDiGetClassDevs(&guid, 0, 0, DIGCF_PRESENT);
+ QString valueName(16384, 0);
+ QList<SerialPortId> list;
+
+ for (index=0;;index++) {
+ ZeroMemory(&info, sizeof(SP_DEVINFO_DATA));
+ info.cbSize = sizeof(SP_DEVINFO_DATA);
+ if (!SetupDiEnumDeviceInfo(infoset, index, &info))
+ break;
+ QString friendlyName;
+ QString portName;
+ DWORD size=0;
+ SetupDiGetDeviceRegistryProperty(infoset, &info, SPDRP_FRIENDLYNAME, 0, 0, 0, &size);
+ QByteArray ba(size, 0);
+ if(SetupDiGetDeviceRegistryProperty(infoset, &info, SPDRP_FRIENDLYNAME, 0, (BYTE*)(ba.data()), size, 0)) {
+ friendlyName = QString((const QChar*)(ba.constData()), ba.size() / 2 - 1);
+ }
+ HKEY key = SetupDiOpenDevRegKey(infoset, &info, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
+ if(key != INVALID_HANDLE_VALUE) {
+#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
+ //RegGetValue not supported on XP, SHRegGetValue not supported by mingw :(
+ for (DWORD dwi=0;;dwi++) {
+ DWORD vsize = valueName.size();
+ if (ERROR_SUCCESS == RegEnumValue(key, dwi, (WCHAR*)(valueName.data()), &vsize, 0, 0, 0, &size)) {
+ if (valueName.startsWith("PortName")) {
+ QByteArray ba(size, 0);
+ vsize = valueName.size();
+ if(ERROR_SUCCESS == RegEnumValue(key, dwi, (WCHAR*)(valueName.data()), &vsize, 0, 0, (BYTE*)(ba.data()), &size)) {
+ portName = QString((const QChar*)(ba.constData()), ba.size() / 2 - 1);
+ }
+ }
+ } else {
+ break;
+ }
+ }
+#else
+ if (ERROR_SUCCESS == SHRegGetValue(key, 0, "PortName", SRRF_RT_REG_SZ, 0, &size)) {
+ QByteArray ba(size, 0);
+ if (ERROR_SUCCESS == RegGetValue(key, 0, "PortName", SRRF_RT_REG_SZ, (BYTE*)(ba.data()), &size)) {
+ portName = QString((const QChar*)(ba.constData()), ba.size() / 2 - 1);
+ }
+ }
+#endif
+ RegCloseKey(key);
+ }
+ SerialPortId id;
+ id.portName = portName;
+ id.friendlyName = friendlyName;
+ list.append(id);
+ }
+ SetupDiDestroyDeviceInfoList(infoset);
+ return list;
+}
+