--- /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);
+ }
+