1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/kerneltest/e32test/pccd/t_pccd1.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,271 @@
1.4 +// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// e32test\pccd\t_pccd1.cpp
1.18 +//
1.19 +//
1.20 +
1.21 +#include <e32test.h>
1.22 +#include <e32svr.h>
1.23 +#include <e32hal.h>
1.24 +#include <e32uid.h>
1.25 +#include <d_pccdif.h>
1.26 +
1.27 +LOCAL_D RTest test(_L("T_PCCD1"));
1.28 +const TSocket KSocket=0;
1.29 +const TInt KFunc=0;
1.30 +
1.31 +GLDEF_C TInt E32Main()
1.32 + {
1.33 +#if defined (__WINS__)
1.34 + // Connect to all the local drives first as will be the case in ARM
1.35 + TBusLocalDrive Drive[KMaxLocalDrives];
1.36 + TBool ChangedFlag[KMaxLocalDrives];
1.37 + TInt i;
1.38 + for (i=0;i<KMaxLocalDrives;i++)
1.39 + Drive[i].Connect(i,ChangedFlag[i]);
1.40 +#endif
1.41 +
1.42 + test.Title();
1.43 +
1.44 + TDriveInfoV1Buf diBuf;
1.45 + UserHal::DriveInfo(diBuf);
1.46 + TDriveInfoV1 &di=diBuf();
1.47 + test.Printf(_L("SOCKETS PRESENT :%d\r\n"),di.iTotalSockets);
1.48 + test.Printf(_L("1ST SOCKET NAME :%- 16S\r\n"),&di.iSocketName[0]);
1.49 + test.Printf(_L("2ND SOCKET NAME :%- 16S\r\n"),&di.iSocketName[1]);
1.50 + test.Printf(_L("3RD SOCKET NAME :%- 16S\r\n"),&di.iSocketName[2]);
1.51 + test.Printf(_L("4TH SOCKET NAME :%- 16S\r\n"),&di.iSocketName[3]);
1.52 + //test.Printf( _L("Hit a key\r\n"));
1.53 + //test.Getch();
1.54 +//
1.55 + test.Start(_L("Load/open logical device"));
1.56 + TInt r;
1.57 + r=User::LoadLogicalDevice(_L("D_PCCDIF"));
1.58 + test(r==KErrNone||r==KErrAlreadyExists);
1.59 + RPcCardCntrlIf pccdDrv;
1.60 + r=pccdDrv.Open(KSocket,pccdDrv.VersionRequired());
1.61 + test(r==KErrNone);
1.62 +
1.63 + test.Next(_L("Power card, check card type."));
1.64 + UserSvr::ForceRemountMedia(ERemovableMedia0); // Media change - ensures test always starts from same state
1.65 + User::After(300000); // Allow 0.3s after power down for controller to detect door closed.
1.66 + pccdDrv.Reset();
1.67 + TPcCardStatus s;
1.68 + TSocketSignals ind;
1.69 + test(pccdDrv.SocketInfo(s,ind)==KErrNone);
1.70 + test(s==EPcCardNotReady);
1.71 + test(ind.iCardDetected);
1.72 +#if defined (__WINS__)
1.73 + test(ind.iVoltSense==0x01);
1.74 +#else
1.75 + if(ind.iVoltSense!=0x03)
1.76 + test.Printf(_L("vs=%d"),ind.iVoltSense);
1.77 + test(ind.iVoltSense==0x03);
1.78 +#endif
1.79 + TRequestStatus rs;
1.80 + pccdDrv.PwrUp(&rs);
1.81 + User::WaitForRequest(rs);
1.82 + test(rs.Int()==KErrNone);
1.83 + test(pccdDrv.SocketInfo(s,ind)==KErrNone);
1.84 + test(s==EPcCardReady);
1.85 + TPcCardTypePckg tyBuf;
1.86 + TPcCardType &ty=tyBuf();
1.87 + test(pccdDrv.CardInfo(&tyBuf)==KErrNone);
1.88 + test(ty.iFuncType[0]==EFFixedDiskCard);
1.89 + test(ty.iFuncCount==1);
1.90 +
1.91 + test.Next(_L("Tuple reading."));
1.92 + TBuf8<257> tbuf;
1.93 + test(pccdDrv.GetTuple(KFunc,KPccdNonSpecificTuple,&tbuf)==KErrNone);
1.94 + test(tbuf[0]==KCisTupleDevice);
1.95 + test(pccdDrv.GetTuple(KFunc,KCisTupleFuncId,&tbuf)==KErrNone);
1.96 + test(tbuf[0]==KCisTupleFuncId&&tbuf[1]==0x02&&tbuf[2]==0x04&&tbuf[3]==0x01);
1.97 + test(pccdDrv.GetTuple(KFunc,KCisTupleFuncId,&tbuf)==KErrNotFound);
1.98 + test(pccdDrv.ResetCis(KFunc)==KErrNone);
1.99 + test(pccdDrv.GetTuple(KFunc,KCisTupleFuncId,&tbuf)==KErrNone);
1.100 + test(pccdDrv.GetTuple(KFunc,KCisTupleNoLink,&tbuf)==KErrNone);
1.101 + test(tbuf[0]==KCisTupleNoLink&&tbuf[1]==0x00);
1.102 + test(pccdDrv.GetTuple(KFunc,KCisTupleBattery,&tbuf)==KErrNotFound);
1.103 +
1.104 + test.Next(_L("Read card configuration 1."));
1.105 + TPcCardConfigInfoPckg ciBuf;
1.106 + TPcCardConfigInfo &ci=ciBuf();
1.107 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.108 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.109 + test(ci.iActiveSignals==(KSignalWaitRequired|KSignalReadyActive));
1.110 + test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);
1.111 + test(ci.iValidChunks==1);
1.112 + test(ci.iChnk[0].iMemType==EPcCardCommon16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x800); // 2K
1.113 + test(ci.iIsIoAndMem==FALSE&&ci.iIsDefault);
1.114 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.115 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.116 + test(ci.iInterruptInfo==0);
1.117 + test(ci.iConfigOption==0&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.118 +
1.119 + test.Next(_L("Read card configuration 2."));
1.120 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.121 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.122 + test(ci.iActiveSignals==(KSignalWaitRequired|KSignalReadyActive));
1.123 + test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);
1.124 + test(ci.iValidChunks==1);
1.125 + test(ci.iChnk[0].iMemType==EPcCardCommon16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x800); // 2K
1.126 + test(ci.iIsIoAndMem==FALSE&&ci.iIsDefault==FALSE);
1.127 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.128 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.129 + test(ci.iInterruptInfo==0);
1.130 + test(ci.iConfigOption==0&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.131 +
1.132 + test.Next(_L("Read card configuration 3."));
1.133 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.134 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.135 + test(ci.iActiveSignals==KSignalReadyActive);
1.136 + test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);
1.137 + test(ci.iValidChunks==1);
1.138 + test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x10); // 16bytes
1.139 + test(ci.iIsIoAndMem&&ci.iIsDefault);
1.140 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.141 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.142 + test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
1.143 + test(ci.iConfigOption==1&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.144 +
1.145 + test.Next(_L("Read card configuration 4."));
1.146 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.147 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.148 + test(ci.iActiveSignals==KSignalReadyActive);
1.149 + test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);
1.150 + test(ci.iValidChunks==1);
1.151 + test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0&&ci.iChnk[0].iMemLen==0x10); // 16bytes
1.152 + test(ci.iIsIoAndMem&&ci.iIsDefault==FALSE);
1.153 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.154 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.155 + test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
1.156 + test(ci.iConfigOption==1&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.157 +
1.158 + test.Next(_L("Read card configuration 5."));
1.159 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.160 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.161 + test(ci.iActiveSignals==KSignalReadyActive);
1.162 + test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);
1.163 + test(ci.iValidChunks==2);
1.164 + test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x1F0&&ci.iChnk[0].iMemLen==8); // 8bytes
1.165 + test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x3F6&&ci.iChnk[1].iMemLen==2); // 2bytes
1.166 + test(ci.iIsIoAndMem&&ci.iIsDefault);
1.167 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.168 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.169 + test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
1.170 + test(ci.iConfigOption==2&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.171 +
1.172 + test.Next(_L("Read card configuration 6."));
1.173 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.174 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.175 + test(ci.iActiveSignals==KSignalReadyActive);
1.176 + test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);
1.177 + test(ci.iValidChunks==2);
1.178 + test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x1F0&&ci.iChnk[0].iMemLen==8); // 8bytes
1.179 + test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x3F6&&ci.iChnk[1].iMemLen==2); // 2bytes
1.180 + test(ci.iIsIoAndMem&&ci.iIsDefault==FALSE);
1.181 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.182 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.183 + test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
1.184 + test(ci.iConfigOption==2&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.185 +
1.186 + test.Next(_L("Read card configuration 7."));
1.187 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.188 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.189 + test(ci.iActiveSignals==KSignalReadyActive);
1.190 + test(ci.iVccMaxInMilliVolts==5500&&ci.iVccMinInMilliVolts==4500);
1.191 + test(ci.iValidChunks==2);
1.192 + test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x170&&ci.iChnk[0].iMemLen==8); // 8bytes
1.193 + test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x376&&ci.iChnk[1].iMemLen==2); // 2bytes
1.194 + test(ci.iIsIoAndMem&&ci.iIsDefault);
1.195 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.196 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==80000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.197 + test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
1.198 + test(ci.iConfigOption==3&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.199 +
1.200 + test.Next(_L("Read card configuration 8."));
1.201 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNone);
1.202 + test(ci.iAccessSpeed==EAccSpeed200nS);
1.203 + test(ci.iActiveSignals==KSignalReadyActive);
1.204 + test(ci.iVccMaxInMilliVolts==3465&&ci.iVccMinInMilliVolts==3135);
1.205 + test(ci.iValidChunks==2);
1.206 + test(ci.iChnk[0].iMemType==EPcCardIo16Mem&&ci.iChnk[0].iMemBaseAddr==0x170&&ci.iChnk[0].iMemLen==8); // 8bytes
1.207 + test(ci.iChnk[1].iMemType==EPcCardIo16Mem&&ci.iChnk[1].iMemBaseAddr==0x376&&ci.iChnk[1].iMemLen==2); // 2bytes
1.208 + test(ci.iIsIoAndMem&&ci.iIsDefault==FALSE);
1.209 + test(ci.iVppMaxInMilliVolts==0&&ci.iVppMinInMilliVolts==0);
1.210 + test(ci.iPwrDown&&ci.iOperCurrentInMicroAmps==45000&&ci.iPwrDwnCurrentInMicroAmps==0);
1.211 + test(ci.iInterruptInfo==(KPcCardIntShare|KPcCardIntPulse|KPcCardIntLevel));
1.212 + test(ci.iConfigOption==3&&ci.iConfigBaseAddr==0x200&&ci.iRegPresent==0x0F);
1.213 +
1.214 + test(pccdDrv.GetConfig(KFunc,&ciBuf)==KErrNotFound);
1.215 +
1.216 + test.Next(_L("Read card memory regions."));
1.217 + TPcCardRegionInfoPckg rgBuf;
1.218 + TPcCardRegionInfo &rg=rgBuf();
1.219 + test.Next(_L("Read card region."));
1.220 + test(pccdDrv.ResetCis(KFunc)==KErrNone);
1.221 + test(pccdDrv.GetRegion(KFunc,&rgBuf)==KErrNone);
1.222 +#if defined (__WINS__)
1.223 + test(rg.iAccessSpeed==EAccSpeed750nS);
1.224 + test(rg.iExtendedAccSpeedInNanoSecs==700);
1.225 + test(rg.iActiveSignals==0);
1.226 + test(rg.iVcc==EPcCardSocket_5V0);
1.227 +#else
1.228 + test(rg.iAccessSpeed==EAccSpeed250nS);
1.229 + test(rg.iExtendedAccSpeedInNanoSecs==0);
1.230 + test(rg.iActiveSignals==KSignalWaitRequired);
1.231 + test(rg.iVcc==EPcCardSocket_3V3);
1.232 +#endif
1.233 + test(rg.iChnk.iMemType==EPcCardCommon16Mem&&rg.iChnk.iMemBaseAddr==0&&rg.iChnk.iMemLen==0x800); // 2K
1.234 + test(rg.iDeviceType==EMDeviceFunSpec);
1.235 + test(pccdDrv.GetRegion(KFunc,&rgBuf)==KErrNotFound);
1.236 +
1.237 + TInt reg=0;
1.238 + test.Next(_L("Request card configuration."));
1.239 + test(pccdDrv.ReadConfigReg(KFunc,0,reg)==KErrGeneral);
1.240 + test(pccdDrv.ReqConfig(KFunc,2)==KErrNone);
1.241 + test(pccdDrv.ReadConfigReg(KFunc,0,reg)==KErrNone);
1.242 + test(reg==2);
1.243 + test(pccdDrv.ReqConfig(KFunc,1)==KErrInUse);
1.244 + pccdDrv.Reset(); // Release config
1.245 + test(pccdDrv.ReqConfig(KFunc,1)==KErrNone);
1.246 +
1.247 + test.Next(_L("Configuration register read/write test.")); // Set IoIs8 bit in ConfigAndStatus register
1.248 + test(pccdDrv.ReadConfigReg(KFunc,1,reg)==KErrNone);
1.249 + test.Printf(_L("reg=0x%x"),reg);
1.250 + test((reg&0x20)==0);
1.251 + reg|=0x20;
1.252 + test(pccdDrv.WriteConfigReg(KFunc,1,reg)==KErrNone);
1.253 + TInt newReg=0;
1.254 + test(pccdDrv.ReadConfigReg(KFunc,1,newReg)==KErrNone);
1.255 + if(reg!=newReg)
1.256 + test.Printf(_L("reg=0x%x, new reg=0x%x"),reg,newReg);
1.257 + test(reg==newReg);
1.258 + reg&=0xDF;
1.259 + test(pccdDrv.WriteConfigReg(KFunc,1,reg)==KErrNone);
1.260 +
1.261 + test.Next(_L("Close/free device"));
1.262 + pccdDrv.Close();
1.263 + r=User::FreeLogicalDevice(_L("PccdIf"));
1.264 + test(r==KErrNone);
1.265 +
1.266 + test.End();
1.267 +
1.268 +#if defined (__WINS__)
1.269 + for (i=0;i<KMaxLocalDrives;i++)
1.270 + Drive[i].Disconnect();
1.271 +#endif
1.272 + return(0);
1.273 + }
1.274 +