kernel/eka/euser/us_evnt.cpp
author Slion
Tue, 08 Dec 2009 08:11:42 +0100
branchanywhere
changeset 19 f6d3d9676ee4
parent 0 a41df078684a
permissions -rw-r--r--
Trying to figure out how to implement my WINC like compatibility layer. Going the emulation way is probably not so smart. We should not use the kernel but rather hook native functions in the Exec calls.

// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "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:
// e32\euser\us_evnt.cpp
// 
//


#include "us_std.h"



/**
Gets the mouse or digitiser X-Y position.

@return The position.
*/
EXPORT_C TPoint TRawEvent::Pos() const
	{

	__ASSERT_DEBUG(iType==EPointerMove || 
                    iType==EPointerSwitchOn ||
					iType==EButton1Down ||
					iType==EButton1Up ||
					iType==EButton2Down ||
					iType==EButton2Up ||
					iType==EButton3Down ||
					iType==EButton3Up
					,Panic(ETEventNotMoveType));
	return(TPoint(iU.pos.x,iU.pos.y));
	}

/**
Gets the 3D pointing device Cartesian coordinates.

@return The position.
*/
EXPORT_C TPoint3D TRawEvent::Pos3D() const
	{

	__ASSERT_DEBUG(iType==EPointerMove || 
					iType==EPointer3DTiltAndMove ||
                    iType==EPointerSwitchOn ||
					iType==EButton1Down ||
					iType==EButton1Up ||
					iType==EButton2Down ||
					iType==EButton2Up ||
					iType==EButton3Down ||
					iType==EButton3Up
					,Panic(ETEventNotMoveType));
	TPoint3D p;
	p.iX=iU.pos.x;
	p.iY=iU.pos.y;
	p.iZ=iU.pos3D.z;
	return p;
	}

/** Gets the 3D pointing device polar coordinates and rotation.

	@return The polar coordinates and rotation.
 */
EXPORT_C TAngle3D TRawEvent::Tilt() const
	{
	__ASSERT_DEBUG(iType==EPointer3DTilt || 
					iType==EPointer3DTiltAndMove
					,Panic(ETEventNotMoveType));
	TAngle3D p;
	p.iPhi=iU.pos3D.phi;
	p.iTheta=iU.pos3D.theta;
	return p;
	}

/** Gets the rotation angle of 3D pointing device.
    
    @return The rotation angle of the 3D pointing device.
 */
EXPORT_C TInt TRawEvent::Rotation() const
	{
	__ASSERT_DEBUG(iType==EPointer3DRotation || 
					iType==EPointer3DTiltAndMove
					,Panic(ETEventNotMoveType));
	return (iU.pos3D.alpha);
	}

/**
Gets the scancode.

@return The scancode.
*/
EXPORT_C TInt TRawEvent::ScanCode() const
	{

	__ASSERT_DEBUG(iType==EKeyDown || iType==EKeyUp || iType==EKeyRepeat,Panic(ETEventNotKeyType));
	return(iU.key.scanCode);
	}




/**
Gets the repeat count.

@return The repeat count.
*/
EXPORT_C TInt TRawEvent::Repeats() const
	{
	__ASSERT_DEBUG(iType==EKeyRepeat,Panic(ETEventNotKeyRepeatType));
	return(iU.key.repeats);
	}




/**
Gets the modifiers.

@return The modifiers.

@panic EUSER 34 If the event does not represent a modifier key being pressed,
                i.e. if the event type is not TRawEvent::EUpdateModifiers
       
@see TRawEvent::EUpdateModifiers
*/
EXPORT_C TInt TRawEvent::Modifiers() const
	{

	__ASSERT_DEBUG(iType==EUpdateModifiers,Panic(ETEventNotUpdateModifiersType));
	return(iU.modifiers);
	}




/**
Sets the event up as a scancode event.

@param	aType	  The event type.
@param	aScanCode The scancode.
*/
EXPORT_C void TRawEvent::Set(TType aType,TInt aScanCode)
	{

	iType=(TUint8)aType;
	iU.key.scanCode=aScanCode;
	iU.key.repeats=0;
	BTraceContext8(BTrace::ERawEvent, BTrace::ESetEvent ,(TUint32)aType, (TUint32)aScanCode);
	iTicks=User::TickCount();
	}


/**
Sets the event up as a repeating scancode event.

@param	aType	  The event type.
@param	aScanCode The scancode.
@param	aRepeats  The repeat count.
*/
EXPORT_C void TRawEvent::SetRepeat(TType aType,TInt aScanCode,TInt aRepeats)
	{

	iType=(TUint8)aType;
	iU.key.scanCode=aScanCode;
	iU.key.repeats=aRepeats;
	BTraceContext12(BTrace::ERawEvent, BTrace::ESetEvent ,(TUint32)aType, (TUint32)aScanCode, (TUint32)aRepeats);
	iTicks=User::TickCount();
	}


