Revision: 201007 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 12 Mar 2010 15:46:58 +0200
branchRCL_3
changeset 7 a2f12998bb04
parent 5 11d83199e2d9
child 8 a249528449c3
Revision: 201007 Kit: 201008
localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp
localconnectivityservice/dun/atext/src/DunAtCmdPusher.cpp
localconnectivityservice/headset/inc/headset.h
localconnectivityservice/headset/src/headset.cpp
localconnectivityservice/lccustomplugin/inc/lccustomplugin.h
localconnectivityservice/lccustomplugin/inc/lclistallcmd.h
localconnectivityservice/lccustomplugin/src/20021360.rss
localconnectivityservice/lccustomplugin/src/lccustomplugin.cpp
localconnectivityservice/lccustomplugin/src/lclistallcmd.cpp
localconnectivityservice/lcstylustap/data/lcstylustaprsc.rss
localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/conf/ui_LcStylusTapTest.cfg
localconnectivityservice/obexreceiveservices/bip/src/BIPController.cpp
localconnectivityservice/obexreceiveservices/opp/src/oppcontroller.cpp
localconnectivityservice/obexserviceman/utils/src/obexutilsdialog.cpp
localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp
--- a/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -1467,11 +1467,13 @@
         if ( aMode & KModeVerbose )  // verbose mode ON
             {
             iAtCmdExt.ReportVerboseModeChange( ETrue );
+            iVerboseOn = ETrue;
             FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyVerboseStatusChange() verbose mode changed ON" ) ));
             }
         else  // verbose mode OFF
             {
             iAtCmdExt.ReportVerboseModeChange( EFalse );
+            iVerboseOn = EFalse;
             FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyVerboseStatusChange() verbose mode changed OFF" ) ));
             }
         FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange() (change) complete" ) ));
