diff -r 22de2e391156 -r 20ac952a623c remotecontrol/avrcp/batterystatusapi/src/batterystatusapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remotecontrol/avrcp/batterystatusapi/src/batterystatusapi.cpp Wed Oct 13 16:20:29 2010 +0300 @@ -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 +#include +#include +#include +#include + +#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)); //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( + static_cast(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(batteryApiResponse)); + InterfaceSelector().SendUnreliable(TUid::Uid(KRemConBatteryApiUid), + EInformBatteryStatusOfCT, ERemConResponse, iOutData->Ptr(0)); + } + } +