Revision: 201003 PDK_3.0.g
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:20:42 +0200
changeset 2 0b192a3a05a4
parent 1 6a1fe72036e3
child 6 6a29d5ad0713
child 7 17bf63daa97b
child 15 00f9ee97d895
child 22 4255033c5d30
Revision: 201003 Kit: 201005
bluetoothengine/btaudioman/expinc/BTAccObserver.h
bluetoothengine/btaudioman/expinc/BTAccTypes.h
bluetoothengine/btaudioman/inc/BTAccInfo.h
bluetoothengine/btaudioman/inc/basrvacc.h
bluetoothengine/btaudioman/inc/basrvaccman.h
bluetoothengine/btaudioman/src/BTAccInfo.cpp
bluetoothengine/btaudioman/src/basrvacc.cpp
bluetoothengine/btaudioman/src/basrvaccman.cpp
bluetoothengine/btaudioman/src/basrvsdpquery.cpp
bluetoothengine/bthid/loc/btkeyboard.loc
bluetoothengine/btmac/BWINS/ATCodecU.DEF
bluetoothengine/btmac/BWINS/BTMonoCmdHandlerU.DEF
bluetoothengine/btmac/common/atcodec.h
bluetoothengine/btmac/common/btmchandlerapi.h
bluetoothengine/btmac/eabi/ATCodecu.DEF
bluetoothengine/btmac/eabi/BTMonoCmdHandleru.DEF
bluetoothengine/btmac/inc/btmac/btmman.h
bluetoothengine/btmac/inc/btmonocmdhandler/HFPAtUrcHandler.h
bluetoothengine/btmac/inc/btmonocmdhandler/btmcdummy.h
bluetoothengine/btmac/inc/btmonocmdhandler/btmcmobileline.h
bluetoothengine/btmac/inc/btmonocmdhandler/btmcprotocol.h
bluetoothengine/btmac/inc/btmonocmdhandler/btmcvoipline.h
bluetoothengine/btmac/src/ATCodec/atccommand.cpp
bluetoothengine/btmac/src/BTMonoCmdHandler/btmchandlerapi.cpp
bluetoothengine/btmac/src/BTMonoCmdHandler/btmcmobileline.cpp
bluetoothengine/btmac/src/BTMonoCmdHandler/btmcprotocol.cpp
bluetoothengine/btmac/src/btmac/btmman.cpp
bluetoothengine/btmac/src/btmac/btmsctrl.cpp
bluetoothengine/btmac/src/btmac/btmsreconnect.cpp
bluetoothengine/btnotif/data/BTNotif.rss
bluetoothengine/btsac/src/btsaController.cpp
bluetoothengine/btsap/src/BTSapHciExtensionMan.cpp
--- a/bluetoothengine/btaudioman/expinc/BTAccObserver.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/expinc/BTAccObserver.h	Tue Feb 02 00:20:42 2010 +0200
@@ -93,6 +93,13 @@
     virtual TBool IsAvrcpVolCTSupported() = 0;
     virtual TBool IsAbsoluteVolumeSupported(const TBTDevAddr& aAddr) = 0;
     
+    /**
+     * Get the supported features of a profile in a device.
+     * @param aAddr The address of the device.
+     * @param aType the profile identifier
+     * @return the supported features value.
+     */
+    virtual TInt SupportedFeature( const TBTDevAddr& aAddr, TProfiles aType ) const = 0;
     };
 
 #endif // BTACC_OBSERVER_H
--- a/bluetoothengine/btaudioman/expinc/BTAccTypes.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/expinc/BTAccTypes.h	Tue Feb 02 00:20:42 2010 +0200
@@ -22,6 +22,12 @@
 
 #include <bttypes.h>
 
+/**
+ * This value indicates the HSP of a headset/carkit supports Remote
+ * volume control.
+ */
+const TInt KHspRemoteVolumeControlSupport = 0x10;
+
 enum TProfiles
     {
     ERemConCT   = 0x10, // AVRCP Controller
--- a/bluetoothengine/btaudioman/inc/BTAccInfo.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/inc/BTAccInfo.h	Tue Feb 02 00:20:42 2010 +0200
@@ -21,7 +21,7 @@
 
 // INCLUDES
 #include <bttypes.h>  // TBTDevAddr
-
+#include <btaccTypes.h>
 // DATA TYPES
 
 // CLASS DECLARATION
@@ -125,10 +125,11 @@
     void SetSupportedFeature(TUint16 aSupportedFeature, TInt aPosition);
     
     /** 
-    * Accessor for the 
-    * @return 
+    * Accessor for the supported feature of a profile
+    * @return the supported features of this profile. 0 is returned if the profile is not
+    * found in this storage.
     */
-    TUint16 SupportedFeatureL(TInt aPosition) const;
+    TUint16 SupportedFeature(TProfiles aProfile) const;
      
 public:
     TBTDevAddr iAddr;
--- a/bluetoothengine/btaudioman/inc/basrvacc.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/inc/basrvacc.h	Tue Feb 02 00:20:42 2010 +0200
@@ -89,6 +89,13 @@
     
     void AllowLowPowerMode();
     
+    /**
+     * Get the supported features of a profile in this device.
+     * @param aProfile the profile identifier
+     * @return the supported features value.
+     */
+    TInt SupportedFeature( TProfiles aProfile );
+    
 protected:
 
     /**
--- a/bluetoothengine/btaudioman/inc/basrvaccman.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/inc/basrvaccman.h	Tue Feb 02 00:20:42 2010 +0200
@@ -16,7 +16,7 @@
 *  Name        : basrvaccman.h
 *  Part of     : BTEng / Bluetooth Accessory Server
 *  Description : 
-*  Version     : %version: 3.1.4.1.2.2.10 %
+*  Version     : %version: 3.1.4.1.2.2.11 %
 *
 */
 
@@ -123,6 +123,14 @@
     
     TInt ConnectionStatus(const TBTDevAddr& aAddr);
 
+    /**
+     * Get the supported features of a profile in a device.
+     * @param aAddr The address of the device.
+     * @param aProfile the profile identifier
+     * @return the supported features value.
+     */
+    TInt SupportedFeature( const TBTDevAddr& aAddr, TProfiles aProfile ) const;
+    
     //TCleanupOperation callback function for TCleanupItem
     static void CleanupLastItemFromClientRequestsArray(TAny* aPtr);
 
@@ -159,7 +167,7 @@
     
     void DestructVariant();
 
-    TInt FindAcc(const TBTDevAddr& aRemote);
+    TInt FindAcc(const TBTDevAddr& aRemote) const;
 
     TInt AudioLinkStatus();
 
--- a/bluetoothengine/btaudioman/src/BTAccInfo.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/src/BTAccInfo.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -155,18 +155,26 @@
     
     
 // -----------------------------------------------------------------------------
-// TAccInfo::SupportedFeatureL
+// TAccInfo::SupportedFeature
 // -----------------------------------------------------------------------------
 //    
-TUint16 TAccInfo::SupportedFeatureL(TInt aPosition)    const
+TUint16 TAccInfo::SupportedFeature(TProfiles aProfile) const
     {
-    if ( aPosition < iSupportedFeatures.Count() )
+    TUint16 sf = 0;
+    switch ( aProfile )
         {
-        return iSupportedFeatures.At(aPosition);            
+        case EHFP:
+            sf = iSupportedFeatures.At( EHFPIndex ); 
+            break;
+        case EHSP:
+            sf = iSupportedFeatures.At( EHSPIndex );
+            break;
+        case EStereo:
+            sf = iSupportedFeatures.At( EStereoIndex );
+            break;
+        case ERemConTG:
+            sf = iSupportedFeatures.At( ERemConTGIndex );
+            break;
         }
-    else
-        {
-        User::Leave(KErrOverflow);
-        }
-    return 0x00;
+    return sf;
     }
--- a/bluetoothengine/btaudioman/src/basrvacc.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/src/basrvacc.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -261,6 +261,11 @@
     }
 
 
+TInt CBasrvAcc::SupportedFeature( TProfiles aProfile )
+    {
+    return iAccInfo.SupportedFeature( aProfile );
+    }
+
 CBasrvAcc::CBasrvAcc(CBasrvAccMan& aAccMan)
     : iAccMan(aAccMan)
     {
--- a/bluetoothengine/btaudioman/src/basrvaccman.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/src/basrvaccman.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Implementation of an accessory management.
-*  Version     : %version:  14.1.7 %
+*  Version     : %version:  14.1.8 %
 *
 */
 
@@ -651,6 +651,22 @@
     return 0;
 	}
 
