accessoryservices/accessoryserver/src/Server/AccSrvConnectionHandler.cpp
branchRCL_3
changeset 21 ccb4f6b3db21
parent 20 1ddbe54d0645
child 22 8cb079868133
--- a/accessoryservices/accessoryserver/src/Server/AccSrvConnectionHandler.cpp	Thu Aug 19 11:09:10 2010 +0300
+++ b/accessoryservices/accessoryserver/src/Server/AccSrvConnectionHandler.cpp	Tue Aug 31 16:29:05 2010 +0300
@@ -238,7 +238,6 @@
     TBool aUpdatedConnection )
     {
     COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling()" );
-    #define UNMASK_LINE_OUT(selectionListBitmask)  (selectionListBitmask & (~KASLineOut))
 
     iGenericID = aGenericID;
     iConnectionUpdate = aUpdatedConnection;
@@ -247,96 +246,82 @@
     if ( aEvaluateConnectionRules )
         {
   		COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling() - Evaluate connection rules" );
- 
-    	//check rules
-    	TUint32 selectionListBitmask( 0 );	
-    	iPolicy->EvaluateConnectionRulesL( iGenericID, selectionListBitmask );
-    	
-    	if ( selectionListBitmask )
-    	    {
-	  		COM_TRACE_1( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling() - Selection bitmask: 0x%bb", selectionListBitmask);
-    		
-    		//remove not supported items...
-    		selectionListBitmask = selectionListBitmask & iModel->SupportedDevicesL();
-    			
-    		//Check default selection
-    		TInt defaultSelection( iModel->DeviceType() );
-    		
-    		if ( selectionListBitmask == ( KASTTY | KASHeadset ) )
-    		    {
-    			if ( defaultSelection != KASTTY )
-    			    {
-    				defaultSelection = KASHeadset;
-    			    }
-    			else
-    			    {
-    				defaultSelection = KASTTY;
-    			    }
-    		    }
-    		else
-    		    {
-    			if ( defaultSelection == KASHeadset )
-    			    {
-    				defaultSelection = 0;
-    			    }
-    			
-    			defaultSelection = selectionListBitmask & defaultSelection;	
-    		    }
-    		
-    		if ( defaultSelection )
-    		    {
-    			iReplyValue = defaultSelection;
-    			iCallback->SetDefaultAccessoryInformation( iGenericID, defaultSelection );
-    			CAccSrvHandlerBase::IssueRequest();
-    		    }
-    		else
-    		    {
-    			//check that more than one accessories in the selection list
-    			TUint32 bitmask( 1 );
-    			TInt accCount( 0 ); 
-    			for ( TInt i( 0 ); i < 32; i++  )
-    			    {
-    				if ( selectionListBitmask & bitmask )
-    				    {
-    					if ( ++accCount > 1 )
-    					    {
-    						//more than one accessories, stop the loop
-    						break;
-    					    }
-    				    }
-    				bitmask <<= 1;
-    			    }
-    		
-    			if ( accCount > 1 )
-    			    {
-	    			//if there is possible selection show UI
-	    			selectionListBitmask = UNMASK_LINE_OUT(selectionListBitmask);
-		    		SetupSelectionDialogL( selectionListBitmask );    			
-    			    }
-    			else
-    			    {
-    				//only one selection, don't show selection dialog
-    				iState = EGetSelectionFromUser;	
-    				iReplyValue = selectionListBitmask;
-    				iCallback->SetDefaultAccessoryInformation( iGenericID, selectionListBitmask );
-    				CAccSrvHandlerBase::IssueRequest();
-    			    }
-    		    }
-    		
-    	    }
-    	else
-    	    {
-    		iState = EInitializeConnection;	
-        	}
-    	
+
         }
     else
         {
   		COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling() - No connection rules" );
-    	iState = EInitializeConnection;
+  		
+        //Check default selection
+        TInt defaultSelection( iModel->DeviceType() );
+        
+        // Device Type Supplied
+        if( (iGenericID.PhysicalConnectionCaps() & KPCWired) && 
+            (iGenericID.DeviceTypeCaps(KDTHeadset)) && 
+            (iPolicy->IsCapabilityDefinedL(iGenericID,KAccIntegratedAudioInput)) )		
+            {
+            // This is a Headset
+            if(KASTTY == defaultSelection)
+                {
+                iReplyValue = defaultSelection;
+                }
+            else
+                {
+                iReplyValue = KASHeadset;
+                }
+            
+            if(KASHeadset != iReplyValue)
+                {
+                COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling- TTY Case" );
+                //only one selection, don't show selection dialog
+                iState = EGetSelectionFromUser; 
+                iCallback->SetDefaultAccessoryInformation( iGenericID, iReplyValue );
+                CAccSrvHandlerBase::IssueRequest();
+                }
+            else
+                {
+                COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling- Headset Case" );
+                iState = EInitializeConnection;    
+                }
+            }
+        else if( (iGenericID.PhysicalConnectionCaps() & KPCWired) && 
+                 (iGenericID.DeviceTypeCaps(KDTHeadset)) && 
+                 !(iPolicy->IsCapabilityDefinedL(iGenericID,KAccIntegratedAudioInput)) )                    
+            {
+            // This is a Headphone
+            if((KASLineOut == defaultSelection) || 
+               (KASMusicStand == defaultSelection) ||
+               (KASHeadphones == defaultSelection))
+                {
+                iReplyValue = defaultSelection;
+                }
+            else
+                {
+                iReplyValue = KASHeadphones;                
+                }
+            
+            if(KASHeadphones != iReplyValue)
+                {
+                COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling- LineOut/MusicStand Case" );
+                //only one selection, don't show selection dialog
+                iState = EGetSelectionFromUser; 
+                iCallback->SetDefaultAccessoryInformation( iGenericID, iReplyValue );
+                CAccSrvHandlerBase::IssueRequest();
+                
+                }
+            else
+                {
+                COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionHandler::StartConnectionHandling- Headphone Case" );
+                iState = EInitializeConnection;
+                }
+            }
+
+        else
+            {
+            iState = EInitializeConnection;
+            }
         }
 
-
     // Atleas one Asynchronous request is made for ourselves,
     // clients ConnectAccessory asynchronous request will be completed
     // during it.