uifw/EikStd/srvuisrc/EIKSVDLG.CPP
changeset 0 2f259fa3e83a
--- /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 <e32hal.h>
+#include <s32file.h>
+#include "eiksvprv.h"
+#include <eiksrvui.rsg>
+#include "eiksrv.hrh"
+#include <hal.h>
+#include <hal_data.h>
+#include <aknnotecontrol.h>
+
+// ===================
+// 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