+TInt CBasrvAccMan::SupportedFeature( const TBTDevAddr& aAddr, TProfiles aProfile ) const
+    {
+    TRACE_INFO_SEG(
+        {
+        TBuf<12> buf;
+        aAddr.GetReadable(buf);
+        Trace(_L("CBasrvAccMan::SupportedFeature '%S'  profile %d"), &buf, aProfile );
+        });
+    TInt idx = FindAcc(aAddr);
+    if (idx >= 0)
+        {
+        return iAccs[idx]->SupportedFeature(aProfile );
+        }
+    return 0;
+    }
+
 void CBasrvAccMan::RequestCompletedL(CBasrvActive& aActive)
     {
     TRACE_FUNC
@@ -779,7 +795,7 @@
         }    
     }
 
-TInt CBasrvAccMan::FindAcc(const TBTDevAddr& aRemote)
+TInt CBasrvAccMan::FindAcc(const TBTDevAddr& aRemote) const
     {
     TInt count = iAccs.Count();
     for (TInt i = 0; i < count; i++)
--- a/bluetoothengine/btaudioman/src/basrvsdpquery.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btaudioman/src/basrvsdpquery.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -356,8 +356,11 @@
                 if (iServiceAttrs[ii].iAttrValue)
                     {
                     TRACE_INFO((_L("HSP Remote volume control is supported.")))
-                    // Server is going to feed 0x10 to supported features for headset profile
-                    aInfo.SetSupportedFeature(0x10, TAccInfo::EHSPIndex);
+                    // Server is going to feed 0x10 to supported features for headset profile.
+                    // The SDP of HSP doesn't really use supported feature attribute.
+                    // We save RVC support in supported feature field for internal future use only.
+                    // This approach is consistent with Accessory framework API.
+                    aInfo.SetSupportedFeature(KHspRemoteVolumeControlSupport, TAccInfo::EHSPIndex);
                     }
                 }
             else if ( iServiceAttrs[ii].iUUID == KAVRemoteControlTargetUUID )
--- a/bluetoothengine/bthid/loc/btkeyboard.loc	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/bthid/loc/btkeyboard.loc	Tue Feb 02 00:20:42 2010 +0200
@@ -47,6 +47,11 @@
 //
 #define qtn_hid_change "Change"
 
+// d: Status pane title for keyboard settings view
+// l: title_pane_t2/opt9
+//
+#define qtn_hid_settings "Settings"
+
 //
 // Settings List Item Names
 //
--- a/bluetoothengine/btmac/BWINS/ATCodecU.DEF	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/BWINS/ATCodecU.DEF	Tue Feb 02 00:20:42 2010 +0200
@@ -1,34 +1,34 @@
 EXPORTS
 	??0TATParam@@QAE@ABVTDesC8@@W4TATParamType@@@Z @ 1 NONAME ; TATParam::TATParam(class TDesC8 const &, enum TATParamType)
-	??0TATParam@@QAE@H@Z @ 2 NONAME ; TATParam::TATParam(int)
-	??0TATParam@@QAE@XZ @ 3 NONAME ; TATParam::TATParam(void)
-	??1CATBase@@UAE@XZ @ 4 NONAME ; CATBase::~CATBase(void)
-	?Des@CATBase@@QBEABVTDesC8@@XZ @ 5 NONAME ; class TDesC8 const & CATBase::Des(void) const
-	?Des@TATParam@@QBEABVTDesC8@@XZ @ 6 NONAME ; class TDesC8 const & TATParam::Des(void) const
-	?ExternalizeL@CATBase@@QBEXAAVRWriteStream@@@Z @ 7 NONAME ; void CATBase::ExternalizeL(class RWriteStream &) const
-	?ExternalizeL@TATParam@@QBEXAAVRWriteStream@@@Z @ 8 NONAME ; void TATParam::ExternalizeL(class RWriteStream &) const
-	?Id@CATBase@@QBE?AW4TATId@@XZ @ 9 NONAME ; enum TATId CATBase::Id(void) const
-	?Int@TATParam@@QBEHAAH@Z @ 10 NONAME ; int TATParam::Int(int &) const
-	?InternalizeL@CATBase@@QAEXAAVRReadStream@@@Z @ 11 NONAME ; void CATBase::InternalizeL(class RReadStream &)
-	?InternalizeL@TATParam@@QAEXAAVRReadStream@@@Z @ 12 NONAME ; void TATParam::InternalizeL(class RReadStream &)
-	?NewL@CATCommand@@SAPAV1@ABVTDesC8@@@Z @ 13 NONAME ; class CATCommand * CATCommand::NewL(class TDesC8 const &)
-	?NewL@CATCommand@@SAPAV1@XZ @ 14 NONAME ; class CATCommand * CATCommand::NewL(void)
-	?NewL@CATResult@@SAPAV1@W4TATId@@W4TATType@@PBV?$RArray@VTATParam@@@@@Z @ 15 NONAME ; class CATResult * CATResult::NewL(enum TATId, enum TATType, class RArray<class TATParam> const *)
-	?NewL@CATResult@@SAPAV1@W4TATId@@W4TATType@@VTATParam@@@Z @ 16 NONAME ; class CATResult * CATResult::NewL(enum TATId, enum TATType, class TATParam)
-	?NewL@CATResult@@SAPAV1@XZ @ 17 NONAME ; class CATResult * CATResult::NewL(void)
-	?NewLC@CATCommand@@SAPAV1@ABVTDesC8@@@Z @ 18 NONAME ; class CATCommand * CATCommand::NewLC(class TDesC8 const &)
-	?NewLC@CATCommand@@SAPAV1@XZ @ 19 NONAME ; class CATCommand * CATCommand::NewLC(void)
-	?NewLC@CATResult@@SAPAV1@W4TATId@@W4TATType@@PBV?$RArray@VTATParam@@@@@Z @ 20 NONAME ; class CATResult * CATResult::NewLC(enum TATId, enum TATType, class RArray<class TATParam> const *)
-	?NewLC@CATResult@@SAPAV1@W4TATId@@W4TATType@@VTATParam@@@Z @ 21 NONAME ; class CATResult * CATResult::NewLC(enum TATId, enum TATType, class TATParam)
-	?NewLC@CATResult@@SAPAV1@XZ @ 22 NONAME ; class CATResult * CATResult::NewLC(void)
-	?ParamNum@CATBase@@QBEHXZ @ 23 NONAME ; int CATBase::ParamNum(void) const
-	?Parameter@CATBase@@QBEHHAAVTATParam@@@Z @ 24 NONAME ; int CATBase::Parameter(int, class TATParam &) const
-	?Parameters@CATBase@@QBEABV?$RArray@VTATParam@@@@XZ @ 25 NONAME ; class RArray<class TATParam> const & CATBase::Parameters(void) const
-	?Set@CATCommand@@QAEHABVTDesC8@@@Z @ 26 NONAME ; int CATCommand::Set(class TDesC8 const &)
-	?Set@CATResult@@QAEHW4TATId@@W4TATType@@PBV?$RArray@VTATParam@@@@@Z @ 27 NONAME ; int CATResult::Set(enum TATId, enum TATType, class RArray<class TATParam> const *)
-	?SetInt@TATParam@@QAEXH@Z @ 28 NONAME ; void TATParam::SetInt(int)
-	?SetValue@TATParam@@QAEHABVTDesC8@@W4TATParamType@@@Z @ 29 NONAME ; int TATParam::SetValue(class TDesC8 const &, enum TATParamType)
-	?Type@CATBase@@QBE?AW4TATType@@XZ @ 30 NONAME ; enum TATType CATBase::Type(void) const
-	?Type@TATParam@@QBE?AW4TATParamType@@XZ @ 31 NONAME ; enum TATParamType TATParam::Type(void) const
-	?ATObjArrayCleanupResetAndDestroyPushL@@YAXAAV?$RPointerArray@VCATResult@@@@@Z @ 32 NONAME ; void ATObjArrayCleanupResetAndDestroyPushL(class RPointerArray<class CATResult> &)
+	?NewLC@CATResult@@SAPAV1@W4TATId@@W4TATType@@PBV?$RArray@VTATParam@@@@@Z @ 2 NONAME ; class CATResult * CATResult::NewLC(enum TATId, enum TATType, class RArray<class TATParam> const *)
+	?NewL@CATResult@@SAPAV1@W4TATId@@W4TATType@@PBV?$RArray@VTATParam@@@@@Z @ 3 NONAME ; class CATResult * CATResult::NewL(enum TATId, enum TATType, class RArray<class TATParam> const *)
+	?Parameters@CATBase@@QBEABV?$RArray@VTATParam@@@@XZ @ 4 NONAME ; class RArray<class TATParam> const & CATBase::Parameters(void) const
+	?NewL@CATResult@@SAPAV1@XZ @ 5 NONAME ; class CATResult * CATResult::NewL(void)
+	?InternalizeL@TATParam@@QAEXAAVRReadStream@@@Z @ 6 NONAME ; void TATParam::InternalizeL(class RReadStream &)
+	?InternalizeL@CATBase@@QAEXAAVRReadStream@@@Z @ 7 NONAME ; void CATBase::InternalizeL(class RReadStream &)
+	??1CATBase@@UAE@XZ @ 8 NONAME ; CATBase::~CATBase(void)
+	?Type@CATBase@@QBE?AW4TATType@@XZ @ 9 NONAME ; enum TATType CATBase::Type(void) const
+	?NewLC@CATCommand@@SAPAV1@ABVTDesC8@@@Z @ 10 NONAME ; class CATCommand * CATCommand::NewLC(class TDesC8 const &)
+	?ExternalizeL@TATParam@@QBEXAAVRWriteStream@@@Z @ 11 NONAME ; void TATParam::ExternalizeL(class RWriteStream &) const
+	?Set@CATResult@@QAEHW4TATId@@W4TATType@@PBV?$RArray@VTATParam@@@@@Z @ 12 NONAME ; int CATResult::Set(enum TATId, enum TATType, class RArray<class TATParam> const *)
+	??0TATParam@@QAE@XZ @ 13 NONAME ; TATParam::TATParam(void)
+	?NewL@CATCommand@@SAPAV1@ABVTDesC8@@@Z @ 14 NONAME ; class CATCommand * CATCommand::NewL(class TDesC8 const &)
+	?Type@TATParam@@QBE?AW4TATParamType@@XZ @ 15 NONAME ; enum TATParamType TATParam::Type(void) const
+	?NewLC@CATResult@@SAPAV1@W4TATId@@W4TATType@@ABVTATParam@@@Z @ 16 NONAME ; class CATResult * CATResult::NewLC(enum TATId, enum TATType, class TATParam const &)
+	?Des@CATBase@@QBEABVTDesC8@@XZ @ 17 NONAME ; class TDesC8 const & CATBase::Des(void) const
+	?Id@CATBase@@QBE?AW4TATId@@XZ @ 18 NONAME ; enum TATId CATBase::Id(void) const
+	?Parameter@CATBase@@QBEHHAAVTATParam@@@Z @ 19 NONAME ; int CATBase::Parameter(int, class TATParam &) const
+	?Des@TATParam@@QBEABVTDesC8@@XZ @ 20 NONAME ; class TDesC8 const & TATParam::Des(void) const
+	?NewL@CATResult@@SAPAV1@W4TATId@@W4TATType@@ABVTATParam@@@Z @ 21 NONAME ; class CATResult * CATResult::NewL(enum TATId, enum TATType, class TATParam const &)
+	?SetValue@TATParam@@QAEHABVTDesC8@@W4TATParamType@@@Z @ 22 NONAME ; int TATParam::SetValue(class TDesC8 const &, enum TATParamType)
+	??0TATParam@@QAE@H@Z @ 23 NONAME ; TATParam::TATParam(int)
+	?Set@CATCommand@@QAEHABVTDesC8@@@Z @ 24 NONAME ; int CATCommand::Set(class TDesC8 const &)
+	?SetInt@TATParam@@QAEXH@Z @ 25 NONAME ; void TATParam::SetInt(int)
+	?Int@TATParam@@QBEHAAH@Z @ 26 NONAME ; int TATParam::Int(int &) const
+	?ParamNum@CATBase@@QBEHXZ @ 27 NONAME ; int CATBase::ParamNum(void) const
+	?NewLC@CATCommand@@SAPAV1@XZ @ 28 NONAME ; class CATCommand * CATCommand::NewLC(void)
+	?ExternalizeL@CATBase@@QBEXAAVRWriteStream@@@Z @ 29 NONAME ; void CATBase::ExternalizeL(class RWriteStream &) const
+	?ATObjArrayCleanupResetAndDestroyPushL@@YAXAAV?$RPointerArray@VCATResult@@@@@Z @ 30 NONAME ; void ATObjArrayCleanupResetAndDestroyPushL(class RPointerArray<class CATResult> &)
+	?NewLC@CATResult@@SAPAV1@XZ @ 31 NONAME ; class CATResult * CATResult::NewLC(void)
+	?NewL@CATCommand@@SAPAV1@XZ @ 32 NONAME ; class CATCommand * CATCommand::NewL(void)
 
