--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/vibractrl/src/vibractrlwrapperimpl.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2003 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: Vibra control API implementation that uses HWRM vibra API
+* instead of DOS.
+*
+*/
+
+
+// INCLUDE FILES
+#include "vibractrlwrapperimpl.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::CVibraControlImpl
+// Constructor with notify handling.
+// -----------------------------------------------------------------------------
+//
+CVibraControlImpl::CVibraControlImpl(MVibraControlObserver* aCallback)
+ :iCallback(aCallback),
+ iVibra(NULL)
+ {
+ //...
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::~CVibraControlImpl
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CVibraControlImpl::~CVibraControlImpl()
+ {
+ delete iVibra;
+ iVibra = NULL;
+
+ // PCLint demands
+ iCallback = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::ConstructL
+// Symbian 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CVibraControlImpl::ConstructL()
+ {
+ // Ignore status change notifications caused by initialization
+ // to make functionality similar to old vibra.
+ iVibraRouteEvents = EFalse;
+
+ // To get access vibra thru DOS
+ iVibra = CHWRMVibra::NewL(this);
+
+ iVibraRouteEvents = ETrue;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::HandleErrorL
+// Handles error from HWRM Vibra API
+// -----------------------------------------------------------------------------
+void CVibraControlImpl::HandleErrorL(TInt aError)
+ {
+ if ( aError != KErrNone )
+ {
+ if ( aError == KErrAccessDenied )
+ {
+ NotifyRequestStatus(EVibraRequestNotAllowed);
+ }
+ else
+ {
+ NotifyRequestStatus(EVibraRequestFail);
+ if ( aError == KErrArgument || aError == KErrNotSupported )
+ {
+ User::Leave(aError);
+ }
+ else
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+ }
+ else
+ {
+ NotifyRequestStatus(EVibraRequestOK);
+ iExpectingStop = ETrue; // Expecting vibra to be stopped by HWRM timer soon.
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::StartVibraL:
+// Route call to HWRM Vibra API
+// -----------------------------------------------------------------------------
+EXPORT_C void CVibraControlImpl::StartVibraL(TUint16 aDuration, TInt aIntensity)
+ {
+ if ( aIntensity != 0 )
+ {
+ TRAPD(err, iVibra->StartVibraL(aDuration, aIntensity));
+ HandleErrorL(err);
+ }
+ else
+ {
+ StopVibraL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::StartVibraL:
+// Route call to HWRM Vibra API
+// -----------------------------------------------------------------------------
+EXPORT_C void CVibraControlImpl::StartVibraL(TUint16 aDuration)
+ {
+ TRAPD(err, iVibra->StartVibraL(aDuration));
+
+ HandleErrorL(err);
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::StopVibra
+// Vibra is stopped and timer supervising vibra is cancelled.
+// -----------------------------------------------------------------------------
+EXPORT_C void CVibraControlImpl::StopVibraL()
+ {
+ TRAPD(err, iVibra->StopVibraL());
+
+ if ( err != KErrNone )
+ {
+ NotifyRequestStatus(EVibraRequestUnableToStop);
+ User::Leave(err);
+ }
+ else
+ {
+ NotifyRequestStatus(EVibraRequestStopped);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::VibraSettings
+// Mode of the vibra is returned (from user profiles)
+// -----------------------------------------------------------------------------
+EXPORT_C CVibraControl::TVibraModeState CVibraControlImpl::VibraSettings() const
+ {
+ CHWRMVibra::TVibraModeState hwrmState = iVibra->VibraSettings();
+
+ CVibraControl::TVibraModeState retval;
+
+ switch (hwrmState)
+ {
+ case CHWRMVibra::EVibraModeON:
+ {
+ retval = CVibraControl::EVibraModeON;
+ break;
+ }
+ case CHWRMVibra::EVibraModeOFF:
+ {
+ retval = CVibraControl::EVibraModeOFF;
+ break;
+ }
+ default:
+ {
+ retval = CVibraControl::EVibraModeUnknown;
+ break;
+ }
+ }
+
+ return retval;
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::NotifyRequestStatus
+// VibraRequestStatus callback method is called if there is observer who is
+// listening it.
+// -----------------------------------------------------------------------------
+void CVibraControlImpl::NotifyRequestStatus(TVibraRequestStatus aStatus)
+ {
+ if (iCallback && iVibraRouteEvents )
+ {
+ iCallback->VibraRequestStatus(aStatus);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::VibraModeChanged
+// Handler for events from HWRM Vibra API
+// -----------------------------------------------------------------------------
+void CVibraControlImpl::VibraModeChanged(CHWRMVibra::TVibraModeState aStatus)
+ {
+ if ( iCallback && iVibraRouteEvents )
+ {
+ if ( aStatus == CHWRMVibra::EVibraModeON )
+ {
+ iCallback->VibraModeStatus(CVibraControl::EVibraModeON);
+ }
+ else if ( aStatus == CHWRMVibra::EVibraModeOFF )
+ {
+ iCallback->VibraModeStatus(CVibraControl::EVibraModeOFF);
+ }
+ else
+ {
+ iCallback->VibraModeStatus(CVibraControl::EVibraModeUnknown);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVibraControlImpl::VibraStatusChanged
+// Handler for events from HWRM Vibra API
+// -----------------------------------------------------------------------------
+void CVibraControlImpl::VibraStatusChanged(CHWRMVibra::TVibraStatus aStatus)
+ {
+ // Only notify stop if expecting one. This is required to handle
+ // stop generated automatically by HWRM vibra timer. All other
+ // status notifications are either already handled in initial call or
+ // relate to some other vibra client.
+ if ( iExpectingStop && aStatus == CHWRMVibra::EVibraStatusStopped )
+ {
+ iExpectingStop = EFalse;
+ NotifyRequestStatus(EVibraRequestStopped);
+ }
+ }
+
+// End of File