hti/HtiFramework/src/HtiDispatcher.cpp
branchRCL_3
changeset 18 d27dfa8884ad
parent 9 8a14024f954a
child 24 a9c038d69df8
--- a/hti/HtiFramework/src/HtiDispatcher.cpp	Tue Apr 27 18:14:33 2010 +0300
+++ b/hti/HtiFramework/src/HtiDispatcher.cpp	Tue May 11 17:39:09 2010 +0300
@@ -123,7 +123,8 @@
     iIdleOverCommAdapter( EFalse ),
     iHtiInstanceId( 0 ),
     iShowErrorDialogs( aShowErrorDialogs ),
-    iReconnectDelay (aReconnectDelay)
+    iReconnectDelay(aReconnectDelay),
+    iRebootReason(0)
     {
     HTI_LOG_FORMAT( "MaxQueueMemorySize %d", iMaxQueueMemorySize );
     iQueueSizeLowThresold = ( iMaxQueueMemorySize / 2 ) / 2;
@@ -861,7 +862,23 @@
                     break;
 
                 case EHtiReboot:
+                    {
+                    if(aMessage.Length() == 2)
+                        {
+                        iRebootReason = aMessage[1];
+                        }
+                    else if(aMessage.Length() == 1)
+                        {
+                        iRebootReason = 0;
+                        }
+                    else
+                        {
+                        User::LeaveIfError(DispatchOutgoingErrorMessage( KErrArgument,
+                                      KErrDescrInvalidParameter,
+                                      KHtiSystemServiceUid ) );
+                        }
                     ShutdownAndRebootDeviceL();
+                    }
                     break;
 
                 case EHtiStop:
@@ -1022,7 +1039,16 @@
     TInt err = KErrNone;
     RProcess rebootProcess;
     // First try the UI layer rebooter
-    err = rebootProcess.Create( KHtiDeviceRebootExeUI, KNullDesC );
+    if(iRebootReason == 0)
+        {
+        err = rebootProcess.Create( KHtiDeviceRebootExeUI, KNullDesC );
+        }
+    else
+        {
+        TBuf<8> reasonNumber;
+        reasonNumber.Num(iRebootReason);
+        err = rebootProcess.Create( KHtiDeviceRebootExeUI, reasonNumber );
+        }
     if ( err != KErrNone )
         {
         HTI_LOG_FORMAT( "UI layer rebooter failed with %d", err );