--- a/bluetoothengine/btmac/BWINS/BTMonoCmdHandlerU.DEF	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/BWINS/BTMonoCmdHandlerU.DEF	Tue Feb 02 00:20:42 2010 +0200
@@ -6,4 +6,5 @@
 	?ActivateRemoteVolumeControl@CBtmcHandlerApi@@QAEXXZ @ 5 NONAME ; void CBtmcHandlerApi::ActivateRemoteVolumeControl(void)
 	?DeActivateRemoteVolumeControl@CBtmcHandlerApi@@QAEXXZ @ 6 NONAME ; void CBtmcHandlerApi::DeActivateRemoteVolumeControl(void)
 	?GetRemoteSupportedFeature@CBtmcHandlerApi@@QAEHXZ @ 7 NONAME ; int CBtmcHandlerApi::GetRemoteSupportedFeature(void)
+	?SetHspRvcSupported@CBtmcHandlerApi@@QAEXH@Z @ 8 NONAME ; void CBtmcHandlerApi::SetHspRvcSupported(int)
 
--- a/bluetoothengine/btmac/common/atcodec.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/common/atcodec.h	Tue Feb 02 00:20:42 2010 +0200
@@ -300,9 +300,9 @@
     
     IMPORT_C static CATResult* NewLC(TATId aId, TATType aType = EATErrorResult, const RATParamArray* aParams = NULL);
 
-    IMPORT_C static CATResult* NewL(TATId aId, TATType aType, const TATParam aParam);
+    IMPORT_C static CATResult* NewL(TATId aId, TATType aType, const TATParam& aParam);
     
-    IMPORT_C static CATResult* NewLC(TATId aId, TATType aType, const TATParam aParam);
+    IMPORT_C static CATResult* NewLC(TATId aId, TATType aType, const TATParam& aParam);
 
     /**
     * 
--- a/bluetoothengine/btmac/common/btmchandlerapi.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/common/btmchandlerapi.h	Tue Feb 02 00:20:42 2010 +0200
@@ -47,6 +47,12 @@
     IMPORT_C void DeActivateRemoteVolumeControl();     
     
     IMPORT_C TInt GetRemoteSupportedFeature();
+    
+    /**
+     * Set the support status of remote volume control of HSP in the remote device.
+     * @param aSupported ETrue if remote volume control is supported by HS unit.
+     */
+    IMPORT_C void SetHspRvcSupported(TBool aSupported);
 
 private:
     CBtmcHandlerApi();
--- a/bluetoothengine/btmac/eabi/ATCodecu.DEF	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/eabi/ATCodecu.DEF	Tue Feb 02 00:20:42 2010 +0200
@@ -1,39 +1,39 @@
 EXPORTS
