bluetoothengine/btmac/src/BTMonoCmdHandler/btmcbattery.cpp
changeset 0 f63038272f30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcbattery.cpp	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2005 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:  General Active Object offering asynchronous service
+*
+*/
+
+#include "atcodec.h"
+#include "btmcbattery.h"
+#include "btmcphonestatus.h"
+#include "debug.h"
+#include <e32math.h>
+
+const TInt8 KMaxPhoneStrength = 7;
+const TInt8 KMaxHFPStrength = 5;
+
+// -----------------------------------------------------------------------------
+// CBtmcBattery::NewL
+// -----------------------------------------------------------------------------
+CBtmcBattery* CBtmcBattery::NewL(CBtmcPhoneStatus& aParent)
+    {
+    CBtmcBattery* self = CBtmcBattery::NewLC(aParent);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CBtmcBattery::NewLC
+// -----------------------------------------------------------------------------
+CBtmcBattery* CBtmcBattery::NewLC(CBtmcPhoneStatus& aParent)
+    {
+    CBtmcBattery* self = new (ELeave) CBtmcBattery(aParent);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CBtmcBattery::~CBtmcBattery
+// -----------------------------------------------------------------------------
+CBtmcBattery::~CBtmcBattery()
+    {
+    TRACE_FUNC_ENTRY
+    Cancel();
+    iProperty.Close();
+    TRACE_FUNC_EXIT
+    }
+
+// -------------------------------------------------------------------------------
+// CBtmcBattery::GoActive
+// -------------------------------------------------------------------------------
+void CBtmcBattery::GoActive()
+    {
+    TRACE_ASSERT(!IsActive(), KErrGeneral);
+    iProperty.Subscribe(iStatus);
+    SetActive();
+    TRACE_FUNC
+    }
+
+
+// -------------------------------------------------------------------------------
+// CBtmcBattery::RunL
+// -------------------------------------------------------------------------------
+void CBtmcBattery::RunL()
+    {
+    TRACE_FUNC_ENTRY
+    if (iStatus == KErrNone)
+        {    
+        TInt temp = 0;
+        TInt err = iProperty.Get(temp);
+        if (!err)
+            {
+            ConvertToHFPScale(temp);
+            iCharge = temp;
+            TRACE_INFO((_L("iStatus %d, battery strength %d"), iStatus.Int(), temp))
+            iParent.HandleBatteryChangeL(temp);            
+            }
+        GoActive();
+        }
+    else
+        {
+        TRACE_ERROR((_L("ERROR %d"), iStatus.Int()))
+        }        
+    TRACE_FUNC_EXIT
+    }
+
+// -------------------------------------------------------------------------------
+// CBtmcBattery::DoCancel
+// -------------------------------------------------------------------------------
+void CBtmcBattery::DoCancel()
+    {
+    iProperty.Cancel();
+    TRACE_FUNC
+    }
+
+
+// -------------------------------------------------------------------------------
+// CBtmcBattery::RunError
+// -------------------------------------------------------------------------------
+TInt CBtmcBattery::RunError(TInt /*aErr*/)
+    {
+    iProperty.Close();
+    TRACE_FUNC
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CBtmcBattery::CBtmcBattery
+// -----------------------------------------------------------------------------
+CBtmcBattery::CBtmcBattery(CBtmcPhoneStatus& aParent)
+    : CActive(EPriorityNormal), iParent(aParent)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+void CBtmcBattery::ConstructL()
+    {
+    TRACE_FUNC_ENTRY
+    LEAVE_IF_ERROR(iProperty.Attach(KPSUidHWRMPowerState, KHWRMBatteryLevel));
+    LEAVE_IF_ERROR(iProperty.Get(iCharge));
+    ConvertToHFPScale(iCharge);
+    TRACE_FUNC_EXIT
+    }
+
+void CBtmcBattery::ConvertToHFPScale(TInt &aStrength)
+    {
+    TReal result;
+    Math::Round( result, TReal(TReal(KMaxHFPStrength)/TReal(KMaxPhoneStrength) *TReal(aStrength)),0);
+    aStrength = TInt8(result);    
+    }
+
+TInt CBtmcBattery::GetBatteryCharge()
+    {
+    return iCharge;
+    }
+
+
+// End of File