testapps/rschandler/Common/src/ResourceHandler_ResourceDetails.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 27 May 2010 12:52:45 +0300
changeset 13 3a35f7917fa6
parent 0 9736f095102e
permissions -rw-r--r--
Revision: 201021 Kit: 2010121

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