-	_ZN10CATCommand3SetERK6TDesC8 @ 1 NONAME
-	_ZN10CATCommand4NewLERK6TDesC8 @ 2 NONAME
-	_ZN10CATCommand4NewLEv @ 3 NONAME
-	_ZN10CATCommand5NewLCERK6TDesC8 @ 4 NONAME
-	_ZN10CATCommand5NewLCEv @ 5 NONAME
-	_ZN7CATBase12InternalizeLER11RReadStream @ 6 NONAME
-	_ZN7CATBaseD0Ev @ 7 NONAME
-	_ZN7CATBaseD1Ev @ 8 NONAME
-	_ZN7CATBaseD2Ev @ 9 NONAME
-	_ZN8TATParam12InternalizeLER11RReadStream @ 10 NONAME
-	_ZN8TATParam6SetIntEi @ 11 NONAME
-	_ZN8TATParam8SetValueERK6TDesC812TATParamType @ 12 NONAME
-	_ZN8TATParamC1ERK6TDesC812TATParamType @ 13 NONAME
-	_ZN8TATParamC1Ei @ 14 NONAME
-	_ZN8TATParamC1Ev @ 15 NONAME
-	_ZN8TATParamC2ERK6TDesC812TATParamType @ 16 NONAME
-	_ZN8TATParamC2Ei @ 17 NONAME
-	_ZN8TATParamC2Ev @ 18 NONAME
-	_ZN9CATResult3SetE5TATId7TATTypePK6RArrayI8TATParamE @ 19 NONAME
-	_ZN9CATResult4NewLE5TATId7TATType8TATParam @ 20 NONAME
+	_Z37ATObjArrayCleanupResetAndDestroyPushLR13RPointerArrayI9CATResultE @ 1 NONAME
+	_ZN10CATCommand3SetERK6TDesC8 @ 2 NONAME
+	_ZN10CATCommand4NewLERK6TDesC8 @ 3 NONAME
+	_ZN10CATCommand4NewLEv @ 4 NONAME
+	_ZN10CATCommand5NewLCERK6TDesC8 @ 5 NONAME
+	_ZN10CATCommand5NewLCEv @ 6 NONAME
+	_ZN7CATBase12InternalizeLER11RReadStream @ 7 NONAME
+	_ZN7CATBaseD0Ev @ 8 NONAME
+	_ZN7CATBaseD1Ev @ 9 NONAME
+	_ZN7CATBaseD2Ev @ 10 NONAME
+	_ZN8TATParam12InternalizeLER11RReadStream @ 11 NONAME
+	_ZN8TATParam6SetIntEi @ 12 NONAME
+	_ZN8TATParam8SetValueERK6TDesC812TATParamType @ 13 NONAME
+	_ZN8TATParamC1ERK6TDesC812TATParamType @ 14 NONAME
+	_ZN8TATParamC1Ei @ 15 NONAME
+	_ZN8TATParamC1Ev @ 16 NONAME
+	_ZN8TATParamC2ERK6TDesC812TATParamType @ 17 NONAME
+	_ZN8TATParamC2Ei @ 18 NONAME
+	_ZN8TATParamC2Ev @ 19 NONAME
+	_ZN9CATResult3SetE5TATId7TATTypePK6RArrayI8TATParamE @ 20 NONAME
 	_ZN9CATResult4NewLE5TATId7TATTypePK6RArrayI8TATParamE @ 21 NONAME
-	_ZN9CATResult4NewLEv @ 22 NONAME
-	_ZN9CATResult5NewLCE5TATId7TATType8TATParam @ 23 NONAME
+	_ZN9CATResult4NewLE5TATId7TATTypeRK8TATParam @ 22 NONAME
+	_ZN9CATResult4NewLEv @ 23 NONAME
 	_ZN9CATResult5NewLCE5TATId7TATTypePK6RArrayI8TATParamE @ 24 NONAME
-	_ZN9CATResult5NewLCEv @ 25 NONAME
-	_ZNK7CATBase10ParametersEv @ 26 NONAME
-	_ZNK7CATBase12ExternalizeLER12RWriteStream @ 27 NONAME
-	_ZNK7CATBase2IdEv @ 28 NONAME
-	_ZNK7CATBase3DesEv @ 29 NONAME
-	_ZNK7CATBase4TypeEv @ 30 NONAME
-	_ZNK7CATBase8ParamNumEv @ 31 NONAME
-	_ZNK7CATBase9ParameterEiR8TATParam @ 32 NONAME
-	_ZNK8TATParam12ExternalizeLER12RWriteStream @ 33 NONAME
-	_ZNK8TATParam3DesEv @ 34 NONAME
-	_ZNK8TATParam3IntERi @ 35 NONAME
-	_ZNK8TATParam4TypeEv @ 36 NONAME
-	_Z37ATObjArrayCleanupResetAndDestroyPushLR13RPointerArrayI9CATResultE @ 37 NONAME
+	_ZN9CATResult5NewLCE5TATId7TATTypeRK8TATParam @ 25 NONAME
+	_ZN9CATResult5NewLCEv @ 26 NONAME
+	_ZNK7CATBase10ParametersEv @ 27 NONAME
+	_ZNK7CATBase12ExternalizeLER12RWriteStream @ 28 NONAME
+	_ZNK7CATBase2IdEv @ 29 NONAME
+	_ZNK7CATBase3DesEv @ 30 NONAME
+	_ZNK7CATBase4TypeEv @ 31 NONAME
+	_ZNK7CATBase8ParamNumEv @ 32 NONAME
+	_ZNK7CATBase9ParameterEiR8TATParam @ 33 NONAME
+	_ZNK8TATParam12ExternalizeLER12RWriteStream @ 34 NONAME
+	_ZNK8TATParam3DesEv @ 35 NONAME
+	_ZNK8TATParam3IntERi @ 36 NONAME
+	_ZNK8TATParam4TypeEv @ 37 NONAME
 
--- a/bluetoothengine/btmac/eabi/BTMonoCmdHandleru.DEF	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/eabi/BTMonoCmdHandleru.DEF	Tue Feb 02 00:20:42 2010 +0200
@@ -8,4 +8,5 @@
 	_ZN15CBtmcHandlerApi27ActivateRemoteVolumeControlEv @ 7 NONAME
 	_ZN15CBtmcHandlerApi29DeActivateRemoteVolumeControlEv @ 8 NONAME
 	_ZN15CBtmcHandlerApi25GetRemoteSupportedFeatureEv @ 9 NONAME
+	_ZN15CBtmcHandlerApi18SetHspRvcSupportedEi @ 10 NONAME
 
--- a/bluetoothengine/btmac/inc/btmac/btmman.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/inc/btmac/btmman.h	Tue Feb 02 00:20:42 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  the entry of this plugin.
-*  Version     : %version: 12.1.6 %
+*  Version     : %version: 12.1.7 %
 *
 */
 
@@ -148,6 +148,12 @@
     
     void LoadCmdHandlerL(TBtmcProfileId aProfile, const TBTDevAddr& aAddr, TBool aAccessoryInitiated);
     
+    /**
+     * Set the support status of remote volume control of HSP in the remote device.
+     * @param aSupported ETrue if remote volume control is supported by HS unit.
+     */
+    void SetCmdHandlerHspRvcSupported( TBool aSupported );
+    
     void DeleteCmdHandler();
 
     void NewProtocolDataL(const TDesC8& aData);
@@ -156,6 +162,12 @@
 
     TBool IsEdrSupported() const;
 
+    /**
+     * Update the cmdhandler the support of remove volume control.
+     * @param aAddr the address of the remote device.
+     */
+    void SetCmdHandlerRvcSupport( const TBTDevAddr& aAddr );
+    
 private:
     // From base class CBTAccPlugin
 
--- a/bluetoothengine/btmac/inc/btmonocmdhandler/HFPAtUrcHandler.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/inc/btmonocmdhandler/HFPAtUrcHandler.h	Tue Feb 02 00:20:42 2010 +0200
@@ -20,7 +20,6 @@
 #define C_CHFPATURCHANDLER_H
 
 #include <atext.h>
