diff -r 000000000000 -r 4e1aa6a622a0 accessoryservices/accessoryserver/src/Server/AccSrvServerModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessoryservices/accessoryserver/src/Server/AccSrvServerModel.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,1065 @@ +/* +* 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: Singleton Data Storage of Accessory Server +* +*/ + + + +// INCLUDE FILES +#include "AccSrvServerModel.h" +#include "AccPolGenericIDAccessor.h" +#include "AccPolGenericIDArrayAccessor.h" +#include "AccPolAccessoryPolicy.h" +#include "acc_debug.h" +#include + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::CAccSrvServerModel +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CAccSrvServerModel::CAccSrvServerModel() : + iASYsLoadCompleted( EFalse ), + iAudioType( EAccMonoAudio ), + iValueDataObject( NULL, 0, 0 ), + iAudioLinkOpenCancelled ( EFalse ), + iAudioLinkCloseCancelled ( EFalse ), + iSupportedDevices( 0 ), + iIdleDetected( EFalse ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::CAccSrvServerModel()" ); + + iAccMode.iAccessoryMode = EAccModeHandPortable; + iAccMode.iAudioOutputStatus = EFalse; + iUniqueID = KErrUnknown; + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::CAccSrvServerModel - return" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::ConstructL() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ConstructL()" ); + + iConnectionArray.Reset(); + iPhysicalConnectionArray.Reset(); + iRegisteredASYs.Reset(); + iASYThreadID.Reset(); + iASYUniqueID.Reset(); + iThreadIDFilterArray.Reset(); + + iCapabilityStorage = CCapabilityStorage::NewL(); + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ConstructL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CAccSrvServerModel* CAccSrvServerModel::NewL() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::NewL()" ); + CAccSrvServerModel* self = new( ELeave ) CAccSrvServerModel; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// Destructor +CAccSrvServerModel::~CAccSrvServerModel() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::~CAccSrvServerModel()" ); + + if ( KErrNotFound != iLastDisconnectedAccessory.UniqueID() ) + { + //If iLastDisconnectedAccessory is not "empty", + //then names/values are never removed from AccPolicyDB for that gid. + TRACE_ASSERT_ALWAYS; + } + + if ( iConnectionArray.Count() ) + { + // Not all connections cleared, assert. + TRACE_ASSERT_ALWAYS; + } + + if ( iPhysicalConnectionArray.Count() ) + { + //all possible gids must be handled properly, + // i.e. names/values must be removed from AccPolicyDB + // for every gid in iPhysicalConnectionArray + TRACE_ASSERT_ALWAYS; + } + + iConnectionArray.Close(); + iPhysicalConnectionArray.Close(); + iRegisteredASYs.Close(); + iASYThreadID.Close(); + iASYUniqueID.Close(); + iThreadIDFilterArray.Close(); + + delete iCapabilityStorage; + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::~CAccSrvServerModel - return" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::IsConnected +// +// Accessory is connected if it can be found from connection array. +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::IsConnected( const TAccPolGenericID& aGenericID ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnected()" ); + TBool ret( EFalse ); + + if ( KErrNotFound != FindGID( aGenericID, iConnectionArray ) ) + { + ret = ETrue; + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::IsConnected - return %d", ret ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::IsConnectedL +// +// Accessory is connected if it can be found from connection array. +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::IsConnectedL( const TAccPolGenericID& aGenericID ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnectedL()" ); + + if ( !IsConnected( aGenericID ) ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnectedL - accessory is not connected" ); + User::Leave( KErrArgument ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnectedL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::IsConnectedOrDetectedL +// +// Accessory is connected if it can be found from connection array. +// Accessory is detected if it can be found from physical connections array. +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::IsConnectedOrDetected( const TAccPolGenericID& aGenericID ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnectedOrDetected()" ); + + TBool retval( EFalse ); + + if ( IsConnected( aGenericID ) || FindGID( aGenericID, iPhysicalConnectionArray ) >= 0 ) + { + retval = ETrue; + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnectedOrDetected - return void" ); + return retval; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::IsConnectedOrDetectedL +// +// Accessory is connected if it can be found from connection array. +// Accessory is detected if it can be found from physical connections array. +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::IsConnectedOrDetectedL( const TAccPolGenericID& aGenericID ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnectedOrDetectedL()" ); + + if ( !IsConnected( aGenericID ) ) + { + if ( KErrNotFound == FindGID( aGenericID, iPhysicalConnectionArray ) ) + { + User::Leave( KErrArgument ); + } + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::IsConnectedOrDetectedL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::FindGID +// +// Returns index to GID given as a parameter. +// Comparison is done according HWDeviceID. +// (Comparison can be made also according to the unique DB id) +// ----------------------------------------------------------------------------- +// +TInt CAccSrvServerModel::FindGID( const TAccPolGenericID& aGenericID, + const RArray& aArray ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::FindGID()" ); + TInt index( KErrNotFound ); + + for ( TInt i( 0 ) ; i < aArray.Count() ; ++i ) + { + if ( aGenericID.UniqueID() == aArray.operator[](i).UniqueID() ) + { + index = i; + break;// found matching GID (according to HWDeviceID) + // ->no need to continue + } + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::FindGID - return %d", index ); + return index; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::AddConnectionL +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::AddConnectionL( const TAccPolGenericID& aGenericID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::AddConnectionL()" ); + + if ( iConnectionArray.Count() >= KMaxGenericIDInstances ) + { + User::Leave( KErrOverflow ); + } + else + { + iConnectionArray.InsertL( aGenericID, 0 );//i.e. last connected sccessory in index 0 + TAccPolGenericIDAccessor::DebugPrint( aGenericID ); + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::AddConnectionL - return void - current count = %d", iConnectionArray.Count() ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::UpdateConnectionL +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::UpdateConnectionL( const TAccPolGenericID& aGenericID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::UpdateConnectionL()" ); + + RemoveConnectionL( aGenericID, EFalse ); + AddConnectionL( aGenericID ); + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::UpdateConnectionL - return void - current count = %d", iConnectionArray.Count() ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::AddPhysicalConnectionL +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::AddPhysicalConnectionL( const TAccPolGenericID& aGenericID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::AddPhysicalConnectionL()" ); + + if ( iPhysicalConnectionArray.Count() >= KMaxGenericIDInstances ) + { + User::Leave( KErrOverflow ); + } + else + { + iPhysicalConnectionArray.InsertL( aGenericID, 0 );//i.e. last connected sccessory in index 0 + TAccPolGenericIDAccessor::DebugPrint( aGenericID ); + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::AddPhysicalConnectionL - return void - current count = %d", iPhysicalConnectionArray.Count() ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::RemovePhysicalConnectionL +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::RemovePhysicalConnection( const TAccPolGenericID& aGenericID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::RemovePhysicalConnection()" ); + + TInt index( FindGID( aGenericID, iPhysicalConnectionArray ) ); + + // KErrNotFound is not an error case since accessory can be detected + // (stored in PhysicalConnection array) or connected (stored in Connection array) + if ( KErrNotFound != index ) + { + iPhysicalConnectionArray.Remove( index ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::RemovePhysicalConnection - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::RemoveConnectionL +// +// Move disconnected gid to "iLastDisconnectedAccessory" for later +// names/values removal from AccPolicyDB. +// This is done while disconnecting accessory(aDisconnect=ETrue). +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::RemoveConnectionL( const TAccPolGenericID& aGenericID, + TBool aDisconnect ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::RemoveConnectionL()" ); + + TInt index( FindGID( aGenericID, iConnectionArray ) ); + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::RemoveConnectionL - handling index %x", index ); + + if ( aDisconnect ) + { + if ( KErrNotFound != iLastDisconnectedAccessory.UniqueID() ) + { + //If iLastDisconnectedAccessory is not "empty" and its overwritten, + //then names/values are never removed from from AccPolicyDB for that gid. + //This is an error. + TRACE_ASSERT_ALWAYS; + } + + if ( KErrNotFound != index ) + { + //This is not an error case since accessory can be + //detected (stored in PhysicalConnection array) or + //connected (stored in Connection array) + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::RemoveConnectionL - GID stored" ); + iLastDisconnectedAccessory = iConnectionArray[ index ]; + } + else + { + //Try to search accessory from Physical connection array + TInt ind( FindGID( aGenericID, iPhysicalConnectionArray ) ); + if ( KErrNotFound != ind ) + { + iLastDisconnectedAccessory = iPhysicalConnectionArray[ ind ]; + } + } + } + + //Remove GID from connection array + //KErrNotFound is not an error case since accessory can be detected + //(stored in PhysicalConnection array) or connected (stored in Connection array) + if ( KErrNotFound != index ) + { + iConnectionArray.Remove( index ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::RemoveConnectionL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::CurrentConnectionStatusL +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::CurrentConnectionStatusL( + TAccPolGenericIDArray& aGenericIDArray ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::CurrentConnectionStatusL(0x%x)", &aGenericIDArray ); + + if (iConnectionArray.Count() != 0 ) + { + TAccPolGenericIDArrayAccessor::ReplaceArrayL( aGenericIDArray, iConnectionArray ); + } + else + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::CurrentConnectionStatusL - No connected accessories" ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::CurrentConnectionStatusL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::FindWithUniqueIDL +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::FindWithUniqueIDL( TInt aUniqueID, + TAccPolGenericID& aGenericID ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::FindWithUniqueIDL()" ); + + TInt index( 0 ); + TAccPolGenericIDArray genericIDArray; + + TAccPolGenericIDArrayAccessor::ReplaceArrayL( genericIDArray, iConnectionArray ); + + index = TAccPolGenericIDArrayAccessor::FindWithUniqueIDL( genericIDArray, + aUniqueID ); + + if ( index < 0 ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::FindWithUniqueIDL - Unique ID not found" ); + } + else + { + aGenericID = iConnectionArray.operator[]( index ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::FindWithUniqueIDL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::FindWithDeviceAddressL +// ----------------------------------------------------------------------------- +// +TInt CAccSrvServerModel::FindWithDeviceAddressL( TUint64 aDeviceAddress, + TInt& aUniqueID ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::FindWithDeviceAddressL()" ); + + TInt index( 0 ); + TAccPolGenericIDArray genericIDArray; + + TAccPolGenericIDArrayAccessor::ReplaceArrayL( genericIDArray, iConnectionArray ); + + index = TAccPolGenericIDArrayAccessor::FindWithDeviceAddressL( genericIDArray, + aDeviceAddress ); + + if ( index < 0 ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::FindWithDeviceAddressL - Device Address not found" ); + } + else + { + aUniqueID = iConnectionArray.operator[]( index ).UniqueID(); + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::FindWithDeviceAddressL return %d", index ); + return index; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::AccessoryMode +// ----------------------------------------------------------------------------- +// +TAccPolAccessoryMode CAccSrvServerModel::AccessoryMode() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::AccessoryMode()" ); + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::AccessoryMode - return 0x%x", iAccMode ); + return iAccMode; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::GetLastConnectedAccessoryL +// +// Last connected accessory is allways in index 0. +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::GetLastConnectedAccessoryL( TAccPolGenericID& aGenericID ) const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::GetLastConnectedAccessoryL()" ); + + if ( iConnectionArray.Count() != 0 ) + { + aGenericID = iConnectionArray[ 0 ]; + } + else + { + TRACE_ASSERT_ALWAYS; + User::Leave( KErrGeneral ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::GetLastConnectedAccessoryL - return" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetAccessoryMode +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::SetAccessoryMode( TAccPolAccessoryMode aAccMode, TInt aUniqueID ) + { + COM_TRACE_3( "[AccFW:AccServer] CAccSrvServerModel::SetAccessoryMode(mode=%d audio=%d uniqueid=%d)", aAccMode.iAccessoryMode, aAccMode.iAudioOutputStatus, aUniqueID ); + TBool changed( EFalse ); + + if ( aAccMode.iAccessoryMode == iAccMode.iAccessoryMode + && aAccMode.iAudioOutputStatus == iAccMode.iAudioOutputStatus + && iUniqueID == aUniqueID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetAccessoryMode - Mode not changed" ); + } + else + { + if ( KErrUnknown == aUniqueID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetAccessoryMode - UniqueID not changed" ); + iAccMode = aAccMode; + changed = ETrue; + } + else + { + iUniqueID = aUniqueID; + iAccMode = aAccMode; + changed = ETrue; + } + } + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetAccessoryMode - return %d", changed ); + return changed; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetASYsLoadCompleted +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetASYsLoadCompleted() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetASYsLoadCompleted()" ); + iASYsLoadCompleted = ETrue; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetASYsLoadCompleted" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ASYsLoadCompleted +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::ASYsLoadCompleted() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ASYsLoadCompleted()" ); + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::ASYsLoadCompleted return 0x%x", iASYsLoadCompleted ); + return iASYsLoadCompleted; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::AudioType() +// ----------------------------------------------------------------------------- +// +TAccAudioType CAccSrvServerModel::AudioType() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::AudioType()" ); + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::AudioType - return 0x%x", iAudioType ); + return iAudioType; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetAudioType +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetAudioType( TAccAudioType aAudioType ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetAudioType(0x%x)", aAudioType ); + iAudioType = aAudioType; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetAudioType - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::DeviceType +// ----------------------------------------------------------------------------- +// +TUint32 CAccSrvServerModel::DeviceType() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::DeviceType()" ); + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::DeviceType() - return 0x%x", iDeviceType ); + return iDeviceType; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetDeviceType +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetDeviceType( TUint32 aDeviceType ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetDeviceType(0x%x)", aDeviceType ); + iDeviceType = aDeviceType; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetDeviceType - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SupportedDevicesL +// ----------------------------------------------------------------------------- +// +TUint32 CAccSrvServerModel::SupportedDevicesL() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SupportedDevicesL()" ); + //get supported devices from policy (only at first time) + if ( !iSupportedDevices ) + { + CAccPolAccessoryPolicy * policy = CAccPolAccessoryPolicy::NewL( 0 ); + CleanupStack::PushL( policy ); + + iSupportedDevices = policy->SupportedHWDevicesL(); + + CleanupStack::PopAndDestroy( policy ); + } + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SupportedDevicesL() - return supported devices" ); + return iSupportedDevices; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::LastDisconnectedAccessory +// ----------------------------------------------------------------------------- +// +const TAccPolGenericID& CAccSrvServerModel::LastDisconnectedAccessory() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::LastDisconnectedAccessory()" ); + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::LastDisconnectedAccessory - return gid" ); + return iLastDisconnectedAccessory; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ClearLastDisconnectedAccessory +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::ClearLastDisconnectedAccessory() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ClearLastDisconnectedAccessory()" ); + TAccPolGenericID emptyGid; + iLastDisconnectedAccessory = emptyGid; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ClearLastDisconnectedAccessory - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetValueData +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetValueData( TAccPolGenericID& aGenericId, + TAccPolNameRecord& aNameRecord, + TAccValueTypeTInt aValueTint, + TAccValueTypeTBool aValueTBool, + TAccValueTypeObject aValueObject ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetValueData()" ); + iValueDataGenericId = aGenericId; + iValueDataNameRecord = aNameRecord; + iValueDataTint = aValueTint; + iValueDataTBool = aValueTBool; + iValueDataObject.Set( aValueObject.iValue ); + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetValueData - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ValueDataGid +// ----------------------------------------------------------------------------- +// +TAccPolGenericID CAccSrvServerModel::ValueDataGid() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ValueDataGid()" ); + return iValueDataGenericId; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ValueDataNameRecord +// ----------------------------------------------------------------------------- +// +TAccPolNameRecord CAccSrvServerModel::ValueDataNameRecord() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ValueDataNameRecord()" ); + return iValueDataNameRecord; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ValueDataTInt +// ----------------------------------------------------------------------------- +// +TAccValueTypeTInt CAccSrvServerModel::ValueDataTInt() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ValueDataTInt()" ); + return iValueDataTint; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ValueDataTBool +// ----------------------------------------------------------------------------- +// +TAccValueTypeTBool CAccSrvServerModel::ValueDataTBool() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ValueDataTBool()" ); + return iValueDataTBool; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::ValueDataObject +// ----------------------------------------------------------------------------- +// +TAccValueTypeObject CAccSrvServerModel::ValueDataObject() const + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::ValueDataObject()" ); + TAccValueTypeObject valueTypeObject( iValueDataObject ); + return valueTypeObject; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::AddASYThreadId +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::AddASYThreadId( TUint aThreadID ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::AddASYThreadId(%d)", aThreadID ); + iRegisteredASYs.Append( aThreadID ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::StoreASYThreadID +// +// If aThreadID can be found from connected ASYs table (iRegisteredASYs), +// mapping between aUniqueID and aThreadID can be made. +// This means that ASY has made accessory connection and that ASY will serve +// all request for that gineric ID. +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::StoreASYThreadID( TUint aThreadID, TInt aUniqueID ) + { + COM_TRACE_2( "[AccFW:AccServer] CAccSrvServerModel::StoreASYThreadID(%d %d)", aThreadID, aUniqueID ); + if ( KErrNotFound == iRegisteredASYs.Find( aThreadID ) ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::StoreASYThreadID - Thread ID is not ASYs" ); + } + else + { + iASYThreadID.Append( aThreadID ); + iASYUniqueID.Append( aUniqueID ); + } + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::RemoveASYThreadID +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::RemoveASYThreadID( TInt aUniqueID ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::RemoveASYThreadID(%d)", aUniqueID ); + TInt index( iASYUniqueID.Find( aUniqueID ) ); + + //If index is KErrNotFound, threadIDs are never stored in CAccSrvServerModel::StoreASYThreadID() + if ( KErrNotFound != index ) + { + iASYThreadID.Remove( index ); + iASYUniqueID.Remove( index ); + } + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::RemoveASYThreadID - return" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::IsMyRequest +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::IsMyRequest( TUint aThreadID, TInt aUniqueID ) + { + COM_TRACE_2( "[AccFW:AccServer] CAccSrvServerModel::IsMyRequest(%d %d)", aThreadID, aUniqueID ); + + TBool ret( EFalse ); + TInt index( iASYUniqueID.Find( aUniqueID ) ); + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::IsMyRequest - handling index %d", index ); + + // If KErrNotFound, Generic ID / ASY thread ID mapping is not done + // (because accessory connection is not made by ASY). + if ( KErrNotFound != index ) + { + if ( iASYThreadID.operator[]( index ) == aThreadID ) + { + //match + COM_TRACE_2( "[AccFW:AccServer] CAccSrvServerModel::IsMyRequest - found %d %d", iASYThreadID.operator[]( index ), iASYUniqueID.operator[]( index ) ); + ret = ETrue; + } + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::IsMyRequest - return %d", ret ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetMsgThreadIDFilter +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetMsgThreadIDFilter( TUint aThreadID, TMsgID aMsgID ) + { + COM_TRACE_2( "[AccFW:AccServer] CAccSrvServerModel::SetMsgThreadIDFilter(%d %d)", aThreadID, aMsgID ); + + TAccSrvThreadIDFilter threadIDFilter; + threadIDFilter.iThreadID = aThreadID; + threadIDFilter.iMsgID = aMsgID; + + iThreadIDFilterArray.Append( threadIDFilter ); + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetMsgThreadIDFilter - count=%d - return void", iThreadIDFilterArray.Count() ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::FindAndDeleteMsgThreadIDFilter +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::FindAndDeleteMsgThreadIDFilter( TUint aThreadID, TMsgID aMsgID ) + { + COM_TRACE_2( "[AccFW:AccServer] CAccSrvServerModel::FindAndDeleteMsgThreadIDFilter(%d %d)", aThreadID, aMsgID ); + + TBool ret( EFalse ); + TInt count( iThreadIDFilterArray.Count() ); + + for ( TInt i( 0 ) ; i < count ; ++i ) + { + if ( iThreadIDFilterArray.operator[](i).iThreadID == aThreadID && + iThreadIDFilterArray.operator[](i).iMsgID == aMsgID ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::FindAndDeleteMsgThreadIDFilter - match found in index %d", i ); + iThreadIDFilterArray.Remove( i ); + ret = ETrue; + break; + } + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::FindAndDeleteMsgThreadIDFilter - return %d", ret ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetCancelledConnectAccessoryL (UniqueID) +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetCancelledConnectAccessoryL( TInt aUniqueID ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetCancelledConnectAccessoryL(%d)", aUniqueID ); + TAccPolGenericIDArray genericIDArray; + TInt index( KErrNotFound ); + + //Find the GenericID in question. + //ConnectAccessory() can be cancelled only for accessories in detected state + TAccPolGenericIDArrayAccessor::ReplaceArrayL( genericIDArray, iPhysicalConnectionArray ); + index = TAccPolGenericIDArrayAccessor::FindWithUniqueIDL( genericIDArray, aUniqueID ); + + if ( index < 0 ) + { + //Connection of this accessory can not be cancelled + } + else + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetCancelledConnectAccessoryL - handling index %d", index ); + iCancelledConnectAccessory.Append( genericIDArray.GetGenericIDL( index ).UniqueID() ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetCancelledConnectAccessoryL - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetCancelledConnectAccessoryL (DeviceAddress) +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetCancelledConnectAccessoryL( TUint64 aDeviceAddress ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetCancelledConnectAccessoryL(DeviceAddress)" ); + TAccPolGenericIDArray genericIDArray; + TInt index( KErrNotFound ); + + //Find the GenericID in question. + //ConnectAccessory() can be cancelled only for accessories in detected state + TAccPolGenericIDArrayAccessor::ReplaceArrayL( genericIDArray, + iPhysicalConnectionArray ); + + index = TAccPolGenericIDArrayAccessor::FindWithDeviceAddressL( genericIDArray, + aDeviceAddress ); + + if ( index < 0 ) + { + //Connection of this accessory can not be cancelled + } + else + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetCancelledConnectAccessoryL - handling index %d", index ); + iCancelledConnectAccessory.Append( genericIDArray.GetGenericIDL( index ).UniqueID() ); + } + + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetCancelledConnectAccessoryL - DeviceAddress - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::FindAndRemoveCancelledConnectAccessory +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::FindAndRemoveCancelledConnectAccessory( + TInt aUniqueID ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::FindAndRemoveCancelledConnectAccessory()" ); + TAccPolGenericIDArray genericIDArray; + TInt index( KErrNotFound ); + TBool ret( EFalse ); + + index = iCancelledConnectAccessory.Find( aUniqueID ); + + if ( index < 0 ) + { + //Connection is not cancelled + } + else + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::FindAndRemoveCancelledConnectAccessory - cancelled index %d", index ); + iCancelledConnectAccessory.Remove( index ); + ret = ETrue; + } + + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::FindAndRemoveCancelledConnectAccessory - return %d", ret ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::FindAndRemoveCancelledConnectAccessory +// ----------------------------------------------------------------------------- +// +CCapabilityStorage& CAccSrvServerModel::CapabilityStorage() + { + return *iCapabilityStorage; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetAudioLinkOpenCancelled +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetAudioLinkOpenCancelled( TBool aCancelled ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetAudioLinkOpenCancelled(%d)", aCancelled ); + iAudioLinkOpenCancelled = aCancelled; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetAudioLinkOpenCancelled - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::AudioLinkOpenCancelled +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::AudioLinkOpenCancelled() + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::AudioLinkOpenCancelled()- return %d", iAudioLinkOpenCancelled ); + return iAudioLinkOpenCancelled; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetAudioLinkCloseCancelled +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetAudioLinkCloseCancelled( TBool aCancelled ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetAudioLinkCloseCancelled(%d)", aCancelled ); + iAudioLinkCloseCancelled = aCancelled; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetAudioLinkCloseCancelled - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::AudioLinkCloseCancelled +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::AudioLinkCloseCancelled() + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::AudioLinkCloseCancelled() - return %d", iAudioLinkCloseCancelled ); + return iAudioLinkCloseCancelled; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetIdleDetected +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetIdleDetected() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetIdleDetected()" ); + + //idle detected + iIdleDetected = ETrue; + + if ( iIdleStatus ) + { + //complete outstanding requests + User::RequestComplete( iIdleStatus, KErrNone ); + } + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetIdleDetected() - return void" ); + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::IdleDetected +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::IdleDetected() + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::IdleDetected() - return %d", iIdleDetected ); + return iIdleDetected; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::WaitForIdle +// ----------------------------------------------------------------------------- +// +TInt CAccSrvServerModel::WaitForIdle( TRequestStatus* iStatus) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::WaitForIdle()" ); + + //idle already detected + if ( iIdleDetected ) + { + return KErrGeneral; + } + + iIdleStatus = iStatus; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::WaitForIdle() - return" ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::CancelWaitForIdle +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::CancelWaitForIdle() + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::CancelWaitForIdle()"); + if ( iIdleStatus ) + { + //complete outstanding requests + User::RequestComplete( iIdleStatus, KErrCancel ); + iIdleStatus = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::BluetoothAudioLinkOpenReqPostponed +// ----------------------------------------------------------------------------- +// +TBool CAccSrvServerModel::BluetoothAudioLinkOpenReqPostponed() + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::BluetoothAudioLinkOpenReqPostponed() return %d", iBluetoothAudioLinkOpenReqPostponed ); + return iBluetoothAudioLinkOpenReqPostponed; + } + +// ----------------------------------------------------------------------------- +// CAccSrvServerModel::SetBluetoothAudioLinkOpenReqPostponed +// ----------------------------------------------------------------------------- +// +void CAccSrvServerModel::SetBluetoothAudioLinkOpenReqPostponed( TBool aValue ) + { + COM_TRACE_1( "[AccFW:AccServer] CAccSrvServerModel::SetBluetoothAudioLinkOpenReqPostponed(%d)", aValue ); + iBluetoothAudioLinkOpenReqPostponed = aValue; + COM_TRACE_( "[AccFW:AccServer] CAccSrvServerModel::SetBluetoothAudioLinkOpenReqPostponed() - return" ); + } + +// End of File