diff -r d38941471f1c -r cb32bcc88bad hwrmhaptics/tsrc/hapticstestplugins/inc/hwrmhapticstestplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hwrmhaptics/tsrc/hapticstestplugins/inc/hwrmhapticstestplugin.h Fri Oct 08 14:33:25 2010 +0300 @@ -0,0 +1,260 @@ +/* +* Copyright (c) 2008 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 "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Haptics test (adaptation) plugin header file. +* +*/ + + +#ifndef __HWRMHAPTICSTESTPLUGIN_H_ +#define __HWRMHAPTICSTESTPLUGIN_H_ + +#include +#include +#include +#include "PluginTimer.h" +#include "hwrmhapticsvibepackets.h" + +#ifdef PUBLISH_STATE_INFO +#include +const TUid KPSUidHWResourceNotification = { 0x101F7A04 }; // HWRM private PS Uid +const TUint32 KHWRMTestHapticsCommand = 0x11110001; +const TUint32 KHWRMTestHapticsDataPckg = 0x11110002; +const TUint32 KHWRMTestVibCmdData = 0x11110003; +#endif // PUBLISH_STATE_INFO + +#ifdef __WINS__ + _LIT( KStubResponseFile, "C:\\system\\apps\\haptics\\stubresponse.txt" ); +#else + _LIT( KStubResponseFile, "Z:\\system\\apps\\haptics\\stubresponse.txt" ); +#endif + +_LIT8( KVibraCmdInitialize, "VIBEPKT_CMD_INITIALIZE" ); +_LIT8( KVibraCmdOpenDevice, "VIBEPKT_CMD_OPENDEVICE" ); +_LIT8( KVibraCmdSetDeviceProperty, "VIBEPKT_CMD_SETDEVICEPROPERTY" ); +_LIT8( KVibraCmdPlayMagSweepEffect, "VIBEPKT_CMD_PLAYMAGSWEEPEFFECT" ); +_LIT8( KVibraCmdCloseDevice, "VIBEPKT_CMD_CLOSEDEVICE" ); +_LIT8( KVibraCmdDeviceCount, "VIBEPKT_CMD_DEVICE_COUNT" ); +_LIT8( KVibraCmdGetDeviceProperty, "VIBEPKT_CMD_GETDEVICEPROPERTY" ); +_LIT8( KVibraCmdGetDevicePropertyInteger, "VIBEPKT_CMD_GETDEVICEPROPERTY_INTEGER" ); +_LIT8( KVibraCmdGetDevicePropertyString, "VIBEPKT_CMD_GETDEVICEPROPERTY_STRING" ); +_LIT8( KVibraCmdGetDevicePropertyBool, "VIBEPKT_CMD_GETDEVICEPROPERTY_BOOL" ); +_LIT8( KVibraCmdGetDeviceState, "VIBEPKT_CMD_GETDEVICESTATE" ); +_LIT8( KVibraCmdGetDeviceCapabilities, "VIBEPKT_CMD_GETDEVICECAPABILITIES" ); +_LIT8( KVibraCmdGetDeviceCapabilitiesInteger, "VIBEPKT_CMD_GETDEVICECAPABILITIES_INTEGER" ); +_LIT8( KVibraCmdGetDeviceCapabilitiesString, "VIBEPKT_CMD_GETDEVICECAPABILITIES_STRING" ); +_LIT8( KVibraCmdPlayPeriodicEffect, "VIBEPKT_CMD_PLAYPERIODICEFFECT" ); +_LIT8( KVibraCmdPlayIVTEffectIncludeIVTData, "VIBEPKT_CMD_PLAYIVTEFFECT_INCLUDEIVTDATA" ); +_LIT8( KVibraCmdPlayIVTEffectNoIVTData, "VIBEPKT_CMD_PLAYIVTEFFECT_NOIVTDATA" ); +_LIT8( KVibraCmdStopEffect, "VIBEPKT_CMD_STOPEFFECT" ); +_LIT8( KVibraCmdStopAllEffects, "VIBEPKT_CMD_STOPALLEFFECTS" ); +_LIT8( KVibraCmdPlayStreamingSample, "VIBEPKT_CMD_PLAYSTREAMINGSAMPLE" ); +_LIT8( KVibraCmdCreateStreamingEffect, "VIBEPKT_CMD_CREATESTREAMINGEFFECT" ); +_LIT8( KVibraCmdDestroyStreamingEffect, "VIBEPKT_CMD_DESTROYSTREAMINGEFFECT" ); +_LIT8( KVibraCmdModifyPlayingMagSweepEffect, "VIBEPKT_CMD_MODIFYPLAYINGMAGSWEEPEFFECT" ); +_LIT8( KVibraCmdModifyPlayingPeriodicEffect, "VIBEPKT_CMD_MODIFYPLAYINGPERIODICEFFECT" ); +_LIT8( KVibraCmdPausePlayingEffect, "VIBEPKT_CMD_PAUSEPLAYINGEFFECT" ); +_LIT8( KVibraCmdResumePausedEffect, "VIBEPKT_CMD_RESUMEPAUSEDEFFECT" ); +_LIT8( KVibraCmdGetEffectStateNotPlaying, "VIBEPKT_CMD_GETEFFECTSTATE_NOTPLAYING" ); +_LIT8( KVibraCmdGetEffectStatePlaying, "VIBEPKT_CMD_GETEFFECTSTATE_PLAYING" ); +_LIT8( KVibraCmdGetEffectStatePaused, "VIBEPKT_CMD_GETEFFECTSTATE_PAUSED" ); +_LIT8( KVibraCmdSetKernelParameter, "VIBEPKT_CMD_SETKERNELPARAMETER" ); +_LIT8( KVibraCmdGetKernelParameter, "VIBEPKT_CMD_GETKERNELPARAMETER" ); +_LIT8( KVibraCmdSetLicense, "VIBEPKT_CMD_SETLICENSE" ); + +// for vibe status to S60 status cases.. +_LIT8(KVibraCmdStatusCaseSuccess, "VIBEPKT_CMD_STATUSCASESUCCESS"); +_LIT8(KVibraCmdStatusCaseAlreadyInit, "VIBEPKT_CMD_STATUSCASEALREADYINIT"); +_LIT8(KVibraCmdStatusCaseNotInit, "VIBEPKT_CMD_STATUSCASENOTINIT"); +_LIT8(KVibraCmdStatusCaseInvalidArg, "VIBEPKT_CMD_STATUSCASEINVALIDARG"); +_LIT8(KVibraCmdStatusCaseFail, "VIBEPKT_CMD_STATUSCASEFAIL"); +_LIT8(KVibraCmdStatusCaseIncompEffType, "VIBEPKT_CMD_STATUSCASEINCOMPEFFTYPE"); +_LIT8(KVibraCmdStatusCaseIncompCapaType, "VIBEPKT_CMD_STATUSCASEINCOMPCAPATYPE"); +_LIT8(KVibraCmdStatusCaseIncompPropType, "VIBEPKT_CMD_STATUSCASEINCOMPPROPTYPE"); +_LIT8(KVibraCmdStatusCaseDevNeedsLicense, "VIBEPKT_CMD_STATUSCASEDEVNEEDSLICENSE"); +_LIT8(KVibraCmdStatusCaseNotEnoughMem, "VIBEPKT_CMD_STATUSCASENOTENOUGHMEM"); +_LIT8(KVibraCmdStatusCaseSrvNotRunning, "VIBEPKT_CMD_STATUSCASESRVNOTRUNNING"); +_LIT8(KVibraCmdStatusCaseErrInsuffPriority, "VIBEPKT_CMD_STATUSCASEERRINSUFFPRIORITY"); +_LIT8(KVibraCmdStatusCaseSrvBusy, "VIBEPKT_CMD_STATUSCASESRVBUSY"); +_LIT8(KVibraCmdStatusCaseWrnNotPlaying, "VIBEPKT_CMD_STATUSCASEWRNNOTPLAYING"); +_LIT8(KVibraCmdStatusCaseWrnInsuffPriority, "VIBEPKT_CMD_STATUSCASEWRNINSUFFPRIORITY"); + +const TInt KRespFileData = 3000; +const TInt KHexRespCode = 100; +const TInt KBinRespCode = 100; +const TInt KTimeOut = 500; + +class CPluginTimer; + +/** + * Haptics test plugin. + * Test implementation that handles reception and responding to + * haptics commands in adaptation layer in semi-hardcoded manner. + * (Where semi-hardcoded means that responses are chosen, based on + * the current state of the test stub, from a file containing hardcoded + * response alternatives. + * + * @since S60 5.1 + */ +class CHWRMHapticsTestPlugin : public CHWRMHapticsPluginService, + public MPluginTimerCallback + { +public: + /** + * Static method for instantiating test plugin objects. + * Uses two-phase construction. + * + * @param aCallback Callback to haptics subsystem. + */ + static CHWRMHapticsTestPlugin* NewL( MHWRMHapticsPluginCallback* aCallback ); + + /** + * Destructor + */ + virtual ~CHWRMHapticsTestPlugin(); + + /** + * Method to invoke a particular command in the plugin. + * Implements the CHWRMHapticsPluginService::ProcessCommandL + * abstract interface method. + * + * @param aCommandId Command ID + * @param aTransId Transaction ID + * @param aData Data associated with command + */ + virtual void ProcessCommandL( TInt aCommandId, + TUint8 aTransId, + TDesC8& aData ); + + /** + * Method to cancel a particular command. + * Implements the CHWRMHapticsPluginService::CancelCommandL + * abstract interface method. + * + * @param aTransId Transaction ID + * @param aCommandId Command ID to optionally double check with the + * transaction ID + */ + virtual void CancelCommandL( TUint8 aTransId, + TInt aCommandId ); + + /** + * The callback method that is called from CPluginTimer when timer + * has expired. + * This method basically does all the processing needed to return a + * (emulated) response to a Haptics command. + * + * @param aService Pointer to the implementation of + * MHWRMHapticsPluginCallback callback + * interface whose ProcessResponseL is called + * with (Haptics command's emulated) response + * data. + * @param aCommandId Id of the (emulated) Haptics command. + * @param aTransId Id of the transaction to which the (emulated) + * haptics command belongs to. + * @param aRetVal Return value to be inserted to the response + * of the (emulated) Haptics command. + */ + void GenericTimerFired(MHWRMHapticsPluginCallback* aService, + TInt aCommandId, + TUint8 aTransId, + TInt aRetVal); + /** + * Static method to convert hex string to binary format + * + * @param aSrcBuffer Reference to a descriptor containing the hex buffer. + * @param aDstBuffer Reference to a descriptor containing the buffer + * to which binary data is written. + */ + static void Hex2Bin(const TDesC8& aSrcBuffer, TDes8& aDstBuffer); + + /** + * Method that gets the hex data string from file buffer and converts it to binary format. + * + * @param aCmdPosition Command position in the file data. The command position + * is calculated in GenericTimerFired method based on + * emulated Haptics command's command Id + * @param aRetvalPackage Reference to a descriptor containing the buffer + * to which binary data is written. + */ + void CHWRMHapticsTestPlugin::GetBinRespCode(TInt aCmdPosition, TDes8& aRetvalPackage); + +private: + + /** + * Constructor. + * + * @param aCallback Callback to haptics subsystem. + */ + CHWRMHapticsTestPlugin( MHWRMHapticsPluginCallback* aCallback ); + + /** + * Two-phase construction ConstructL + */ + void ConstructL(); + + +private: // data + + /** + * Array of pointers to running CPluginTimer timer objects + */ + RPointerArray iTimers; + + /** + * File data buffer + */ + TBuf8 iFileData; + + /** + * Emulated haptics command's response data + */ + HWRMHapticsCommand::RHWRMHapticsRespData iStorage; + + /** + * Emulated haptics command (stored as a VibeTonz packet pointer) + */ + TVibePacket* iVibeCmdPacket; + + /** + * Effect state. Used to distinguish (in an emulated way) different + * states of effect ("Playing","Paused","Not playing"). + */ + enum TEffectState + { + ENotPlaying = 0, + EPlaying, + EPaused + }; + TEffectState iEffectState; + +#ifdef PUBLISH_STATE_INFO + + /** + * P&S property for publishing (emulated) Haptics command's command Id + */ + RProperty iCmdProperty; + + /** + * P&S property for publishing (emulated) Haptics command's data + */ + RProperty iDataProperty; + + /** + * P&S property for publishing (emulated) Haptics command's Vibe command code + */ + RProperty iVibeCmdProperty; +#endif // PUBLISH_STATE_INFO + }; + +#endif // __HWRMHAPTICSDPLUGIN_H_