--- a/localconnectivityservice/dun/atext/src/DunAtCmdPusher.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/dun/atext/src/DunAtCmdPusher.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -286,10 +286,15 @@
 void CDunAtCmdPusher::SendReplyData( TBool aRecvBuffer )
     {
     FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData()") ));
-    TDesC8* sendBuffer = &iRecvBuffer;
-    if ( !aRecvBuffer )
+    TDesC8* sendBuffer = iOkBuffer;
+    if ( aRecvBuffer )
         {
-        sendBuffer = iOkBuffer;
+        sendBuffer = &iRecvBuffer;
+        // Check if last block of long push and remove "OK" if exists
+        if ( iReplyType==EReplyTypeOther && iReplyBytesLeft==0 )
+            {
+            CheckAndRemoveOkString();
+            }
         }
     FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData() send reply:") ));
     FTRACE(FPrintRaw(*sendBuffer) );
@@ -310,7 +315,6 @@
             {
             FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeOther") ));
             iNoErrorReceived = ETrue;
-            CheckAndRemoveOkString();
             SendReplyData();
             }
             break;
--- a/localconnectivityservice/headset/inc/headset.h	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/headset/inc/headset.h	Fri Mar 12 15:46:58 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 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"
@@ -317,7 +317,7 @@
      * Handle doubleclick timer expiration
      *      
      */
-    void ExpiredDubleClickTimer();
+    void ExpiredDoubleClickTimer();
 
     /**
      * Handle long press timer expiration
@@ -450,6 +450,11 @@
     RASCliSession iAlarmServerSession;
 
     /**
+     * Incoming call status
+     */
+     TBool iIncomingCallStatus;
+
+    /**
      * Alarm statusd     
      */
     TBool iAlarmStatus;
--- a/localconnectivityservice/headset/src/headset.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/headset/src/headset.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 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"
@@ -40,6 +40,7 @@
 const TInt KHidUndefinedKeyCode = 0;
 const TInt KHidNotSetKeyValue = 0;
 const TInt KDoubleClickTimeout = 900000; // 0,9 seconds
+const TInt KDoubleClickTimeoutRing = 500000; // 0,5 seconds
 const TInt KScanClickTimeout = 500000; // 0,5 seconds
 const TInt KLongClickTimeout = 3000000; // 3 seconds
 
@@ -734,15 +735,47 @@
         switch ( hookStatus )
             {
             case EOnHook:
-                TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook On Pressed"));
-                iOnHookPressed = ETrue;
-                break;
+                if ( !iIncomingCallStatus )
+                    {
+                    // For the first click, trigger the timer 
+                    // single click is handled in ExpiredDoubleClickTimer
+                    if ( iDoubleClicktimer )
+                        {
+                        delete iDoubleClicktimer;
+                        iDoubleClicktimer = NULL;
+                        }
+                    TRAP_IGNORE( iDoubleClicktimer = CKeyPressTimer::NewL( this,
+                        TTimeIntervalMicroSeconds32( KDoubleClickTimeoutRing ),
+                        EDoubleClickTimer ) );
+                    if ( iDoubleClicktimer )
+                        {
+                        iIncomingCallStatus = ETrue;
+                        }
+                    else // If fail to create timer, handle as single click, 
+                    // for double click case, the next click will hang off
+                        {
+                        iIncomingCallStatus = EFalse;
+                        iOnHookPressed = ETrue;
+                        }
+                    break; // switch
+                    }
+                else
+                    {
+                    iIncomingCallStatus = EFalse;
+                    if ( iDoubleClicktimer )
+                        {
+                        delete iDoubleClicktimer;
+                        iDoubleClicktimer = NULL;
+                        }
+                    // This is the double click case, handle as EOffHook
+                    }
+                // No break here
             case EOffHook:
                 TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook Off Pressed"));
                 iOffHookPressed = ETrue;
                 break;
             case ENoHook:
-                TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook None Pressed"));                
+                TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook None Pressed")); 
                 TRAP_IGNORE( HandleNoneHookPressL() );                
                 break;
             default:
@@ -1030,7 +1063,7 @@
     switch ( aTimerType )
         {
         case EDoubleClickTimer:
-            ExpiredDubleClickTimer();
+            ExpiredDoubleClickTimer();
             break;
         case ELongPressTimer:
             ExpiredLongClickTimer();
@@ -1053,16 +1086,23 @@
     }
 
 // ---------------------------------------------------------------------------
-// ExpiredDubleClickTimer()
+// ExpiredDoubleClickTimer()
 // ---------------------------------------------------------------------------
 //
-void CHidHeadsetDriver::ExpiredDubleClickTimer()
+void CHidHeadsetDriver::ExpiredDoubleClickTimer()
     {
     TRACE_FUNC_ENTRY
     if ( iDoubleClicktimer )
         {
         delete iDoubleClicktimer;
         iDoubleClicktimer = NULL;
+        
+        if ( iIncomingCallStatus )
+            {
+            iIncomingCallStatus = EFalse;
+            iOnHookPressed = ETrue;
+            ReleaseHookKey();
+            }
         if ( iAlarmStatus )
             {
             RProperty::Set( KPSUidAlarmExtCntl, KAlarmStopKey,
--- a/localconnectivityservice/lccustomplugin/inc/lccustomplugin.h	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/lccustomplugin/inc/lccustomplugin.h	Fri Mar 12 15:46:58 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -15,7 +15,6 @@
 *
 */
 
-
 #ifndef C_LCCUSTOMPLUGIN_H
 #define C_LCCUSTOMPLUGIN_H
 
@@ -23,6 +22,7 @@
 
 class CLcCustomPlugin;
 
+/** Character types: carriage return, line feed or backspace */
 enum TCharacterTypes
     {
     ECharTypeCR,  // Carriage return
@@ -30,12 +30,30 @@
     ECharTypeBS   // Backspace
     };
 
+/** Type of modes (quiet, verbose) */
 enum TModeTypes
     {
     EModeTypeQuiet,   // Quiet mode
     EModeTypeVerbose  // Verbose mode
     };
 
+/**  Handler types for the four types */
+enum TCmdHandlerType
+    {
+    ECmdHandlerTypeUndefined = KErrNotFound,
+    ECmdHandlerTypeBase      = 0x01,  // For command "AT+COMMAND"
+    ECmdHandlerTypeSet       = 0x02,  // For command "AT+COMMAND="
+    ECmdHandlerTypeRead      = 0x04,  // For command "AT+COMMAND?"
+    ECmdHandlerTypeTest      = 0x08,  // For command "AT+COMMAND=?"
+    };
+
+/**  Detected commands */
+enum TDetectedCmd
+    {
+    EDetectedCmdUndefined,
+    EDetectedCmdCLAC  // For command "AT+CLAC"
+    };
+
 /**
  *  Class for common AT command handler interface
  *
@@ -116,8 +134,6 @@
      *
      * @since S60 5.0
      * @param aReplyType Type of reply
-     * @param aDstBuffer Destination buffer; used for the API requiring the
-     *                   AT command reply
      * @param aSrcBuffer Source buffer; used only if aReplyType is EReplyTypeOther
      * @param aError Completion code. If not KErrNone then other arguments are
      *               ignored and the request is completed to ATEXT with
@@ -125,7 +141,6 @@
      * @return None
      */
     virtual TInt CreateReplyAndComplete( TATExtensionReplyType aReplyType,
-                                         RBuf8& aDstBuffer,
                                          const TDesC8& aSrcBuffer=KNullDesC8,
                                          TInt aError=KErrNone ) = 0;
 
@@ -142,6 +157,17 @@
                                        TBool aOkReply ) = 0;
 
     /**
+     * Checks if the command is a base, set, read or test type of command
+     *
+     * @since TB9.2
+     * @param aCmdBase Base part of the command to check
+     * @param aCmdFull Full command to check
+     * @return Type of command
+     */
+    virtual TCmdHandlerType CheckCommandType( const TDesC8& aCmdBase,
+                                              const TDesC8& aCmdFull ) = 0;
+
+    /**
      * Returns the array of supported commands
      *
      * @since S60 5.0
@@ -347,8 +373,6 @@
      *
      * @since S60 5.0
      * @param aReplyType Type of reply
-     * @param aDstBuffer Destination buffer; used for the API requiring the
-     *                   AT command reply
      * @param aSrcBuffer Source buffer; used only if aReplyType is EReplyTypeOther
      * @param aError Completion code. If not KErrNone then other arguments are
      *               ignored and the request is completed to ATEXT with
@@ -356,7 +380,6 @@
      * @return None
      */
     TInt CreateReplyAndComplete( TATExtensionReplyType aReplyType,
-                                 RBuf8& aDstBuffer,
                                  const TDesC8& aSrcBuffer=KNullDesC8,
                                  TInt aError=KErrNone );
 
@@ -375,6 +398,18 @@
 
     /**
      * From MLcCustomPlugin.
+     * Checks if the command is a base, set, read or test type of command
+     *
+     * @since S60 5.0
+     * @param aCmdBase Base part of the command to check
+     * @param aCmdFull Full command to check
+     * @return Type of command
+     */
+    TCmdHandlerType CheckCommandType( const TDesC8& aCmdBase,
+                                      const TDesC8& aCmdFull );
+
+    /**
+     * From MLcCustomPlugin.
      * Returns the array of supported commands
      *
      * @since S60 5.0
@@ -420,6 +455,18 @@
     CLcCustomPluginBase* iHandler;
 
     /**
+     * Buffer for handle command's command
+     * Not own.
+     */
+    const TDesC8* iHcCmd;
+
+    /**
+     * Buffer for handle command reply
+     * Not own.
+     */
+    RBuf8* iHcReply;
+
+    /**
      * Global reply buffer for the AT command replies
      */
     RBuf8 iReplyBuffer;
--- a/localconnectivityservice/lccustomplugin/inc/lclistallcmd.h	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/lccustomplugin/inc/lclistallcmd.h	Fri Mar 12 15:46:58 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -11,24 +11,15 @@
 *
 * Contributors:
 *
-* Description:  Handles the commands "AT+CLAC?" and "AT+CLAC"
+* Description:  Handles the commands "AT+CLAC=?" and "AT+CLAC"
 *
 */
 
-
 #ifndef C_LCLISTALLCMD_H
 #define C_LCLISTALLCMD_H
 
 #include "lccustomplugin.h"
 
-/**  Handler types for the two AT commands */
-enum TCmdHandlerType
-    {
-    ECmdHandlerTypeUndefined,
-    ECmdHandlerTypeQuery,  // For command "AT+CLAC=?"
-    ECmdHandlerTypeList    // For command "AT+CLAC"
-    };
-
 /**
  *  Class for handling commands "AT+CLAC=?" and "AT+CLAC"
  *
@@ -58,6 +49,25 @@
     void ConstructL();
 
     /**
+     * Checks command types
+     *
+     * @since TB9.2
+     * @param aCmd Command to check
+     * @return ETrue if command understood, EFalse otherwise
+     */
+    TBool CheckCommand( const TDesC8& aCmd );
+
+    /**
+     * Main command handler (leaving version)
+     *
+     * @since TB9.2
+     * @return ETrue if command understood, EFalse otherwise
+     */
+    TBool HandleCommandL();
+
+// from base class MLcCustomPluginBase
+
+    /**
      * Reports the support status of an AT command. This is a synchronous API.
      *
      * @param aCmd The AT command. Its format may vary depending on the
@@ -126,6 +136,11 @@
      */
     TCmdHandlerType iCmdHandlerType;
 
+    /**
+     * Detected command
+     */
+    TDetectedCmd iDetectedCmd;
+
 };
 
 #endif  // C_LCLISTALLCMD_H
--- a/localconnectivityservice/lccustomplugin/src/20021360.rss	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/lccustomplugin/src/20021360.rss	Fri Mar 12 15:46:58 2010 +0200
@@ -16,6 +16,7 @@
 */
 
 
+#include <atext_interfaceuid.h>
 #include <registryinfo.rh>
 
 // Declares info for two implementations
@@ -29,7 +30,7 @@
 		INTERFACE_INFO
 			{
 			// UID of interface that is implemented
-			interface_uid = 0x2001CBEE;  // ATEXT_INTERFACE_DUN_UID
+			interface_uid = ATEXT_INTERFACE_DUN_UID; 
 			implementations =
 				{
 				// Info for BTSAC
@@ -38,7 +39,7 @@
 					implementation_uid = 0x20021375;
 					version_no = 1;
 					display_name = "LC Custom Plugin DUN";
-					default_data=  "PAT+CLAC";
+					default_data=  "MAT+CLAC";
 					opaque_data = "";
 					}
 				};
@@ -46,7 +47,7 @@
 		INTERFACE_INFO
 			{
 			// UID of interface that is implemented
-			interface_uid = 0x2001CBEF;  // ATEXT_INTERFACE_HFP_UID
+			interface_uid = ATEXT_INTERFACE_HFP_UID; 
 			implementations =
 				{
 				// Info for BTSAC
@@ -55,7 +56,7 @@
 					implementation_uid = 0x20021376;
 					version_no = 1;
 					display_name = "LC Custom Plugin HFP";
-					default_data=  "PAT+CLAC";
+					default_data=  "MAT+CLAC";
 					opaque_data = "";
 					}
 				};
--- a/localconnectivityservice/lccustomplugin/src/lccustomplugin.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/lccustomplugin/src/lccustomplugin.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -15,7 +15,6 @@
 *
 */
 
-
 #include "lccustomplugin.h"
 #include "lclistallcmd.h"
 #include "debug.h"
@@ -53,6 +52,8 @@
 CLcCustomPlugin::CLcCustomPlugin() : CATExtPluginBase()
     {
     iHandler = NULL;
+    iHcCmd = NULL;
+    iHcReply = NULL;
     }
 
 // ---------------------------------------------------------------------------
@@ -83,6 +84,8 @@
 TBool CLcCustomPlugin::IsCommandSupported( const TDesC8& aCmd )
     {
     TRACE_FUNC_ENTRY
+    iHcCmd = NULL;
+    iHcReply = NULL;
     TInt i;
     TInt count = iHandlers.Count();
     for ( i=0; i<count; i++ )
@@ -114,6 +117,8 @@
 	TRACE_FUNC_ENTRY
 	if ( iHandler )
 	    {
+	    iHcCmd = &aCmd;
+	    iHcReply = &aReply;
 	    iHandler->HandleCommand( aCmd, aReply, aReplyNeeded );
 	    }
 	TRACE_FUNC_EXIT
@@ -201,13 +206,13 @@
 // Reports about external handle command error condition.
 // This is for cases when for example DUN decided the reply contained an
 // error condition but the plugin is still handling the command internally.
-// Example: in command line "AT+TEST;ATDT1234" was given. "AT+TEST" returns
-// "OK" and "ATDT" returns "CONNECT". Because "OK" and "CONNECT" are
-// different reply types the condition is "ERROR" and DUN ends processing.
-// This solution keeps the pointer to the last AT command handling plugin
-// inside ATEXT and calls this function there to report the error.
-// It is to be noted that HandleCommandCancel() is not sufficient to stop
-// the processing as the command handling has already finished.
+// Example: "AT+TEST;+TEST2" was given in command line; "AT+TEST" returns
+// non-EReplyTypeError condition and "AT+TEST2" returns EReplyTypeError.
+// As the plugin(s) returning the non-EReplyTypeError may still have some
+// ongoing operation then these plugins are notified about the external
+// EReplyTypeError in command line processing. It is to be noted that
+// HandleCommandCancel() is not sufficient to stop the processing as the
+// command handling has already finished.
 // ---------------------------------------------------------------------------
 //
 void CLcCustomPlugin::ReportExternalHandleCommandError()
@@ -252,23 +257,28 @@
 // ---------------------------------------------------------------------------
 //
 TInt CLcCustomPlugin::CreateReplyAndComplete( TATExtensionReplyType aReplyType,
-                                              RBuf8& aDstBuffer,
                                               const TDesC8& aSrcBuffer,
-                                              TInt aError )
+											  TInt aError )
     {
     TRACE_FUNC_ENTRY
     iReplyBuffer.Close();
     if ( aError != KErrNone )
         {
         HandleCommandCompleted( aError, EReplyTypeUndefined );
+        iHcCmd = NULL;
+        iHcReply = NULL;
         TRACE_FUNC_EXIT
         return KErrNone;
         }
-    TInt retVal = KErrNone;
+    if ( !iHcReply )
+        {
+        TRACE_FUNC_EXIT
+        return KErrGeneral;
+        }
     switch ( aReplyType )
         {
         case EReplyTypeOther:
-            if ( iQuietMode || !iVerboseMode )
+            if ( iQuietMode )
                 {
                 iReplyBuffer.Create( KNullDesC8 );
                 }
@@ -276,25 +286,23 @@
                 {
                 iReplyBuffer.Create( aSrcBuffer );
                 }
-            CreatePartOfReply( aDstBuffer );
-            HandleCommandCompleted( KErrNone, aReplyType );
             break;
         case EReplyTypeOk:
             CreateOkOrErrorReply( iReplyBuffer, ETrue );
-            CreatePartOfReply( aDstBuffer );
-            HandleCommandCompleted( KErrNone, aReplyType );
             break;
         case EReplyTypeError:
             CreateOkOrErrorReply( iReplyBuffer, EFalse );
-            CreatePartOfReply( aDstBuffer );
-            HandleCommandCompleted( KErrNone, aReplyType );
             break;
         default:
-            retVal = KErrGeneral;
-            break;
+            TRACE_FUNC_EXIT
+            return KErrGeneral;
         }
+    CreatePartOfReply( *iHcReply );
+    HandleCommandCompleted( KErrNone, aReplyType );
+    iHcCmd = NULL;
+    iHcReply = NULL;
     TRACE_FUNC_EXIT
-    return retVal;
+    return KErrNone;
     }
 
 // ---------------------------------------------------------------------------
@@ -349,6 +357,58 @@
 
 // ---------------------------------------------------------------------------
 // From MLcCustomPlugin.
+// Checks if the command is a base, set, read or test type of command
+// ---------------------------------------------------------------------------
+//
+TCmdHandlerType CLcCustomPlugin::CheckCommandType(
+    const TDesC8& aCmdBase,
+    const TDesC8& aCmdFull )
+    {
+    TRACE_FUNC_ENTRY
+    TInt retTemp = KErrNone;
+    TBuf8<KDefaultCmdBufLength> atCmdBuffer;
+    atCmdBuffer.Copy( aCmdBase );
+    // Check "base" command ("AT+COMMAND")
+    retTemp = aCmdFull.Compare( atCmdBuffer );
+    if ( retTemp == 0 )
+        {
+        TRACE_FUNC_EXIT
+        return ECmdHandlerTypeBase;
+        }
+    // Check "read" command ("AT+COMMAND?")
+    // Add last question mark
+    atCmdBuffer.Append( '?' );
+    retTemp = aCmdFull.Compare( atCmdBuffer );
+    if ( retTemp == 0 )
+        {
+        TRACE_FUNC_EXIT
+        return ECmdHandlerTypeRead;
+        }
+    // Check "test" command ("AT+COMMAND=?")
+    // Add "=" before the question mark
+    _LIT8( KAssignmentMark, "=" );
+    atCmdBuffer.Insert( atCmdBuffer.Length()-1, KAssignmentMark );
+    retTemp = aCmdFull.Compare( atCmdBuffer );
+    if ( retTemp == 0 )
+        {
+        TRACE_FUNC_EXIT
+        return ECmdHandlerTypeTest;
+        }
+    // Check "set" command ("AT+COMMAND=")
+    // Remove last question mark
+    atCmdBuffer.SetLength( atCmdBuffer.Length() - 1 );
+    retTemp = aCmdFull.Compare( atCmdBuffer );
+    if ( retTemp == 0 )
+        {
+        TRACE_FUNC_EXIT
+        return ECmdHandlerTypeSet;
+        }
+    TRACE_FUNC_EXIT
+    return ECmdHandlerTypeUndefined;
+    }
+
+// ---------------------------------------------------------------------------
+// From MLcCustomPlugin.
 // Returns the array of supported commands
 // ---------------------------------------------------------------------------
 //
--- a/localconnectivityservice/lccustomplugin/src/lclistallcmd.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/lccustomplugin/src/lclistallcmd.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -15,16 +15,14 @@
 *
 */
 
-
 #include "lclistallcmd.h"
 #include "debug.h"
 
-_LIT8( KListAllQueryCmd, "AT+CLAC=?" );
-_LIT8( KListAllCmd,      "AT+CLAC"   );
-
 const TInt KCrLfLength    = 2;  // CR+LF
 const TInt KOkReplyLength = 6;  // CR+LF+"OK"+CR+LF
 
+_LIT8( KClacCmd, "AT+CLAC" );
+
 // ---------------------------------------------------------------------------
 // Two-phased constructor.
 // ---------------------------------------------------------------------------
@@ -69,28 +67,42 @@
     }
 
 // ---------------------------------------------------------------------------
+// Checks command types
+// ---------------------------------------------------------------------------
+//
+TBool CLcListAllCmd::CheckCommand( const TDesC8& aCmd )
+    {
+    TRACE_FUNC_ENTRY
+    // The AT+CLAC command supports two types: base and test
+    iCmdHandlerType = iCallback->CheckCommandType( KClacCmd, aCmd );
+    if ( iCmdHandlerType==ECmdHandlerTypeBase ||
+         iCmdHandlerType==ECmdHandlerTypeTest )
+        {
+        iDetectedCmd = EDetectedCmdCLAC;
+        TRACE_FUNC_EXIT
+        return ETrue;
+        }
+    TRACE_FUNC_EXIT
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
 // Reports the support status of an AT command. This is a synchronous API.
 // ---------------------------------------------------------------------------
 //
 TBool CLcListAllCmd::IsCommandSupported( const TDesC8& aCmd )
     {
     TRACE_FUNC_ENTRY
-    TInt retTemp = KErrNone;
-    retTemp = aCmd.Compare( KListAllQueryCmd );
-    if ( retTemp == 0 )
+    // Set all to undefined if either the command or its type is unknown
+    // HandleCommand() should be round only when both are set
+    TBool cmdUnderstood = CheckCommand( aCmd );
+    if ( cmdUnderstood )
         {
-        iCmdHandlerType = ECmdHandlerTypeQuery;
-        TRACE_FUNC_EXIT
-        return ETrue;
-        }
-    retTemp = aCmd.Compare( KListAllCmd );
-    if ( retTemp == 0 )
-        {
-        iCmdHandlerType = ECmdHandlerTypeList;
         TRACE_FUNC_EXIT
         return ETrue;
         }
     iCmdHandlerType = ECmdHandlerTypeUndefined;
+    iDetectedCmd = EDetectedCmdUndefined;
     TRACE_FUNC_EXIT
     return EFalse;
     }
@@ -102,7 +114,7 @@
 // ---------------------------------------------------------------------------
 //
 void CLcListAllCmd::HandleCommand( const TDesC8& /*aCmd*/,
-                                   RBuf8& aReply,
+                                   RBuf8& /*aReply*/,
                                    TBool aReplyNeeded )
     {
     TRACE_FUNC_ENTRY
@@ -111,52 +123,45 @@
         TRACE_FUNC_EXIT
         return;
         }
-    if ( iCmdHandlerType == ECmdHandlerTypeQuery )
+    if ( iCmdHandlerType == ECmdHandlerTypeTest )
         {
-        iCallback->CreateReplyAndComplete( EReplyTypeOk,
-                                           aReply );
+        iCallback->CreateReplyAndComplete( EReplyTypeOk );
         TRACE_FUNC_EXIT
         return;
         }
-    // Else here means ECmdHandlerTypeList
+    // Else here means ECmdHandlerTypeBase
     // First check the quiet mode and verbose mode.
     // These are handled in CreateReplyAndComplete()
     TInt retTemp;
     TBool quietMode = EFalse;
-    TBool verboseMode = EFalse;
     retTemp  = iCallback->GetModeValue( EModeTypeQuiet, quietMode );
-    retTemp |= iCallback->GetModeValue( EModeTypeVerbose, verboseMode );
     if ( retTemp != KErrNone )
         {
-        iCallback->CreateReplyAndComplete( EReplyTypeError,
-                                           aReply );
-        TRACE_FUNC_EXIT
-        return;
-        }
-    if ( quietMode || !verboseMode )
-        {
-        iCallback->CreateReplyAndComplete( EReplyTypeOther,
-                                           aReply );
+        iCallback->CreateReplyAndComplete( EReplyTypeError );
         TRACE_FUNC_EXIT
         return;
         }
     RBuf8 reply;
+    if ( quietMode )
+        {
+        iCallback->CreateReplyAndComplete( EReplyTypeOther, reply );
+        reply.Close();
+        TRACE_FUNC_EXIT
+        return;
+        }
     TBool error = CreateSupportedList( reply );
     if ( error )
         {
-        iCallback->CreateReplyAndComplete( EReplyTypeError,
-                                           aReply );
+        iCallback->CreateReplyAndComplete( EReplyTypeError );
         reply.Close();
         TRACE_FUNC_EXIT
         return;
         }
     RBuf8 okReply;
     iCallback->CreateOkOrErrorReply( okReply, ETrue );
-    reply.Append( okReply);
+    reply.Append( okReply );
     okReply.Close();
-    iCallback->CreateReplyAndComplete( EReplyTypeOther,
-                                       aReply,
-                                       reply );
+    iCallback->CreateReplyAndComplete( EReplyTypeOther, reply );
     reply.Close();
     TRACE_FUNC_EXIT
     }
@@ -199,6 +204,7 @@
             linearSize += KCrLfLength;
             }
         }
+    linearSize += KCrLfLength;
     // Now we have the length of the linear region,
     // use that to create the reply
     TChar carriageReturn;
@@ -223,6 +229,8 @@
             aReply.Append( lineFeed );
             }
         }
