--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/bthid/mouse/hidmousedriver/inc/mouse.h Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Declares main application class.
+ *
+*/
+
+
+#ifndef __MOUSE_H
+#define __MOUSE_H
+
+#include <e32std.h>
+#include <w32std.h>
+
+#include <e32msgqueue.h>
+#include <e32cmn.h>
+#include "pointmsgqueue.h"
+
+#include "hidinterfaces.h"
+
+class CField;
+class CHidMouseDriver;
+
+/*!
+ HID mouse driver class
+ */
+class CHidMouseDriver : public CHidDriver //public CHidDriverPluginInterface
+ {
+
+private:
+ /*! Initialisation states */
+ enum TMouseDriverState
+ {
+ EUninitialised, /*!< Driver has not been initialised */
+ EInitialised, /*!< Driver is initialised */
+ EDisabled
+ /*!< The driver will not respond to interrupt data */
+ };
+
+private:
+ TMouseDriverState iDriverState;
+ TInt iConnectionId;
+ TInt iAppMenuId;
+
+public:
+ /*!
+ Creates an instantiated CHidMouseDriver object.
+ @param aHid The generic HID layer that requested the driver
+ @param aFactory aFactory The factory that created the driver
+ @result A pointer to the instantiated keyboard driver
+ */
+ static CHidMouseDriver* NewL(MDriverAccess* aHid);
+ /*!
+ Creates an instantiated CHidMouseDriver object and leaves it on the
+ cleanup stack.
+ @param aHid The generic HID layer that requested the driver
+ @param aFactory aFactory The factory that created the driver
+ @result A pointer to the instantiated keyboard driver
+ */
+ static CHidMouseDriver* NewLC(MDriverAccess* aHid);
+
+ /*!
+ Stops driver activity, deletes the key repeat and decode objects and closes
+ the window server session before the driver is deleted
+ */
+ virtual ~CHidMouseDriver();
+
+ /*!
+ Called by the Generic HID layer to see if the driver can is able to use
+ reports from a newly-connected device
+ @result ETrue The driver can handle the reports
+ @result EFalse The driver cannot handle the reports
+ */
+ virtual TInt CanHandleReportL(CReportRoot* aReportRoot);
+
+ /*!
+ Called by the Generic HID layer when a device has been removed, prior to the
+ driver being removed. This allows the driver to notify any applications of
+ disconnection, if required
+ @param aReason The reason for device disconnection
+ */
+ virtual void Disconnected(TInt aReason);
+
+ /*!
+ Called by the Generic HID layer when data has been received from the device
+ handled by this driver.
+ @param aChannel The channel on which the data was received (as defined by the
+ transport layer
+ @param aPayload A pointer to the data buffer
+ */
+ virtual TInt DataIn(CHidTransport::THidChannelType aChannel,
+ const TDesC8& aPayload);
+
+ /*!
+ Called by the transport layers to inform the generic HID of the success of
+ the last Set... command.
+ @param aConnectionId ID of the device
+ @param aCmdAck Status of the last Set... command
+ */
+ virtual void CommandResult(TInt aCmdAck);
+
+ /*!
+ Called after a driver is sucessfully created by the Generic HID, when a
+ device is connected
+ */
+ virtual void InitialiseL(TInt aConnectionId);
+
+ /*!
+ Resets the internal state of the driver (any pressed keys are released) and
+ enables the driver
+ */
+ virtual void StartL(TInt aConnectionId);
+ /*!
+ Cancels all pressed keys and disables the driver (so it will not
+ process interrupt data)
+ */
+ virtual void Stop();
+
+ virtual TInt SupportedFieldCount();
+
+ /**
+ * Set input handling registy
+ *
+ * @since S60 v5.0
+ * @param aHandlingReg a Input handling registry
+ */
+ virtual void SetInputHandlingReg(CHidInputDataHandlingReg* aHandlingReg);
+
+private:
+ // Constructor taking a pointer to the HID layer requesting the driver
+ // instance
+ CHidMouseDriver(MDriverAccess* aHid);
+
+ void ConstructL();
+
+private:
+ // The types of keyboard input report fields that we handle:
+ enum TKeyFieldType
+ {
+ EButtons = 0,
+ EXY = 1,
+ EWheel = 2,
+ EMediaKeys = 3,
+ EPowerKeys = 4,
+ KNumInputFieldTypes
+ };
+
+private:
+ // Called from within DataIn to handle interrupt and control channel data
+ void InterruptData(const TDesC8& aPayload);
+
+ // Handles the states of the XY (mouse up, down, left, right)
+ void UpdateXY(TInt aFieldIndex, const TDesC8& aReport);
+
+ // Handles the states of the Buttons (left & right button)
+ void UpdateButtons(TInt aFieldIndex, const TDesC8& aReport);
+
+ // Handles the states of the wheel
+ void UpdateWheel(TInt aFieldIndex, const TDesC8& aReport);
+
+ void MoveCursor(const TPoint& aPoint);
+ TInt PostPointer(const TPoint& aPoint);
+ TInt SendButtonEvent(TBool aButtonDown);
+
+ void LaunchApplicationL(const TDesC& aName);
+ //void LaunchApplicationL(TInt aAppUid);
+
+private:
+ // The Generic HID layer
+ MDriverAccess *iGenericHid;
+
+ // Pointers to the fields in the report descriptor containing the
+ // various types of key:
+ const CField* iField[KNumInputFieldTypes];
+
+ //Supported field types count
+ TInt iSupportedFieldCount;
+
+ CHidInputDataHandlingReg* iInputHandlingReg;
+ RMsgQueue<TPointBuffer> iPointBufQueue;
+ TPointBuffer iPointerBuffer;
+ TBool iButtonDown;
+ TBool iButton2Down;
+
+ // A window server session, so keypresses can be sent to applications:
+ RWsSession iWsSession;
+ };
+
+// ----------------------------------------------------------------------
+
+#endif