| /**************************************************************************** |
| ** |
| ** Copyright (C) 2011 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$ |
| ** GNU Lesser General Public License Usage |
| ** 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. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU General |
| ** Public License version 3.0 as published by the Free Software Foundation |
| ** and appearing in the file LICENSE.GPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU General |
| ** Public License version 3.0 requirements will be met: |
| ** http://www.gnu.org/copyleft/gpl.html. |
| ** |
| ** Other Usage |
| ** Alternatively, this file may be used in accordance with the terms and |
| ** conditions contained in a signed written agreement between you and Nokia. |
| ** |
| ** |
| ** |
| ** |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #ifndef SYMBIANDEVICEMANAGER_H |
| #define SYMBIANDEVICEMANAGER_H |
| |
| #include "symbianutils_global.h" |
| |
| #include <QtCore/QObject> |
| #include <QtCore/QExplicitlySharedDataPointer> |
| #include <QtCore/QSharedPointer> |
| |
| QT_BEGIN_NAMESPACE |
| class QDebug; |
| class QTextStream; |
| QT_END_NAMESPACE |
| |
| namespace trk { |
| class TrkDevice; |
| } |
| |
| namespace SymbianUtils { |
| |
| struct SymbianDeviceManagerPrivate; |
| class SymbianDeviceData; |
| |
| enum DeviceCommunicationType { |
| SerialPortCommunication = 0, |
| BlueToothCommunication = 1 |
| }; |
| |
| // SymbianDevice: Explicitly shared device data and a TrkDevice |
| // instance that can be acquired (exclusively) for use. |
| // A device removal from the manager will result in the |
| // device being closed. |
| class SYMBIANUTILS_EXPORT SymbianDevice { |
| explicit SymbianDevice(SymbianDeviceData *data); |
| friend class SymbianDeviceManager; |
| public: |
| typedef QSharedPointer<trk::TrkDevice> TrkDevicePtr; |
| |
| SymbianDevice(); |
| SymbianDevice(const SymbianDevice &rhs); |
| SymbianDevice &operator=(const SymbianDevice &rhs); |
| ~SymbianDevice(); |
| int compare(const SymbianDevice &rhs) const; |
| |
| DeviceCommunicationType type() const; |
| bool isNull() const; |
| QString portName() const; |
| QString friendlyName() const; |
| QString additionalInformation() const; |
| void setAdditionalInformation(const QString &); |
| |
| // Acquire: Mark the device as 'out' and return a shared pointer |
| // unless it is already in use by another owner. The result should not |
| // be passed on further. |
| TrkDevicePtr acquireDevice(); |
| // Give back a device and mark it as 'free'. |
| void releaseDevice(TrkDevicePtr *ptr = 0); |
| |
| bool isOpen() const; |
| |
| // Windows only. |
| QString deviceDesc() const; |
| QString manufacturer() const; |
| |
| void format(QTextStream &str) const; |
| QString toString() const; |
| |
| private: |
| void forcedClose(); |
| |
| QExplicitlySharedDataPointer<SymbianDeviceData> m_data; |
| }; |
| |
| SYMBIANUTILS_EXPORT QDebug operator<<(QDebug d, const SymbianDevice &); |
| |
| inline bool operator==(const SymbianDevice &d1, const SymbianDevice &d2) |
| { return d1.compare(d2) == 0; } |
| inline bool operator!=(const SymbianDevice &d1, const SymbianDevice &d2) |
| { return d1.compare(d2) != 0; } |
| inline bool operator<(const SymbianDevice &d1, const SymbianDevice &d2) |
| { return d1.compare(d2) < 0; } |
| |
| /* SymbianDeviceManager: Singleton that maintains a list of Symbian devices. |
| * and emits change signals. |
| * On Windows, the update slot must be connected to a [delayed] signal |
| * emitted from an event handler listening for WM_DEVICECHANGE. |
| * Device removal will result in the device being closed. */ |
| class SYMBIANUTILS_EXPORT SymbianDeviceManager : public QObject |
| { |
| Q_OBJECT |
| public: |
| typedef QList<SymbianDevice> SymbianDeviceList; |
| typedef QSharedPointer<trk::TrkDevice> TrkDevicePtr; |
| |
| static const char *linuxBlueToothDeviceRootC; |
| |
| // Do not use this constructor, it is just public for Q_GLOBAL_STATIC |
| explicit SymbianDeviceManager(QObject *parent = 0); |
| virtual ~SymbianDeviceManager(); |
| |
| // Singleton access. |
| static SymbianDeviceManager *instance(); |
| |
| SymbianDeviceList devices() const; |
| QString toString() const; |
| |
| // Acquire a device for use. See releaseDevice(). |
| TrkDevicePtr acquireDevice(const QString &port); |
| |
| int findByPortName(const QString &p) const; |
| QString friendlyNameForPort(const QString &port) const; |
| |
| public slots: |
| void update(); |
| // Relase a device, make it available for further use. |
| void releaseDevice(const QString &port); |
| void setAdditionalInformation(const QString &port, const QString &ai); |
| |
| signals: |
| void deviceRemoved(const SymbianUtils::SymbianDevice &d); |
| void deviceAdded(const SymbianUtils::SymbianDevice &d); |
| void updated(); |
| |
| private: |
| void ensureInitialized() const; |
| void update(bool emitSignals); |
| SymbianDeviceList serialPorts() const; |
| SymbianDeviceList blueToothDevices() const; |
| |
| SymbianDeviceManagerPrivate *d; |
| }; |
| |
| SYMBIANUTILS_EXPORT QDebug operator<<(QDebug d, const SymbianDeviceManager &); |
| |
| } // namespace SymbianUtils |
| |
| #endif // SYMBIANDEVICEMANAGER_H |