diff -r 0ba996a9b75d -r 613943a21004 bluetoothengine/btnotif/inc/btnotiflock.inl --- a/bluetoothengine/btnotif/inc/btnotiflock.inl Thu Aug 19 10:05:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -/* -* Copyright (c) 2006 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: Implements getting/setting notifier locks on BT devices -* from/to P&S KBTNotifierLocks from btengprivatepskeys.h. -* -*/ - -#include "btengprivatepskeys.h" -#include - -// ---------------------------------------------------------- -// Initialize members to zero -// ---------------------------------------------------------- -// -inline TBTNotifLock::TBTNotifLock() - : iAddr(TBTDevAddr()), iLocks(EBTNotifierLockNone) - { - } - -// ---------------------------------------------------------- -// initialize members to the specified values -// ---------------------------------------------------------- -// -inline TBTNotifLock::TBTNotifLock(const TBTDevAddr& aAddr, TInt aLocks) - : iAddr( aAddr ), iLocks( aLocks ) - { - } - -// ---------------------------------------------------------- -// returns the address -// ---------------------------------------------------------- -// -inline const TBTDevAddr& TBTNotifLock::Addr() const - { - return iAddr; - } - -// ---------------------------------------------------------- -// returns the lock as value -// ---------------------------------------------------------- -// -inline TInt TBTNotifLock::Locks() const - { - return iLocks; - } - -// ---------------------------------------------------------- -// returns the lock as modifiable reference -// ---------------------------------------------------------- -// -inline TInt& TBTNotifLock::Locks() - { - return iLocks; - } - -// ---------------------------------------------------------- -// Locally instantiate a RProperty and invoke GetNotifLocks -// ---------------------------------------------------------- -// -inline void TBTNotifLockPublish::GetNotifLocks( TInt& aLocks, const TBTDevAddr& aAddr ) - { - RProperty property; - TInt err = property.Attach( - KPSUidBluetoothEnginePrivateCategory, KBTNotifierLocks ); - if ( !err ) - { - GetNotifLocks( property, aLocks, aAddr ); - } - property.Close(); - } - -// ---------------------------------------------------------- -// Extracts from PS key and returns the lock value for -// the specified device -// ---------------------------------------------------------- -// -inline void TBTNotifLockPublish::GetNotifLocks(RProperty& aProperty, - TInt& aLocks, const TBTDevAddr& aAddr ) - { - aLocks = EBTNotifierLockNone; - TInt infoSize( sizeof( TBTNotifLock ) ); - TBuf8 infoDes; - TInt err = aProperty.Get( infoDes ); - if ( err || infoDes.Length() < infoSize ) - { - // zero length of the PS content indicates no lock set at all. - return; - } - TInt infoCount = infoDes.Length() / infoSize; - - TPckgBuf tmpPckg; - for ( TInt i = 0; i < infoCount; i++ ) - { - tmpPckg.Copy(infoDes.Mid( i * infoSize, infoSize )); - if ( tmpPckg().Addr() == aAddr ) - { - // found the locks for the device, writes to client. - aLocks = tmpPckg().Locks(); - return; - } - } - } - -// ---------------------------------------------------------- -// Locally instantiate a RProperty and invoke AddNotifLocks -// ---------------------------------------------------------- -// -inline void TBTNotifLockPublish::AddNotifLocks( TInt aLocks, const TBTDevAddr& aAddr ) - { - RProperty property; - TInt err = property.Attach( - KPSUidBluetoothEnginePrivateCategory, KBTNotifierLocks ); - if ( !err ) - { - AddNotifLocks( property, aLocks, aAddr ); - } - property.Close(); - } - -// ---------------------------------------------------------- -// Find the lock for the device from PS key and updates its value if -// needed. -// ---------------------------------------------------------- -// -inline void TBTNotifLockPublish::AddNotifLocks( RProperty& aProperty, - TInt aLocks, const TBTDevAddr& aAddr ) - { - TBuf8 infoDes; - TInt infoSize( sizeof( TBTNotifLock ) ); - TInt err = aProperty.Get( infoDes ); - if ( err ) - { - return; - } - TInt infoCount = infoDes.Length() / infoSize; - TPckgBuf tmpPckg; - - for ( TInt i = 0; i < infoCount; i++ ) - { - tmpPckg.Copy(infoDes.Mid( i * infoSize, infoSize )); - if ( tmpPckg().Addr() == aAddr ) - { - TInt newOps = tmpPckg().Locks() | aLocks; - // update the value only if it is really changed: - if ( tmpPckg().Locks() != newOps ) - { - tmpPckg().Locks() = newOps; - infoDes.Replace( i * infoSize, infoSize, tmpPckg ); - (void) aProperty.Set( infoDes ); - } - return; - } - } - // no lock for the device so far, append it to the end: - tmpPckg() = TBTNotifLock( aAddr, aLocks ); - if ( infoCount ) - { - infoDes.Append( tmpPckg ); - (void) aProperty.Set( infoDes ); - } - (void) aProperty.Set( tmpPckg ); - } - -// ---------------------------------------------------------- -// Locally instantiate a RProperty and invoke DeleteNotifLocks -// ---------------------------------------------------------- -// -inline void TBTNotifLockPublish::DeleteNotifLocks( TInt aLocks, const TBTDevAddr& aAddr ) - { - RProperty property; - TInt err = property.Attach( - KPSUidBluetoothEnginePrivateCategory, KBTNotifierLocks ); - if ( !err ) - { - DeleteNotifLocks( property, aLocks, aAddr ); - } - property.Close(); - } - -// ---------------------------------------------------------- -// Find the lock for the device from PS key and updates its value if -// needed. -// ---------------------------------------------------------- -// -inline void TBTNotifLockPublish::DeleteNotifLocks( RProperty& aProperty, - TInt aLocks, const TBTDevAddr& aAddr ) - { - TBuf8 infoDes; - TInt infoSize( sizeof( TBTNotifLock ) ); - TInt err = aProperty.Get( infoDes ); - if ( err || infoDes.Length() < infoSize ) - { - return; - } - TInt infoCount = infoDes.Length() / infoSize; - TPckgBuf tmpPckg; - for ( TInt i = 0; i < infoCount; i++ ) - { - tmpPckg.Copy( infoDes.Mid( i * infoSize, infoSize ) ); - if ( tmpPckg().Addr() == aAddr ) - { - TInt newOps = tmpPckg().Locks() & ~aLocks; - // update PS only if the value is changed: - if ( tmpPckg().Locks() != newOps ) - { - tmpPckg().Locks() = newOps; - if ( tmpPckg().Locks() == 0) - { - // no lock for this device anymore, remove from PS: - infoDes.Delete( i * infoSize, infoSize ); - } - else - { - // Update the lock value: - infoDes.Replace( i * infoSize, infoSize, tmpPckg ); - } - (void) aProperty.Set( infoDes ); - } - return; - } - } - } -