--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/window/t_calib.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,177 @@
+// Copyright (c) 1996-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:
+// e32test\window\t_calib.cpp
+//
+//
+
+#include <e32test.h>
+#include <e32twin.h>
+#include <e32hal.h>
+#include <e32svr.h>
+
+RConsole w;
+
+enum TFault
+ {
+ EConnect,
+ EConsole
+ };
+
+LOCAL_C void printf(TRefByValue<const TDesC> aFmt,...)
+//
+// Print to the console
+//
+ {
+
+ VA_LIST list;
+ VA_START(list,aFmt);
+ TBuf<0x100> aBuf;
+ aBuf.AppendFormatList(aFmt,list);
+ TInt r=w.Write(aBuf);
+ __ASSERT_ALWAYS(r==KErrNone,User::Panic(_L("Write-Console"),0));
+ }
+
+LOCAL_C void Fault(TFault aFault)
+//
+// Panic the program.
+//
+ {
+
+ User::Panic(_L("T_CALIB fault"),aFault);
+ }
+
+GLDEF_C void DrawBlob(TPoint aPos)
+ {
+ TPoint pos(aPos.iX/8-1,aPos.iY/10-1);
+ w.SetCursorPosAbs(TPoint(0,0));
+ TBuf<0x100> aBuf;
+ aBuf.AppendFormat(_L("(%d,%d) "),aPos.iX,aPos.iY);
+ w.Write(aBuf);
+ if (pos.iX!=0)
+ {
+ w.SetCursorPosAbs(pos);
+ w.Write(_L("*"));
+ }
+ }
+
+GLDEF_C void TestBlob()
+//
+// Draw blob when digitizer pressed
+//
+ {
+
+ FOREVER
+ {
+ TConsoleKey k;
+ w.Read(k);
+ if((TInt)k.Code()==27 && k.Type()==EKeyPress)
+ break;
+ if(k.Type()==EMouseClick)
+ DrawBlob(k.MousePos());
+ };
+ w.ClearScreen();
+ }
+
+GLDEF_C TInt E32Main()
+//
+// Calibrate digitizer
+//
+ {
+
+ TInt r=w.Create();
+ __ASSERT_ALWAYS(r==KErrNone,Fault(EConsole));
+ r=w.Init(_L("T_CALIB window"),TSize(KConsFullScreen,KConsFullScreen));
+ __ASSERT_ALWAYS(r==KErrNone,Fault(EConsole));
+ r=w.Control(_L("+Maximised"));
+ __ASSERT_ALWAYS(r==KErrNone,Fault(EConsole));
+ r=w.Control(_L("+Inform"));
+ __ASSERT_ALWAYS(r==KErrNone,Fault(EConsole));
+ r=w.Control(_L("+Pointer"));
+ __ASSERT_ALWAYS(r==KErrNone,Fault(EConsole));
+ TConsoleKey k;
+
+ TestBlob();
+
+ printf(_L("Please touch the three points, in the order TL, BL, BR\r\n"));
+
+ TDigitizerCalibration cal;
+ UserHal::CalibrationPoints(cal);
+
+ printf(_L("Points are at: (%d,%d), (%d,%d), (%d,%d)\r\n")
+ ,cal.iTl.iX,cal.iTl.iY
+ ,cal.iBl.iX,cal.iBl.iY
+ ,cal.iBr.iX,cal.iBr.iY);
+
+ DrawBlob(cal.iTl);
+ DrawBlob(cal.iBl);
+ DrawBlob(cal.iBr);
+
+ // Set digitiser to 'bypass' calibration
+
+// UserHal::SetXYInputCalibration(cal);
+
+ TPoint pos(0,6);
+
+ w.SetCursorPosAbs(pos);
+
+ TInt count=0;
+ do
+ {
+ w.Read(k);
+ if(k.Type()==EMouseClick)
+ {
+ TPoint mouse=k.MousePos();
+ printf(_L("You touched point %d,%d\r\n"),mouse.iX,mouse.iY);
+ switch(count++)
+ {
+ case 0:
+ cal.iTl=mouse;
+ break;
+ case 1:
+ cal.iBl=mouse;
+ break;
+ case 2:
+ cal.iBr=mouse;
+ }
+ }
+ } while(count!=3);
+
+ UserHal::SetXYInputCalibration(cal);
+
+ printf(_L("Digitizer calibrated! Click away!\r\n"));
+
+ // Test to validate when invalid calibration input values are supplied.
+
+ cal.iTl.iX = 10;
+ cal.iTl.iY = 20;
+
+ cal.iBl.iX = 10;
+ cal.iBl.iY = 20;
+
+ cal.iBr.iX = 10;
+ cal.iBr.iY = 20;
+
+ r = UserHal::SetXYInputCalibration(cal);
+
+ if (r != KErrArgument)
+ // Test failure panic.
+ User::Panic(_L("T_CALIB Test Failure"),84);
+
+
+ TestBlob();
+
+ w.Read(k);
+ return(0);
+ }
+