diff -r 613943a21004 -r 9386f31cc85b bluetoothengine/btnotif/btnotifwrapper/src/btnotifwrapper.cpp --- a/bluetoothengine/btnotif/btnotifwrapper/src/btnotifwrapper.cpp Tue Aug 31 15:25:10 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -/* -* ============================================================================ -* Name : btnotifwrapper.cpp -* Part of : bluetoothengine / btnotif -* Description : Wrapper for Bluetooth Notifiers -* -* Copyright © 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: -* Nokia Corporation -* ============================================================================ -* Template version: 4.1 -*/ - -#include "btnotifwrapper.h" -#include -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif - -/** Identifier of the active object. */ -const TInt KWrapperActive = 10; - -// ======== MEMBER FUNCTIONS ======== - - -// --------------------------------------------------------------------------- -// ?description_if_needed -// --------------------------------------------------------------------------- -// -CBTNotifWrapper::CBTNotifWrapper( const TUid& aUid, const TUid& aChannel ) -: MEikSrvNotifierBase2(), - iUid( aUid ), - iChannel( aChannel ), - iResponsePtr( NULL, 0 ) - { - } - - -// --------------------------------------------------------------------------- -// ?description_if_needed -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::ConstructL() - { - // lazy initialization: members are created and destroyed when needed. - } - - -// --------------------------------------------------------------------------- -// NewLC -// --------------------------------------------------------------------------- -// -CBTNotifWrapper* CBTNotifWrapper::NewLC( const TUid& aUid, const TUid& aChannel ) - { - CBTNotifWrapper* self = new( ELeave ) CBTNotifWrapper( aUid, aChannel ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// ?description_if_needed -// --------------------------------------------------------------------------- -// -CBTNotifWrapper::~CBTNotifWrapper() - { - Cancel(); // Cleans up buffers - delete iActive; - iBTNotif.Close(); - } - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// Frees all the resources i.e. destruct ourselves. -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::Release() - { - delete this; - } - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// ?implementation_description -// --------------------------------------------------------------------------- -// -MEikSrvNotifierBase2::TNotifierInfo CBTNotifWrapper::RegisterL() - { - return Info(); - } - - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// ?implementation_description -// --------------------------------------------------------------------------- -// -MEikSrvNotifierBase2::TNotifierInfo CBTNotifWrapper::Info() const - { - MEikSrvNotifierBase2::TNotifierInfo info; - info.iUid = iUid; - info.iChannel = iChannel; - info.iPriority = MEikSrvNotifierBase2::ENotifierPriorityVHigh; - return info; - } - - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// ?implementation_description -// --------------------------------------------------------------------------- -// -TPtrC8 CBTNotifWrapper::StartL(const TDesC8& aBuffer) - { - if( !IsSync() ) - { - // due to the charasteristics of Bluetooth and UI operations, - // most of Bluetooth notifiers do not support synchronous version. - User::Leave( KErrNotSupported ); - } - // Call notifier server and get response. - if( !iBTNotif.Handle() ) - { - User::LeaveIfError( iBTNotif.Connect() ); - } - User::LeaveIfError( iBTNotif.StartNotifier( iUid, aBuffer ) ); - iBTNotif.Close(); - return KNullDesC8(); - } - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// ?implementation_description -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::StartL(const TDesC8& aBuffer, TInt aReplySlot, - const RMessagePtr2& aMessage) - { - if( !iMessage.IsNull() ) - { - aMessage.Complete( KErrAlreadyExists ); - return; - } - - // Call notifier server and get response. - if( !iBTNotif.Handle() ) - { - User::LeaveIfError( iBTNotif.Connect() ); - } - if( !iActive ) - { - iActive = CBtSimpleActive::NewL( *this, KWrapperActive ); - } - - // We need to store the parameters locally, as aBuffer is destroyed after - // returning from this call. We do it on the heap, so we do not permanently - // consume memory for the buffer. - - iParamsBuf.CreateL( aBuffer ); - TInt len = aMessage.GetDesMaxLength( aReplySlot ); - - iResponseBuf.CreateL( len ); - aMessage.ReadL( aReplySlot, iResponseBuf ); - - iBTNotif.StartNotifierAndGetResponse( iActive->RequestStatus(), - iUid, iParamsBuf, iResponseBuf ); - iActive->GoActive(); - // record the request - iReplySlot = aReplySlot; - iMessage = aMessage; - } - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// ?implementation_description -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::Cancel() - { - // Call notifier server to cancel. - if( iActive ) - { - iActive->Cancel(); - } - if( !iMessage.IsNull() ) - { - iMessage.Complete( KErrCancel ); - } - iReplySlot = 0; - iParamsBuf.Close(); - iResponseBuf.Close(); - } - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// Synchronous notifier update. -// --------------------------------------------------------------------------- -// -TPtrC8 CBTNotifWrapper::UpdateL(const TDesC8& aBuffer) - { - // Call notifier server and get response. - TBuf8<256> response; - if( !iBTNotif.Handle() ) - { - User::LeaveIfError( iBTNotif.Connect() ); - } - User::LeaveIfError( iBTNotif.UpdateNotifier( iUid, aBuffer, response ) ); - return response; - } - -// --------------------------------------------------------------------------- -// From class MEikSrvNotifierBase2. -// Asynchronous notifier update. -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage) - { - (void) aReplySlot; - (void) aBuffer; - if( iMessage.IsNull() ) - { - // There is no outstanding request, can't relate this to anything. - aMessage.Complete( KErrNotFound ); - return; - } - // Call notifier server and get response. - // Async updates are just for updating parameters, so they are still - // done synchronously between here and btnotif, as they don't - // require any user feedback or other response with - // asynchronous/long cycles. - TPtrC8 response = UpdateL( aBuffer ); - aMessage.WriteL( aReplySlot, response ); - aMessage.Complete( KErrNone ); - } - -// --------------------------------------------------------------------------- -// From class MBtSimpleActiveObserver. -// Callback to notify that an outstanding request has completed. -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::RequestCompletedL( CBtSimpleActive* aActive, TInt aStatus ) - { - ASSERT( aActive->RequestId() == KWrapperActive ); - (void) aActive; - if( !iMessage.IsNull() ) - { - TInt err( aStatus ); - if( !err ) - { - err = iMessage.Write( iReplySlot, iResponseBuf ); - } - iMessage.Complete( err ); - } - // Clean up after usage. - iBTNotif.Close(); - delete iActive; - iActive = NULL; - } - - -// --------------------------------------------------------------------------- -// From class MBtSimpleActiveObserver. -// Cancel and clean up all requests related to the active object. -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::CancelRequest( TInt aRequestId ) - { - ASSERT( aRequestId == KWrapperActive ); - (void) aRequestId; - iBTNotif.CancelNotifier( iUid ); - } - -// --------------------------------------------------------------------------- -// From class MBtSimpleActiveObserver. -// -// --------------------------------------------------------------------------- -// -void CBTNotifWrapper::HandleError( CBtSimpleActive* aActive, - TInt aError ) - { - // RequestCompletedL() is not leavable. - (void) aActive; - (void) aError; - } - -// --------------------------------------------------------------------------- -// Check if this is a synchronous notifier or not. -// --------------------------------------------------------------------------- -// -TBool CBTNotifWrapper::IsSync() const - { - return ( iUid == KBTGenericInfoNotifierUid ); - }