coreapplicationuis/SysAp/Src/SysApAccessoryObserver.cpp
changeset 56 11a052f4b02e
parent 0 2e3d3ce01487
child 63 c2c61fdca848
child 81 676b6116ca93
--- a/coreapplicationuis/SysAp/Src/SysApAccessoryObserver.cpp	Tue Jul 06 14:26:20 2010 +0300
+++ b/coreapplicationuis/SysAp/Src/SysApAccessoryObserver.cpp	Wed Aug 18 09:58:19 2010 +0300
@@ -20,6 +20,8 @@
 #include "SysApAccessoryObserver.h"
 #include "SysAp.hrh"
 #include "SysApAppUi.h"
+#include <Accpolgenericidarray.h>
+#include <Accpolgenericid.h>
 
 #include <e32svr.h>      // RDebug
 
@@ -59,6 +61,7 @@
     TRACES( RDebug::Print( _L("CSysApAccessoryObserver::~CSysApAccessoryObserver") ) );
     Cancel();
     iAccessoryMode.CloseSubSession();
+    iAccessoryConnection.CloseSubSession();
     iAccessoryServer.Close();
     }
 
@@ -92,9 +95,51 @@
                 TRACES( RDebug::Print( _L("CSysApAccessoryObserver::ConstructL(): iAccMode.iAccessoryMode=%d" ), iAccMode.iAccessoryMode ) );
                 iPreviousMode = iAccMode.iAccessoryMode;
                 }                
+            TRACES( RDebug::Print( _L("CSysApAccessoryObserver::ConstructL(): trying RAccessoryConnection::CreateSubSession" ) ) );
             
+            err = iAccessoryConnection.CreateSubSession( iAccessoryServer );
+            if ( err == KErrNone )
+                {
+                TRACES( RDebug::Print( _L("CSysApAccessoryObserver::ConstructL(): connection to RAccessoryConnection established" ) ) );
+                TAccPolGenericIDArray iAccGenericIDArray;
+                err = iAccessoryConnection.GetAccessoryConnectionStatus( iAccGenericIDArray );
+                if ( err == KErrNone )
+                    {
+                    TInt iIndex = 0;
+                    TAccPolGenericID iAccGenericID = iAccGenericIDArray.GetGenericIDL( iIndex );
+                    TUint iPhysicalConnection = iAccGenericID.PhysicalConnectionCaps();
+                    if (iPhysicalConnection & KPCWired)
+                        {
+                        iPhysicalConnectionType = KPCWired;
+                        }
+                    else if (iPhysicalConnection & KPCBluetooth)
+                        {
+                        iPhysicalConnectionType = KPCBluetooth;
+                        }
+                    else if (iPhysicalConnection & KPCInfraRed)
+                        {
+                        iPhysicalConnectionType = KPCInfraRed;
+                        }
+                    else if (iPhysicalConnection & KPCUSB)
+                        {
+                        iPhysicalConnectionType = KPCUSB;
+                        }
+                    else if (iPhysicalConnection & KPCHDMI)
+                        {
+                        iPhysicalConnectionType = KPCHDMI;
+                        }
             iAccessoryMode.NotifyAccessoryModeChanged( iStatus, iAccMode );
             SetActive();
+                    }
+                else
+                    {
+                TRACES( RDebug::Print( _L("CSysApAccessoryObserver::ConstructL(): Error in Getting AccessoryConnectionStatus Error: %d " ),err ) );
+                    }
+                }
+            else
+                {
+                TRACES( RDebug::Print( _L("CSysApAccessoryObserver::ConstructL(): RAccessoryConnection::CreateSubSession - Error: %d" ), err ) );
+                }
             }
         else
             {
@@ -115,6 +160,7 @@
     {
     TRACES( RDebug::Print( _L("CSysApAccessoryObserver::DoCancel()" ) ) );
     iAccessoryMode.CancelNotifyAccessoryModeChanged();
+    iAccessoryConnection.CancelGetAccessoryConnectionStatus();
     }
 
 // ----------------------------------------------------------------------------
@@ -133,7 +179,37 @@
         }
     else if ( iAccMode.iAccessoryMode != iPreviousMode ) // for filtering audio output change notifications
         {
-        iSysApAppUi.HandleAccessoryConnectedL( iAccMode.iAccessoryMode );
+        TInt err( KErrNone );
+        TAccPolGenericIDArray iAccGenericIDArray;
+        err = iAccessoryConnection.GetAccessoryConnectionStatus( iAccGenericIDArray );
+        if ( err == KErrNone )
+            {
+            TInt iIndex = 0;
+            TAccPolGenericID iAccGenericID = iAccGenericIDArray.GetGenericIDL( iIndex );
+            TUint iPhysicalConnection = iAccGenericID.PhysicalConnectionCaps();
+            if ( iPhysicalConnection & KPCWired )
+                {
+                iPhysicalConnectionType = KPCWired;
+                }
+            else if ( iPhysicalConnection & KPCBluetooth )
+                {
+                iPhysicalConnectionType = KPCBluetooth;
+                }
+            else if ( iPhysicalConnection & KPCInfraRed )
+                {
+                iPhysicalConnectionType = KPCInfraRed;
+                }
+            else if ( iPhysicalConnection & KPCUSB )
+                {
+                iPhysicalConnectionType = KPCUSB;
+                }
+            else if ( iPhysicalConnection & KPCHDMI )
+                {
+                iPhysicalConnectionType = KPCHDMI;
+                }
+            }
+        TRACES( RDebug::Print( _L("CSysApAccessoryObserver::RunL: iAccessoryMode: %d, iPhysicalConnectionType: %d" ), iAccMode.iAccessoryMode,iPhysicalConnectionType ) );             
+        iSysApAppUi.HandleAccessoryConnectedL( iAccMode.iAccessoryMode,iPhysicalConnectionType );
         }
     
     iPreviousMode = iAccMode.iAccessoryMode;
@@ -168,6 +244,14 @@
     return iAccMode.iAccessoryMode;
     }
 
+
+// ----------------------------------------------------------------------------
+// CSysApAccessoryObserver::GetAccessoryConnectionType() const
+// ----------------------------------------------------------------------------
+TInt CSysApAccessoryObserver::GetAccessoryConnectionType() const
+    {
+    return iPhysicalConnectionType;
+    }
 // End of File