-#include "HfpAtCmdHandler.h"
 #include "HFPAtEcomListen.h"
 
 /**
--- a/bluetoothengine/btmac/inc/btmonocmdhandler/btmcdummy.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/inc/btmonocmdhandler/btmcdummy.h	Tue Feb 02 00:20:42 2010 +0200
@@ -20,12 +20,12 @@
 
 #include <mcall.h>
 
-class MBtmcDummy : public MCall
+NONSHARABLE_CLASS(TBtmcDummyCall) : public MCall
 {
 public:
     
-    MBtmcDummy() {};    
-    ~MBtmcDummy() {};
+     TBtmcDummyCall() {};    
+    ~TBtmcDummyCall() {};
     
     TInt CallIndex() const { return 0; };     
 
--- a/bluetoothengine/btmac/inc/btmonocmdhandler/btmcmobileline.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/inc/btmonocmdhandler/btmcmobileline.h	Tue Feb 02 00:20:42 2010 +0200
@@ -28,6 +28,8 @@
 #include "btmccallactive.h"
 #include "btmcline.h"
 
+#include "btmcdummy.h"
+
 // FORWARD DECLARATIONS
 class CBtmcCallStatus;
 
@@ -112,12 +114,14 @@
         RMobilePhone& iPhone; // unowned
 
         RMobileLine iLine; // owned
-
+        
         RPointerArray<CBtmcCallActive> iCallActives;
         
         CBtmcActive* iLineIncomingActive;
         CBtmcActive* iLineOutgoingActive;
         
+        TBtmcDummyCall iDummyCall; // used in implemtation of CallInformationL()
+
         TBuf<KMaxName> iLineName;
         
         // passed to RMobileLine::NotifyCallAdded
--- a/bluetoothengine/btmac/inc/btmonocmdhandler/btmcprotocol.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/inc/btmonocmdhandler/btmcprotocol.h	Tue Feb 02 00:20:42 2010 +0200
@@ -21,7 +21,6 @@
 
 #include <e32base.h>
 #include <etelmm.h>
-#include <btengdiscovery.h>
 #include "btmcactive.h"
 #include "btmcprofileid.h"
 #include "btmcprotdatabuf.h"
@@ -46,8 +45,7 @@
 const TUint KBTHSRemoteAudioVolumeControl = 0x0302;
 
 NONSHARABLE_CLASS(CBtmcProtocol) : public CBase, 
-    public MBtmcActiveObserver, 
-    public MBTEngSdpResultReceiver, 
+    public MBtmcActiveObserver,
     public MATExtObserver
       {
     public:
@@ -90,20 +88,13 @@
          */
         TBool ActiveChldHandling() const;
         
-    private:        
-        // from MBTEngSdpResultReceiver
-        void ServiceSearchComplete( const RSdpRecHandleArray& /*aResult*/, 
-		                                         TUint /*aTotalRecordsCount*/, TInt /*aErr*/ ) {}
-		
-        void AttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
-		                                           const RSdpResultArray& /*aAttr*/, TInt /*aErr*/ ) {}
-		
-        void ServiceAttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
-		                                                  const RSdpResultArray& /*aAttr*/, 
-		                                                  TInt /*aErr*/ );
-		
-		void DeviceSearchComplete( CBTDevice* /*aDevice*/, TInt /*aErr*/ ) {}
-
+        /**
+         * Set the support status of remote volume control of HSP in the remote device.
+         * @param aSupported ETrue if remote volume control is supported by HS unit.
+         */
+        void SetHspRvcSupported(TBool aSupported);
+        
+    private: 
         
         // From MBtmcActiveObserver
     
@@ -174,7 +165,6 @@
         CDesC8ArrayFlat* iOutgoPacketQueue; // owned
         TInt iCredit; // How many commands are allowed to acc
         TBool iVolumeSyncFromAccessory;
-        CBTEngDiscovery* iBteng; // for volume query
         TBool iAccessoryInitiated; // who initiated the connection
         RMobilePhone::TMobilePhoneIdentityV1 iIdentity; // holds IMEI etc
         RMobilePhone::TMobilePhoneSubscriberId iId; // holds id
--- a/bluetoothengine/btmac/inc/btmonocmdhandler/btmcvoipline.h	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/inc/btmonocmdhandler/btmcvoipline.h	Tue Feb 02 00:20:42 2010 +0200
@@ -18,7 +18,6 @@
 #ifndef BTMCVOIPLINE_H_
 #define BTMCVOIPLINE_H_
 
-#include "btmccallstatus.h"
 #include <mcallinformationobserver.h>
 #include <e32base.h>
 
--- a/bluetoothengine/btmac/src/ATCodec/atccommand.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/src/ATCodec/atccommand.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -423,7 +423,7 @@
 // CATResult::NewL
 // -----------------------------------------------------------------------------
 //
-EXPORT_C CATResult* CATResult::NewL(TATId aId, TATType aType, const TATParam aParam)
+EXPORT_C CATResult* CATResult::NewL(TATId aId, TATType aType, const TATParam& aParam)
     {
     CATResult* self = CATResult::NewLC(aId, aType, aParam);
     CleanupStack::Pop(self);
@@ -434,7 +434,7 @@
 // CATResult::NewLC
 // -----------------------------------------------------------------------------
 //    
-EXPORT_C CATResult* CATResult::NewLC(TATId aId, TATType aType, const TATParam aParam)
+EXPORT_C CATResult* CATResult::NewLC(TATId aId, TATType aType, const TATParam& aParam)
     {
     CATResult* self = new (ELeave) CATResult;
     CleanupStack::PushL(self);
--- a/bluetoothengine/btmac/src/BTMonoCmdHandler/btmchandlerapi.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/src/BTMonoCmdHandler/btmchandlerapi.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -64,6 +64,11 @@
     return iHandler->GetRemoteSupportedFeature();
     }
 
+EXPORT_C void CBtmcHandlerApi::SetHspRvcSupported(TBool aSupported)
+    {
+    return iHandler->SetHspRvcSupported(aSupported);
+    }
+
 CBtmcHandlerApi::CBtmcHandlerApi()
     {
     }
--- a/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcmobileline.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcmobileline.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -22,7 +22,6 @@
 #include "btmc_defs.h"
 #include "debug.h"
 #include "btmccallstatus.h"
-#include "btmcdummy.h"
 
 const TInt KMobileLineActiveService = 30;
 const TInt KMobileCallActiveService = 31;
@@ -68,9 +67,7 @@
 // ==========================================================
 const MCall& CBtmcMobileLine::CallInformationL()
     {
-    MBtmcDummy dummy = MBtmcDummy();    
-    const MCall& fakeCall (dummy); 
-    return fakeCall; 
+    return iDummyCall; 
     }
 
 // ==========================================================
--- a/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcprotocol.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/src/BTMonoCmdHandler/btmcprotocol.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -18,8 +18,7 @@
 
 #include "atcodec.h"
 #include <mmtsy_names.h> // for etel
-#include <btengconstants.h>
-#include <btengdiscovery.h>
+#include <bttypes.h>
 #include <badesca.h>
 #include "btmcprotocol.h"
 #include "btmccallinghandler.h"
@@ -46,7 +45,7 @@
 const TInt KBerUnknown = 99;
 
 const TInt KServiceSlcTimer = 1;
-const TInt KServiceSdpQuery = 2;
+
 const TInt KServiceGetSubscriber = 3;
 const TInt KServiceGetOperator = 4;
 const TInt KServiceCmdHandling = 5;
@@ -85,7 +84,6 @@
     delete iOperator;
     
     delete iEtelQuery;
-    delete iBteng;
   
     iPhone.Close();
     iServer.UnloadPhoneModule(KMmTsyModuleName);
@@ -215,6 +213,39 @@
     return iCallingHandler->ActiveChldHandling();
     }
 
+void CBtmcProtocol::SetHspRvcSupported(TBool aSupported)
+    {
+    TRACE_FUNC
+    // Only update the supported feature field if this
+    // is for HSP controlling to avoid denial of
+    // HFP service
+    if ( iProtocolStatus->iProfile == EBtmcHSP )
+        {
+        if ( aSupported )
+            {
+            // volume control must be enabled now:
+            if ( !iPhoneStatus)
+                {
+                TRAP_IGNORE( iPhoneStatus = 
+                    CBtmcPhoneStatus::NewL(*this, iPhone, iProtocolStatus->iProfile) );
+                }
+            if ( iPhoneStatus )
+                {
+                // We just do the best effort. If enabling volume control fails,
+                // other functionalities on the HSP will still work:
+                TRAP_IGNORE( iPhoneStatus->SetVolumeControlFeatureL(ETrue) );
+                }
+            }
+        else
+            {
+            // When this serves the controlling of a HSP connection, iPhoneStatus is only
+            // used for volume control, deleting it will disable volume control:
+            delete iPhoneStatus;
+            iPhoneStatus = NULL;
+            }
+        }
+    }
+
 void CBtmcProtocol::RequestCompletedL(CBtmcActive& aActive, TInt aErr)
     {
     TRACE_FUNC_ENTRY
@@ -229,9 +260,6 @@
                 }
             break;
             }
