tools/runonphone/symbianutils/symbiandevicemanager.h
changeset 30 5dc02b23752f
parent 18 2f34d5167611
--- a/tools/runonphone/symbianutils/symbiandevicemanager.h	Wed Jun 23 19:07:03 2010 +0300
+++ b/tools/runonphone/symbianutils/symbiandevicemanager.h	Tue Jul 06 15:10:48 2010 +0300
@@ -46,12 +46,17 @@
 
 #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;
@@ -62,11 +67,16 @@
     BlueToothCommunication = 1
 };
 
-// SymbianDevice, explicitly shared.
+// 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);
@@ -77,6 +87,17 @@
     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;
@@ -86,10 +107,12 @@
     QString toString() const;
 
 private:
+    void forcedClose();
+
     QExplicitlySharedDataPointer<SymbianDeviceData> m_data;
 };
 
-QDebug operator<<(QDebug d, const SymbianDevice &);
+SYMBIANUTILS_EXPORT QDebug operator<<(QDebug d, const SymbianDevice &);
 
 inline bool operator==(const SymbianDevice &d1, const SymbianDevice &d2)
     { return d1.compare(d2) == 0; }
@@ -100,13 +123,15 @@
 
 /* SymbianDeviceManager: Singleton that maintains a list of Symbian devices.
  * and emits change signals.
- * On Windows, the update slot must be connected to a signal
- * emitted from an event handler listening for WM_DEVICECHANGE. */
+ * 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;
 
@@ -120,17 +145,25 @@
     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 SymbianDevice &d);
-    void deviceAdded(const SymbianDevice &d);
+    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;
@@ -138,7 +171,7 @@
     SymbianDeviceManagerPrivate *d;
 };
 
-QDebug operator<<(QDebug d, const SymbianDeviceManager &);
+SYMBIANUTILS_EXPORT QDebug operator<<(QDebug d, const SymbianDeviceManager &);
 
 } // namespace SymbianUtils