+    aReply.Append( carriageReturn );
+    aReply.Append( lineFeed );
     // Delete the array as it is no longer needed
     commands.ResetAndDestroy();
     commands.Close();
--- a/localconnectivityservice/lcstylustap/data/lcstylustaprsc.rss	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/lcstylustap/data/lcstylustaprsc.rss	Fri Mar 12 15:46:58 2010 +0200
@@ -33,6 +33,6 @@
     {
     }
 RESOURCE TBUF       r_lcstylustap_bt_name  { buf = qtn_bt_title_bluetooth; }
-RESOURCE TBUF       r_lcstylustap_usb_name  { buf = qtn_usb_title; }
+RESOURCE TBUF       r_lcstylustap_usb_name  { buf = qtn_usb_stylus_tap; }
 RESOURCE TBUF       r_lcstylustap_usb_mem_eject  { buf = qtn_usb_mem_eject; }
 
--- a/localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/conf/ui_LcStylusTapTest.cfg	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/conf/ui_LcStylusTapTest.cfg	Fri Mar 12 15:46:58 2010 +0200
@@ -2,7 +2,7 @@
 * 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 the License "Eclipse Public License v1.0"
+* 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".
 *
--- a/localconnectivityservice/obexreceiveservices/bip/src/BIPController.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/obexreceiveservices/bip/src/BIPController.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -45,7 +45,7 @@
 _LIT8(KBipCapabilityType, "x-bt/img-capabilities\0");
 
 