-        case KServiceSdpQuery:
-            {
-            }
         case KServiceGetSubscriber:
             {
             delete iNumber;
@@ -291,10 +319,6 @@
         {
         iTimer.Cancel();
         }
-    else if (aServiceId == KServiceSdpQuery)
-        {
-        iBteng->CancelRemoteSdpQuery();
-        }
     TRACE_FUNC_EXIT
     }
 
@@ -323,8 +347,8 @@
     
     iEtelQuery = CBtmcActive::NewL(*this, CActive::EPriorityStandard, KQueryIMEI);
 
-		iPhone.GetPhoneId(iEtelQuery->iStatus, iIdentity);
-		iEtelQuery->GoActive();
+    iPhone.GetPhoneId(iEtelQuery->iStatus, iIdentity);
+    iEtelQuery->GoActive();
     
     switch (aProfile)
         {
@@ -342,9 +366,8 @@
                 {
                 LEAVE(KErrBadDescriptor);
                 }
+            // HSP doesn't have an SLC protocol except the RFCOMM connection itself:
             iProtocolStatus->iSlc = ETrue;
-            iBteng = CBTEngDiscovery::NewL(this);
-            iBteng->RemoteSdpQuery(TBTDevAddr(aBTDevAddr), TUUID(EBTProfileHSP), KBTHSRemoteAudioVolumeControl);
             if ( iAccessoryInitiated && ( iProtocolStatus->iCallBits & KCallConnectedBit ) )
                 {
                 TRACE_INFO((_L("Incoming HSP connected, start CKPD trapper")));
@@ -608,10 +631,11 @@
 void CBtmcProtocol::HandleReadCommandL(const CATCommand& aCmd)
     {
     TRACE_FUNC
+    RATResultPtrArray resarr;
+    ATObjArrayCleanupResetAndDestroyPushL(resarr);
     CATResult* code = NULL;
-    RArray<TATParam> params;
+    RATParamArray params;
     CleanupClosePushL(params);
-    TBool response = EFalse;
     switch (aCmd.Id())
         {
         case EATCIND:
@@ -621,12 +645,12 @@
                 {
                 LEAVE(KErrNotSupported);
                 }
-            
+
             RMobilePhone::TMobilePhoneRegistrationStatus net = 
-                iPhoneStatus->NetworkStatus();
-            
+                    iPhoneStatus->NetworkStatus();
+
             if (net == RMobilePhone::ERegisteredOnHomeNetwork || 
-                net == RMobilePhone::ERegisteredRoaming)
+                    net == RMobilePhone::ERegisteredRoaming)
                 {
                 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNetworkAvailable)))
                 }
@@ -634,10 +658,10 @@
                 {
                 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNetworkUnavailable)))
                 }
-            
+
             // call status
             if ((iProtocolStatus->iCallBits & KCallConnectedBit) ||
-                (iProtocolStatus->iCallBits & KCallHoldBit))
+                    (iProtocolStatus->iCallBits & KCallHoldBit))
                 {
                 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATCallActive)))
                 }
@@ -645,7 +669,7 @@
                 {
                 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNoCall)))
                 }
-            
+
             // Call setup status
             TInt callSetupInd = EBTMonoATNoCallSetup;
 
@@ -664,7 +688,7 @@
             LEAVE_IF_ERROR(params.Append(TATParam(callSetupInd)))
             // call_setup == callsetup
             LEAVE_IF_ERROR(params.Append(TATParam(callSetupInd)))
-                
+
             // Call held status
             TInt callHeldInd = EBTMonoATNoCallHeld;
             if( (iProtocolStatus->iCallBits & KCallHoldBit) && (iProtocolStatus->iCallBits & KCallConnectedBit) )
@@ -679,19 +703,18 @@
             // signal status
             LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetSignalStrength())))
             // roaming status
-              if(net == RMobilePhone::ERegisteredRoaming)
-                  {
-                  LEAVE_IF_ERROR(params.Append(TATParam(1)))
-                  }
-              else 
-                  {
-                  LEAVE_IF_ERROR(params.Append(TATParam(0)))
-                  }
+            if(net == RMobilePhone::ERegisteredRoaming)
+                {
+                LEAVE_IF_ERROR(params.Append(TATParam(1)))
+                }
+            else 
+                {
+                LEAVE_IF_ERROR(params.Append(TATParam(0)))
+                }
             // battery charge
             LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetBatteryCharge())))
 
             code = CATResult::NewL(EATCIND, EATReadResult, &params);
-            response = ETrue;
             break;
             }
         case EATCLIP:
@@ -699,147 +722,137 @@
             LEAVE_IF_ERROR(params.Append(TATParam(iProtocolStatus->iCallerIdNotif)))
             LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATCallerIdNetworkServiceUnknown)))
             code = CATResult::NewL(EATCLIP, EATReadResult, &params);
-            response = ETrue; 
             break;
             }
         case EATCOPS:
             {
             iOperator = CBtmcOperator::NewL(*this, *this, CActive::EPriorityStandard, KServiceGetOperator);
             iOperator->GoActive();
-			break;
+            break;
             }
         case EATCREG:
