exampleapps/alfexanalogdialer/src/alfexanalogdialerfeedback.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exampleapps/alfexanalogdialer/src/alfexanalogdialerfeedback.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2008-2008 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:   Class for Analog Dialer example application, which
+*                implements long lasting tactile feed back event
+*
+*/
+
+
+
+#include <touchfeedback.h>
+
+#include "alfexanalogdialerfeedback.h"
+
+// constants
+
+// minimum values for clock in milliseconds
+const TInt KFeedbackMinimumDuration = 100;
+const TInt KFeedbackMinimumInterval = 100;
+
+
+// ---------------------------------------------------------------------------
+// NewLC
+// ---------------------------------------------------------------------------
+//
+CAlfExAnalogDialerFeedback* CAlfExAnalogDialerFeedback::NewL()
+    {
+    CAlfExAnalogDialerFeedback* self = new (ELeave) CAlfExAnalogDialerFeedback();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CAlfExAnalogDialerFeedback::CAlfExAnalogDialerFeedback()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CAlfExAnalogDialerFeedback::~CAlfExAnalogDialerFeedback()
+    {
+    if ( iClock )
+        {
+        iClock->Cancel();
+        delete iClock;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAlfExAnalogDialerFeedback::ConstructL()
+    {
+    iFeedback = MTouchFeedback::Instance();
+    // Remote control server command repeat timer.
+    iClock = CPeriodic::NewL( EPriorityNormal );
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAlfExAnalogDialerFeedback::Start( TInt    aDurationMilliSeconds,
+                                        TInt    aIntervalMilliSeconds)
+    {
+    iDuration = KFeedbackDefault;
+    iInterval = KFeedbackMinimumInterval;
+
+    // 1000: convert millis to micros
+    if (iFeedback)
+        {
+        iFeedback->InstantFeedback(ETouchFeedbackBasic);
+        }
+    if ( aIntervalMilliSeconds > KFeedbackMinimumInterval )
+        {
+        iInterval = 1000*aIntervalMilliSeconds;   
+        }
+    if (aDurationMilliSeconds >= KFeedbackMinimumDuration)
+        {    
+        iDuration = 1000*aDurationMilliSeconds;   
+        iDurationStop.HomeTime();
+        iDurationStop +=  TTimeIntervalMicroSeconds(TInt64(iDuration));
+        iClock->Cancel();
+        iClock->Start(  iInterval,
+                        iInterval, 
+                        TCallBack( HandleInterval, this ));
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAlfExAnalogDialerFeedback::Stop()
+    {
+    iClock->Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CAlfExAnalogDialerFeedback::DoHandleInterval()
+    {
+    TTime timeNow;
+    timeNow.HomeTime();
+    if (timeNow > iDurationStop)
+        {
+        iClock->Cancel();
+        }
+    else
+        {
+        if (iFeedback)
+            {
+            iFeedback->InstantFeedback(ETouchFeedbackBasic);
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CAlfExAnalogDialerFeedback::HandleInterval(TAny* aThis)
+    {
+    // cast, and call non-static function
+    static_cast<CAlfExAnalogDialerFeedback*>(aThis)->DoHandleInterval();
+    return KErrNone;
+    }