telutils/telephonyservice/src/cmediatorservice.cpp
changeset 0 ff3b6d0fd310
child 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/telephonyservice/src/cmediatorservice.cpp	Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class is responsible for communication towards Mediator.
+*
+*/
+
+#include <MediatorCommandInitiator.h>
+#include <MediatorDomainUIDs.h>
+#include <callinformation.h>            //Call Information Mediator API
+#include <callremotepartyinformation.h> //Call Remote Party Information Mediator API
+
+#include "cmediatorservice.h"
+#include "telsrvlogger.h"
+
+
+
+CMediatorService::CMediatorService( TServiceCategory aService )
+    : iServiceCategory( aService )
+    {
+    // No implementation required
+    }
+
+CMediatorService::~CMediatorService()
+    {
+    
+    if (iMediatorEvent)
+            {
+            iMediatorEvent->UnsubscribeEvent( iDomain,
+                                              iCategory, 
+                                              iEventId );
+            }
+        
+    delete iMediatorEvent;    
+    delete iCommandInitiator;
+    }
+
+CMediatorService* CMediatorService::NewLC( TServiceCategory aService )    
+    {
+    CMediatorService* self = new (ELeave) CMediatorService( aService );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+CMediatorService* CMediatorService::NewL( TServiceCategory aService )
+    {
+    CMediatorService* self = CMediatorService::NewLC( aService );
+    CleanupStack::Pop(self); 
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets the observer.
+// ---------------------------------------------------------------------------
+//
+void CMediatorService::SetObserver( MMediatorServiceObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
+
+
+void CMediatorService::ConstructL()
+    {
+    iCommandInitiator = CMediatorCommandInitiator::NewL( this );
+    iMediatorEvent = CMediatorEventConsumer::NewL( this ); 
+    SetMediatorParams();
+    }
+
+// ---------------------------------------------------------------------------
+// Sends a Mediator Service command.
+// ---------------------------------------------------------------------------
+//
+TInt CMediatorService::SendCommand()
+    {    
+    TInt error = iCommandInitiator->IssueCommand(
+                iDomain, 
+                iCategory, 
+                iCommandId, 
+                iVersion,
+                KNullDesC8 );
+    
+    return error;        
+    }
+
+// ---------------------------------------------------------------------------
+// Subscribes to Mediator event.
+// ---------------------------------------------------------------------------
+//
+TInt CMediatorService::SubscribeEvent()
+    {
+    TInt error = iMediatorEvent->SubscribeEvent( iDomain,
+                                                 iCategory, 
+                                                 iEventId, 
+                                                 iVersion );
+    return error;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MMediatorCommandResponseObserver.
+// A response to a Mediator Service command.
+// ---------------------------------------------------------------------------
+//
+void CMediatorService::CommandResponseL( TUid /*aDomain*/, TUid /*aCategory*/, 
+  TInt aCommandId, TInt aStatus, const TDesC8& aData )
+  {
+  
+  if( KErrNone != aStatus )
+      {      
+      TSLOGSTRING2("CMediatorService::CommandResponseL; status %d", aStatus);
+      return;
+      }
+    
+  if ( iCommandId == aCommandId )
+      {
+      if (iObserver)
+          {
+          iObserver->CommandResponseL(aData);
+          }
+      else // observer not set
+          {
+          TSLOGSTRING("CMediatorService::CommandResponseL; No observer");
+          }
+      }
+  else // command ID doesn't match
+      {
+      TSLOGSTRING2("CMediatorService::CommandResponseL; CommandId %d", aCommandId);
+      }      
+  }
+
+// ---------------------------------------------------------------------------
+// From class MMediatorEventObserver.
+// A Mediator Service event.
+// ---------------------------------------------------------------------------
+//
+void CMediatorService::MediatorEventL( TUid /*aDomain*/, TUid /*aCategory*/, 
+  TInt aEventId, const TDesC8& aData )
+  {    
+  
+  if ( iEventId == aEventId )
+      {
+      if (iObserver)
+          {
+          iObserver->MediatorEventL(aData); 
+          }
+      else
+          {
+          TSLOGSTRING("CMediatorService::MediatorEventL; No observer");
+          }        
+      }
+  else
+      {
+      TSLOGSTRING2("CMediatorService::MediatorEventL; EventId %d", aEventId);     
+      }  
+  }
+
+// ---------------------------------------------------------------------------
+// Sets the parameters used in Mediator commands and events
+// ---------------------------------------------------------------------------
+//
+void CMediatorService::SetMediatorParams()
+    {
+    iDomain = KMediatorTelephonyDomain;
+    
+    switch ( iServiceCategory )
+        {
+        case ECallInfo:            
+            iCategory = KCatCallInformation;
+            iCommandId = EGetAllCallStates;
+            iEventId = EChangesInCallStates;            
+            iVersion.iMajor = KCallInformationVersionMajor;
+            iVersion.iMinor = KCallInformationVersionMinor; 
+            iVersion.iBuild = KCallInformationVersionBuild;            
+            break;
+        case ECallRemotePartyInfo:  
+            iCategory = KCatCallRemotePartyInformation;
+            iCommandId = EGetCallRemotePartyInformation;
+            iEventId = EChangesInRemotePartyInformation;
+            iVersion.iMajor = KCallRemotePartyInformationVersionMajor;
+            iVersion.iMinor = KCallRemotePartyInformationVersionMinor; 
+            iVersion.iBuild = KCallRemotePartyInformationVersionBuild;            
+            break;
+        default:
+            TSLOGSTRING("CMediatorService::SetMediatorParams; unknown service category");
+            break;
+        }    
+    }