webengine/wmlengine/src/System/src/Epoc32Timer.cpp
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/System/src/Epoc32Timer.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 <e32def.h> // avoid NULL redefinition warning
+#include "nw_system_epoc32timeri.h"
+#include "nwx_time.h"
+
+#include "MVCShell.h"
+#include "CEpoc32Timer.h"
+
+#include "nwx_ctx.h"
+#include "nwx_defs_symbian.h"
+#include "BrsrStatusCodes.h"
+#include "MemoryManager.h"
+
+
+/* ------------------------------------------------------------------------- *
+   static data
+ * ------------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
+const NW_System_Epoc32Timer_Class_t NW_System_Epoc32Timer_Class = {
+  { /* NW_Object_Core       */
+    /* super                */ &NW_System_Timer_Class,
+    /* querySecondary       */ _NW_Object_Core_QuerySecondary
+  },
+  { /* NW_Object_Base       */
+    /* secondaryList        */ NULL
+  },
+  { /* NW_Object_Dynamic    */
+    /* instanceSize         */ sizeof (NW_System_Epoc32Timer_t),
+    /* construct            */ _NW_System_Epoc32Timer_Construct,
+    /* destruct             */ _NW_System_Epoc32Timer_Destruct
+  },
+  { /* NW_System_Timer      */
+    /* stop                 */ _NW_System_Epoc32Timer_Stop,
+    /* resume               */ _NW_System_Epoc32Timer_Resume,
+    /* isRunning            */ _NW_System_Epoc32Timer_IsRunning,
+    /* read                 */ _NW_System_Epoc32Timer_Read
+  },
+  { /* NW_System_Epoc32Timer */
+    /* unused               */ NW_Object_Unused
+  }
+};
+
+
+
+/* ------------------------------------------------------------------------- *
+   NW_Object_Dynamic methods
+ * ------------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
+TBrowserStatusCode
+_NW_System_Epoc32Timer_Construct (NW_Object_Dynamic_t* dynamicObject,
+                                 va_list* argList)
+{
+  TBrowserStatusCode status;
+  NW_System_Epoc32Timer_t* thisObj;
+
+  /* parameter assertion block */
+  NW_ASSERT (NW_Object_IsInstanceOf (dynamicObject,
+                                     &NW_System_Epoc32Timer_Class));
+  NW_ASSERT (argList != NULL);
+
+  /* invoke our superclass constructor */
+  status = _NW_System_Timer_Construct (dynamicObject, argList);
+  if (status != KBrsrSuccess) {
+    return status;
+  }
+
+  /* for convenience */
+  thisObj = NW_System_Epoc32TimerOf (dynamicObject);
+
+
+  // RB: Period is in milliseconds
+  TUint32 timerPeriod(1000 * thisObj->super.period);
+  
+  TCallBack cb((TThreadFunction)thisObj->super.callback, thisObj->super.clientData);
+
+  /* initialize the member variables */
+  thisObj->epocTimer = CEpoc32Timer::New(timerPeriod, thisObj->super.repeating, cb);
+  if(thisObj->epocTimer == NULL) {
+    return KBrsrOutOfMemory;
+  }
+  
+  thisObj->super.startTime = NW_Time_GetTimeMSec();
+  thisObj->super.remainingTime = thisObj->super.period;
+  thisObj->super.isRunning = NW_TRUE;
+  
+  /* successful completion */
+  return KBrsrSuccess;
+}
+
+/* ------------------------------------------------------------------------- */
+void
+_NW_System_Epoc32Timer_Destruct (NW_Object_Dynamic_t* dynamicObject)
+{
+  NW_System_Epoc32Timer_t* thisObj;
+  CEpoc32Timer* epocTimer = NULL;
+
+  /* parameter assertion block */
+  NW_ASSERT (NW_Object_IsInstanceOf (dynamicObject,
+                                     &NW_System_Epoc32Timer_Class));
+
+  /* for convenience */
+  thisObj = NW_System_Epoc32TimerOf (dynamicObject);
+  epocTimer = (CEpoc32Timer*)thisObj->epocTimer;
+
+  epocTimer->Cancel();
+  delete epocTimer;
+}
+
+// ------------------------------------------------------------------------- 
+// ------------------------------------------------------------------------- 
+
+TBrowserStatusCode
+_NW_System_Epoc32Timer_IsRunning (NW_System_Timer_t* timer,
+                            NW_Bool* isRunning)
+{
+  NW_System_Epoc32Timer_t* thisObj;
+  CEpoc32Timer* epocTimer = NULL;
+
+  /* for convenience */
+  thisObj = NW_System_Epoc32TimerOf (timer);
+  epocTimer = (CEpoc32Timer*)thisObj->epocTimer;
+
+  if (epocTimer)
+	{
+    *isRunning = (NW_Bool)epocTimer->IsActive();
+    return KBrsrSuccess;
+	}
+
+  return KBrsrFailure;
+}
+
+TBrowserStatusCode
+_NW_System_Epoc32Timer_Read (NW_System_Timer_t* timer,
+                       NW_Uint32* remainingTime)
+{
+  NW_System_Epoc32Timer_t* thisObj;
+  CEpoc32Timer* epocTimer = NULL;
+
+  /* for convenience */
+  thisObj = NW_System_Epoc32TimerOf (timer);
+  epocTimer = (CEpoc32Timer*)thisObj->epocTimer;
+
+  if (epocTimer)
+	{
+    *remainingTime = epocTimer->MicrosecondsLeftUntilNextTick()/1000;
+    return KBrsrSuccess;
+	}
+	
+  return KBrsrFailure;
+}
+
+
+/* ------------------------------------------------------------------------- *
+   NW_System_Timer methods
+ * ------------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
+TBrowserStatusCode
+_NW_System_Epoc32Timer_Stop (NW_System_Timer_t* timer)
+{
+  NW_System_Epoc32Timer_t* thisObj;
+  CEpoc32Timer* epocTimer = NULL;
+
+  /* for convenience */
+  thisObj = NW_System_Epoc32TimerOf (timer);
+  epocTimer = (CEpoc32Timer*)thisObj->epocTimer;
+
+  if (epocTimer)
+  {
+    epocTimer->Stop();
+    return KBrsrSuccess;
+  }
+
+  return KBrsrFailure;
+}
+
+/* ------------------------------------------------------------------------- */
+TBrowserStatusCode
+_NW_System_Epoc32Timer_Resume (NW_System_Timer_t* timer)
+{
+  NW_System_Epoc32Timer_t* thisObj;
+  CEpoc32Timer* epocTimer = NULL;
+
+  /* for convenience */
+  thisObj = NW_System_Epoc32TimerOf (timer);
+  epocTimer = (CEpoc32Timer*)thisObj->epocTimer;
+
+  if (epocTimer)
+  {
+    epocTimer->Resume();
+    return KBrsrSuccess;
+  }
+
+  return KBrsrFailure;
+}
+
+/* ------------------------------------------------------------------------- */
+NW_System_Timer_t*
+_NW_System_Timer_New (NW_System_Timer_Callback_t callback,
+                      void* clientData,
+                      NW_Uint32 period,
+                      NW_Bool repeating)
+{
+  return (NW_System_Timer_t*)
+    NW_Object_New (&NW_System_Epoc32Timer_Class, callback, clientData, period,
+                   (NW_Uint32)repeating);
+}