piprofiler/piprofiler_plat/inc/PluginSampler.h
changeset 22 a009639409f5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/piprofiler/piprofiler_plat/inc/PluginSampler.h	Thu May 27 14:26:55 2010 +0300
@@ -0,0 +1,247 @@
+/*
+* Copyright (c) 2009 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:  
+*
+*/
+
+
+#ifndef __PLUGINSAMPLER_H__
+#define __PLUGINSAMPLER_H__
+
+/*
+ * The user-interface to the sampling device driver sued by the profiling engine
+ */
+//	#include <piprofiler/ProfilerConfig.h>
+//	#include <piprofiler/ProfilerVersion.h>	// versions removed from ProfilerConfig.h
+
+#ifndef __KERNEL_MODE__
+#include <utf.h>
+#endif
+
+/*
+ *	Forward declarations
+ */
+class TBapBuf;
+
+/**
+ * A minimal capabilities class for the Sampling device.
+ * It just returns the version number.
+ */
+class TCapsSamplerV01
+	{
+public:
+	TVersion	iVersion;
+	};
+
+
+const TInt KMinDelay = 1;
+const TInt KMaxDelay = 10000;
+
+/**
+ * The user device driver class for controlling the plugin sampler.
+ */
+
+class RPluginSampler :  public RBusLogicalChannel
+{	
+	friend class DPluginDriver;
+	public:
+		enum TControl
+		{
+			EOutputSettingsForTrace,
+			EMarkTraceActive,
+			EMarkTraceInactive,
+			ESample,
+			EStartSampling,
+			EGetSampleTime,
+			EGetSamplerVersion,
+			EStopAndWaitForEnd,
+			ESetSamplingPeriod,
+			EAdditionalTraceSettings,
+			EAdditionalTraceSettings2,
+			EAdditionalTraceSettings3,
+			EAdditionalTraceSettings4,
+			//EPrintTraces,
+			ECancelStreamRead,
+			ERequestFillThisStreamBuffer,
+			ERequestPrintStreamBuffer,
+			ETest
+		};
+
+	public:
+		#ifndef __KERNEL_MODE__
+		
+		inline ~RPluginSampler();
+			
+		/**
+		 * 
+		 * Methods for controlling the sampler device
+		 * 
+		 **/
+		/** Open a channel to the sampling device **/
+		virtual TInt Open() = 0;
+
+		/** Set sampling period for sampler */
+		inline void SetSamplingPeriod(TInt samplerId, TInt settings);
+		
+		/** Set additional trace settings **/
+		inline void AdditionalSettingsForTrace(TInt samplerId,TInt settings);
+		inline void AdditionalSettingsForTrace2(TInt samplerId,TInt settings);
+		inline void AdditionalSettingsForTrace3(TInt samplerId,TInt settings);
+		inline void AdditionalSettingsForTrace4(TInt samplerId,TInt settings);
+		
+		/** Mark trace active **/
+		inline void MarkTraceActive(TUint32 id);
+
+		/** Mark trace inactive **/
+		inline void MarkTraceInactive(TUint32 id);
+
+		/** Sample command to kernel LDD**/
+		inline void Sample();
+		
+		/** Start tracing **/
+		inline void StartSampling();
+
+		/** Stop tracing **/
+		inline void StopSampling();
+
+		/** Get current sampling time **/
+		inline TUint32 GetSampleTime();
+
+		/** Get sampler version as descriptor **/
+		virtual void GetSamplerVersion(TDes*);
+
+		/** Get next filled buffer in stream mode **/
+		void GetNextbuffer( );
+
+		/** Request stream read **/
+		void FillThisStreamBuffer(TBapBuf* aBuffer, TRequestStatus& aStatus);
+
+		/** Request print buffer**/
+		void PrintStreamBuffer(TDesC16* aBuffer);
+		
+		/** Run test case **/
+		inline void Test(TUint32 testCase);
+
+		#endif	// !__KERNEL_MODE__	
+};
+
+
+#ifndef __KERNEL_MODE__
+inline RPluginSampler::~RPluginSampler()
+{
+}
+
+inline void RPluginSampler::AdditionalSettingsForTrace(TInt samplerId,TInt settings)
+	{
+	DoControl(EAdditionalTraceSettings,
+			reinterpret_cast<TAny*>(samplerId),
+			reinterpret_cast<TAny*>(settings));
+	}
+
+inline void RPluginSampler::AdditionalSettingsForTrace2(TInt samplerId,TInt settings)
+	{
+	DoControl(EAdditionalTraceSettings2,
+			reinterpret_cast<TAny*>(samplerId),
+			reinterpret_cast<TAny*>(settings));
+	}
+
+inline void RPluginSampler::AdditionalSettingsForTrace3(TInt samplerId,TInt settings)
+	{
+	DoControl(EAdditionalTraceSettings3,
+			reinterpret_cast<TAny*>(samplerId),
+			reinterpret_cast<TAny*>(settings));
+	}
+
+inline void RPluginSampler::AdditionalSettingsForTrace4(TInt samplerId,TInt settings)
+	{
+	DoControl(EAdditionalTraceSettings4,
+			reinterpret_cast<TAny*>(samplerId),
+			reinterpret_cast<TAny*>(settings));
+	}
+
+inline void RPluginSampler::SetSamplingPeriod(TInt samplerId, TInt settings)
+	{
+	DoControl(ESetSamplingPeriod, 
+			reinterpret_cast<TAny*>(samplerId),
+			reinterpret_cast<TAny*>(settings));
+	}
+
+
+inline void RPluginSampler::MarkTraceActive(TUint32 id)
+{
+		DoControl(EMarkTraceActive, reinterpret_cast<TAny*>(id));
+}
+
+inline void RPluginSampler::MarkTraceInactive(TUint32 id)
+{
+		DoControl(EMarkTraceInactive, reinterpret_cast<TAny*>(id));
+}
+
+inline void RPluginSampler::Sample()
+	{
+	DoControl(ESample);
+	}
+
+inline void RPluginSampler::StartSampling()
+{
+	// at first, start the kernel side samplers
+	DoControl(EStartSampling);
+}
+
+inline void RPluginSampler::StopSampling()
+{
+	// stop the device driver and the kernel mode samplers
+	TRequestStatus status;
+	status = KRequestPending;
+	DoRequest(EStopAndWaitForEnd,status);
+	User::WaitForRequest(status);
+}
+
+inline TUint32 RPluginSampler::GetSampleTime()
+{
+	TUint32* sampleTime = new TUint32;
+
+	DoControl(EGetSampleTime,reinterpret_cast<TAny*>(sampleTime));
+	TUint32 value = *sampleTime;
+	delete sampleTime;
+
+	return value;
+}
+
+inline void RPluginSampler::GetSamplerVersion(TDes* aDes)
+{
+	TBuf8<16> buf;
+	DoControl(EGetSamplerVersion,(TAny*)&buf);
+	CnvUtfConverter::ConvertToUnicodeFromUtf8(*aDes,buf);
+}
+
+inline void RPluginSampler::PrintStreamBuffer(TDesC16* aDes) 
+{
+	DoControl(ERequestPrintStreamBuffer,reinterpret_cast<TAny*>(aDes));
+}
+
+inline void RPluginSampler::FillThisStreamBuffer(TBapBuf* aBuffer, TRequestStatus& aStatus)
+{
+	aStatus = KRequestPending;
+	DoRequest(ERequestFillThisStreamBuffer,aStatus,(TAny*)aBuffer);
+
+}
+
+inline void RPluginSampler::Test(TUint32 testCase)
+{
+	DoControl(ETest,reinterpret_cast<TAny*>(testCase));
+}
+
+#endif
+#endif