kerneltest/e32test/device/d_ldd.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/device/d_ldd.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,347 @@
+// 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:
+// e32test\device\d_ldd.cpp
+// LDD for testing LDD static data
+// 
+//
+
+#include <kernel/kernel.h>
+#include "d_ldd.h"
+#include "d_ldd2.h"
+
+const TInt KMajorVersionNumber=0;
+const TInt KMinorVersionNumber=1;
+const TInt KBuildVersionNumber=1;
+
+TInt AFunction()
+	{
+	return KErrNone;
+	}
+
+TInt data=0x100;
+TAny* dataptr=(TAny*)&AFunction;
+TInt TheBss;
+
+class TGlobal
+	{
+public:
+	TGlobal();
+	~TGlobal();
+	void Update(TUint32 a);
+	TInt Verify();
+public:
+	TUint32 iInt;
+	TAny* iPtr;
+	};
+
+TGlobal Global;
+
+TGlobal::TGlobal()
+	{
+	__KTRACE_OPT(KDEVICE,Kern::Printf("TGlobal::TGlobal()"));
+	iPtr = Kern::Alloc(65536);
+	Update(487);
+	}
+
+TGlobal::~TGlobal()
+	{
+	__KTRACE_OPT(KDEVICE,Kern::Printf("TGlobal::~TGlobal()"));
+	Kern::Free(iPtr);
+	}
+
+void TGlobal::Update(TUint32 a)
+	{
+	iInt = a;
+	if (iPtr)
+		{
+		TUint32* p = (TUint32*)iPtr;
+		TUint32* pE = p + 65536/4;
+		while (p<pE)
+			{
+			a = (a*69069u)+41;
+			*p++ = a;
+			}
+		}
+	}
+
+TInt TGlobal::Verify()
+	{
+	TUint32 x = iInt;
+	if (iPtr)
+		{
+		TUint32* p = (TUint32*)iPtr;
+		TUint32* pE = p + 65536/4;
+		while (p<pE)
+			{
+			x = (x*69069u)+41;
+			if (*p++ != x)
+				return KErrGeneral;
+			}
+		return KErrNone;
+		}
+	return KErrNoMemory;
+	}
+
+class DTest;
+
+class DTestFactory : public DLogicalDevice
+//
+// Test LDD factory
+//
+	{
+public:
+	DTestFactory();
+	virtual TInt Install(); 					//overriding pure virtual
+	virtual void GetCaps(TDes8& aDes) const;	//overriding pure virtual
+	virtual TInt Create(DLogicalChannelBase*& aChannel); 	//overriding pure virtual
+	};
+
+class DTest : public DLogicalChannelBase
+//
+// Test logical channel
+//
+	{
+public:
+	virtual ~DTest();
+protected:
+	virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer);
+	virtual TInt Request(TInt aFunction, TAny* a1, TAny* a2);
+	};
+
+class DKInstallTestFactory : public DLogicalDevice
+//
+// Extra test device which will be installed from kernel side using
+// Kern::InstallLogicalDevice
+//
+	{
+public:
+	DKInstallTestFactory();
+	virtual TInt Install();
+	virtual void GetCaps(TDes8& aDes) const;
+	virtual TInt Create(DLogicalChannelBase*& aChannel);
+	};
+
+class DKInstallTest : public DLogicalChannelBase
+//
+// Extra test logical channel
+//
+	{
+public:
+	virtual ~DKInstallTest();
+protected:
+	virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer);
+	virtual TInt Request(TInt aFunction, TAny* a1, TAny* a2);
+	};
+
+DECLARE_STANDARD_LDD()
+	{
+	return Global.iPtr ? new DTestFactory : NULL;
+	}
+
+DTestFactory::DTestFactory()
+//
+// Constructor
+//
+	{
+	iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
+	//iParseMask=0;//No units, no info, no PDD
+	//iUnitsMask=0;//Only one thing
+	}
+
+TInt DTestFactory::Create(DLogicalChannelBase*& aChannel)
+//
+// Create a new DTest on this logical device
+//
+	{
+	aChannel=new DTest;
+	return aChannel?KErrNone:KErrNoMemory;
+	}
+
+TInt DTestFactory::Install()
+//
+// Install the LDD - overriding pure virtual
+//
+	{
+	return SetName(&KLddName);
+	}
+
+void DTestFactory::GetCaps(TDes8& aDes) const
+//
+// Get capabilities - overriding pure virtual
+//
+	{
+	TCapsTestV01 b;
+	b.iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
+    Kern::InfoCopy(aDes,(TUint8*)&b,sizeof(b));
+	}
+
+TInt DTest::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVer)
+//
+// Create channel
+//
+	{
+
+	if (!Kern::QueryVersionSupported(TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber),aVer))
+		return KErrNotSupported;
+	return KErrNone;
+	}
+
+DTest::~DTest()
+//
+// Destructor
+//
+	{
+	}
+
+TInt DTest::Request(TInt aFunction, TAny* a1, TAny* a2)
+	{
+	(void)a1;
+	(void)a2;
+	TInt r=KErrNone;
+	switch (aFunction)
+		{
+		case RLddTest::EControlTest1:
+			r=(TInt)dataptr;
+			break;
+		case RLddTest::EControlTest2:
+			r=data++;
+			break;
+		case RLddTest::EControlTest3:
+			r=data--;
+			break;
+		case RLddTest::EControlTest4:
+			r=data;
+			break;
+		case RLddTest::EControlTest5:
+			r=TheBss;
+			break;
+		case RLddTest::EControlTest6:
+			TheBss=(TInt)a1;
+			break;
+		case RLddTest::EControlTest7:
+			r = (TInt)Global.iInt;
+			break;
+		case RLddTest::EControlTest8:
+			Global.Update((TUint32)a1);
+			break;
+		case RLddTest::EControlTest9:
+			r = Global.Verify();
+			break;
+		case RLddTest::EControlLinkedTest1:
+			r=LinkedTest1();
+			break;
+		case RLddTest::EControlLinkedTest2:
+			r=LinkedTest2();
+			break;
+		case RLddTest::EControlLinkedTest3:
+			r=LinkedTest3();
+			break;
+		case RLddTest::EControlLinkedTest4:
+			r=LinkedTest4();
+			break;
+		case RLddTest::EControlLinkedTest5:
+			r=LinkedTest5();
+			break;
+		case RLddTest::EControlLinkedTest6:
+			r=LinkedTest6((TInt)a1);
+			break;
+		case RLddTest::EControlLinkedTest7:
+			r = LinkedTest7();
+			break;
+		case RLddTest::EControlLinkedTest8:
+			LinkedTest8((TUint32)a1);
+			break;
+		case RLddTest::EControlLinkedTest9:
+			r = LinkedTest9();
+			break;
+		case RLddTest::EControlTestKInstall:
+				{
+				r = KErrNoMemory;
+				NKern::ThreadEnterCS();
+				DLogicalDevice* device = new DKInstallTestFactory;
+				if (device!=NULL)
+					r = Kern::InstallLogicalDevice(device);
+				NKern::ThreadLeaveCS();
+				}
+			break;
+		default:
+			r=KErrNotSupported;
+			break;
+		}
+	return r;
+	}
+
+DKInstallTestFactory::DKInstallTestFactory()
+//
+// Constructor
+//
+	{
+	iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
+	//iParseMask=0;//No units, no info, no PDD
+	//iUnitsMask=0;//Only one thing
+	}
+
+TInt DKInstallTestFactory::Create(DLogicalChannelBase*& aChannel)
+//
+// Create a new DKInstallTest on this logical device
+//
+	{
+	aChannel=new DKInstallTest;
+	return aChannel?KErrNone:KErrNoMemory;
+	}
+
+TInt DKInstallTestFactory::Install()
+//
+// Install the LDD - overriding pure virtual
+//
+	{
+	return SetName(&KKInstallLddName);
+	}
+
+void DKInstallTestFactory::GetCaps(TDes8& aDes) const
+//
+// Get capabilities - overriding pure virtual
+//
+	{
+	TCapsTestV01 b;
+	b.iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber);
+    Kern::InfoCopy(aDes,(TUint8*)&b,sizeof(b));
+	}
+
+TInt DKInstallTest::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVer)
+//
+// Create channel
+//
+	{
+
+	if (!Kern::QueryVersionSupported(TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber),aVer))
+		return KErrNotSupported;
+	return KErrNone;
+	}
+
+DKInstallTest::~DKInstallTest()
+//
+// Destructor
+//
+	{
+	}
+	
+TInt DKInstallTest::Request(TInt aFunction, TAny* a1, TAny* a2)
+	{
+	(void)aFunction;
+	(void)a1;
+	(void)a2;
+	return KErrNotSupported;
+	}
+