os/kernelhwsrv/kernel/eka/debug/crashMonitor/src/scmconfigitem.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200 (2012-06-15)
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// e32\debug\crashMonitor\src\scmconfigitem.cpp
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
/**
sl@0
    19
 @file
sl@0
    20
 @internalTechnology
sl@0
    21
*/
sl@0
    22
#include <e32def.h>
sl@0
    23
#include <e32def_private.h>
sl@0
    24
sl@0
    25
#include <scmconfigitem.h>
sl@0
    26
#include <scmdatatypes.h>
sl@0
    27
#include <scmtrace.h>
sl@0
    28
sl@0
    29
namespace Debug
sl@0
    30
	{	
sl@0
    31
	
sl@0
    32
/**
sl@0
    33
 * TConfigItem constructor
sl@0
    34
 */
sl@0
    35
TConfigItem::TConfigItem() 
sl@0
    36
: iDataType(ELast)
sl@0
    37
, iSizeToDump(0)
sl@0
    38
, iSpaceRequiredToDump(0)
sl@0
    39
, iPriority(0)
sl@0
    40
, iNext(NULL)
sl@0
    41
	{
sl@0
    42
	}
sl@0
    43
sl@0
    44
/**
sl@0
    45
 * TConfigItem constructor
sl@0
    46
 * @param aDataType - data type id
sl@0
    47
 * @param aSizeToDump - size of the config data 
sl@0
    48
 * @param aPriority - priority of this data type (if 0 then not used)
sl@0
    49
 */	
sl@0
    50
TConfigItem::TConfigItem(TSCMDataType aDataType,  TUint8 aPriority, TInt32 aSizeToDump)
sl@0
    51
: iDataType(aDataType)
sl@0
    52
, iSizeToDump(aSizeToDump)
sl@0
    53
, iPriority(aPriority)
sl@0
    54
, iNext(NULL)
sl@0
    55
	{	
sl@0
    56
	}
sl@0
    57
	
sl@0
    58
/**
sl@0
    59
 * Serialize - writes this object to the supplied byte stream
sl@0
    60
 * @param aItem -  aWriter - the TByteStreamWriter that will be written to
sl@0
    61
 * @return one of the OS wide codes
sl@0
    62
 */
sl@0
    63
TInt TConfigItem::Serialize(TByteStreamWriter& aWriter)
sl@0
    64
	{	
sl@0
    65
	TInt startPos = aWriter.CurrentPosition();
sl@0
    66
	
sl@0
    67
	aWriter.WriteByte((TUint8)iDataType);
sl@0
    68
	aWriter.WriteInt(iSizeToDump);
sl@0
    69
	aWriter.WriteByte(iPriority);				
sl@0
    70
sl@0
    71
	TInt sizeWritten = aWriter.CurrentPosition() - startPos;
sl@0
    72
	if(sizeWritten != GetSize())
sl@0
    73
		{
sl@0
    74
		// error between actual size & real size in data
sl@0
    75
		CLTRACE2("TConfigItem serialization size error sizeWritten %d GetSize() %d", sizeWritten, GetSize());
sl@0
    76
		return KErrCorrupt;
sl@0
    77
		}
sl@0
    78
	
sl@0
    79
	return KErrNone;
sl@0
    80
	}
sl@0
    81
	
sl@0
    82
sl@0
    83
/**
sl@0
    84
 * Deserialize - read this objects state from the supplied byte stream
sl@0
    85
 * @param aItem -  aReader - the TByteStreamReader that will be read from
sl@0
    86
 * @return One of the OS wide codes
sl@0
    87
 */
sl@0
    88
TInt TConfigItem::Deserialize(TByteStreamReader& aReader)
sl@0
    89
	{
sl@0
    90
	TInt startPos = aReader.CurrentPosition();
sl@0
    91
sl@0
    92
	iDataType = (TSCMDataType) aReader.ReadByte();	
sl@0
    93
	iSizeToDump = aReader.ReadInt();
sl@0
    94
	iPriority = aReader.ReadByte();	
sl@0
    95
	
sl@0
    96
	TInt sizeRead = aReader.CurrentPosition() - startPos;
sl@0
    97
	if(sizeRead != GetSize())
sl@0
    98
		{
sl@0
    99
		// error between actual size & real size in data
sl@0
   100
		CLTRACE("(TConfigItem::Deserialize) ERROR size error");
sl@0
   101
		return KErrCorrupt;
sl@0
   102
		}				
sl@0
   103
	
sl@0
   104
	return KErrNone;
sl@0
   105
	}
sl@0
   106
sl@0
   107
sl@0
   108
/**
sl@0
   109
 * GetDataType 
sl@0
   110
 * @return data type of this config item
sl@0
   111
 */
sl@0
   112
 TConfigItem::TSCMDataType TConfigItem::GetDataType() const
sl@0
   113
	{
sl@0
   114
	return iDataType;
sl@0
   115
	}
sl@0
   116
sl@0
   117
/**
sl@0
   118
 * GetPriority 
sl@0
   119
 * @return priority of this config item (0-255)
sl@0
   120
 */ 
sl@0
   121
TInt TConfigItem::GetPriority() const
sl@0
   122
	{
sl@0
   123
	return iPriority;
sl@0
   124
	}
sl@0
   125
sl@0
   126
/**
sl@0
   127
 * GetSize 
sl@0
   128
 * @return size to dump in bytes
sl@0
   129
 */
sl@0
   130
TInt TConfigItem::GetSizeToDump() const
sl@0
   131
	{
sl@0
   132
	return iSizeToDump;
sl@0
   133
	}
sl@0
   134
sl@0
   135
/**
sl@0
   136
 * GetSize 
sl@0
   137
 * @return size of this object when streamed in bytes
sl@0
   138
 */
sl@0
   139
TInt TConfigItem::GetSize() const
sl@0
   140
	{
sl@0
   141
	return 6;
sl@0
   142
	}
sl@0
   143
sl@0
   144
sl@0
   145
sl@0
   146
/**
sl@0
   147
 * Returns next item
sl@0
   148
 * @return Next item
sl@0
   149
 */
sl@0
   150
TConfigItem* TConfigItem::Next() const
sl@0
   151
	{
sl@0
   152
	return iNext;
sl@0
   153
	}
sl@0
   154
sl@0
   155
	/**
sl@0
   156
	 * Print - displays info about this TConfigItem 
sl@0
   157
	 * @return void
sl@0
   158
	 */
sl@0
   159
 	void TConfigItem::Print() const 
sl@0
   160
 		{
sl@0
   161
 		CLTRACE3( "(TConfigItem::Print) iDataType = %d iPriority = %d iSizeToDump = %d"
sl@0
   162
 				, iDataType, iPriority, iSizeToDump);
sl@0
   163
 		}
sl@0
   164
 	
sl@0
   165
 	TBool TConfigItem::operator == (const TConfigItem& aOther) const
sl@0
   166
 		{
sl@0
   167
 		return (iDataType == aOther.iDataType && iSizeToDump == aOther.iSizeToDump && iPriority == aOther.iPriority);
sl@0
   168
 		}
sl@0
   169
sl@0
   170
/**
sl@0
   171
 * Sets the space required parameter for this config item
sl@0
   172
 * @param aSpaceReq Space required
sl@0
   173
 */
sl@0
   174
void TConfigItem::SetSpaceRequired(TUint aSpaceReq)
sl@0
   175
	{
sl@0
   176
	iSpaceRequiredToDump = aSpaceReq;
sl@0
   177
	}
sl@0
   178
sl@0
   179
/**
sl@0
   180
 * Gets the space required to store this config item
sl@0
   181
 * @return
sl@0
   182
 */
sl@0
   183
TUint TConfigItem::GetSpaceRequired()
sl@0
   184
	{
sl@0
   185
	return iSpaceRequiredToDump;
sl@0
   186
	}
sl@0
   187
sl@0
   188
#ifndef __KERNEL_MODE__
sl@0
   189
sl@0
   190
// human readable strings for TSCMDataType
sl@0
   191
_LIT(KExceptionStacks, "Exception Stacks");
sl@0
   192
_LIT(KTraceData, "Trace data");
sl@0
   193
_LIT(KProcessCodeSegs, "ProcessCodeSegs");
sl@0
   194
_LIT(KThreadsUsrStack, "Threads UserStack");
sl@0
   195
_LIT(KThreadsSvrStack, "Threads Supervisor Stack");
sl@0
   196
_LIT(KKernelHeap, "Kernel Heap");
sl@0
   197
_LIT(KThreadsUsrRegisters, "Threads User Registers");
sl@0
   198
_LIT(KThreadsSvrRegisters, "Threads Supervisor Registers");
sl@0
   199
_LIT(KProcessMetaData, "Process Meta Data");
sl@0
   200
_LIT(KThreadsMetaData, "Threads Meta Data");
sl@0
   201
_LIT(KCrashedProcessCodeSegs, "Crashed Process Code Segs");
sl@0
   202
_LIT(KCrashedProcessUsrStacks, "Crashed Process' User Stack's");
sl@0
   203
_LIT(KCrashedProcessSvrStacks, "Crashed Process' Supervisor Stack's");
sl@0
   204
_LIT(KCrashedProcessMetaData, "Crashed Process Meta Data");
sl@0
   205
_LIT(KCrashedThreadMetaData, "Crashed Thread Meta Data");				
sl@0
   206
_LIT(KLocks, "SCM Locks");
sl@0
   207
_LIT(KVariantSpecific, "Variant Specific Data");
sl@0
   208
_LIT(KRomInfo, "ROM Info");
sl@0
   209
_LIT(KUnknown,  "Unknown");
sl@0
   210
sl@0
   211
/**
sl@0
   212
 * helper function for converting TSCMDataType enul to human readable form
sl@0
   213
 */
sl@0
   214
 const TDesC& TConfigItem::GetSCMConfigOptionText(TConfigItem::TSCMDataType aType)
sl@0
   215
 		{
sl@0
   216
 		switch (aType)
sl@0
   217
 			{
sl@0
   218
 			case TConfigItem::EExceptionStacks:
sl@0
   219
 				return KExceptionStacks;
sl@0
   220
 			case TConfigItem::ETraceData:
sl@0
   221
 				return KTraceData;
sl@0
   222
 			case TConfigItem::EProcessCodeSegs:
sl@0
   223
 				return KProcessCodeSegs();
sl@0
   224
 			case TConfigItem::EThreadsUsrStack:
sl@0
   225
 				return KThreadsUsrStack();
sl@0
   226
 			case TConfigItem::EThreadsSvrStack:
sl@0
   227
 				return KThreadsSvrStack;
sl@0
   228
 			case TConfigItem::EThreadsUsrRegisters:
sl@0
   229
 				return KThreadsUsrRegisters();
sl@0
   230
 			case TConfigItem::EThreadsSvrRegisters:
sl@0
   231
 				return KThreadsSvrRegisters();
sl@0
   232
 			case TConfigItem::EProcessMetaData:
sl@0
   233
 				return KProcessMetaData();
sl@0
   234
 			case TConfigItem::EThreadsMetaData:
sl@0
   235
 				return KThreadsMetaData();
sl@0
   236
 			case TConfigItem::ECrashedProcessCodeSegs:
sl@0
   237
 				return KCrashedProcessCodeSegs();
sl@0
   238
 			case TConfigItem::ECrashedProcessUsrStacks:
sl@0
   239
 				return KCrashedProcessUsrStacks();
sl@0
   240
 			case TConfigItem::ECrashedProcessSvrStacks:
sl@0
   241
 				return KCrashedProcessSvrStacks();
sl@0
   242
 			case TConfigItem::ECrashedProcessMetaData:
sl@0
   243
 				return KCrashedProcessMetaData();
sl@0
   244
 			case TConfigItem::ECrashedThreadMetaData:						
sl@0
   245
 				return KCrashedThreadMetaData();
sl@0
   246
 			case TConfigItem::ELocks:						
sl@0
   247
 				return KLocks();
sl@0
   248
 			case TConfigItem::EKernelHeap:
sl@0
   249
 				return KKernelHeap();
sl@0
   250
 			case TConfigItem::EVariantSpecificData:
sl@0
   251
 				return KVariantSpecific();
sl@0
   252
 			case TConfigItem::ERomInfo:
sl@0
   253
 				return KRomInfo();	
sl@0
   254
			case TConfigItem::ELast:
sl@0
   255
 			default:
sl@0
   256
 				return KUnknown();
sl@0
   257
 			}
sl@0
   258
 		}
sl@0
   259
#endif // ! __KERNEL_MODE__
sl@0
   260
}
sl@0
   261
sl@0
   262
//eof
sl@0
   263
sl@0
   264