-        	{
+            {
             if(!iPhoneStatus)
                 {
                 LEAVE(KErrNotSupported);
                 }
-            
+
             RMobilePhone::TMobilePhoneRegistrationStatus net = 
-                iPhoneStatus->NetworkStatus();
-			response = ETrue;
-			switch(net)
-				{
-				case RMobilePhone::ERegistrationUnknown:
-					{
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceUnknown)))
-					code = CATResult::NewL(EATCREG, EATReadResult, &params);
-					break;
-					}
-				case RMobilePhone::ENotRegisteredEmergencyOnly:
-				case RMobilePhone::ENotRegisteredNoService:
-					{
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegistered)))
-					code = CATResult::NewL(EATCREG, EATReadResult, &params);
-					break;
-					}
-				case RMobilePhone::ENotRegisteredSearching:
-				case RMobilePhone::ERegisteredBusy:
-					{
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegisteredSearching)))
-					code = CATResult::NewL(EATCREG, EATReadResult, &params);
-					break;
-					}
-				case RMobilePhone::ERegisteredOnHomeNetwork:
-					{
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceHomeNetwork)))
-					code = CATResult::NewL(EATCREG, EATReadResult, &params);
-					break;
-					}
-				case RMobilePhone::ERegistrationDenied:
-					{
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegistrationDenied)))
-					code = CATResult::NewL(EATCREG, EATReadResult, &params);
-					break;
-					}
-				case RMobilePhone::ERegisteredRoaming:
-					{
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
-					LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegisteredRoaming)))
-					code = CATResult::NewL(EATCREG, EATReadResult, &params);
-					break;
-					}
-				default:
-					TRACE_INFO(_L("Error: default in CREG"));
-					break;	
-				};
-			break;	
-      }
-    case EATCSQ:
-    	{
-    	TRACE_INFO(_L("Requesting Signal strength"));
-			response = ETrue;
-    	LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetRssiStrength())))
-    	LEAVE_IF_ERROR(params.Append(TATParam(KBerUnknown)))
-   		code = CATResult::NewL(EATCSQ, EATReadResult, &params);
-    	TRACE_INFO(_L("done"));
-    	break;
-    	}
-        	
-		case EATCGSN:
-			{
-			response = ETrue;
-   		TBuf8<RMobilePhone::KPhoneSerialNumberSize> buf;
-   		buf.Copy(iIdentity.iSerialNumber);
-   		LEAVE_IF_ERROR(params.Append(TATParam(buf)))
-   		code = CATResult::NewL(EATCGSN, EATReadResult, &params);
-			break;
-			}
-    case EATCGMI:
-    	{
-    	response = ETrue;
-    	TBuf8<RMobilePhone::KPhoneManufacturerIdSize> buf;
-    	buf.Copy(iIdentity.iManufacturer);
-   		LEAVE_IF_ERROR(params.Append(TATParam(buf)))
-   		code = CATResult::NewL(EATCGMI, EATReadResult, &params);
-   		break;
-    	}
-    case EATCGMM:
-    	{
-    	response = ETrue;
-    	TBuf8<RMobilePhone::KPhoneModelIdSize> buf;
-    	buf.Copy(iIdentity.iModel);
-   		LEAVE_IF_ERROR(params.Append(TATParam(buf)))
-   		code = CATResult::NewL(EATCGMM, EATReadResult, &params);
-   		break;    	
-    	}
-    case EATCGMR:
-    	{
-    	response = ETrue;
-    	TBuf8<RMobilePhone::KPhoneRevisionIdSize> buf;
-    	buf.Copy(iIdentity.iRevision);
-   		LEAVE_IF_ERROR(params.Append(TATParam(buf)))
-   		code = CATResult::NewL(EATCGMR, EATReadResult, &params);
-   		break;    	
-    	}
-		case EATCIMI:
-			{
-			iEtelQuery->SetServiceId(KQueryIMSI);
-			iPhone.GetSubscriberId(iEtelQuery->iStatus, iId);
-			iEtelQuery->GoActive();
-			break;
-			}
-		case EATCOLP:
-			{
-			response = ETrue;
-    	LEAVE_IF_ERROR(params.Append(TATParam(TInt(iProtocolStatus->iOutgoingCallNotif))))
-			code = CATResult::NewL(EATCOLP, EATReadResult, &params);
-			break;
-			}
-    default:
-      LEAVE(KErrNotSupported);
-      }
+                    iPhoneStatus->NetworkStatus();
+            switch(net)
+                {
+                case RMobilePhone::ERegistrationUnknown:
+                    {
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceUnknown)))
+                    code = CATResult::NewL(EATCREG, EATReadResult, &params);
+                    break;
+                    }
+                case RMobilePhone::ENotRegisteredEmergencyOnly:
+                case RMobilePhone::ENotRegisteredNoService:
+                    {
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegistered)))
+                    code = CATResult::NewL(EATCREG, EATReadResult, &params);
+                    break;
+                    }
+                case RMobilePhone::ENotRegisteredSearching:
+                case RMobilePhone::ERegisteredBusy:
+                    {
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegisteredSearching)))
+                    code = CATResult::NewL(EATCREG, EATReadResult, &params);
+                    break;
+                    }
+                case RMobilePhone::ERegisteredOnHomeNetwork:
+                    {
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceHomeNetwork)))
+                    code = CATResult::NewL(EATCREG, EATReadResult, &params);
+                    break;
+                    }
+                case RMobilePhone::ERegistrationDenied:
+                    {
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegistrationDenied)))
+                    code = CATResult::NewL(EATCREG, EATReadResult, &params);
+                    break;
+                    }
+                case RMobilePhone::ERegisteredRoaming:
+                    {
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited)))
+                    LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegisteredRoaming)))
+                    code = CATResult::NewL(EATCREG, EATReadResult, &params);
+                    break;
+                    }
+                default:
+                    TRACE_INFO(_L("Error: default in CREG"));
+                    break;  
+                };
+            break;  
+            }
+        case EATCSQ:
+            {
+            TRACE_INFO(_L("Requesting Signal strength"));
+            LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetRssiStrength())))
+            LEAVE_IF_ERROR(params.Append(TATParam(KBerUnknown)))
+            code = CATResult::NewL(EATCSQ, EATReadResult, &params);
+            TRACE_INFO(_L("done"));
+            break;
+            }
+
+        case EATCGSN:
+            {
+            TBuf8<RMobilePhone::KPhoneSerialNumberSize> buf;
+            buf.Copy(iIdentity.iSerialNumber);
+            LEAVE_IF_ERROR(params.Append(TATParam(buf)))
+            code = CATResult::NewL(EATCGSN, EATReadResult, &params);
+            break;
+            }
+        case EATCGMI:
+            {
+            TBuf8<RMobilePhone::KPhoneManufacturerIdSize> buf;
+            buf.Copy(iIdentity.iManufacturer);
+            LEAVE_IF_ERROR(params.Append(TATParam(buf)))
+            code = CATResult::NewL(EATCGMI, EATReadResult, &params);
+            break;
+            }
+        case EATCGMM:
+            {
+            TBuf8<RMobilePhone::KPhoneModelIdSize> buf;
+            buf.Copy(iIdentity.iModel);
+            LEAVE_IF_ERROR(params.Append(TATParam(buf)))
+            code = CATResult::NewL(EATCGMM, EATReadResult, &params);
+            break;      
+            }
+        case EATCGMR:
+            {
+            TBuf8<RMobilePhone::KPhoneRevisionIdSize> buf;
+            buf.Copy(iIdentity.iRevision);
+            LEAVE_IF_ERROR(params.Append(TATParam(buf)))
+            code = CATResult::NewL(EATCGMR, EATReadResult, &params);
+            break;      
+            }
+        case EATCIMI:
+            {
+            iEtelQuery->SetServiceId(KQueryIMSI);
+            iPhone.GetSubscriberId(iEtelQuery->iStatus, iId);
+            iEtelQuery->GoActive();
+            break;
+            }
+        case EATCOLP:
+            {
+            LEAVE_IF_ERROR(params.Append(TATParam(TInt(iProtocolStatus->iOutgoingCallNotif))))
+            code = CATResult::NewL(EATCOLP, EATReadResult, &params);
+            break;
+            }
+        default:
+            LEAVE(KErrNotSupported);
+        }
     CleanupStack::PopAndDestroy(&params);
-    if (response)
-        {
-        RATResultPtrArray resarr;
+    if (code)
+        {     
         CleanupStack::PushL(code);
-        ATObjArrayCleanupResetAndDestroyPushL(resarr);        
         resarr.AppendL(code);
         CleanupStack::Pop(code);
         CATResult* ok = CATResult::NewL(EATOK);
@@ -847,9 +860,9 @@
         resarr.AppendL(ok);
         CleanupStack::Pop(ok);
         SendResponseL(resarr);
-        CleanupStack::PopAndDestroy(&resarr);
         CmdHandlingCompletedL();
         }
+    CleanupStack::PopAndDestroy(&resarr);
     }
 
 // -----------------------------------------------------------------------------
@@ -1070,7 +1083,9 @@
         case EATCGSN:
             {
             CATResult* code = NULL;
-            RArray<TATParam> params;
+            RATResultPtrArray resarr;
+            ATObjArrayCleanupResetAndDestroyPushL(resarr);              
+            RATParamArray params;
             CleanupClosePushL(params);
             TBuf8<RMobilePhone::KPhoneSerialNumberSize> buf;
             buf.Copy(iIdentity.iSerialNumber);
@@ -1078,8 +1093,6 @@
             code = CATResult::NewL(EATCGSN, EATActionResult, &params);
             CleanupStack::PopAndDestroy(&params);
             CleanupStack::PushL(code);
-            RATResultPtrArray resarr;
-            ATObjArrayCleanupResetAndDestroyPushL(resarr);        
             resarr.AppendL(code);
             CleanupStack::Pop(code);
             CATResult* ok = CATResult::NewL(EATOK);
@@ -1162,38 +1175,6 @@
     return EFalse;
     }
 
-// -----------------------------------------------------------------------------
-// CBtmcProtocol::ServiceAttributeSearchComplete
-// -----------------------------------------------------------------------------
-//    
-void CBtmcProtocol::ServiceAttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
-                                                    const RSdpResultArray& aAttr, 
-                                                    TInt aErr )
-	{
-    TRACE_FUNC
-    if((aErr == KErrNone || aErr == KErrEof) && aAttr.Count() && aAttr[0].iAttrValue.iValNumeric)
-        {
-        TRACE_INFO((_L("Remote volume control supported")))
-        TInt err = KErrNone;
-        if (!iPhoneStatus)
-            {
-            TRAP(err, iPhoneStatus = CBtmcPhoneStatus::NewL(*this, iPhone, iProtocolStatus->iProfile));
-            }   
-			
-        if (err == KErrNone)
-            {
-            TRAP_IGNORE(iPhoneStatus->SetVolumeControlFeatureL(ETrue));
-            iPhoneStatus->ActivateRemoteVolumeControl();
-            }        
-        }
-        
-    if(aErr)
-        {
-        delete iBteng;
-        iBteng = NULL;
-        }
-    }
-
 void CBtmcProtocol::SetIndicatorL(TInt aIndicator, TInt aValue)
 	{
 	TInt indBit( 0 );
--- a/bluetoothengine/btmac/src/btmac/btmman.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/src/btmac/btmman.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  CBtmMan definition
-*  Version     : %version: 15.1.7 %
+*  Version     : %version: 15.1.8 %
 *
 */
 
@@ -232,7 +232,17 @@
         iCmdHandler = CBtmcHandlerApi::NewL(*this, aProfile, aAddr.Des(), aAccessoryInitiated);
         }
     }
