testapps/rschandler/Common/src/ResourceHandler_ResourceDetails.cpp
changeset 0 9736f095102e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_ResourceDetails.cpp	Tue Jan 26 15:16:33 2010 +0200
@@ -0,0 +1,405 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+//
+
+
+#include "ResourceHandler.h"
+
+/**
+Gets process details for a process with the given name - assumed to be a valid process
+name.
+*/
+void TResourceDetails::GetProcessData(TDesC& aProcessName)
+	{
+		RProcess process;
+		process.Open(aProcessName);
+
+		// ID
+		iProcessData.iIdString.Format(KFormatDec,process.Id().Id());
+
+		// Store Process Name
+		iProcessData.iProcessName.Copy(aProcessName);
+		//to increase readability of resource table
+		AppendDotsToResourceName(iProcessData.iProcessName);
+		
+		// Priority
+		iProcessData.iPriorityString.Format(KFormatDec,process.Priority());
+		
+		// Protected
+
+		// System
+
+		// Owner
+		RProcess owner;
+		TInt err = KErrNotSupported;
+		if (err == KErrNone)
+			{
+			iProcessData.iOwnerIdString.Format(KFormatHex,owner.Id().Id());
+			}
+		else
+			{
+			iProcessData.iOwnerIdString.Format(KFormatHex,0);
+			}
+				
+		// Exit Type
+		TExitType et = process.ExitType();
+		switch(et)
+			{
+			case(0): iProcessData.iExitTypeString.Copy((_L("Kill"))); break;
+			case(1): iProcessData.iExitTypeString.Copy((_L("Terminate"))); break;
+			case(2): iProcessData.iExitTypeString.Copy((_L("Panic"))); break;
+			case(3): iProcessData.iExitTypeString.Copy((_L("Pending"))); break;
+			default: iProcessData.iExitTypeString.Copy((_L("Error!"))); break;
+			};
+		
+		// Exit Reason
+		TInt er = process.ExitReason();
+		if (er==0) iProcessData.iExitReasonString.Copy(_L("n/a"));
+		else
+			{
+			iProcessData.iExitReasonString.Format(KFormatHex,(TInt)er);
+			}
+
+		// Exit Category
+		TExitCategoryName ec;
+		ec = process.ExitCategory();
+		if (ec.Length() == 0) iProcessData.iExitCategoryName.Copy(_L("n/a"));
+		else iProcessData.iExitCategoryName.Copy(ec);
+
+		// UIDs
+		TUidType uids = process.Type();
+		iProcessData.iUidType0String.Format(KFormatHex, uids[0].iUid);
+		iProcessData.iUidType1String.Format(KFormatHex, uids[1].iUid);
+		iProcessData.iUidType2String.Format(KFormatHex, uids[2].iUid);
+				
+		// File
+		iProcessData.iFileName = process.FileName();
+
+		process.Close();	
+	}
+	
+/**
+Gets process details for a drive with the properties. These properties are assumed 
+to be a valid.
+*/
+void TResourceDetails::GetDriveData(TInt aValidDriveNum, TDriveUnit aDriveUnit, TVolumeInfo aVolumeInfo)
+	{
+	iDriveData.iDriveName.Copy(aDriveUnit.Name());
+	iDriveData.iVolumeName.Copy(aVolumeInfo.iName);
+	iDriveData.iDriveNumberString.Format(KFormatDec, aValidDriveNum);
+
+	TBufC<20> mediaInfo;
+	switch (aVolumeInfo.iDrive.iType)
+		{
+		case EMediaNotPresent:mediaInfo=_L("EMediaNotPresent");break;
+		case EMediaUnknown:mediaInfo=_L("EMediaUnknown");break;
+		case EMediaFloppy:mediaInfo=_L("EMediaFloppy");break;
+		case EMediaHardDisk:mediaInfo=_L("EMediaHardDisk");break;
+		case EMediaCdRom:mediaInfo=_L("EMediaCdRom");break;
+		case EMediaRam:mediaInfo=_L("EMediaRam");break;
+		case EMediaFlash:mediaInfo=_L("EMediaFlash");break;
+		case EMediaRom:mediaInfo=_L("EMediaRom");break;
+		case EMediaRemote:mediaInfo=_L("EMediaRemote");break;
+		default:mediaInfo=_L("Other");break;
+		}
+
+	iDriveData.iMediaString.Copy(mediaInfo);
+	iDriveData.iAttributesString.Format(KFormatHex,aVolumeInfo.iDrive.iDriveAtt);
+	iDriveData.iSpaceString.Format(KFormatDec64,aVolumeInfo.iSize);
+	#if defined(WINS)
+		iDriveData.iFreeSpaceString.Copy(_L("Unavail."));
+	#else
+	if (aVolumeInfo.iFree.GetTInt() > aVolumeInfo.iSize.GetTInt()) // this value is odd on wins
+		{
+		iDriveData.iFreeSpaceString.Format(KFormatDec,aVolumeInfo.iSize.GetTInt());
+		}
+	else if (aVolumeInfo.iFree.GetTInt() < 0)
+		{
+		iDriveData.iFreeSpaceString.Copy(_L("InvalidVal"));
+		}
+	else
+		{
+		iDriveData.iFreeSpaceString.Format(KFormatDec,aVolumeInfo.iFree.GetTInt());
+		}
+	#endif
+	}
+	
+/**
+Gets thread details for a thread with the given name - assumed to be a valid name.
+*/
+void TResourceDetails::GetThreadData(TDesC& aThreadName)
+	{
+	RThread thread;
+	TInt err = thread.Open(aThreadName);
+	if (err == KErrNone)
+		{
+		// ID
+		iThreadData.iIdString.Format(KFormatDec,thread.Id().Id());
+
+		// Name
+		iThreadData.iThreadName.Copy(aThreadName);
+		
+		//to increase readability of resource table
+		AppendDotsToResourceName(iThreadData.iThreadName);
+
+		// Priority
+		iThreadData.iPriorityString.Format(KFormatDec,thread.Priority());
+
+		// Owner Process
+		RProcess owner;
+		thread.Process(owner);
+		iThreadData.iOwnerIdString.Format(KFormatDec,owner.Id().Id());
+
+		owner.Close();
+				
+		// Stack Size
+
+		TInt aHeapSize = 0, aStackSize = 0;
+		iThreadData.iStackSizeString.Format(KFormatHex,aStackSize);
+		iThreadData.iHeapSizeString.Format(KFormatHex,aHeapSize);
+		
+		// Protected
+
+		// System
+		
+		// Exit Type
+		TExitType et = thread.ExitType();
+		switch(et)
+			{
+			case(0): iThreadData.iExitTypeString.Copy((_L("Kill"))); break;
+			case(1): iThreadData.iExitTypeString.Copy((_L("Terminate"))); break;
+			case(2): iThreadData.iExitTypeString.Copy((_L("Panic"))); break;
+			case(3): iThreadData.iExitTypeString.Copy((_L("Pending"))); break;
+			default: iThreadData.iExitTypeString.Copy((_L("Error!"))); break;
+			};
+
+		// Exit Reason
+		
+		TInt er = thread.ExitReason();
+		if (er==0) iThreadData.iExitReasonString.Copy(_L("n/a"));
+		else iThreadData.iExitReasonString.Format(KFormatHex,(TInt)er);
+
+		// Exit Category
+
+		TExitCategoryName ec;
+		ec = thread.ExitCategory();
+		if (ec.Length() == 0) iThreadData.iExitCategoryName.Copy(_L("n/a"));
+		else iThreadData.iExitCategoryName.Copy(ec);
+
+		thread.Close();
+		}
+	}
+	
+/**
+Gets details for a chunk using the given TFindChunk and name.
+*/
+void TResourceDetails::GetChunkData(TFindChunk findHb, TDesC& aChunkName)
+	{	
+	RChunk chunk;
+	chunk.Open(findHb);
+
+	// Name
+	iChunkData.iChunkName.Copy(aChunkName);
+	
+	//to increase readability of resource table
+	AppendDotsToResourceName(iChunkData.iChunkName);
+
+	// Size
+	TInt chunkSize = 0;
+	iChunkData.iSizeString.Format(KFormatHex,chunkSize);
+
+	// Max Size
+
+	TInt chunkMaxSize = 0;
+	iChunkData.iMaxSizeString.Format(KFormatHex,chunkMaxSize);
+		
+	// Readable
+	if (chunk.IsReadable()) iChunkData.iReadableIndicator.Copy(_L("R"));
+	else iChunkData.iReadableIndicator.Copy(_L("-"));
+
+	// Writeable
+	if (chunk.IsWritable()) iChunkData.iWritableIndicator.Copy(_L("W"));
+	else iChunkData.iWritableIndicator.Copy(_L("-"));
+			
+	chunk.Close();
+	}
+
+/**
+Gets details for a mutex using the given TFindMutex and name.
+*/
+void TResourceDetails::GetMutexData(TFindMutex& findHb, TDesC& aMutexName)
+	{	
+	RMutex mutex;
+	
+	// Name
+	iMutexData.iMutexName.Copy(aMutexName);	
+	
+	//to increase readability of resource table
+	AppendDotsToResourceName(iMutexData.iMutexName);
+		
+	// Count
+	mutex.Open(findHb);
+	TInt count = 0;
+	iMutexData.iHexCountString.Format(KFormatHex, count);
+	iMutexData.iDecCountString.Format(KFormatDec, count);
+	mutex.Close();
+	}
+	
+/**
+Gets details for a mutex using the given TFindSemaphore and name.
+*/
+void TResourceDetails::GetSemaphoreData(TFindSemaphore& findHb, TDesC& aSemaphoreName)
+	{			
+		RSemaphore sem;
+		// Name
+		iSemaphoreData.iSemaphoreName.Copy(aSemaphoreName);
+		//to increase readability of resource table
+		AppendDotsToResourceName(iSemaphoreData.iSemaphoreName);
+		iSemaphoreData.iSemaphoreName.AppendFill('.', KMaxFullName - iSemaphoreData.iSemaphoreName.Length());
+		
+		// Count
+		sem.Open(findHb);
+		TInt count = 0;
+		iSemaphoreData.iHexCountString.Format(KFormatHex,count);
+	
+		iSemaphoreData.iDecCountString.Format(KFormatDec,count);
+		
+		sem.Close();
+		}
+
+/**
+Gets details for a HAL entry. Assumes that the parameters are valid.
+*/
+void TResourceDetails::GetHalData(TInt aValidEntryNum, HAL::SEntry* aSEntry)
+	{
+	iHalData.iNumberString.Format(KFormatDec,aValidEntryNum);
+
+	TBuf<100> halName;
+	switch (aValidEntryNum)
+		{
+		case HALData::EManufacturer:	halName=_L("EManufacturer");break;
+		case HALData::EManufacturerHardwareRev:	halName=_L("EManufacturerHardwareRev");break;
+		case HALData::EManufacturerSoftwareRev:	halName=_L("EManufacturerSoftwareRev");break;
+		case HALData::EManufacturerSoftwareBuild:	halName=_L("EManufacturerSoftwareBuild");break;
+		case HALData::EModel:	halName=_L("EModel");break;
+		case HALData::EMachineUid:	halName=_L("EMachineUid");break;
+		case HALData::EDeviceFamily:	halName=_L("EDeviceFamily");break;
+		case HALData::EDeviceFamilyRev:	halName=_L("EDeviceFamilyRev");break;
+		case HALData::ECPU:	halName=_L("ECPU");break;
+		case HALData::ECPUArch:	halName=_L("ECPUArch");break;
+		case HALData::ECPUABI:	halName=_L("ECPUABI");break;
+		case HALData::ECPUSpeed:	halName=_L("ECPUSpeed");break;
+		case HALData::ESystemStartupReason:	halName=_L("ESystemStartupReason");break;
+		case HALData::ESystemException:	halName=_L("ESystemException");break;
+		case HALData::ESystemTickPeriod:	halName=_L("ESystemTickPeriod");break;
+		case HALData::EMemoryRAM:	halName=_L("EMemoryRAM");break;
+		case HALData::EMemoryRAMFree:	halName=_L("EMemoryRAMFree");break;	
+		case HALData::EMemoryROM:	halName=_L("EMemoryROM");break;
+		case HALData::EMemoryPageSize:	halName=_L("EMemoryPageSize");break;
+		case HALData::EPowerGood:	halName=_L("EPowerGood");break;
+		case HALData::EPowerBatteryStatus:	halName=_L("EPowerBatteryStatus");break;
+		case HALData::EPowerBackup:	halName=_L("EPowerBackup");break;	
+		case HALData::EPowerBackupStatus:	halName=_L("EPowerBackupStatus");break;
+		case HALData::EPowerExternal:	halName=_L("EPowerExternal");break;
+		case HALData::EKeyboard:	halName=_L("EKeyboard");break;
+		case HALData::EKeyboardDeviceKeys:	halName=_L("EKeyboardDeviceKeys");break;
+		case HALData::EKeyboardAppKeys:	halName=_L("EKeyboardAppKeys");break;
+		case HALData::EKeyboardClick:	halName=_L("EKeyboardClick");break;
+		case HALData::EKeyboardClickState:	halName=_L("EKeyboardClickState");break;
+		case HALData::EKeyboardClickVolume:	halName=_L("EKeyboardClickVolume");break;
+		case HALData::EKeyboardClickVolumeMax:	halName=_L("EKeyboardClickVolumeMax");break;
+		case HALData::EDisplayXPixels:	halName=_L("EDisplayXPixels");break;
+		case HALData::EDisplayYPixels:	halName=_L("EDisplayYPixels");break;
+		case HALData::EDisplayXTwips:	halName=_L("EDisplayXTwips");break;
+		case HALData::EDisplayYTwips:	halName=_L("EDisplayYTwips");break;
+		case HALData::EDisplayColors:	halName=_L("EDisplayColors");break;
+		case HALData::EDisplayState:	halName=_L("EDisplayState");break;
+		case HALData::EDisplayContrast:	halName=_L("EDisplayContrast");break;
+		case HALData::EDisplayContrastMax:	halName=_L("EDisplayContrastMax");break;
+		case HALData::EBacklight:	halName=_L("EBacklight");break;
+		case HALData::EBacklightState:	halName=_L("EBacklightState");break;
+		case HALData::EPen:	halName=_L("EPen");break;
+		case HALData::EPenX:	halName=_L("EPenX");break;
+		case HALData::EPenY:	halName=_L("EPenY");break;
+		case HALData::EPenDisplayOn:	halName=_L("EPenDisplayOn");break;
+		case HALData::EPenClick:	halName=_L("EPenClick");break;
+		case HALData::EPenClickState:	halName=_L("EPenClickState");break;
+		case HALData::EPenClickVolume:	halName=_L("EPenClickVolume");break;
+		case HALData::EPenClickVolumeMax:	halName=_L("EPenClickVolumeMax");break;
+		case HALData::EMouse:	halName=_L("EMouse");break;
+		case HALData::EMouseX:	halName=_L("EMouseX");break;
+		case HALData::EMouseY:	halName=_L("EMouseY");break;
+		case HALData::EMouseState:	halName=_L("EMouseState");break;
+		case HALData::EMouseSpeed:	halName=_L("EMouseSpeed");break;
+		case HALData::EMouseAcceleration:	halName=_L("EMouseAcceleration");break;
+		case HALData::EMouseButtons:	halName=_L("EMouseButtons");break;
+		case HALData::EMouseButtonState:	halName=_L("EMouseButtonState");break;
+		case HALData::ECaseState:	halName=_L("ECaseState");break;
+		case HALData::ECaseSwitch:	halName=_L("ECaseSwitch");break;
+		case HALData::ECaseSwitchDisplayOn:	halName=_L("ECaseSwitchDisplayOn");break;
+		case HALData::ECaseSwitchDisplayOff:	halName=_L("ECaseSwitchDisplayOff");break;
+		case HALData::ELEDs:	halName=_L("ELEDs");break;
+		case HALData::ELEDmask:	halName=_L("ELEDmask");break;
+		case HALData::EIntegratedPhone:	halName=_L("EIntegratedPhone");break;
+		case HALData::EDisplayBrightness:	halName=_L("EDisplayBrightness");break;
+		case HALData::EDisplayBrightnessMax:	halName=_L("EDisplayBrightnessMax");break;
+		case HALData::EKeyboardBacklightState:	halName=_L("EKeyboardBacklightState");break;
+		case HALData::EAccessoryPower:	halName=_L("EAccessoryPower");break;
+		case HALData::ELanguageIndex:	halName=_L("ELanguageIndex");break;
+		case HALData::EKeyboardIndex:	halName=_L("EKeyboardIndex");break;
+		case HALData::EMaxRAMDriveSize:	halName=_L("EMaxRAMDriveSize");break;
+		case HALData::EKeyboardState:	halName=_L("EKeyboardState");break;
+		case HALData::ESystemDrive:	halName=_L("ESystemDrive");break;
+		case HALData::EPenState:	halName=_L("EPenState");break;
+		case HALData::EDisplayIsMono:	halName=_L("EDisplayIsMono");break;
+		case HALData::EDisplayIsPalettized:	halName=_L("EDisplayIsPalettized");break;
+		case HALData::EDisplayBitsPerPixel:	halName=_L("EDisplayBitsPerPixel");break;
+		case HALData::EDisplayNumModes:	halName=_L("EDisplayNumModes");break;
+		case HALData::EDisplayMemoryAddress:	halName=_L("EDisplayMemoryAddress");break;
+		case HALData::EDisplayOffsetToFirstPixel:	halName=_L("EDisplayOffsetToFirstPixel");break;
+		case HALData::EDisplayOffsetBetweenLines:	halName=_L("EDisplayOffsetBetweenLines");break;
+		case HALData::EDisplayPaletteEntry:	halName=_L("EDisplayPaletteEntry");break;
+		case HALData::EDisplayIsPixelOrderRGB:	halName=_L("EDisplayIsPixelOrderRGB");break;
+		case HALData::EDisplayIsPixelOrderLandscape:	halName=_L("EDisplayIsPixelOrderLandscape");break;
+		case HALData::EDisplayMode:	halName=_L("EDisplayMode");break;
+		case HALData::ESwitches:	halName=_L("ESwitches");break;
+		case HALData::EDebugPort:	halName=_L("EDebugPort");break;
+		case HALData::ELocaleLoaded:	halName=_L("ELocaleLoaded");break;
+		case HALData::ENumHalAttributes:	halName=_L("ENumHalAttributes");break;
+		default:halName=_L("Unknown");break;
+		}
+
+		iHalData.iName.Copy(halName);		
+
+		if (aSEntry[aValidEntryNum].iProperties & HAL::EEntryDynamic)
+			iHalData.iDynamicIndicator=_L("D");
+		else iHalData.iDynamicIndicator=_L("-");
+		
+		iHalData.iDecValString.Format(KFormatDec,aSEntry[aValidEntryNum].iValue);
+			
+		iHalData.iHexValString.Format(KFormatHex,aSEntry[aValidEntryNum].iValue);
+		}
+
+/**
+Appends dots (after 3 spaces) to a resource name.
+Used for names of resources in a table - so you can follow the dots to read the
+resource details.
+*/
+void TResourceDetails::AppendDotsToResourceName(TFullName& aResourceName)
+	{
+	if (aResourceName.Length() < KMaxFullName - 3)
+			aResourceName.AppendFill(' ', 3);
+		aResourceName.AppendFill('.', KMaxFullName - aResourceName.Length());
+	}
+