kernel/eka/debug/crashMonitor/src/scmconfigitem.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/debug/crashMonitor/src/scmconfigitem.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,264 @@
+// Copyright (c) 1994-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:
+// e32\debug\crashMonitor\src\scmconfigitem.cpp
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+#include <e32def.h>
+#include <e32def_private.h>
+
+#include <scmconfigitem.h>
+#include <scmdatatypes.h>
+#include <scmtrace.h>
+
+namespace Debug
+	{	
+	
+/**
+ * TConfigItem constructor
+ */
+TConfigItem::TConfigItem() 
+: iDataType(ELast)
+, iSizeToDump(0)
+, iSpaceRequiredToDump(0)
+, iPriority(0)
+, iNext(NULL)
+	{
+	}
+
+/**
+ * TConfigItem constructor
+ * @param aDataType - data type id
+ * @param aSizeToDump - size of the config data 
+ * @param aPriority - priority of this data type (if 0 then not used)
+ */	
+TConfigItem::TConfigItem(TSCMDataType aDataType,  TUint8 aPriority, TInt32 aSizeToDump)
+: iDataType(aDataType)
+, iSizeToDump(aSizeToDump)
+, iPriority(aPriority)
+, iNext(NULL)
+	{	
+	}
+	
+/**
+ * Serialize - writes this object to the supplied byte stream
+ * @param aItem -  aWriter - the TByteStreamWriter that will be written to
+ * @return one of the OS wide codes
+ */
+TInt TConfigItem::Serialize(TByteStreamWriter& aWriter)
+	{	
+	TInt startPos = aWriter.CurrentPosition();
+	
+	aWriter.WriteByte((TUint8)iDataType);
+	aWriter.WriteInt(iSizeToDump);
+	aWriter.WriteByte(iPriority);				
+
+	TInt sizeWritten = aWriter.CurrentPosition() - startPos;
+	if(sizeWritten != GetSize())
+		{
+		// error between actual size & real size in data
+		CLTRACE2("TConfigItem serialization size error sizeWritten %d GetSize() %d", sizeWritten, GetSize());
+		return KErrCorrupt;
+		}
+	
+	return KErrNone;
+	}
+	
+
+/**
+ * Deserialize - read this objects state from the supplied byte stream
+ * @param aItem -  aReader - the TByteStreamReader that will be read from
+ * @return One of the OS wide codes
+ */
+TInt TConfigItem::Deserialize(TByteStreamReader& aReader)
+	{
+	TInt startPos = aReader.CurrentPosition();
+
+	iDataType = (TSCMDataType) aReader.ReadByte();	
+	iSizeToDump = aReader.ReadInt();
+	iPriority = aReader.ReadByte();	
+	
+	TInt sizeRead = aReader.CurrentPosition() - startPos;
+	if(sizeRead != GetSize())
+		{
+		// error between actual size & real size in data
+		CLTRACE("(TConfigItem::Deserialize) ERROR size error");
+		return KErrCorrupt;
+		}				
+	
+	return KErrNone;
+	}
+
+
+/**
+ * GetDataType 
+ * @return data type of this config item
+ */
+ TConfigItem::TSCMDataType TConfigItem::GetDataType() const
+	{
+	return iDataType;
+	}
+
+/**
+ * GetPriority 
+ * @return priority of this config item (0-255)
+ */ 
+TInt TConfigItem::GetPriority() const
+	{
+	return iPriority;
+	}
+
+/**
+ * GetSize 
+ * @return size to dump in bytes
+ */
+TInt TConfigItem::GetSizeToDump() const
+	{
+	return iSizeToDump;
+	}
+
+/**
+ * GetSize 
+ * @return size of this object when streamed in bytes
+ */
+TInt TConfigItem::GetSize() const
+	{
+	return 6;
+	}
+
+
+
+/**
+ * Returns next item
+ * @return Next item
+ */
+TConfigItem* TConfigItem::Next() const
+	{
+	return iNext;
+	}
+
+	/**
+	 * Print - displays info about this TConfigItem 
+	 * @return void
+	 */
+ 	void TConfigItem::Print() const 
+ 		{
+ 		CLTRACE3( "(TConfigItem::Print) iDataType = %d iPriority = %d iSizeToDump = %d"
+ 				, iDataType, iPriority, iSizeToDump);
+ 		}
+ 	
+ 	TBool TConfigItem::operator == (const TConfigItem& aOther) const
+ 		{
+ 		return (iDataType == aOther.iDataType && iSizeToDump == aOther.iSizeToDump && iPriority == aOther.iPriority);
+ 		}
+
+/**
+ * Sets the space required parameter for this config item
+ * @param aSpaceReq Space required
+ */
+void TConfigItem::SetSpaceRequired(TUint aSpaceReq)
+	{
+	iSpaceRequiredToDump = aSpaceReq;
+	}
+
+/**
+ * Gets the space required to store this config item
+ * @return
+ */
+TUint TConfigItem::GetSpaceRequired()
+	{
+	return iSpaceRequiredToDump;
+	}
+
+#ifndef __KERNEL_MODE__
+
+// human readable strings for TSCMDataType
+_LIT(KExceptionStacks, "Exception Stacks");
+_LIT(KTraceData, "Trace data");
+_LIT(KProcessCodeSegs, "ProcessCodeSegs");
+_LIT(KThreadsUsrStack, "Threads UserStack");
+_LIT(KThreadsSvrStack, "Threads Supervisor Stack");
+_LIT(KKernelHeap, "Kernel Heap");
+_LIT(KThreadsUsrRegisters, "Threads User Registers");
+_LIT(KThreadsSvrRegisters, "Threads Supervisor Registers");
+_LIT(KProcessMetaData, "Process Meta Data");
+_LIT(KThreadsMetaData, "Threads Meta Data");
+_LIT(KCrashedProcessCodeSegs, "Crashed Process Code Segs");
+_LIT(KCrashedProcessUsrStacks, "Crashed Process' User Stack's");
+_LIT(KCrashedProcessSvrStacks, "Crashed Process' Supervisor Stack's");
+_LIT(KCrashedProcessMetaData, "Crashed Process Meta Data");
+_LIT(KCrashedThreadMetaData, "Crashed Thread Meta Data");				
+_LIT(KLocks, "SCM Locks");
+_LIT(KVariantSpecific, "Variant Specific Data");
+_LIT(KRomInfo, "ROM Info");
+_LIT(KUnknown,  "Unknown");
+
+/**
+ * helper function for converting TSCMDataType enul to human readable form
+ */
+ const TDesC& TConfigItem::GetSCMConfigOptionText(TConfigItem::TSCMDataType aType)
+ 		{
+ 		switch (aType)
+ 			{
+ 			case TConfigItem::EExceptionStacks:
+ 				return KExceptionStacks;
+ 			case TConfigItem::ETraceData:
+ 				return KTraceData;
+ 			case TConfigItem::EProcessCodeSegs:
+ 				return KProcessCodeSegs();
+ 			case TConfigItem::EThreadsUsrStack:
+ 				return KThreadsUsrStack();
+ 			case TConfigItem::EThreadsSvrStack:
+ 				return KThreadsSvrStack;
+ 			case TConfigItem::EThreadsUsrRegisters:
+ 				return KThreadsUsrRegisters();
+ 			case TConfigItem::EThreadsSvrRegisters:
+ 				return KThreadsSvrRegisters();
+ 			case TConfigItem::EProcessMetaData:
+ 				return KProcessMetaData();
+ 			case TConfigItem::EThreadsMetaData:
+ 				return KThreadsMetaData();
+ 			case TConfigItem::ECrashedProcessCodeSegs:
+ 				return KCrashedProcessCodeSegs();
+ 			case TConfigItem::ECrashedProcessUsrStacks:
+ 				return KCrashedProcessUsrStacks();
+ 			case TConfigItem::ECrashedProcessSvrStacks:
+ 				return KCrashedProcessSvrStacks();
+ 			case TConfigItem::ECrashedProcessMetaData:
+ 				return KCrashedProcessMetaData();
+ 			case TConfigItem::ECrashedThreadMetaData:						
+ 				return KCrashedThreadMetaData();
+ 			case TConfigItem::ELocks:						
+ 				return KLocks();
+ 			case TConfigItem::EKernelHeap:
+ 				return KKernelHeap();
+ 			case TConfigItem::EVariantSpecificData:
+ 				return KVariantSpecific();
+ 			case TConfigItem::ERomInfo:
+ 				return KRomInfo();	
+			case TConfigItem::ELast:
+ 			default:
+ 				return KUnknown();
+ 			}
+ 		}
+#endif // ! __KERNEL_MODE__
+}
+
+//eof
+
+