--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothappprofiles/avrcp/batterystatusapi/src/batterystatusapi.cpp Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,129 @@
+// Copyright (c) 2008-2009 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:
+//
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#include <bluetooth/logger.h>
+#include <remconbatterytarget.h>
+#include <remconbatterytargetobserver.h>
+#include <remcon/avrcpspec.h>
+#include <remconinterfaceselector.h>
+
+#include "remconbattery.h"
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, LOG_COMPONENT_AVRCP_BATTERY_STATUS);
+#endif
+
+EXPORT_C CRemConBatteryApiTarget* CRemConBatteryApiTarget::NewL(CRemConInterfaceSelector& aInterfaceSelector,
+ MRemConBatteryTargetObserver& aObserver)
+ {
+ LOG_STATIC_FUNC
+
+ CRemConBatteryApiTarget* self = new(ELeave) CRemConBatteryApiTarget(aInterfaceSelector, aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CRemConBatteryApiTarget::CRemConBatteryApiTarget(CRemConInterfaceSelector& aInterfaceSelector,
+ MRemConBatteryTargetObserver& aObserver)
+: CRemConInterfaceBase(TUid::Uid(KRemConBatteryApiUid),
+ KLengthBatteryStatusMsg,
+ aInterfaceSelector,
+ ERemConClientTypeTarget),
+ iObserver(aObserver)
+ {
+ }
+
+void CRemConBatteryApiTarget::ConstructL()
+ {
+ // Create a output buffer (arbitrary value of 32 for granularity of buffer expansion)
+ iOutData = CBufFlat::NewL(32);
+
+ // allocate a output buffer big enough for a TRemConBatteryApiResponse
+ iOutData->SetReserveL(sizeof(TPckg<TRemConBatteryApiResponse>)); //do this now for easier writing to buffer
+ BaseConstructL();
+ }
+
+EXPORT_C CRemConBatteryApiTarget::~CRemConBatteryApiTarget()
+ {
+ delete iOutData;
+ }
+
+/** Gets a pointer to a specific interface version.
+@return A pointer to the interface, NULL if not supported.
+@internalComponent
+@released
+*/
+TAny* CRemConBatteryApiTarget::GetInterfaceIf(TUid aUid)
+ {
+ TAny* ret = NULL;
+ if ( aUid == TUid::Uid(KRemConInterfaceIf1) )
+ {
+ ret = reinterpret_cast<TAny*>(
+ static_cast<MRemConInterfaceIf*>(this)
+ );
+ }
+
+ return ret;
+ }
+
+// from MRemConInterfaceIf
+void CRemConBatteryApiTarget::MrcibNewMessage(TUint /* aOperationId */, const TDesC8& aData)
+ {
+ // don't bother to log the operation ID as this was causing a build warning
+ LOG1(_L("\taInformBatteryStatusOfCT Data.Length = %d"), aData.Length());
+
+ TRemConBatteryApiResponse batteryApiResponse;
+ batteryApiResponse.iError = KErrNone;
+ iOutData->Reset();
+
+ // check for malformed messages, there should be 1 byte of data
+ if ( aData.Length() == 1 )
+ {
+ // check the battery status is validvalue to the client observer
+ if ( aData[0] <= EFullCharge )
+ {
+ TControllerBatteryStatus value = (TControllerBatteryStatus)aData[0];
+ iObserver.MrcbstoBatteryStatus(value);
+ }
+ else
+ {
+ LOG(_L("\tMalformed message, data out range"));
+ batteryApiResponse.iError = KErrAvrcpMetadataInvalidParameter;
+ }
+ }
+ else
+ {
+ LOG(_L("\tMalformed message, data missing"));
+ batteryApiResponse.iError = KErrAvrcpMetadataParameterNotFound;
+ }
+
+ // send a response to remcon (if OOM silently drop message)
+ TRAPD(error, iOutData->ResizeL(sizeof(TRemConBatteryApiResponse)));
+ if (error == KErrNone)
+ {
+ iOutData->Write(0,TPckg<TRemConBatteryApiResponse>(batteryApiResponse));
+ InterfaceSelector().SendUnreliable(TUid::Uid(KRemConBatteryApiUid),
+ EInformBatteryStatusOfCT, ERemConResponse, iOutData->Ptr(0));
+ }
+ }
+