halservices/hal/tsrc/t_newhal.cpp
changeset 0 a41df078684a
child 117 5b5d147c7838
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/halservices/hal/tsrc/t_newhal.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,366 @@
+// Copyright (c) 1998-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:
+// hal\tsrc\t_newhal.cpp
+// 
+//
+
+#define __E32TEST_EXTENSION__
+
+#include <e32test.h>
+#include <hal.h>
+
+RTest test(_L("T_NEWHAL"));
+
+const TText* AttributeNames[]=
+	{
+	_S("EManufacturer"),
+	_S("EManufacturerHardwareRev"),
+	_S("EManufacturerSoftwareRev"),
+	_S("EManufacturerSoftwareBuild"),
+	_S("EModel"),
+	_S("EMachineUid"),
+	_S("EDeviceFamily"),
+	_S("EDeviceFamilyRev"),
+	_S("ECPU"),
+	_S("ECPUArch"),
+	_S("ECPUABI"),
+	_S("ECPUSpeed"),
+	_S("ESystemStartupReason"),
+	_S("ESystemException"),
+	_S("ESystemTickPeriod"),		
+	_S("EMemoryRAM"),
+	_S("EMemoryRAMFree"),
+	_S("EMemoryROM"),
+	_S("EMemoryPageSize"),	
+	_S("EPowerGood"),
+	_S("EPowerBatteryStatus"),	
+	_S("EPowerBackup"),
+	_S("EPowerBackupStatus"),	
+	_S("EPowerExternal"),
+	_S("EKeyboard"),
+	_S("EKeyboardDeviceKeys"),	
+	_S("EKeyboardAppKeys"),
+	_S("EKeyboardClick"),
+	_S("EKeyboardClickState"),	
+	_S("EKeyboardClickVolume"),
+	_S("EKeyboardClickVolumeMax"),
+	_S("EDisplayXPixels"),
+	_S("EDisplayYPixels"),
+	_S("EDisplayXTwips"),
+	_S("EDisplayYTwips"),
+	_S("EDisplayColors"),
+	_S("EDisplayState"),
+	_S("EDisplayContrast"),
+	_S("EDisplayContrastMax"),
+	_S("EBacklight"),
+	_S("EBacklightState"),
+	_S("EPen"),
+	_S("EPenX"),
+	_S("EPenY"),
+	_S("EPenDisplayOn"),
+	_S("EPenClick"),
+	_S("EPenClickState"),
+	_S("EPenClickVolume"),
+	_S("EPenClickVolumeMax"),
+	_S("EMouse"),
+	_S("EMouseX"),
+	_S("EMouseY"),			
+	_S("EMouseState"),
+	_S("EMouseSpeed"),
+	_S("EMouseAcceleration"),
+	_S("EMouseButtons"),
+	_S("EMouseButtonState"),
+	_S("ECaseState"),
+	_S("ECaseSwitch"),
+	_S("ECaseSwitchDisplayOn"),
+	_S("ECaseSwitchDisplayOff"),
+	_S("ELEDs"),
+	_S("ELEDmask"),
+	_S("EIntegratedPhone"),
+	_S("EDisplayBrightness"),
+	_S("EDisplayBrightnessMax"),
+	_S("EKeyboardBacklightState"),
+	_S("EAccessoryPower"),
+	_S("ELanguageIndex"),
+	_S("EKeyboardIndex"),
+	_S("EMaxRAMDriveSize"),
+	_S("EKeyboardState"),
+	_S("ESystemDrive"),
+	_S("EPenState"),
+	_S("EDisplayIsMono"),
+	_S("EDisplayIsPalettized"),
+	_S("EDisplayBitsPerPixel"),
+	_S("EDisplayNumModes"),
+	_S("EDisplayMemoryAddress"),
+	_S("EDisplayOffsetToFirstPixel"),
+	_S("EDisplayOffsetBetweenLines"),
+	_S("EDisplayPaletteEntry"),
+	_S("EDisplayIsPixelOrderRGB"),
+	_S("EDisplayIsPixelOrderLandscape"),
+	_S("EDisplayMode"),
+	_S("ESwitches"),
+	_S("EDebugPort"),
+	_S("ELocaleLoaded"),
+	_S("EClipboardDrive"),
+	_S("ECustomRestart"),
+	_S("ECustomRestartReason"),
+	_S("EDisplayNumberOfScreens"),
+	_S("ENanoTickPeriod"),
+	_S("EFastCounterFrequency"),
+	_S("EFastCounterCountsUp"),
+	_S("EPointer3D"),
+	_S("EPointer3DMaxProximity"),
+	_S("EPointer3DThetaSupported"),
+	_S("EPointer3DPhiSupported"),
+	_S("EPointer3DRotationSupported"),
+	_S("EPointer3DPressureSupported"),
+	_S("EHardwareFloatingPoint"),
+	_S("ETimeNonSecureOffset"),
+	_S("EPersistStartupModeKernel"),
+	_S("EMaximumCustomRestartReasons"),
+	_S("EMaximumRestartStartupModes"),
+	_S("ECustomResourceDrive"),
+	_S("EPointer3DProximityStep"),
+	_S("EPointerMaxPointers"),
+	_S("EPointerNumberOfPointers"),
+	_S("EPointer3DMaxPressure"),
+	_S("EPointer3DPressureStep"),
+	_S("EPointer3DEnterHighPressureThreshold"),
+	_S("EPointer3DExitHighPressureThreshold"),
+	_S("EPointer3DEnterCloseProximityThreshold"),
+	_S("EPointer3DExitCloseProximityThreshold"),
+	_S("EDisplayMemoryHandle"),
+	_S("ESerialNumber"),
+	_S("ECpuProfilingDefaultInterruptBase"),
+	_S("ENumCpus"),
+
+	};
+
+TInt MatchAbbrev(const TDesC& anInput, const TText** aList, TInt aListLen)
+	{
+	TInt first_match=KErrNotFound;
+	TInt nmatches=0;
+	TInt i;
+	for (i=0; i<aListLen; i++)
+		{
+		TPtrC list_entry(aList[i]);
+		TInt r=list_entry.FindF(anInput);
+		if (r>=0)
+			{
+			// substring matches
+			if (r==0 && list_entry.Length()==anInput.Length())
+				{
+				// exact match
+				return i;
+				}
+			if (first_match<0)
+				first_match=i;
+			++nmatches;
+			}
+		}
+	if (nmatches>1)
+		return KErrGeneral;	// ambiguous
+	return first_match;		// either KErrNotFound or match index
+	}
+
+TInt MatchAttribute(const TDesC& anInput)
+	{
+	return MatchAbbrev(anInput, AttributeNames, sizeof(AttributeNames)/sizeof(TText*));
+	}
+
+void TestGet()
+	{
+	TInt i;
+	TInt n=0;
+
+	for (i=0; i<HAL::ENumHalAttributes; i++)
+		{
+		TPtrC att_name(AttributeNames[i]);
+		TInt val=-1;
+		TInt r=HAL::Get((HAL::TAttribute)i,val);
+		test.Printf(_L("%S: return %d, value %d(0x%08x)\n"),&att_name,r,val,val);
+		if (++n==16)
+			{
+			n=0;
+			test.Printf(_L("\nPress a key to continue...\n"));
+			test.Getch();
+			}
+		}
+	}
+
+
+void TestGetAll()
+	{
+	User::Allocator().Check();
+	HAL::SEntry* pE=NULL;
+	TInt nEntries=0;
+	TInt r=HAL::GetAll(nEntries, pE);
+	test(r==KErrNone);
+	test.Printf(_L("%d attributes defined\n"),nEntries);
+	test(nEntries==HAL::ENumHalAttributes);
+	TInt i;
+	for (i=0; i<nEntries; ++i)
+		{
+		TPtrC att_name(AttributeNames[i]);
+		TInt f=pE[i].iProperties;
+		TInt v=pE[i].iValue;
+		TInt v2=-1;
+		TInt r=HAL::Get((HAL::TAttribute)i,v2);
+		if (f & HAL::EEntryValid)
+			{
+			test(r==KErrNone);
+			if (f & HAL::EEntryDynamic)
+				{
+				test.Printf(_L("Attribute %S dynamic "),&att_name);
+				if (v2!=v)
+					{
+					test.Printf(_L("Values %d(%08x), %d(%08x)"),v,v,v2,v2);
+					}
+				test.Printf(_L("\n"));
+				}
+			else
+				{
+				test(v==v2);	// constant attribute
+				}
+			}
+		else
+			{
+			test.Printf(_L("Attribute %S not supported on this platform or requires parameter\n"),&att_name,r);
+			test(r==KErrNotSupported || r==KErrArgument);
+			}
+		}
+	User::Free(pE);
+	User::Allocator().Check();
+	}
+
+void InputLine(const TDesC& aPrompt, TDes& aLine)
+	{
+	test.Printf(_L("%S"),&aPrompt);
+	aLine.SetLength(0);
+	FOREVER
+		{
+		TKeyCode k=test.Getch();
+		switch (k)
+			{
+			case EKeyEnter:
+				test.Printf(_L("\n"));
+				return;
+			case EKeyEscape:
+				aLine.SetLength(0);
+				test.Printf(_L("\n%S"),&aPrompt);
+				break;
+			case EKeyBackspace:
+			case EKeyDelete:
+				if (aLine.Length()>0)
+					{
+					aLine.SetLength(aLine.Length()-1);
+					test.Printf(_L("\x8"));
+					}
+				break;
+			default:
+				{
+				TChar ch((TUint)k);
+				TBuf<1> b;
+				b.Append(ch);
+				aLine.Append(ch);
+				test.Printf(_L("%S"),&b);
+				break;
+				}
+			}
+		}
+	}
+
+void TestSet()
+	{
+	TBuf<256> line;
+	FOREVER
+		{
+		TInt attrib=KErrNotFound;
+		while (attrib<0)
+			{
+			InputLine(_L("Attribute: "),line);
+			if (line.Length()==0)
+				return;
+			attrib=MatchAttribute(line);
+			if (attrib==KErrNotFound)
+				test.Printf(_L("Unrecognised attribute\n"));
+			else if (attrib==KErrGeneral)
+				test.Printf(_L("Ambiguous attribute\n"));
+			}
+		TPtrC attrib_name(AttributeNames[attrib]);
+		test.Printf(_L("Attribute %d (%S) selected\n"),attrib,&attrib_name);
+		TInt value=0;
+		TInt r=KErrGeneral;
+		TBool set=ETrue;
+		while(r!=KErrNone)
+			{
+			InputLine(_L("Value: "),line);
+			line.Trim();
+			TLex lex(line);
+			if (line.MatchF(_L("r"))>=0)
+				{
+				set=EFalse;
+				r=KErrNone;
+				}
+			else if (line.MatchF(_L("0x"))>=0)
+				{
+				lex.Inc(2);
+				r=lex.Val((TUint&)value,EHex);
+				}
+			else
+				{
+				r=lex.Val(value);
+				}
+			}
+		if (set)
+			{
+			r=HAL::Set((HAL::TAttribute)attrib,value);
+			test.Printf(_L("Set returns %d\n"),r);
+			}
+		TInt v2;
+		r=HAL::Get((HAL::TAttribute)attrib,v2);
+		test.Printf(_L("Get returns %d, value %d(%08x)\n"),r,v2,v2);
+		}
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	test.Title();
+	__UHEAP_MARK;
+	__UHEAP_SETFAIL(RHeap::EDeterministic,1);
+	TInt machine_id;
+	TInt r=HAL::Get(HAL::EMachineUid,machine_id);
+	__UHEAP_RESET;
+	test(r==KErrNone);
+	test.Printf(_L("Machine ID %08x\n"),machine_id);
+
+	test.Start(_L("Check AttributeNames[] is up-to-date"));
+	test_Equal(HAL::ENumHalAttributes, sizeof(AttributeNames)/sizeof(TText*));
+
+	test.Next(_L("Test Get"));
+	TestGet();
+
+	test.Next(_L("Test GetAll"));
+	TestGetAll();
+
+	test.Next(_L("Test Set"));
+	TestSet();
+
+	test.End();
+
+	__UHEAP_MARKEND;	// problem if HAL uses TLS
+
+	return KErrNone;
+	}
+