sysanadatacapture/piprofiler/piprofiler/engine/src/WriterController.cpp
changeset 2 6a82cd05fb1e
parent 1 3ff3fecb12fe
equal deleted inserted replaced
1:3ff3fecb12fe 2:6a82cd05fb1e
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <piprofiler/EngineUIDs.h>
       
    20 #include <piprofiler/ProfilerTraces.h>
       
    21 
       
    22 #include "WriterController.h"
       
    23 
       
    24 const TInt KMaxWriterPluginCount = 10;
       
    25 
       
    26 
       
    27 CWriterController* CWriterController::NewL(CProfilerSampleStream& aStream)
       
    28     {
       
    29     CWriterController* self = new( ELeave ) CWriterController(aStream);
       
    30     CleanupStack::PushL( self );
       
    31     self->ConstructL( );
       
    32     CleanupStack::Pop( self );
       
    33     return self;
       
    34     }
       
    35 
       
    36 CWriterController::CWriterController(CProfilerSampleStream& aStream) : 
       
    37     iStream(aStream)
       
    38     {
       
    39     }
       
    40 
       
    41 void CWriterController::ConstructL()
       
    42 	{
       
    43 	// initiate writer plugin list
       
    44 
       
    45 	}
       
    46 
       
    47 
       
    48 void CWriterController::InitialiseWriterListL()
       
    49     {
       
    50     // create new writer plugin array
       
    51     iPluginArray = new(ELeave) CArrayPtrFlat<CWriterPluginInterface>( KMaxWriterPluginCount );
       
    52     
       
    53     // create new writer plugin loader
       
    54     iPluginLoader = CWriterPluginLoader::NewL();
       
    55     iPluginLoader->SetObserver( this );
       
    56     iPluginLoader->LoadAsyncL( iPluginArray );
       
    57 
       
    58     LOGTEXT(_L(" RWriterController::InitialiseWriterList - exit"));	
       
    59     }
       
    60 
       
    61 CWriterController::~CWriterController()
       
    62     {
       
    63     LOGTEXT(_L("RWriterController::~RWriterController" ));
       
    64     if ( iPluginArray )
       
    65         {
       
    66         // destroy the plugin instances
       
    67         // empty loaded plugins from array
       
    68         for(TInt i(0);i<iPluginArray->Count();i++)
       
    69             {
       
    70             if(iPluginArray->At(i))
       
    71                 {
       
    72                 delete iPluginArray->At(i);
       
    73                 iPluginArray->At(i) = NULL;
       
    74                 }
       
    75             }
       
    76         iPluginArray->Reset();
       
    77         delete iPluginArray;
       
    78         iPluginArray = NULL;
       
    79         }
       
    80     
       
    81     if ( iPluginLoader )
       
    82         {
       
    83         iPluginLoader->AbortAsyncLoad();
       
    84         delete iPluginLoader;
       
    85         iPluginLoader = NULL;
       
    86         }
       
    87 
       
    88     }
       
    89 
       
    90 
       
    91 void CWriterController::InitialisePluginStream()
       
    92 	{
       
    93 	LOGTEXT(_L("RWriterController::InitialisePluginStream - entry"));
       
    94 	TInt pluginCount(iPluginArray->Count());
       
    95 	
       
    96 	if( iPluginArray && pluginCount > 0 )
       
    97 	    {
       
    98 		LOGSTRING2("RWriterController::InitialisePluginStream - plugin count %d, searching through", pluginCount);
       
    99 	  	for(TInt i=0;i<pluginCount;i++)
       
   100 	  	    {
       
   101   			LOGSTRING2("RWriterController::InitialisePluginStream - getting plugin n:o: %d...", i);
       
   102 	    	CWriterPluginInterface* plugin = iPluginArray->At(i);
       
   103 	  		LOGSTRING2("RWriterController::InitialisePluginStream - writer found, 0x%x, initializing stream...", plugin->Id());
       
   104     		plugin->SetStream(iStream);
       
   105 	  		LOGTEXT(_L("RSamplerController::InitialisePluginStream - succeeded!"));
       
   106 	  	    }
       
   107 	  	}
       
   108 	LOGTEXT(_L("RSamplerController::InitialisePluginStream - exit"));
       
   109 
       
   110 	}
       
   111 
       
   112 CArrayPtrFlat<CWriterPluginInterface>* CWriterController::GetPluginList()
       
   113     {
       
   114 	return iPluginArray;
       
   115     }
       
   116 
       
   117 void CWriterController::HandlePluginLoaded( KWriterPluginLoaderStatus aStatus )
       
   118     {
       
   119     
       
   120     switch(aStatus)
       
   121         {
       
   122         case 0:
       
   123             LOGSTRING2("RWriterController - one plugin loaded, status: %d", aStatus);
       
   124             break;
       
   125         case 1:
       
   126             LOGSTRING2("RWriterController - a plugin load failed: %d", aStatus);
       
   127             break;
       
   128         case 2:
       
   129             LOGSTRING2("RWriterController - plugin loading aborted: %d", aStatus);
       
   130             break;
       
   131         case 3:
       
   132             LOGSTRING2("RWriterController - all plugins loaded: %d", aStatus);
       
   133             // set stream after all loaded writer plugins
       
   134             InitialisePluginStream();
       
   135             break;
       
   136         case 4:
       
   137             LOGSTRING2("RWriterController - error in loading plugins: %d", aStatus);
       
   138             break;
       
   139         default:
       
   140             break;
       
   141         }
       
   142     }
       
   143 
       
   144 
       
   145 
       
   146 TUid CWriterController::GetPluginUID(TInt traceId)
       
   147     {
       
   148 	LOGSTRING2(" RWriterController::GetPluginUID - checking UID for traceId = %d",traceId);	
       
   149 	// this part has to be changed for each new writer
       
   150 
       
   151     if( iPluginArray && iPluginArray->Count() > 0 )
       
   152         {
       
   153         for(TInt i=0;i<iPluginArray->Count();i++)
       
   154             {
       
   155             CWriterPluginInterface* plugin = iPluginArray->At(i); 
       
   156             if(plugin->Id().iUid == traceId)
       
   157                 {
       
   158                 LOGSTRING2(" RWriterController::GetPluginUID - got: 0x%X",plugin->Id());	
       
   159                 return plugin->Id();
       
   160                 }
       
   161             }
       
   162         }	
       
   163 	return KWriterNoneSelected;
       
   164 
       
   165     }
       
   166 
       
   167 CWriterPluginInterface* CWriterController::GetActiveWriter()
       
   168     {
       
   169     CWriterPluginInterface* plugin = NULL;
       
   170     TInt count(iPluginArray->Count());
       
   171     if( iPluginArray && count > 0 )
       
   172         {
       
   173         for(TInt i=0;i<count;i++)
       
   174             {
       
   175             plugin = iPluginArray->At(i); 
       
   176             if(plugin->GetEnabled())
       
   177                 {
       
   178                 return plugin;
       
   179                 }
       
   180             }
       
   181         }
       
   182     return (CWriterPluginInterface*)0;
       
   183     }
       
   184 
       
   185 TUint32 CWriterController::GetWriterType(TUint32 writerId)
       
   186     {
       
   187     TUid id;
       
   188     
       
   189     id = this->GetPluginUID(writerId);
       
   190     
       
   191     if(id != KWriterNoneSelected)
       
   192         return GetPlugin(id)->GetWriterType();
       
   193     else
       
   194         return 0;
       
   195     }
       
   196 
       
   197 CWriterPluginInterface* CWriterController::GetPlugin(TUid aUid)
       
   198     {
       
   199     if( iPluginArray && iPluginArray->Count() > 0 )
       
   200         {
       
   201         for(TInt i=0;i<iPluginArray->Count();i++)
       
   202             {
       
   203             CWriterPluginInterface* plugin = iPluginArray->At(i); 
       
   204             // check if searched uid found
       
   205             if(plugin->Id().iUid == aUid.iUid)
       
   206                 {
       
   207                 // return pointer to found plugin
       
   208                 return plugin;
       
   209                 }
       
   210             }
       
   211         }
       
   212     // return null plugin
       
   213 	return (CWriterPluginInterface*)0;
       
   214     }
       
   215 
       
   216 TInt CWriterController::StartSelectedPlugin()
       
   217 	{
       
   218 	LOGTEXT(_L("RWriterController::StartSelectedPlugin - entry"));
       
   219 	
       
   220     CWriterPluginInterface* plugin = GetActiveWriter();
       
   221     
       
   222     if(plugin)
       
   223         {
       
   224         return plugin->Start();
       
   225 		}
       
   226     
       
   227 	LOGTEXT(_L("RWriterController::StartSelectedPlugin - exit"));
       
   228 	return KErrNotFound;
       
   229 	}
       
   230 
       
   231 void CWriterController::StopSelectedPlugin()
       
   232 	{
       
   233 	LOGTEXT(_L("RWriterController::StopSelectedPlugin - entry"));
       
   234     
       
   235     CWriterPluginInterface* plugin = GetActiveWriter();
       
   236     
       
   237 	if(plugin)
       
   238 		{
       
   239 		plugin->Stop();
       
   240 		}
       
   241 	LOGTEXT(_L("RWriterController::StopSelectedPlugin - exit"));
       
   242 	}
       
   243 
       
   244 /** Set selected plugin active **/
       
   245 void CWriterController::SetPluginActive(TUid uid, const TWriterPluginValueKeys aKey)
       
   246     {
       
   247 	CWriterPluginInterface* plugin = NULL;
       
   248 	_LIT(KDummy, "");
       
   249 	TBuf<1> buf;
       
   250 	buf.Append(KDummy);
       
   251 
       
   252 	for(TInt i(0);i<iPluginArray->Count();i++)
       
   253 	    {
       
   254 	    plugin = iPluginArray->At(i);
       
   255 	    if(plugin->Id().iUid == uid.iUid)
       
   256 	        {
       
   257 	        plugin->SetValue(aKey, buf);
       
   258 	        }
       
   259 	    else
       
   260 	        {
       
   261 	        plugin->SetValue(EWriterPluginDisabled, buf);
       
   262 	        }
       
   263 	    }
       
   264     }
       
   265 
       
   266 TInt CWriterController::SetPluginSettings(TUid aUid, TDes& aDes)
       
   267     {
       
   268 	LOGSTRING2(" CWriterController::SetPluginSettings, traceId = 0x%X", aUid.iUid);	
       
   269 	GetPlugin(aUid)->SetValue(EWriterPluginSettings, aDes);
       
   270 	return KErrNone;
       
   271     }
       
   272 
       
   273 /** Get settings for a specific plugin **/
       
   274 void CWriterController::GetPluginSettings(TUid uid, TDes& aVal)
       
   275     {
       
   276 	GetPlugin(uid)->GetValue(EWriterPluginSettings, aVal);
       
   277     }
       
   278 
       
   279 
       
   280 // end of file