--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/baseport/syborg/pointer/syborg_pointer.h Tue Aug 04 10:28:23 2009 +0100
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Minimalistic pointer driver
+*
+*/
+
+#ifndef _SYBORG_POINTER_H
+#define _SYBORG_POINTER_H
+
+#include <kernel.h>
+#include <system.h>
+#include <videodriver.h>
+#include <hal.h>
+
+#define FIFO_SIZE 16
+
+#ifdef DEBUG
+#define __DEBUG_PRINT(format...) Kern::Printf(format)
+#else
+#define __DEBUG_PRINT(format...) __KTRACE_OPT(KBOOT,Kern::Printf(format))
+#endif
+
+class TPointerRv
+{
+public:
+ TPointerRv();
+ virtual ~TPointerRv();
+ static TInt DoPointerHalFunction(TAny* aThis, TInt aFunction, TAny* a1, TAny* a2);
+ TInt PointerHalFunction(TInt aFunction, TAny* a1, TAny* a2);
+ void Init3();
+
+ private:
+ struct PData {
+ TInt x;
+ TInt y;
+ TInt z;
+ TInt but;
+ };
+
+ struct PData* FifoPop(void);
+ void FifoPush(struct PData*);
+
+ struct PData iPDataFifo[FIFO_SIZE];
+ TInt iFifoPos;
+ TInt iFifoCount;
+
+ private:
+ static void Isr(TAny* aPtr);
+ static void RxDfc(TAny* aPtr );
+ static void Process(TPointerRv *i, struct PData *);
+
+ TDfc iRxDfc;
+
+ TBool iPointerOn; // cursor visiability
+ TInt iScreenWidth;
+ TInt iScreenHeight;
+ TInt iDisplayMode;
+
+ TInt ix,iy;
+ TInt iLastBut;
+
+
+ public:
+
+ enum {
+ POINTER_ID = 0,
+ POINTER_LATCH = 1,
+ POINTER_FIFO_COUNT = 2,
+ POINTER_X = 3,
+ POINTER_Y = 4,
+ POINTER_Z = 5,
+ POINTER_BUTTONS = 6,
+ POINTER_INT_ENABLE = 7
+ };
+
+ private:
+ // Fixed point maths
+ class Fixed {
+
+ private:
+ int g;
+ const static int BP = 8;
+ const static int BP2 = BP*2;
+ enum FixedRaw { RAW };
+ Fixed(FixedRaw, int guts) : g(guts) {}
+
+ public:
+ Fixed() : g(0) {}
+ Fixed(const Fixed& a) : g( a.g ) {}
+ Fixed(int a) : g( a << BP ) {}
+ operator int() { return g>>BP; }
+ Fixed operator +() const { return Fixed(RAW,g); }
+ Fixed operator -() const { return Fixed(RAW,-g); }
+ Fixed operator +(const Fixed& a) const { return Fixed(RAW, g + a.g); }
+ Fixed operator -(const Fixed& a) const { return Fixed(RAW, g - a.g); }
+ Fixed operator *(const Fixed& a) const { return Fixed(RAW, (int)( ((long long)g * (long long)a.g ) >> BP)); }
+ Fixed operator /(const Fixed& a) const { return Fixed(RAW, int( (((long long)g << BP2) / (long long)(a.g)) >> BP) ); }
+ };
+
+ Fixed iXFactor;
+ Fixed iYFactor;
+};
+
+#endif