--- /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 <e32std.h>
+
+// 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<TAccPolGenericID>& 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