diff -r 000000000000 -r 4e1aa6a622a0 accessoryservices/accessoryserver/src/Server/AccSrvNotificationQueue.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessoryservices/accessoryserver/src/Server/AccSrvNotificationQueue.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,429 @@ +/* +* Copyright (c) 2002-2008 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: Subsession handles are stored here for later handling +* +*/ + + + +// INCLUDE FILES +#include "AccSrvNotificationQueue.h" +#include "acc_debug.h" +#include "AccSrvSubAudioControl.h" //for callbacks + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CAccSrvNotificationQueue +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CAccSrvNotificationQueue::CAccSrvNotificationQueue() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CAccSrvNotificationQueue()" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::ConstructL() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::ConstructL()" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CAccSrvNotificationQueue* CAccSrvNotificationQueue::NewL() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::NewL()" ); + CAccSrvNotificationQueue* self = new( ELeave ) CAccSrvNotificationQueue; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// Destructor +CAccSrvNotificationQueue::~CAccSrvNotificationQueue() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::~CAccSrvNotificationQueue()" ); + + iConnectAccessory.Close(); + iAccessoryAudioLinkOpenArray.Close(); + iAccessoryAudioLinkOpenedArray.Close(); + iAccessoryAudioLinkClosedArray.Close(); + iAccessoryAudioLinkCloseArray.Close(); + iBluetoothAudioLinkOpenReqArray.Close(); + iBluetoothAudioLinkCloseReqArray.Close(); + iBluetoothAudioLinkOpenRespArray.Close(); + iBluetoothAudioLinkCloseRespArray.Close(); + iNewAccessoryConnectedArray.Close(); + iAccessoryConnectionStatusChangedArray.Close(); + iGetAccessoryConnectionStatusAsyncArray.Close(); + iAccessoryDisconnectedArray.Close(); + iAccessoryModeChangedArray.Close(); + iGetAccessoryModeAsyncArray.Close(); + iNotifyProcessCommandArray.Close(); + iNotifyAccessoryValueChangedTBoolArray.Close(); + iNotifyAccessoryValueChangedTIntArray.Close(); + iNotifyAccessoryValueChangedObjectArray.Close(); + iSetValueArray.Close(); + iGetValueArray.Close(); + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::~CAccSrvNotificationQueue - return" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::ControlMessageArray( +// ----------------------------------------------------------------------------- +// +RArray* CAccSrvNotificationQueue::ControlMessageArray( TMsgID aMsgID ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvNotificationQueue::ControlMessageArray(0x%x)", aMsgID ); + + switch ( aMsgID ) + { + case EConnectAccessory: + { + return &iConnectAccessory; + } + case ENewAccessoryConnected: + { + return &iNewAccessoryConnectedArray; + } + case EAccessoryDisconnected: + { + return &iAccessoryDisconnectedArray; + } + case EAccessoryModeChanged: + { + return &iAccessoryModeChangedArray; + } + case EAccessoryConnectionStatusAsyncChanged: + { + return &iGetAccessoryConnectionStatusAsyncArray; + } + case EAccessoryModeAsyncChanged: + { + return &iGetAccessoryModeAsyncArray; + } + case EAccessoryConnectionStatusChanged: + { + return &iAccessoryConnectionStatusChangedArray; + } + case EAccessoryValueChangedTBool: + { + return &iNotifyAccessoryValueChangedTBoolArray; + } + case EAccessoryValueChangedTInt: + { + return &iNotifyAccessoryValueChangedTIntArray; + } + case EAccessoryValueChangedObject: + { + return &iNotifyAccessoryValueChangedObjectArray; + } + case EAccessoryAudioLinkOpen: + { + return &iAccessoryAudioLinkOpenArray; + } + case EAccessoryAudioLinkOpened: + { + return &iAccessoryAudioLinkOpenedArray; + } + case EAccessoryAudioLinkClosed: + { + return &iAccessoryAudioLinkClosedArray; + } + case EAccessoryAudioLinkClose: + { + return &iAccessoryAudioLinkCloseArray; + } + case EBluetoothAudioLinkOpenReq: + { + return &iBluetoothAudioLinkOpenReqArray; + } + case EBluetoothAudioLinkCloseReq: + { + return &iBluetoothAudioLinkCloseReqArray; + } + case EBluetoothAudioLinkOpenResp: + { + return &iBluetoothAudioLinkOpenRespArray; + } + case EBluetoothAudioLinkCloseResp: + { + return &iBluetoothAudioLinkCloseRespArray; + } + case ENotifyProcessCommand: + { + return &iNotifyProcessCommandArray; + } + case ESetValue: + { + return &iSetValueArray; + } + case EGetValue: + { + return &iGetValueArray; + } + default: + { + // Unknown notification type + PANIC_ALWAYS; + } + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::ControlMessageArray - return NULL" ); + + return NULL; + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::RegisterControlMessage +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::RegisterControlMessage( TMsgID aMsgID, + MQueueObserver* aCallback ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvNotificationQueue::RegisterControlMessage(%d)", aMsgID ); + + ControlMessageArray( aMsgID )->Append( aCallback ); + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::RegisterControlMessage - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CancelControlMessage +// +// Find the correct array and remove corresponding element (aCallback) from it. +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::CancelControlMessage( TMsgID aMsgID, + MQueueObserver* aCallback ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvNotificationQueue::CancelNotificationRequest(%d)", aMsgID ); + + TInt index( ControlMessageArray( aMsgID )->Find( aCallback ) ); + + if ( KErrNotFound != index ) + { + ControlMessageArray( aMsgID )->Remove( index ); + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvNotificationQueue::CancelNotificationRequest - %d return void", index ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CompleteControlMessageL +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::CompleteControlMessageL( TMsgID aMsgID, + TInt aErrorCode, + TInt aUniqueID ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteControlMessageL(%d)", aMsgID ); + + for ( TInt i( ControlMessageArray( aMsgID )->Count()-1 ); i >= 0; --i ) + { + if ( ControlMessageArray( aMsgID )->operator[]( i )->CompleteMessageL( + aMsgID, + aErrorCode, + aUniqueID ) ) + { + ControlMessageArray( aMsgID )->Remove( i ); + } + else + { + // Message was not consumed by subsession in question, + // leave it to queue + } + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteControlMessageL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CompleteASYCmdL +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::CompleteASYCmdL( TMsgID aMsgID, + TProcessCmdId aCmdn, + TInt aTrId, + TASYCommandParamRecord& aASYCommandParamRecord, + TPtr8* aPtrBuf ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteASYCmdL()" ); + + for ( TInt i( ControlMessageArray( aMsgID )->Count()-1 ); i >= 0; --i ) + { + if ( ControlMessageArray( aMsgID )->operator[]( i )->CompleteProcessCommandL( + aCmdn, + aTrId, + aASYCommandParamRecord, + aPtrBuf ) ) + { + ControlMessageArray( aMsgID )->Remove( i ); + } + else + { + // Message was not consumed by subsession in question, + // leave it to queue + } + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteASYCmdL return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CompleteValueMessageL +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::CompleteValueMessageL( TMsgID aMsgID, + TAccValueTypeTBool aCmdResponse, + TInt aErrorCode, + TInt aTrId ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL() - TBool" ); + + for ( TInt i( ControlMessageArray( aMsgID )->Count()-1 ); i >= 0; --i ) + { + ControlMessageArray( aMsgID )->operator[]( i )->HandleValueMessageL( + aMsgID, + aCmdResponse, + aErrorCode, + aTrId ); + ControlMessageArray( aMsgID )->Remove( i ); + } + + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL - TBool - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CompleteValueMessageL +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::CompleteValueMessageL( TMsgID aMsgID, + TAccValueTypeTInt aCmdResponse, + TInt aErrorCode, + TInt aTrId ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL() - TInt" ); + + for ( TInt i( ControlMessageArray( aMsgID )->Count()-1 ); i >= 0; --i ) + { + ControlMessageArray( aMsgID )->operator[]( i )->HandleValueMessageL( + aMsgID, + aCmdResponse, + aErrorCode, + aTrId ); + ControlMessageArray( aMsgID )->Remove( i ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL - TInt- return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CompleteValueMessageL +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::CompleteValueMessageL( TMsgID aMsgID, + TDesC8& aCmdResponse, + TInt aErrorCode, + TInt aTrId ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL() - TDesC8" ); + + for ( TInt i( ControlMessageArray( aMsgID )->Count()-1 ); i >= 0; --i ) + { + ControlMessageArray( aMsgID )->operator[]( i )->HandleValueMessageL( + aMsgID, + aCmdResponse, + aErrorCode, + aTrId ); + ControlMessageArray( aMsgID )->Remove( i ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL - TDesC8 - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::CompleteValueMessageL +// ----------------------------------------------------------------------------- +// +void CAccSrvNotificationQueue::CompleteValueMessageL( TMsgID aMsgID, + TInt aTrId, + TPtr8* aPtrBuf, + TInt aErrorCode ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL() - Object" ); + + for ( TInt i( ControlMessageArray( aMsgID )->Count()-1 ); i >= 0; --i ) + { + ControlMessageArray( aMsgID )->operator[]( i )->HandleValueMessageL( + aMsgID, + aTrId, + aPtrBuf, + aErrorCode ); + ControlMessageArray( aMsgID )->Remove( i ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::CompleteValueMessageL - Object - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvNotificationQueue::ControlMessagesWaiting +// ----------------------------------------------------------------------------- +// +TInt CAccSrvNotificationQueue::ControlMessagesWaiting( TMsgID aMsgID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvNotificationQueue::ControlMessagesWaiting()" ); + + TInt ret( ControlMessageArray( aMsgID )->Count() ); + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvNotificationQueue::ControlMessagesWaiting - return %d", ret ); + + return ret; + } + +// End of File +