-const TInt    KBufferSize = 0x4000;  // 16kB
+const TInt    KBufferSize = 0x10000;  // 64 kB
 
 // ================= MEMBER FUNCTIONS =======================
 
--- a/localconnectivityservice/obexreceiveservices/opp/src/oppcontroller.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/obexreceiveservices/opp/src/oppcontroller.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -37,7 +37,7 @@
 
 // CONSTANTS
 
-const TInt    KBufferSize = 0x4000;  // 16kB
+const TInt    KBufferSize = 0x10000;  // 64 kB
 
 // ================= MEMBER FUNCTIONS =======================
 
--- a/localconnectivityservice/obexserviceman/utils/src/obexutilsdialog.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilsdialog.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -201,7 +201,9 @@
 
     if( iProgressDialog )
         {        
+        iProgressDialog->SetCallback(NULL);
         iProgressDialog->ProcessFinishedL();
+        iProgressDialog = NULL;
 
         if ( iObexDialogTimer )
             {
--- a/localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp	Fri Feb 19 23:43:38 2010 +0200
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilsuilayer.cpp	Fri Mar 12 15:46:58 2010 +0200
@@ -27,21 +27,8 @@
 #include <AknGlobalConfirmationQuery.h>
 #include <eikon.rsg>
 #include <avkon.rsg>
-#ifdef NO101APPDEPFIXES
 #include <muiu.mbg>
-#else   //NO101APPDEPFIXES
-enum TMuiuConsts
-    {
-    EMbmMuiuQgn_prop_mce_ir_unread = 16402,
-    EMbmMuiuQgn_prop_mce_ir_unread_mask = 16403,
-    EMbmMuiuQgn_prop_mce_ir_read = 16404,
-    EMbmMuiuQgn_prop_mce_ir_read_mask = 16405,
-    EMbmMuiuQgn_prop_mce_bt_unread = 16406,
-    EMbmMuiuQgn_prop_mce_bt_unread_mask = 16407,
-    EMbmMuiuQgn_prop_mce_bt_read = 16408,
-    EMbmMuiuQgn_prop_mce_bt_read_mask = 16409
-    };
-#endif  //NO101APPDEPFIXES
+
 #include <bautils.h>
 #include <featmgr.h>