-    
+
+
+void CBtmMan::SetCmdHandlerHspRvcSupported( TBool aSupported )
+    {
+    if (iCmdHandler)
+        {
+        iCmdHandler->SetHspRvcSupported( aSupported );
+        }
+    }
+
+
 void CBtmMan::DeleteCmdHandler()
     {
     delete iCmdHandler;
@@ -262,7 +272,16 @@
     {
     return iEdr;
     }
-    
+
+void CBtmMan::SetCmdHandlerRvcSupport(const TBTDevAddr& aAddr)
+    {
+    TRACE_FUNC
+    // Get volume control support status of the HSP from observer
+    TInt sf = Observer().SupportedFeature( aAddr, EHSP );
+    TRACE_INFO((_L(" HSP support feature: 0x%x"), sf));
+    iCmdHandler->SetHspRvcSupported( sf & KHspRemoteVolumeControlSupport );
+    }  
+
 void CBtmMan::ConnectToAccessory(const TBTDevAddr& aAddr, TRequestStatus& aStatus)
     {
     TRACE_FUNC_ENTRY
--- a/bluetoothengine/btmac/src/btmac/btmsctrl.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/src/btmac/btmsctrl.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -117,6 +117,14 @@
 void CBtmsCtrl::AccInUse()
 	{
 	TRACE_FUNC
+	if ( iRfcomm->Service() == EBTProfileHSP )
+	    {
+	    // volume control support status of the HSP in remote device
+	    // is only available in the owner of this component.
+	    // Ask parent to set the support in cmdhandler.
+	    Parent().SetCmdHandlerRvcSupport( iRfcomm->Remote() );
+	    }
+	
 	TInt err;
 	TRAP( err,
     if (!iSco)
--- a/bluetoothengine/btmac/src/btmac/btmsreconnect.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btmac/src/btmac/btmsreconnect.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -163,6 +163,10 @@
     else
         {
         Parent().LoadCmdHandlerL(EBtmcHSP, iRfcomm->Remote(), iRfcomm->AccessoryInitiatedConnection());
+        // volume control support status of the HSP in remote device
+        // is only available in the owner of this component.
+        // Ask parent to set the support in cmdhandler.
+        Parent().SetCmdHandlerRvcSupport( iRfcomm->Remote() );
         Parent().ChangeStateL(CBtmsOpenAudio::NewL(Parent(), SwapStateRequest(), SwapStateRfcommSock(), NULL));
         }
     }
--- a/bluetoothengine/btnotif/data/BTNotif.rss	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btnotif/data/BTNotif.rss	Tue Feb 02 00:20:42 2010 +0200
@@ -190,19 +190,10 @@
 //
 RESOURCE DIALOG r_bt_enter_passkey_query
     {
-    flags   = EGeneralQueryFlags;
+    flags   = EGeneralQueryFlags | EEikDialogFlagVirtualInput ;
     buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;
     items   =
-        {
-        DLG_LINE
-            {
-            type    = EAknCtPopupHeadingPane;
-            id      = EAknMessageQueryHeaderId;
-            control = AVKON_HEADING
-                {
-                label   = qtn_bt_passkey_heading;
-                };
-            },
+        {        
         DLG_LINE
             {
             type    = EAknCtQuery;
--- a/bluetoothengine/btsac/src/btsaController.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btsac/src/btsaController.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -111,9 +111,8 @@
     iGavdp = CBTSACGavdp::NewL(state); 
  	iLocalSEPs = CBTSACSEPManager::NewL(TBTDevAddr());
  	iGavdpErrorActive = CBtsacActive::NewL(*this, CActive::EPriorityStandard, KRequestIdGavdpError); 	
-    ChangeStateL(state);
-    CleanupStack::Pop(state);   
-    
+ 	CleanupStack::Pop(state);
+ 	ChangeStateL(state);
     ResetRemoteCache();
     
     TInt err = RProperty::Define( KBTAudioRemCon, 
@@ -128,31 +127,29 @@
 // CBTSAController::ChangeStateL
 // -----------------------------------------------------------------------------
 //  
+
 void CBTSAController::ChangeStateL(CBtsacState* aState)
-    {
-    TRACE_FUNC_ENTRY
-    TRACE_ASSERT(!!aState, EBTPanicNullPointer);
-    if(iState)
-	    {    	
-		if(aState->GetStateIndex() == iState->GetStateIndex())
-		    {
-		    // We already are in desired state, delete the state which came in and return
-		    TRACE_INFO((_L("CBTSAController::ChangeStateL(), already in desired state.")))
-		    delete aState;
-		    return;
-		    }
-	    }
-    CBtsacState *CurrentState = iState;    
-    iState = aState;
-    TInt err = KErrNone;
-    TRAP(err, iState->EnterL());
-    if (err)
-        {
-        ChangeStateL(iState->ErrorOnEntryL(err));
-        }
-  	delete CurrentState;
-    TRACE_FUNC_EXIT
-    }
+  {
+  TRACE_FUNC_ENTRY
+  TRACE_ASSERT(aState != NULL, EBTPanicNullPointer);
+  if(iState && aState->GetStateIndex() == iState->GetStateIndex())
+      {
+      // We already are in desired state, delete the state which came in and return
+      TRACE_INFO((_L("CBTSAController::ChangeStateL(), already in desired state.")))
+      delete aState;
+      return;
+      }
+  delete iState;
+  iState = aState;
+  TInt err = KErrNone;
+  TRAP(err, iState->EnterL());
+  if (err)
+      {
+      ChangeStateL(iState->ErrorOnEntryL(err));
+      }
+  TRACE_FUNC_EXIT
+  }
+
 
 // -----------------------------------------------------------------------------
 // CBTSAController::ResetRemoteCache
--- a/bluetoothengine/btsap/src/BTSapHciExtensionMan.cpp	Tue Jan 26 12:06:42 2010 +0200
+++ b/bluetoothengine/btsap/src/BTSapHciExtensionMan.cpp	Tue Feb 02 00:20:42 2010 +0200
@@ -93,8 +93,6 @@
     BTSAP_TRACE_OPT(KBTSAP_TRACE_FUNCTIONS, BTSapPrintTrace(_L("[BTSap]  CBTHciExtensionMan::HandleRequestL >>")));
     
     TInt err = KErrNone; 
-    aStatus = KRequestPending;
-    iStatus = &aStatus;
     
     CBTHciExtensionCmd* cmd = NULL;
     TBTDevAddrPckgBuf pckg;
@@ -104,25 +102,21 @@
 
     cmd->SetParamL(pckg().Des());
 
-    if (err == KErrNone)
+    iRequestOpcode = cmd->Opcode();
+    TPtrC8 ptr = cmd->DesC();
+    TUint16 requestOpcode = ptr[0] << 8 | ptr[1];
+    err = iConduit->IssueCommandL(requestOpcode, ptr.Mid(sizeof(KHciExtensionCmdPatch)));
+    if (err)
         {
-        iRequestOpcode = cmd->Opcode();
-        TPtrC8 ptr = cmd->DesC();
-        TUint16 requestOpcode = ptr[0] << 8 | ptr[1];
-        err = iConduit->IssueCommandL(requestOpcode, ptr.Mid(sizeof(KHciExtensionCmdPatch)));
-        if (err)
-            {
-            BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap]  iConduit->IssueCommandL err %d"), err));
-            }
+        BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap]  iConduit->IssueCommandL err %d"), err));
+        User::Leave(err);
         }
-    else
-        {
-        User::RequestComplete(iStatus, err);
-        }
-    if (cmd)
-        {
-        CleanupStack::PopAndDestroy(cmd);
-        }
+
+    aStatus = KRequestPending;
+    iStatus = &aStatus;    
+    
+    CleanupStack::PopAndDestroy(cmd);
+
     BTSAP_TRACE_OPT(KBTSAP_TRACE_FUNCTIONS, BTSapPrintTrace(_L("[BTSap]  CBTHciExtensionMan::HandleRequestL <<")));
     }