summaryrefslogtreecommitdiffstats
path: root/kpilot/lib/kpilotdevicelink.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpilot/lib/kpilotdevicelink.h')
-rw-r--r--kpilot/lib/kpilotdevicelink.h220
1 files changed, 220 insertions, 0 deletions
diff --git a/kpilot/lib/kpilotdevicelink.h b/kpilot/lib/kpilotdevicelink.h
new file mode 100644
index 000000000..d2527aee4
--- /dev/null
+++ b/kpilot/lib/kpilotdevicelink.h
@@ -0,0 +1,220 @@
+#ifndef _KPILOT_KPILOTDEVICELINK_H
+#define _KPILOT_KPILOTDEVICELINK_H
+/*
+**
+** Copyright (C) 1998-2001 by Dan Pilone
+** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
+** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
+**
+*/
+
+/*
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU Lesser General Public License as published by
+** the Free Software Foundation; either version 2.1 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public License
+** along with this program in a file called COPYING; if not, write to
+** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+** MA 02110-1301, USA.
+*/
+
+/*
+** Bug reports and questions can be sent to kde-pim@kde.org
+*/
+
+#include "kpilotlink.h"
+
+class QThread;
+
+class DeviceMap; ///< Globally tracks all devices that have a link assigned
+class Messages; ///< Tracks which messages have been printed
+class DeviceCommThread; ///< Thread for doing all palm device communications
+
+/**
+* The link behaves like a state machine most of the time:
+* it waits for the actual device to become available, and
+* then becomes ready to handle syncing.
+*/
+enum LinkStatus {
+ Init,
+ WaitingForDevice,
+ FoundDevice,
+ CreatedSocket,
+ DeviceOpen,
+ AcceptedDevice,
+ SyncDone,
+ PilotLinkError,
+ WorkaroundUSB
+} ;
+
+/**
+* Custom events we can be handling...
+*/
+enum DeviceCustomEvents {
+ EventLogMessage = QEvent::User + 777,
+ EventLogError,
+ EventLogProgress,
+ EventDeviceReady
+};
+
+/**
+* Definition of the device link class for physical
+* handheld devices, which communicate with the PC
+* using DLP / SLP via the pilot-link library.
+*/
+class KDE_EXPORT KPilotDeviceLink : public KPilotLink
+{
+friend class PilotSerialDatabase;
+friend class DeviceCommThread;
+
+Q_OBJECT
+
+public:
+ /**
+ * Constructor. Creates a link that can sync to a physical handheld.
+ * Call reset() on it to start looking for a device.
+ *
+ * @param parent Parent object.
+ * @param name Name of this object.
+ * @param tempDevice Path to device node to use as an alternative
+ * to the "normal" one set by KPilot.
+ */
+ KPilotDeviceLink( QObject *parent = 0,
+ const char *name = 0,
+ const QString &tempDevice = QString::null );
+
+ /**
+ * Destructor. This rudely ends the communication with the handheld.
+ * It is best to call endOfSync() or finishSync() before destroying
+ * the device.
+ */
+ virtual ~KPilotDeviceLink();
+
+ /**
+ * Get the status (state enum) of this link.
+ * @return The LinkStatus enum for the link's current state.
+ */
+ LinkStatus status() const
+ {
+ return fLinkStatus;
+ }
+
+ /** Get a human-readable string for the given status @p l. */
+ static QString statusString(LinkStatus l);
+
+ // The following API is the actual implementation of
+ // the KPilotLink API, for documentation see that file.
+ //
+ virtual QString statusString() const;
+ virtual bool isConnected() const;
+ virtual void reset( const QString & );
+ virtual void close();
+ virtual void reset();
+ virtual bool event(QEvent *e);
+ virtual bool tickle();
+ virtual const KPilotCard *getCardInfo(int card);
+ virtual void endSync( EndOfSyncFlags f );
+ virtual int openConduit();
+ virtual int getNextDatabase(int index,struct DBInfo *);
+ virtual int findDatabase(const char *name, struct DBInfo*,
+ int index=0, unsigned long type=0, unsigned long creator=0);
+ virtual bool retrieveDatabase(const QString &path, struct DBInfo *db);
+ virtual DBInfoList getDBList(int cardno=0, int flags=dlpDBListRAM);
+ virtual PilotDatabase *database( const QString &name );
+ virtual PilotDatabase *database( const DBInfo *info );
+
+protected:
+ virtual bool installFile(const QString &, const bool deleteFile);
+ virtual void addSyncLogEntryImpl( const QString &s );
+ virtual int pilotSocket() const
+ {
+ return fPilotSocket;
+ }
+
+
+private:
+ LinkStatus fLinkStatus;
+
+
+public:
+
+ /**
+ * Special-cases. Call this after a reset to set device-
+ * specific workarounds; the only one currently known
+ * is the Zire 31/72 T5 quirk of doing a non-HotSync
+ * connect when it's switched on.
+ */
+ void setWorkarounds(bool usb)
+ {
+ fWorkaroundUSB = usb;
+ }
+
+ /**
+ * Sets an additional device, which should be tried as fallback.
+ * Useful for hotplug enviroments, this device is used @em once
+ * for accepting a connection.
+ */
+ void setTempDevice( const QString &device );
+
+ /**
+ * Sets the device to use. Used by probe dialog, since we know
+ * what device to use, but we don't want to start the detection
+ * immediately.
+ */
+ void setDevice( const QString &device )
+ {
+ fPilotPath = device;
+ }
+
+
+protected:
+ /** Should we work around the Zire31/72 quirk? @see setWorkarounds() */
+ bool fWorkaroundUSB;
+
+
+ /**
+ * Check for device permissions and existence, emitting
+ * warnings for weird situations. This is primarily intended
+ * to inform the user.
+ */
+ void checkDevice();
+
+protected:
+ /**
+ * Path with resolved symlinks, to prevent double binding
+ * to the same device.
+ */
+ QString fRealPilotPath;
+
+ /**
+ * Pilot-link library handles for the device once it's opened.
+ */
+ int fPilotSocket;
+ QString fTempDevice;
+
+ /**
+ * Handle cases where we can't accept or open the device,
+ * and data remains available on the pilot socket.
+ */
+ int fAcceptedCount;
+
+ /**
+ * Start/Stop our device communication thread.
+ */
+ void startCommThread();
+ void stopCommThread();
+
+protected:
+ Messages *fMessages;
+ DeviceCommThread *fDeviceCommThread;
+} ;
+
+#endif
+