kerneltest/e32test/pccd/t_pccd1.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/pccd/t_pccd1.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,271 @@
+// 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\pccd\t_pccd1.cpp
+// 
+//
+
+#include <e32test.h>
+#include <e32svr.h>
+#include <e32hal.h>
+#include <e32uid.h>
+#include <d_pccdif.h>
+
+LOCAL_D RTest test(_L("T_PCCD1"));
+const TSocket KSocket=0;
+const TInt KFunc=0;
+
+GLDEF_C TInt E32Main()
+	{
+#if defined (__WINS__)
+	// Connect to all the local drives first as will be the case in ARM
+	TBusLocalDrive Drive[KMaxLocalDrives];
+	TBool ChangedFlag[KMaxLocalDrives];
+	TInt i;
+	for (i=0;i<KMaxLocalDrives;i++)
+		Drive[i].Connect(i,ChangedFlag[i]);
+#endif
+
+	test.Title();
+
+	TDriveInfoV1Buf diBuf;
+	UserHal::DriveInfo(diBuf);
+	TDriveInfoV1 &di=diBuf();
+	test.Printf(_L("SOCKETS PRESENT  :%d\r\n"),di.iTotalSockets);
+	test.Printf(_L("1ST SOCKET NAME  :%- 16S\r\n"),&di.iSocketName[0]);
+	test.Printf(_L("2ND SOCKET NAME  :%- 16S\r\n"),&di.iSocketName[1]);
+	test.Printf(_L("3RD SOCKET NAME  :%- 16S\r\n"),&di.iSocketName[2]);
+	test.Printf(_L("4TH SOCKET NAME  :%- 16S\r\n"),&di.iSocketName[3]);
+	//test.Printf( _L("Hit a key\r\n"));
+    //test.Getch();
+//
+	test.Start(_L("Load/open logical device"));
+	TInt r;
+	r=User::LoadLogicalDevice(_L("D_PCCDIF"));
+	test(r==KErrNone||r==KErrAlreadyExists);
+	RPcCardCntrlIf pccdDrv;
+	r=pccdDrv.Open(KSocket,pccdDrv.VersionRequired());
+	test(r==KErrNone);
+
+	test.Next(_L("Power card, check card type."));
+	UserSvr::ForceRemountMedia(ERemovableMedia0); // Media change - ensures test always starts from same state
+	User::After(300000);	// Allow 0.3s after power down for controller to detect door closed.
+    pccdDrv.Reset();
+	TPcCardStatus s;
+	TSocketSignals ind;
+	test(pccdDrv.SocketInfo(s,ind)==KErrNone);
+	test(s==EPcCardNotReady);
+	test(ind.iCardDetected);
+#if defined (__WINS__)
+	test(ind.iVoltSense==0x01);
+#else
+	if(ind.iVoltSense!=0x03)
+		test.Printf(_L("vs=%d"),ind.iVoltSense);
+	test(ind.iVoltSense==0x03);
+#endif
+	TRequestStatus rs;
+	pccdDrv.PwrUp(&rs);
+	User::WaitForRequest(rs);
+	test(rs.Int()==KErrNone);
+	test(pccdDrv.SocketInfo(s,ind)==KErrNone);
+	test(s==EPcCardReady);
+	TPcCardTypePckg tyBuf;
+	TPcCardType &ty=tyBuf();
+	test(pccdDrv.CardInfo(&tyBuf)==KErrNone);
+	test(ty.iFuncType[0]==EFFixedDiskCard);
+	test(ty.iFuncCount==1);
+
+	test.Next(_L("Tuple reading."));
+	TBuf8<257> tbuf;
+    test(pccdDrv.GetTuple(KFunc,KPccdNonSpecificTuple,&tbuf)==KErrNone);
+	test(tbuf[0]==KCisTupleDevice);
+    test(pccdDrv.GetTuple(KFunc,KCisTupleFuncId,&tbuf)==KErrNone);
+	test(tbuf[0]==KCisTupleFuncId&&tbuf[1]==0x02&&tbuf[2]==0x04&&tbuf[3]==0x01); 
+    test(pccdDrv.GetTuple(KFunc,KCisTupleFuncId,&tbuf)==KErrNotFound);
+    test(pccdDrv.ResetCis(KFunc)==KErrNone);
+    test(pccdDrv.GetTuple(KFunc,KCisTupleFuncId,&tbuf)==KErrNone);
+    test(pccdDrv.GetTuple(KFunc,KCisTupleNoLink,&tbuf)==KErrNone);
+	test(tbuf[0]==KCisTupleNoLink&&tbuf[1]==0x00); 
+    test(pccdDrv.GetTuple(KFunc,KCisTupleBattery,&tbuf)==KErrNotFound);
+    
+	test.Next(_L("Read card configuration 1."));
+	TPcCardConfigInfoPckg ciBuf;
+	TPcCardConfigInfo &ci=ciBuf();
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==(KSignalWaitRequired|KSignalReadyActive));
+	test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);			
+	test(ci.iValidChunks==1);
+	test(ci.iChnk[0].iMemType==EPcCardCommon16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x800); // 2K
+	test(ci.iIsIoAndMem==FALSE&&ci.iIsDefault);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==0);
+	test(ci.iConfigOption==0&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+	test.Next(_L("Read card configuration 2."));
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==(KSignalWaitRequired|KSignalReadyActive));
+	test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);			
+	test(ci.iValidChunks==1);
+	test(ci.iChnk[0].iMemType==EPcCardCommon16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x800); // 2K
+	test(ci.iIsIoAndMem==FALSE&&ci.iIsDefault==FALSE);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==0);
+	test(ci.iConfigOption==0&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+	test.Next(_L("Read card configuration 3."));
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==KSignalReadyActive);
+	test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);			
+	test(ci.iValidChunks==1);
+	test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x10); // 16bytes
+	test(ci.iIsIoAndMem&&ci.iIsDefault);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
+	test(ci.iConfigOption==1&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+	test.Next(_L("Read card configuration 4."));
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==KSignalReadyActive);
+	test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);			
+	test(ci.iValidChunks==1);
+	test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x10); // 16bytes
+	test(ci.iIsIoAndMem&&ci.iIsDefault==FALSE);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
+	test(ci.iConfigOption==1&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+	test.Next(_L("Read card configuration 5."));
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==KSignalReadyActive);
+	test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);			
+	test(ci.iValidChunks==2);
+	test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x1F0&&ci.iChnk[0].iMemLen==8); // 8bytes
+	test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x3F6&&ci.iChnk[1].iMemLen==2); // 2bytes
+	test(ci.iIsIoAndMem&&ci.iIsDefault);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
+	test(ci.iConfigOption==2&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+	test.Next(_L("Read card configuration 6."));
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==KSignalReadyActive);
+	test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);			
+	test(ci.iValidChunks==2);
+	test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x1F0&&ci.iChnk[0].iMemLen==8); // 8bytes
+	test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x3F6&&ci.iChnk[1].iMemLen==2); // 2bytes
+	test(ci.iIsIoAndMem&&ci.iIsDefault==FALSE);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
+	test(ci.iConfigOption==2&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+	test.Next(_L("Read card configuration 7."));
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==KSignalReadyActive);
+	test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);			
+	test(ci.iValidChunks==2);
+	test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x170&&ci.iChnk[0].iMemLen==8); // 8bytes
+	test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x376&&ci.iChnk[1].iMemLen==2); // 2bytes
+	test(ci.iIsIoAndMem&&ci.iIsDefault);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
+	test(ci.iConfigOption==3&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+	test.Next(_L("Read card configuration 8."));
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
+	test(ci.iAccessSpeed==EAccSpeed200nS);
+	test(ci.iActiveSignals==KSignalReadyActive);
+	test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);			
+	test(ci.iValidChunks==2);
+	test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x170&&ci.iChnk[0].iMemLen==8); // 8bytes
+	test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x376&&ci.iChnk[1].iMemLen==2); // 2bytes
+	test(ci.iIsIoAndMem&&ci.iIsDefault==FALSE);
+	test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
+	test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
+	test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
+	test(ci.iConfigOption==3&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
+
+    test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNotFound);
+
+	test.Next(_L("Read card memory regions."));
+	TPcCardRegionInfoPckg rgBuf;
+	TPcCardRegionInfo &rg=rgBuf();
+	test.Next(_L("Read card region."));
+    test(pccdDrv.ResetCis(KFunc)==KErrNone);
+	test(pccdDrv.GetRegion(KFunc,&rgBuf)==KErrNone);
+#if defined (__WINS__)
+	test(rg.iAccessSpeed==EAccSpeed750nS);
+	test(rg.iExtendedAccSpeedInNanoSecs==700);
+	test(rg.iActiveSignals==0);
+	test(rg.iVcc==EPcCardSocket_5V0);			
+#else
+	test(rg.iAccessSpeed==EAccSpeed250nS);
+	test(rg.iExtendedAccSpeedInNanoSecs==0);
+	test(rg.iActiveSignals==KSignalWaitRequired);
+	test(rg.iVcc==EPcCardSocket_3V3);			
+#endif
+	test(rg.iChnk.iMemType==EPcCardCommon16Mem&&rg.iChnk.iMemBaseAddr==0&&rg.iChnk.iMemLen==0x800); // 2K
+	test(rg.iDeviceType==EMDeviceFunSpec);
+	test(pccdDrv.GetRegion(KFunc,&rgBuf)==KErrNotFound);
+
+	TInt reg=0;
+	test.Next(_L("Request card configuration."));
+	test(pccdDrv.ReadConfigReg(KFunc,0,reg)==KErrGeneral);
+	test(pccdDrv.ReqConfig(KFunc,2)==KErrNone);
+	test(pccdDrv.ReadConfigReg(KFunc,0,reg)==KErrNone);
+	test(reg==2);
+	test(pccdDrv.ReqConfig(KFunc,1)==KErrInUse);
+	pccdDrv.Reset();							// Release config
+	test(pccdDrv.ReqConfig(KFunc,1)==KErrNone);
+
+	test.Next(_L("Configuration register read/write test.")); // Set IoIs8 bit in ConfigAndStatus register
+	test(pccdDrv.ReadConfigReg(KFunc,1,reg)==KErrNone);
+	test.Printf(_L("reg=0x%x"),reg);
+	test((reg&0x20)==0);
+	reg|=0x20;
+	test(pccdDrv.WriteConfigReg(KFunc,1,reg)==KErrNone);
+	TInt newReg=0;
+	test(pccdDrv.ReadConfigReg(KFunc,1,newReg)==KErrNone);
+	if(reg!=newReg)
+		test.Printf(_L("reg=0x%x, new reg=0x%x"),reg,newReg);
+	test(reg==newReg);
+	reg&=0xDF;
+	test(pccdDrv.WriteConfigReg(KFunc,1,reg)==KErrNone);
+
+	test.Next(_L("Close/free device"));
+	pccdDrv.Close();
+	r=User::FreeLogicalDevice(_L("PccdIf"));
+	test(r==KErrNone);
+
+	test.End();
+
+#if defined (__WINS__)
+	for (i=0;i<KMaxLocalDrives;i++)
+		Drive[i].Disconnect();
+#endif
+	return(0);
+	}
+