/**
Sets the event up as a mouse/pen event.

@param	aType	The event type.
@param	aX		The X position.
@param	aY		The Y position.
*/
EXPORT_C void TRawEvent::Set(TType aType,TInt aX,TInt aY)
	{

	iType=(TUint8)aType;
	iU.pos.x=aX;
	iU.pos.y=aY;
	BTraceContext12(BTrace::ERawEvent, BTrace::ESetEvent ,(TUint32)aType, (TUint32)aX,(TUint32)aY);
	iTicks=User::TickCount();
	}

	
/**
Sets the event up as a 3D pointer linear move event.

@param	aType	The event type.
@param	aX		The X position.
@param	aY		The Y position.
@param	aZ		The Z position (defaults to 0 on 2D detection devices) .
*/
EXPORT_C void TRawEvent::Set(TType aType,TInt aX,TInt aY,TInt aZ)
	{

	iType=(TUint8)aType;
	iU.pos.x=aX;
	iU.pos.y=aY;
	iU.pos3D.z=aZ;
	//Form the Trace Data
	TUint32 traceData[2];
    traceData[0] =aY;
	traceData[1] =aZ;
    BTraceContextN(BTrace::ERawEvent, BTrace::ESetEvent ,(TUint32)aType, (TUint32)aX,traceData, sizeof(traceData));    
	iTicks=User::TickCount();
	}


/**
Sets up an event without specific parameters.

@param	aType The event type.
*/
EXPORT_C void TRawEvent::Set(TType aType)
	{

	iType=(TUint8)aType;
	BTraceContext4(BTrace::ERawEvent, BTrace::ESetEvent ,(TUint32)aType);
	iTicks=User::TickCount();
	}

/**
Sets the event up as a 3D pointer linear move and tilt and rotation change event.

@param	aType	The event type.
@param	aX		The X position (or TPhi polar coordinate).
@param	aY		The Y position (or Theta polar coordinate).
@param	aZ		The Z position (or rotation).
@param	aPhi	The Phi polar coordinate.
@param	aTheta	The Theta polar coordinate.
@param	aAlpha	The rotation angle.
 */
EXPORT_C void TRawEvent::Set(TType aType,TInt aX,TInt aY,TInt aZ,TInt aPhi,TInt aTheta,TInt aAlpha)
	{
    
	iType=(TUint8)aType;
	iU.pos.x=aX;
	iU.pos.y=aY;
	iU.pos3D.z=aZ;
	iU.pos3D.phi=aPhi;
	iU.pos3D.theta=aTheta;
	iU.pos3D.alpha=aAlpha;	
	//Form the Trace Data
	TUint32 traceData[5];
    traceData[0] =aY;
	traceData[1] =aZ;
	traceData[2] =aPhi;
	traceData[3] =aTheta;
	traceData[4] =aAlpha;
	BTraceContextN(BTrace::ERawEvent, BTrace::ESetEvent ,(TUint32)aType, (TUint32)aX,traceData, sizeof(traceData));	
	iTicks=User::TickCount();
	}

/**
Sets the event up as 3D pointer tilt change event.

@param	aType	The event type.
@param	aPhi	The Phi coordinate.
@param	aTheta	The Theta coordinate.
*/
EXPORT_C void TRawEvent::SetTilt(TType aType,TInt aPhi,TInt aTheta)
	{

	iType=(TUint8)aType;
	iU.pos3D.phi=aPhi;
	iU.pos3D.theta=aTheta;	
	BTraceContext12(BTrace::ERawEvent, BTrace::ESetTiltEvent,(TUint32)aType, (TUint32)aPhi,(TUint32)aTheta);
	iTicks=User::TickCount();
	}

/**
Sets the event up as 3D pointer rotation event.

@param	aType	The event type.
@param	aAlpha	The rotation angle.
*/
EXPORT_C void TRawEvent::SetRotation(TType aType,TInt aAlpha)
	{

	iType=(TUint8)aType;
	iU.pos3D.alpha=aAlpha;
	BTraceContext8(BTrace::ERawEvent, BTrace::ESetRotationtEvent,(TUint32)aType, (TUint32)aAlpha);
	iTicks=User::TickCount();
	}


/**
Sets the event up as a 3D pointer linear move event with pointer number 
@param	aType	The event type.
@param	aX		The X position.
@param	aY		The Y position.
@param	aZ		The Z position .
@param  aPointerNumber   The pointer number for the event 
*/

EXPORT_C void TRawEvent::Set (TType aType, TInt aX, TInt aY, TInt aZ, TUint8 aPointerNumber)
	{

	iType=(TUint8)aType;
	iU.pos3D.x=aX;
	iU.pos3D.y=aY;
	iU.pos3D.z=aZ;
	iPointerNumber=aPointerNumber;		
	//Form the Trace Data
	TUint32 traceData[3];
    traceData[0] =aY;
	traceData[1] =aZ;
	traceData[2] =aPointerNumber;
    BTraceContextN(BTrace::ERawEvent, BTrace::ESetEvent ,(TUint32)aType, (TUint32)aX,traceData, sizeof(traceData));    	
	iTicks=User::TickCount();
	}