diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/srvuisrc/EIKSVDLG.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/srvuisrc/EIKSVDLG.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,138 @@ +/* +* Copyright (c) 2002-2007 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 +#include +#include "eiksvprv.h" +#include +#include "eiksrv.hrh" +#include +#include +#include + +// =================== +// CEikServPanicScreen +// =================== + +CEikServPanicScreen::CEikServPanicScreen(RThread& aThread) : iThread(aThread) + { + SetGloballyCapturing(ETrue); + } + +void CEikServPanicScreen::PreLayoutDynInitL() + { + CAknNoteControl* note = STATIC_CAST(CAknNoteControl*, Control(EESrvDlgPanicName)); + TBuf<64> programName; + TBuf<64> reasonCategory; + TBuf<64> reasonCode; + iEikonEnv->ReadResource(programName, R_EIKSERV_PANIC_DIALOG_NAME); + iEikonEnv->ReadResource(reasonCategory, R_EIKSERV_PANIC_DIALOG_CATEGORY); + iEikonEnv->ReadResource(reasonCode, R_EIKSERV_PANIC_DIALOG_CODE); + programName.Append(iThread.Name()); + reasonCategory.Append(iThread.ExitCategory()); + reasonCode.AppendNum(iThread.ExitReason()); + note->UpdateLabelsL(programName, reasonCategory, reasonCode); + } + +// ========================= +// CEikServResetReasonDialog +// ========================= + +// Populate the dialog with reset info. +// Debug & tech support use only - hence hard coded text. +void CEikServResetReasonDialog::PreLayoutDynInitL() + { + TInt reason; + HAL::Get(HAL::ESystemStartupReason,reason); + TBuf<80> reasonBuf; + TExcInfo exceptInfo; + UserHal::ExceptionInfo(exceptInfo); + _LIT(KReasonColdStart,"Cold Start"); + _LIT(KReasonColdReset,"Cold Reset"); + _LIT(KReasonNewOs,"New OS"); + _LIT(KReasonPowerFail,"Power failed"); + _LIT(KReasonarmReset,"Warm Reset"); + switch (reason) + { + case EStartupCold: + reasonBuf = KReasonColdStart; + break; + case EStartupColdReset: + reasonBuf = KReasonColdReset; + break; + case EStartupNewOs: + reasonBuf = KReasonNewOs; + break; + case EStartupPowerFail: + reasonBuf = KReasonPowerFail; + break; + case EStartupWarmReset: + reasonBuf = KReasonarmReset; + break; + case EStartupKernelFault: + { + TUint32 decode[3]; + decode[0] = TUint32(exceptInfo.iCodeAddress); + decode[1] = TUint32(exceptInfo.iDataAddress); + decode[2] = 0; + + // Interpret decode as a null-terminated string. + TPtrC category((TText*)&decode[0]); + TInt faultno; + UserHal::FaultReason(faultno); + + if (faultno == 0x10000000) + { + _LIT(KReason,"Kernel Exception"); + reasonBuf=(KReason); + } + else if (faultno >= 0x10000) + { + _LIT(KReason,"Kernel PANIC: %d %S "); + reasonBuf.Format(KReason, faultno-0x10000,&category); + } + else + { + _LIT(KReason,"Kernel FAULT: %d %S "); + reasonBuf.Format(KReason, faultno,&category); + } + } + break; + default: + reasonBuf.Num((TInt)reason); + break; + } + + SetLabelL(EESrvResetInfoReason, reasonBuf); + + // Last exception. + if (reason >= EStartupPowerFail) + { + TBuf<80> lastExceptBuf; + TInt exceptno; + UserHal::ExceptionId(exceptno); + _LIT(KFormat,"(No. %d: Code 0x%08x Data 0x%08x) "); + lastExceptBuf.Format(KFormat, exceptno, exceptInfo.iCodeAddress, exceptInfo.iDataAddress); + SetLabelL(EESrvResetInfoLastException, lastExceptBuf); + } + else + { + SetLineDimmedNow(EESrvResetInfoLastException, ETrue); + } + } + +// End of file