sl@0: // Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // e32\debug\crashMonitor\src\scmconfigitem.cpp sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @internalTechnology sl@0: */ sl@0: #include sl@0: #include sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: namespace Debug sl@0: { sl@0: sl@0: /** sl@0: * TConfigItem constructor sl@0: */ sl@0: TConfigItem::TConfigItem() sl@0: : iDataType(ELast) sl@0: , iSizeToDump(0) sl@0: , iSpaceRequiredToDump(0) sl@0: , iPriority(0) sl@0: , iNext(NULL) sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * TConfigItem constructor sl@0: * @param aDataType - data type id sl@0: * @param aSizeToDump - size of the config data sl@0: * @param aPriority - priority of this data type (if 0 then not used) sl@0: */ sl@0: TConfigItem::TConfigItem(TSCMDataType aDataType, TUint8 aPriority, TInt32 aSizeToDump) sl@0: : iDataType(aDataType) sl@0: , iSizeToDump(aSizeToDump) sl@0: , iPriority(aPriority) sl@0: , iNext(NULL) sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * Serialize - writes this object to the supplied byte stream sl@0: * @param aItem - aWriter - the TByteStreamWriter that will be written to sl@0: * @return one of the OS wide codes sl@0: */ sl@0: TInt TConfigItem::Serialize(TByteStreamWriter& aWriter) sl@0: { sl@0: TInt startPos = aWriter.CurrentPosition(); sl@0: sl@0: aWriter.WriteByte((TUint8)iDataType); sl@0: aWriter.WriteInt(iSizeToDump); sl@0: aWriter.WriteByte(iPriority); sl@0: sl@0: TInt sizeWritten = aWriter.CurrentPosition() - startPos; sl@0: if(sizeWritten != GetSize()) sl@0: { sl@0: // error between actual size & real size in data sl@0: CLTRACE2("TConfigItem serialization size error sizeWritten %d GetSize() %d", sizeWritten, GetSize()); sl@0: return KErrCorrupt; sl@0: } sl@0: sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * Deserialize - read this objects state from the supplied byte stream sl@0: * @param aItem - aReader - the TByteStreamReader that will be read from sl@0: * @return One of the OS wide codes sl@0: */ sl@0: TInt TConfigItem::Deserialize(TByteStreamReader& aReader) sl@0: { sl@0: TInt startPos = aReader.CurrentPosition(); sl@0: sl@0: iDataType = (TSCMDataType) aReader.ReadByte(); sl@0: iSizeToDump = aReader.ReadInt(); sl@0: iPriority = aReader.ReadByte(); sl@0: sl@0: TInt sizeRead = aReader.CurrentPosition() - startPos; sl@0: if(sizeRead != GetSize()) sl@0: { sl@0: // error between actual size & real size in data sl@0: CLTRACE("(TConfigItem::Deserialize) ERROR size error"); sl@0: return KErrCorrupt; sl@0: } sl@0: sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * GetDataType sl@0: * @return data type of this config item sl@0: */ sl@0: TConfigItem::TSCMDataType TConfigItem::GetDataType() const sl@0: { sl@0: return iDataType; sl@0: } sl@0: sl@0: /** sl@0: * GetPriority sl@0: * @return priority of this config item (0-255) sl@0: */ sl@0: TInt TConfigItem::GetPriority() const sl@0: { sl@0: return iPriority; sl@0: } sl@0: sl@0: /** sl@0: * GetSize sl@0: * @return size to dump in bytes sl@0: */ sl@0: TInt TConfigItem::GetSizeToDump() const sl@0: { sl@0: return iSizeToDump; sl@0: } sl@0: sl@0: /** sl@0: * GetSize sl@0: * @return size of this object when streamed in bytes sl@0: */ sl@0: TInt TConfigItem::GetSize() const sl@0: { sl@0: return 6; sl@0: } sl@0: sl@0: sl@0: sl@0: /** sl@0: * Returns next item sl@0: * @return Next item sl@0: */ sl@0: TConfigItem* TConfigItem::Next() const sl@0: { sl@0: return iNext; sl@0: } sl@0: sl@0: /** sl@0: * Print - displays info about this TConfigItem sl@0: * @return void sl@0: */ sl@0: void TConfigItem::Print() const sl@0: { sl@0: CLTRACE3( "(TConfigItem::Print) iDataType = %d iPriority = %d iSizeToDump = %d" sl@0: , iDataType, iPriority, iSizeToDump); sl@0: } sl@0: sl@0: TBool TConfigItem::operator == (const TConfigItem& aOther) const sl@0: { sl@0: return (iDataType == aOther.iDataType && iSizeToDump == aOther.iSizeToDump && iPriority == aOther.iPriority); sl@0: } sl@0: sl@0: /** sl@0: * Sets the space required parameter for this config item sl@0: * @param aSpaceReq Space required sl@0: */ sl@0: void TConfigItem::SetSpaceRequired(TUint aSpaceReq) sl@0: { sl@0: iSpaceRequiredToDump = aSpaceReq; sl@0: } sl@0: sl@0: /** sl@0: * Gets the space required to store this config item sl@0: * @return sl@0: */ sl@0: TUint TConfigItem::GetSpaceRequired() sl@0: { sl@0: return iSpaceRequiredToDump; sl@0: } sl@0: sl@0: #ifndef __KERNEL_MODE__ sl@0: sl@0: // human readable strings for TSCMDataType sl@0: _LIT(KExceptionStacks, "Exception Stacks"); sl@0: _LIT(KTraceData, "Trace data"); sl@0: _LIT(KProcessCodeSegs, "ProcessCodeSegs"); sl@0: _LIT(KThreadsUsrStack, "Threads UserStack"); sl@0: _LIT(KThreadsSvrStack, "Threads Supervisor Stack"); sl@0: _LIT(KKernelHeap, "Kernel Heap"); sl@0: _LIT(KThreadsUsrRegisters, "Threads User Registers"); sl@0: _LIT(KThreadsSvrRegisters, "Threads Supervisor Registers"); sl@0: _LIT(KProcessMetaData, "Process Meta Data"); sl@0: _LIT(KThreadsMetaData, "Threads Meta Data"); sl@0: _LIT(KCrashedProcessCodeSegs, "Crashed Process Code Segs"); sl@0: _LIT(KCrashedProcessUsrStacks, "Crashed Process' User Stack's"); sl@0: _LIT(KCrashedProcessSvrStacks, "Crashed Process' Supervisor Stack's"); sl@0: _LIT(KCrashedProcessMetaData, "Crashed Process Meta Data"); sl@0: _LIT(KCrashedThreadMetaData, "Crashed Thread Meta Data"); sl@0: _LIT(KLocks, "SCM Locks"); sl@0: _LIT(KVariantSpecific, "Variant Specific Data"); sl@0: _LIT(KRomInfo, "ROM Info"); sl@0: _LIT(KUnknown, "Unknown"); sl@0: sl@0: /** sl@0: * helper function for converting TSCMDataType enul to human readable form sl@0: */ sl@0: const TDesC& TConfigItem::GetSCMConfigOptionText(TConfigItem::TSCMDataType aType) sl@0: { sl@0: switch (aType) sl@0: { sl@0: case TConfigItem::EExceptionStacks: sl@0: return KExceptionStacks; sl@0: case TConfigItem::ETraceData: sl@0: return KTraceData; sl@0: case TConfigItem::EProcessCodeSegs: sl@0: return KProcessCodeSegs(); sl@0: case TConfigItem::EThreadsUsrStack: sl@0: return KThreadsUsrStack(); sl@0: case TConfigItem::EThreadsSvrStack: sl@0: return KThreadsSvrStack; sl@0: case TConfigItem::EThreadsUsrRegisters: sl@0: return KThreadsUsrRegisters(); sl@0: case TConfigItem::EThreadsSvrRegisters: sl@0: return KThreadsSvrRegisters(); sl@0: case TConfigItem::EProcessMetaData: sl@0: return KProcessMetaData(); sl@0: case TConfigItem::EThreadsMetaData: sl@0: return KThreadsMetaData(); sl@0: case TConfigItem::ECrashedProcessCodeSegs: sl@0: return KCrashedProcessCodeSegs(); sl@0: case TConfigItem::ECrashedProcessUsrStacks: sl@0: return KCrashedProcessUsrStacks(); sl@0: case TConfigItem::ECrashedProcessSvrStacks: sl@0: return KCrashedProcessSvrStacks(); sl@0: case TConfigItem::ECrashedProcessMetaData: sl@0: return KCrashedProcessMetaData(); sl@0: case TConfigItem::ECrashedThreadMetaData: sl@0: return KCrashedThreadMetaData(); sl@0: case TConfigItem::ELocks: sl@0: return KLocks(); sl@0: case TConfigItem::EKernelHeap: sl@0: return KKernelHeap(); sl@0: case TConfigItem::EVariantSpecificData: sl@0: return KVariantSpecific(); sl@0: case TConfigItem::ERomInfo: sl@0: return KRomInfo(); sl@0: case TConfigItem::ELast: sl@0: default: sl@0: return KUnknown(); sl@0: } sl@0: } sl@0: #endif // ! __KERNEL_MODE__ sl@0: } sl@0: sl@0: //eof sl@0: sl@0: