--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hwrmhaptics/hapticspacketizer/plugins/hapticsvibepacketizerplugin/src/hwrmhapticsvibepacketizer.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,1905 @@
+/*
+* 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 "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: Plugin for handling vibe command packages.
+*
+*/
+
+#include <ecom/implementationproxy.h>
+#include <badesca.h>
+#include <hwrmhaptics.h>
+
+#include "hwrmhapticsvibepacketizer.h"
+#include "hwrmhapticsvibepackets.h"
+#include "hwrmhapticsvibeconstants.h"
+
+// Default request message size (enough for any request message)
+const TInt KMsgDefaultSize = 80;
+
+// const for shifts
+const TInt KShiftByte = 8;
+const TInt KShift2Bytes = 16;
+const TInt KShift3Bytes = 24;
+
+const TInt KArrayElements = 10;
+
+// ---------------------------------------------------------------------------
+// Two phased constructor.
+// ---------------------------------------------------------------------------
+//
+CHWRMHapticsVibePacketizer* CHWRMHapticsVibePacketizer::NewL()
+ {
+ CHWRMHapticsVibePacketizer* self =
+ new ( ELeave ) CHWRMHapticsVibePacketizer();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CHWRMHapticsVibePacketizer::~CHWRMHapticsVibePacketizer()
+ {
+ iReqBuf.Close();
+ iDataBuf.Close();
+
+ if( iReturnArray )
+ {
+ delete iReturnArray;
+ iReturnArray = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CHWRMHapticsVibePacketizer::CHWRMHapticsVibePacketizer()
+ : iDeviceHandle( KErrNotFound )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// 2nd phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CHWRMHapticsVibePacketizer::ConstructL()
+ {
+ User::LeaveIfError( iReqBuf.CreateMax( KMsgDefaultSize ) );
+ User::LeaveIfError( iDataBuf.CreateMax( KMsgDefaultSize ) );
+
+ iReturnArray = new (ELeave) CDesC8ArraySeg( KArrayElements );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncOpenDeviceReq(
+ THWRMLogicalActuators aLogicalActuator, RBuf8& aBuffer )
+ {
+ TVibePacketOpenDeviceRequest* pReq =
+ reinterpret_cast<TVibePacketOpenDeviceRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdOpenDevice;
+ pReq->iDeviceIndex_7_0 =
+ static_cast<TUint8>( aLogicalActuator & 0xFF );
+ pReq->iDeviceIndex_15_8 =
+ static_cast<TUint8>( ( aLogicalActuator >> KShiftByte ) & 0xFF );
+ pReq->iDeviceIndex_23_16 =
+ static_cast<TUint8>(
+ ( aLogicalActuator >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceIndex_31_24 =
+ static_cast<TUint8>(
+ ( aLogicalActuator >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof ( TVibePacketOpenDeviceRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncCloseDeviceReq( TInt aDeviceHandle,
+ RBuf8& aBuffer )
+ {
+ TVibePacketCloseDeviceRequest* pReq =
+ reinterpret_cast<TVibePacketCloseDeviceRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdCloseDevice;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketCloseDeviceRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayMagSweepEffectReq(
+ TInt aDeviceHandle, CHWRMHaptics::THWRMHapticsMagSweepEffect aEffect,
+ RBuf8& aBuffer )
+ {
+ TVibePacketPlayBasisEffectRequest* pReq =
+ reinterpret_cast<TVibePacketPlayBasisEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdPlayMagSweepEffect;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDuration_7_0 =
+ static_cast<TUint8>( aEffect.iDuration & 0xFF );
+ pReq->iDuration_15_8 =
+ static_cast<TUint8>( ( aEffect.iDuration >> KShiftByte ) & 0xFF );
+ pReq->iDuration_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift2Bytes ) & 0xFF );
+ pReq->iDuration_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift3Bytes ) & 0xFF );
+ pReq->iMagnitude_7_0 =
+ static_cast<TUint8>( aEffect.iMagnitude & 0xFF );
+ pReq->iMagnitude_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShiftByte ) & 0xFF );
+ pReq->iMagnitude_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift2Bytes ) & 0xFF );
+ pReq->iMagnitude_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectTypeStyle =
+ static_cast<TUint8>( ( aEffect.iStyle << 4 ) & 0xF0 );
+ pReq->iPeriod_7_0 = 0x0;
+ pReq->iPeriod_15_8 = 0x0;
+ pReq->iPeriod_23_16 = 0x0;
+ pReq->iPeriod_31_24 = 0x0;
+ pReq->iImpulseTime_7_0 =
+ static_cast<TUint8>( aEffect.iAttackTime & 0xFF );
+ pReq->iImpulseTime_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShiftByte ) & 0xFF );
+ pReq->iImpulseTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift3Bytes ) & 0xFF );
+ pReq->iImpulseLevel_7_0 =
+ static_cast<TUint8>( aEffect.iAttackLevel & 0xFF );
+ pReq->iImpulseLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShiftByte ) & 0xFF );
+ pReq->iImpulseLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeTime_7_0 =
+ static_cast<TUint8>( aEffect.iFadeTime & 0xFF );
+ pReq->iFadeTime_15_8 =
+ static_cast<TUint8>( ( aEffect.iFadeTime >> KShiftByte ) & 0xFF );
+ pReq->iFadeTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeLevel_7_0 =
+ static_cast<TUint8>( aEffect.iFadeLevel & 0xFF );
+ pReq->iFadeLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShiftByte ) & 0xFF );
+ pReq->iFadeLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketPlayBasisEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayPeriodicEffectReq( TInt aDeviceHandle,
+ CHWRMHaptics::THWRMHapticsPeriodicEffect aEffect, RBuf8& aBuffer )
+ {
+ TVibePacketPlayBasisEffectRequest* pReq =
+ reinterpret_cast<TVibePacketPlayBasisEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdPlayPeriodicEffect;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDuration_7_0 =
+ static_cast<TUint8>( aEffect.iDuration & 0xFF );
+ pReq->iDuration_15_8 =
+ static_cast<TUint8>( ( aEffect.iDuration >> KShiftByte ) & 0xFF );
+ pReq->iDuration_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift2Bytes ) & 0xFF );
+ pReq->iDuration_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift3Bytes ) & 0xFF );
+ pReq->iMagnitude_7_0 =
+ static_cast<TUint8>( aEffect.iMagnitude & 0xFF );
+ pReq->iMagnitude_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShiftByte ) & 0xFF );
+ pReq->iMagnitude_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift2Bytes ) & 0xFF );
+ pReq->iMagnitude_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectTypeStyle =
+ static_cast<TUint8>( ( ( aEffect.iStyle << 4 ) & 0xF0 ) | 0x01 );
+ pReq->iPeriod_7_0 =
+ static_cast<TUint8>( aEffect.iPeriod & 0xFF );
+ pReq->iPeriod_15_8 =
+ static_cast<TUint8>( ( aEffect.iPeriod >> KShiftByte ) & 0xFF );
+ pReq->iPeriod_23_16 =
+ static_cast<TUint8>( ( aEffect.iPeriod >> KShift2Bytes ) & 0xFF );
+ pReq->iPeriod_31_24 =
+ static_cast<TUint8>( ( aEffect.iPeriod >> KShift3Bytes ) & 0xFF );
+ pReq->iImpulseTime_7_0 =
+ static_cast<TUint8>( aEffect.iAttackTime & 0xFF );
+ pReq->iImpulseTime_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShiftByte ) & 0xFF );
+ pReq->iImpulseTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift3Bytes ) & 0xFF );
+ pReq->iImpulseLevel_7_0 =
+ static_cast<TUint8>( aEffect.iAttackLevel & 0xFF );
+ pReq->iImpulseLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShiftByte ) & 0xFF );
+ pReq->iImpulseLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeTime_7_0 =
+ static_cast<TUint8>( aEffect.iFadeTime & 0xFF );
+ pReq->iFadeTime_15_8 =
+ static_cast<TUint8>( ( aEffect.iFadeTime >> KShiftByte ) & 0xFF );
+ pReq->iFadeTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeLevel_7_0 =
+ static_cast<TUint8>( aEffect.iFadeLevel & 0xFF );
+ pReq->iFadeLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShiftByte ) & 0xFF );
+ pReq->iFadeLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketPlayBasisEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncModifyPlayingMagSweepEffectReq(
+ TInt aDeviceHandle, TInt aEffectHandle,
+ CHWRMHaptics::THWRMHapticsMagSweepEffect aEffect, RBuf8& aBuffer )
+ {
+ TVibePacketModifyBasisEffectRequest* pReq =
+ reinterpret_cast<TVibePacketModifyBasisEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdModifyPlayingMagSweepEffect;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDuration_7_0 =
+ static_cast<TUint8>( aEffect.iDuration & 0xFF );
+ pReq->iDuration_15_8 =
+ static_cast<TUint8>( ( aEffect.iDuration >> KShiftByte ) & 0xFF );
+ pReq->iDuration_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift2Bytes ) & 0xFF );
+ pReq->iDuration_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift3Bytes ) & 0xFF );
+ pReq->iMagnitude_7_0 =
+ static_cast<TUint8>( aEffect.iMagnitude & 0xFF );
+ pReq->iMagnitude_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShiftByte ) & 0xFF );
+ pReq->iMagnitude_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift2Bytes ) & 0xFF );
+ pReq->iMagnitude_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectTypeStyle =
+ static_cast<TUint8>( ( aEffect.iStyle << 4 ) & 0xF0 );
+ pReq->iPeriod_7_0 = 0x0;
+ pReq->iPeriod_15_8 = 0x0;
+ pReq->iPeriod_23_16 = 0x0;
+ pReq->iPeriod_31_24 = 0x0;
+ pReq->iImpulseTime_7_0 =
+ static_cast<TUint8>( aEffect.iAttackTime & 0xFF );
+ pReq->iImpulseTime_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShiftByte ) & 0xFF );
+ pReq->iImpulseTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift3Bytes ) & 0xFF );
+ pReq->iImpulseLevel_7_0 =
+ static_cast<TUint8>( aEffect.iAttackLevel & 0xFF );
+ pReq->iImpulseLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShiftByte ) & 0xFF );
+ pReq->iImpulseLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeTime_7_0 =
+ static_cast<TUint8>( aEffect.iFadeTime & 0xFF );
+ pReq->iFadeTime_15_8 =
+ static_cast<TUint8>( ( aEffect.iFadeTime >> KShiftByte ) & 0xFF );
+ pReq->iFadeTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeLevel_7_0 =
+ static_cast<TUint8>( aEffect.iFadeLevel & 0xFF );
+ pReq->iFadeLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShiftByte ) & 0xFF );
+ pReq->iFadeLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketModifyBasisEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncModifyPlayingPeriodicEffectReq(
+ TInt aDeviceHandle, TInt aEffectHandle,
+ CHWRMHaptics::THWRMHapticsPeriodicEffect aEffect, RBuf8& aBuffer )
+ {
+ TVibePacketModifyBasisEffectRequest* pReq =
+ reinterpret_cast<TVibePacketModifyBasisEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdModifyPlayingPeriodicEffect;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDuration_7_0 =
+ static_cast<TUint8>( aEffect.iDuration & 0xFF );
+ pReq->iDuration_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShiftByte ) & 0xFF );
+ pReq->iDuration_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift2Bytes ) & 0xFF );
+ pReq->iDuration_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iDuration >> KShift3Bytes ) & 0xFF );
+ pReq->iMagnitude_7_0 =
+ static_cast<TUint8>( aEffect.iMagnitude & 0xFF );
+ pReq->iMagnitude_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShiftByte ) & 0xFF );
+ pReq->iMagnitude_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift2Bytes ) & 0xFF );
+ pReq->iMagnitude_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iMagnitude >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectTypeStyle =
+ static_cast<TUint8>( ( ( aEffect.iStyle << 4 ) & 0xF0 ) | 0x01 );
+ pReq->iPeriod_7_0 =
+ static_cast<TUint8>( aEffect.iPeriod & 0xFF );
+ pReq->iPeriod_15_8 =
+ static_cast<TUint8>( ( aEffect.iPeriod >> KShiftByte ) & 0xFF );
+ pReq->iPeriod_23_16 =
+ static_cast<TUint8>( ( aEffect.iPeriod >> KShift2Bytes ) & 0xFF );
+ pReq->iPeriod_31_24 =
+ static_cast<TUint8>( ( aEffect.iPeriod >> KShift3Bytes ) & 0xFF );
+ pReq->iImpulseTime_7_0 =
+ static_cast<TUint8>( aEffect.iAttackTime & 0xFF );
+ pReq->iImpulseTime_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShiftByte ) & 0xFF );
+ pReq->iImpulseTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackTime >> KShift3Bytes ) & 0xFF );
+ pReq->iImpulseLevel_7_0 =
+ static_cast<TUint8>( aEffect.iAttackLevel & 0xFF );
+ pReq->iImpulseLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShiftByte ) & 0xFF );
+ pReq->iImpulseLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iImpulseLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iAttackLevel >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeTime_7_0 =
+ static_cast<TUint8>( aEffect.iFadeTime & 0xFF );
+ pReq->iFadeTime_15_8 =
+ static_cast<TUint8>( ( aEffect.iFadeTime >> KShiftByte ) & 0xFF );
+ pReq->iFadeTime_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeTime_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeTime >> KShift3Bytes ) & 0xFF );
+ pReq->iFadeLevel_7_0 =
+ static_cast<TUint8>( aEffect.iFadeLevel & 0xFF );
+ pReq->iFadeLevel_15_8 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShiftByte ) & 0xFF );
+ pReq->iFadeLevel_23_16 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift2Bytes ) & 0xFF );
+ pReq->iFadeLevel_31_24 =
+ static_cast<TUint8>(
+ ( aEffect.iFadeLevel >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketModifyBasisEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPausePlayingEffectReq(
+ TInt aDeviceHandle, TInt aEffectHandle, RBuf8& aBuffer )
+ {
+ TVibePacketPausePlayingEffectRequest* pReq =
+ reinterpret_cast<TVibePacketPausePlayingEffectRequest*>
+ (const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdPausePlayingEffect;
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketPausePlayingEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncResumePausedEffectReq(
+ TInt aDeviceHandle, TInt aEffectHandle, RBuf8& aBuffer )
+ {
+ TVibePacketResumePlayingEffectRequest* pReq =
+ reinterpret_cast<TVibePacketResumePlayingEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdResumePausedEffect;
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketResumePlayingEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncStopPlayingEffectReq(
+ TInt aDeviceHandle, TInt aEffectHandle, RBuf8& aBuffer )
+ {
+ TVibePacketStopEffectRequest* pReq =
+ reinterpret_cast<TVibePacketStopEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdStopEffect;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketStopEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncStopAllPlayingEffectsReq(
+ TInt aDeviceHandle, RBuf8& aBuffer )
+ {
+ TVibePacketStopAllEffectsRequest* pReq =
+ reinterpret_cast<TVibePacketStopAllEffectsRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdStopAllEffects;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketStopAllEffectsRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayEffectIncludeEffectDataReq(
+ TInt aDeviceHandle, const TDesC8& aData, TInt aEffectIndex,
+ RBuf8& aBuffer )
+ {
+ iDataBuf.Close();
+ TInt err = iDataBuf.Create( aData.Size() + KMsgDefaultSize );
+
+ TVibePacketPlayIVTEffectRequest* pReq =
+ reinterpret_cast<TVibePacketPlayIVTEffectRequest*>
+ ( const_cast<TUint8*>( iDataBuf.Ptr() ) );
+
+ if ( !err && pReq &&
+ ( ( aData.Size() + KMsgDefaultSize ) <= KVibePacketMaxSize ) )
+ {
+ pReq->iCmdCode = KVibeCmdPlayIVTEffectIncludeData;
+ pReq->iIvtDataSize = aData.Size();
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iIvtIndex_7_0 =
+ static_cast<TUint8>( aEffectIndex & 0xFF );
+ pReq->iIvtIndex_15_8 =
+ static_cast<TUint8>( ( aEffectIndex >> KShiftByte ) & 0xFF );
+ pReq->iRepeat = 0x0;
+
+ memcpy( pReq->iIvtData, aData.Ptr(), aData.Size() );
+
+ // the data buffer length is set to the size of the request packet
+ // plus size of the data minus 1 (minus 1, because first byte of the
+ // data is already calculated as part of the request packet size).
+ iDataBuf.SetLength(
+ sizeof( TVibePacketPlayIVTEffectRequest ) + aData.Size() -1 );
+ }
+ else
+ {
+ iDataBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iDataBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayEffectRepeatIncludeEffectDataReq(
+ TInt aDeviceHandle, const TDesC8& aData, TInt aEffectIndex,
+ TUint8 aRepeat, RBuf8& aBuffer )
+ {
+ iDataBuf.Close();
+ TInt err = iDataBuf.Create( aData.Size() + KMsgDefaultSize );
+
+ TVibePacketPlayIVTEffectRequest* pReq =
+ reinterpret_cast<TVibePacketPlayIVTEffectRequest*>
+ ( const_cast<TUint8*>( iDataBuf.Ptr() ) );
+
+ if ( !err && pReq &&
+ ( ( aData.Size() + KMsgDefaultSize ) <= KVibePacketMaxSize ) )
+ {
+ pReq->iCmdCode = KVibeCmdPlayIVTEffectIncludeData;
+ pReq->iIvtDataSize = aData.Size();
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iIvtIndex_7_0 =
+ static_cast<TUint8>( aEffectIndex & 0xFF );
+ pReq->iIvtIndex_15_8 =
+ static_cast<TUint8>( ( aEffectIndex >> KShiftByte ) & 0xFF );
+ pReq->iRepeat = aRepeat;
+
+ memcpy( pReq->iIvtData, aData.Ptr(), aData.Size() );
+
+ // the data buffer length is set to the size of the request packet
+ // plus size of the data minus 1 (minus 1, because first byte of the
+ // data is already calculated as part of the request packet size).
+ iDataBuf.SetLength(
+ sizeof( TVibePacketPlayIVTEffectRequest ) + aData.Size() -1 );
+ }
+ else
+ {
+ iDataBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iDataBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayEffectRepeatNoDataReq(
+ TInt aDeviceHandle, TInt aEffectIndex, TUint8 aRepeat, RBuf8& aBuffer )
+ {
+ TVibePacketPlayIVTEffectRequest* pReq =
+ reinterpret_cast<TVibePacketPlayIVTEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdPlayIVTEffectNoData;
+ pReq->iIvtDataSize = 0x0;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iIvtIndex_7_0 =
+ static_cast<TUint8>( aEffectIndex & 0xFF );
+ pReq->iIvtIndex_15_8 =
+ static_cast<TUint8>( ( aEffectIndex >> KShiftByte ) & 0xFF );
+ pReq->iRepeat = aRepeat;
+ iReqBuf.SetLength( sizeof( TVibePacketPlayIVTEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayEffectNoDataReq(
+ TInt aDeviceHandle, TInt aEffectIndex, RBuf8& aBuffer )
+ {
+ TVibePacketPlayIVTEffectRequest* pReq =
+ reinterpret_cast<TVibePacketPlayIVTEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdPlayIVTEffectNoData;
+ pReq->iIvtDataSize = 0x0;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iIvtIndex_7_0 =
+ static_cast<TUint8>( aEffectIndex & 0xFF );
+ pReq->iIvtIndex_15_8 =
+ static_cast<TUint8>( ( aEffectIndex >> KShiftByte ) & 0xFF );
+ pReq->iRepeat = 0x0;
+ iReqBuf.SetLength( sizeof( TVibePacketPlayIVTEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncCreateStreamingEffectReq(
+ TInt aDeviceHandle, RBuf8& aBuffer )
+ {
+ TVibePacketCreateStreamingEffectRequest* pReq =
+ reinterpret_cast<TVibePacketCreateStreamingEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdCreateStreamingEffect;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength(
+ sizeof( TVibePacketCreateStreamingEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncDestroyStreamingEffectReq(
+ TInt aDeviceHandle, TInt aEffectHandle, RBuf8& aBuffer )
+ {
+ TVibePacketDestroyStreamingEffectRequest* pReq =
+ reinterpret_cast<TVibePacketDestroyStreamingEffectRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdDestroyStreamingEffect;
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength(
+ sizeof( TVibePacketDestroyStreamingEffectRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayStreamingSampleReq(
+ TInt aDeviceHandle, const TDesC8& aStreamingSample, TInt aEffectHandle,
+ RBuf8& aBuffer )
+ {
+ return EncPlayStreamingSampleInternal( aDeviceHandle,
+ aEffectHandle,
+ aStreamingSample,
+ 0, aBuffer );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayStreamingSampleWithOffsetReq(
+ TInt aDeviceHandle, const TDesC8& aStreamingSample, TInt aOffsetTime,
+ TInt aEffectHandle, RBuf8& aBuffer )
+ {
+ return EncPlayStreamingSampleInternal( aDeviceHandle,
+ aEffectHandle,
+ aStreamingSample,
+ aOffsetTime,
+ aBuffer );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetEffectStateReq(
+ TInt aDeviceHandle, TInt aEffectHandle, RBuf8& aBuffer )
+ {
+ TVibePacketGetEffectStateRequest* pReq =
+ reinterpret_cast<TVibePacketGetEffectStateRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdGetEffectState;
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof( TVibePacketGetEffectStateRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncSetDevicePropertyBoolReq(
+ TInt aDeviceHandle, TBool aDevPropValue, TInt aDevPropType,
+ RBuf8& aBuffer )
+ {
+ TVibePacketSetDevicePropertyRequest* pReq =
+ reinterpret_cast<TVibePacketSetDevicePropertyRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdSetDeviceProperty;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iPropertyType_7_0 =
+ static_cast<TUint8>( aDevPropType & 0xFF );
+ pReq->iPropertyType_15_8 =
+ static_cast<TUint8>( ( aDevPropType >> KShiftByte ) & 0xFF );
+ pReq->iPropertyType_23_16 =
+ static_cast<TUint8>( ( aDevPropType >> KShift2Bytes ) & 0xFF );
+ pReq->iPropertyType_31_24 =
+ static_cast<TUint8>( ( aDevPropType >> KShift3Bytes ) & 0xFF );
+ pReq->iPropertyValueType =
+ static_cast<TUint8>( KVibeValuetypeBool );
+ pReq->iSize = 1; // size of bool data is 1 byte
+ pReq->iPropertyValue[0] =
+ static_cast<TUint8>( aDevPropValue );
+ iReqBuf.SetLength( sizeof( TVibePacketSetDevicePropertyRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncSetDevicePropertyIntReq(
+ TInt aDeviceHandle, TInt aDevPropValue, TInt aDevPropType,
+ RBuf8& aBuffer )
+ {
+ TVibePacketSetDevicePropertyRequest* pReq =
+ reinterpret_cast<TVibePacketSetDevicePropertyRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdSetDeviceProperty;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iPropertyType_7_0 =
+ static_cast<TUint8>( aDevPropType & 0xFF );
+ pReq->iPropertyType_15_8 =
+ static_cast<TUint8>( ( aDevPropType >> KShiftByte ) & 0xFF );
+ pReq->iPropertyType_23_16 =
+ static_cast<TUint8>( ( aDevPropType >> KShift2Bytes ) & 0xFF );
+ pReq->iPropertyType_31_24 =
+ static_cast<TUint8>( ( aDevPropType >> KShift3Bytes ) & 0xFF );
+ pReq->iPropertyValueType =
+ static_cast<TUint8>( KVibeValuetypeInt32 );
+ pReq->iSize = 4; // Size of int32 value is 4 bytes
+ pReq->iPropertyValue[0] =
+ static_cast<TUint8>( aDevPropValue & 0xFF );
+ pReq->iPropertyValue[1] =
+ static_cast<TUint8>( ( aDevPropValue >> KShiftByte ) & 0xFF );
+ pReq->iPropertyValue[2] =
+ static_cast<TUint8>( ( aDevPropValue >> KShift2Bytes ) & 0xFF );
+ pReq->iPropertyValue[3] =
+ static_cast<TUint8>( ( aDevPropValue >> KShift3Bytes ) & 0xFF );
+ // the data buffer length is set to the size of the request packet
+ // plus size of the data minus 1. Since int32 type data is always
+ // 4 bytes, the extra size needed for data is 3 bytes (4-1).
+ iReqBuf.SetLength(
+ sizeof( TVibePacketSetDevicePropertyRequest ) +3 );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncSetDevicePropertyStringReq(
+ TInt aDeviceHandle, const TDesC8& aDevPropValue, TInt aDevPropType,
+ RBuf8& aBuffer )
+ {
+ iDataBuf.Close();
+ TInt err = iDataBuf.Create( aDevPropValue.Size() + KMsgDefaultSize );
+
+ TVibePacketSetDevicePropertyRequest* pReq =
+ reinterpret_cast<TVibePacketSetDevicePropertyRequest*>
+ ( const_cast<TUint8*>( iDataBuf.Ptr() ) );
+
+ if ( !err && pReq &&
+ ( ( aDevPropValue.Size() + KMsgDefaultSize ) <= KVibePacketMaxSize ) )
+ {
+ pReq->iCmdCode = KVibeCmdSetDeviceProperty;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iPropertyType_7_0 =
+ static_cast<TUint8>( aDevPropType & 0xFF );
+ pReq->iPropertyType_15_8 =
+ static_cast<TUint8>( ( aDevPropType >> KShiftByte ) & 0xFF );
+ pReq->iPropertyType_23_16 =
+ static_cast<TUint8>( ( aDevPropType >> KShift2Bytes ) & 0xFF );
+ pReq->iPropertyType_31_24 =
+ static_cast<TUint8>( ( aDevPropType >> KShift3Bytes ) & 0xFF );
+ pReq->iPropertyValueType =
+ static_cast<TUint8>( KVibeValuetypeString );
+ pReq->iSize =
+ static_cast<TUint8>( aDevPropValue.Size() );
+
+ memcpy ( pReq->iPropertyValue,
+ reinterpret_cast<TUint8*>(
+ const_cast<TUint8*>( aDevPropValue.Ptr() ) ),
+ aDevPropValue.Size() );
+
+ // the data buffer length is set to the size of the request packet
+ // plus size of the data minus 1 (minus 1, because first byte of the
+ // data is already calculated as part of the request packet size).
+ iDataBuf.SetLength(
+ sizeof( TVibePacketSetDevicePropertyRequest ) + pReq->iSize -1 );
+ }
+ else
+ {
+ iDataBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iDataBuf );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncSetPlatformLicenseKeyReq(
+ TInt aDeviceHandle, RBuf8& aBuffer )
+ {
+ TInt ret = EncSetDevicePropertyStringReq( aDeviceHandle, KNullDesC8,
+ CHWRMHaptics::EHWRMHapticsLicensekey,
+ aBuffer );
+
+ // change the command id from general device property to setting
+ // license key
+ if ( ret == KErrNone )
+ {
+ TVibePacketSetDevicePropertyRequest* tmpReq =
+ reinterpret_cast<TVibePacketSetDevicePropertyRequest*>
+ ( const_cast<TUint8*>( aBuffer.Ptr() ) );
+
+ if ( tmpReq )
+ {
+ tmpReq->iCmdCode = KVibeCmdSetLicense;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetDevicePropertyBoolReq(
+ TInt aDeviceHandle, TInt aDevPropType, RBuf8& aBuffer )
+ {
+ return EncGetDevicePropertyReqInternal(
+ KVibeValuetypeBool, aDeviceHandle, aDevPropType, aBuffer );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetDevicePropertyIntReq(
+ TInt aDeviceHandle, TInt aDevPropType, RBuf8& aBuffer )
+ {
+ return EncGetDevicePropertyReqInternal(
+ KVibeValuetypeInt32, aDeviceHandle, aDevPropType, aBuffer );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetDevicePropertyStringReq(
+ TInt aDeviceHandle, TInt aDevPropType, RBuf8& aBuffer )
+ {
+ return EncGetDevicePropertyReqInternal(
+ KVibeValuetypeString, aDeviceHandle, aDevPropType, aBuffer );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetDeviceCapabilityIntReq(
+ TInt aDeviceHandle, TInt aDevCapType, RBuf8& aBuffer )
+ {
+ return EncGetDeviceCapabilityReqInternal( KVibeValuetypeInt32,
+ aDeviceHandle,
+ aDevCapType,
+ aBuffer );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetDeviceCapabilityStringReq(
+ TInt aDeviceHandle, TInt aDevCapType, RBuf8& aBuffer )
+ {
+ return EncGetDeviceCapabilityReqInternal( KVibeValuetypeString,
+ aDeviceHandle,
+ aDevCapType,
+ aBuffer );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CDesC8ArraySeg* CHWRMHapticsVibePacketizer::DecodeMessageL(
+ const TDesC8& aData, TInt& aStatus )
+ {
+ // Clear Array before use
+ iReturnArray->Reset();
+
+ TVibePacket* pRsp =
+ reinterpret_cast<TVibePacket*>( const_cast<TUint8*>( aData.Ptr() ) );
+
+ switch( pRsp->iSimpleRsp.iCmdCode )
+ {
+ case KVibeCmdOpenDevice:
+ {
+ aStatus = pRsp->iOpenDeviceRsp.iVibeStatus;
+ iDeviceHandle =
+ pRsp->iOpenDeviceRsp.iDeviceHandle_7_0 |
+ pRsp->iOpenDeviceRsp.iDeviceHandle_15_8 << KShiftByte |
+ pRsp->iOpenDeviceRsp.iDeviceHandle_23_16 << KShift2Bytes |
+ pRsp->iOpenDeviceRsp.iDeviceHandle_31_24 << KShift3Bytes;
+
+ TPckg<TInt> deviceHandlePckg( iDeviceHandle );
+
+ iReturnArray->AppendL( deviceHandlePckg );
+ break;
+ }
+
+ case KVibeCmdCloseDevice:
+ {
+ aStatus = pRsp->iCloseDeviceRsp.iVibeStatus;
+ iDeviceHandle = KErrNotFound;
+ break;
+ }
+
+ case KVibeCmdSetDeviceProperty: // flow through
+ case KVibeCmdSetLicense:
+ {
+ aStatus = pRsp->iSetDevicePropertyRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdGetDeviceProperty:
+ {
+ TInt propertyValueType =
+ pRsp->iGetDevicePropertyRsp.iPropertyValueType;
+
+ switch( propertyValueType )
+ {
+ case KVibeValuetypeBool:
+ {
+ aStatus = pRsp->iGetDevicePropertyRsp.iVibeStatus;
+
+ TUint8* intArr =
+ pRsp->iGetDevicePropertyRsp.iPropertyValue;
+
+ TUint value = ( TUint( intArr[0] ) );
+ TPckg<TBool> devicePropertyValuePckg( value );
+
+ iReturnArray->AppendL( devicePropertyValuePckg );
+ break;
+ }
+ case KVibeValuetypeInt32:
+ {
+ aStatus = pRsp->iGetDevicePropertyRsp.iVibeStatus;
+
+ TUint8* intArr =
+ pRsp->iGetDevicePropertyRsp.iPropertyValue;
+
+ TUint value = ( TUint( intArr[0] ) )
+ | ( TUint( intArr[1] ) << KShiftByte )
+ | ( TUint( intArr[2] ) << KShift2Bytes )
+ | ( TUint( intArr[3] ) << KShift3Bytes );
+ TPckg<TInt> devicePropertyValuePckg( value );
+
+ iReturnArray->AppendL( devicePropertyValuePckg );
+ break;
+ }
+
+ case KVibeValuetypeString:
+ {
+ aStatus = pRsp->iGetDevicePropertyRsp.iVibeStatus;
+ TInt stringSize = pRsp->iGetDevicePropertyRsp.iSize;
+
+ if( stringSize > MaxPropertyStringLength() )
+ {
+ // truncate string if too long
+ stringSize = MaxPropertyStringLength();
+ }
+
+ TUint8* text = reinterpret_cast<TUint8*>(
+ pRsp->iGetDevicePropertyRsp.iPropertyValue );
+ TPtrC8 ptr( text, stringSize );
+
+ iReturnArray->AppendL( ptr );
+ break;
+ }
+ default:
+ break;
+ }// switch
+ break;
+ }
+
+ case KVibeCmdPlayMagSweepEffect: // flow through
+ case KVibeCmdPlayPeriodicEffect:
+ {
+ aStatus = pRsp->iPlayBasisEffectRsp.iVibeStatus;
+ TInt effectHandle =
+ pRsp->iPlayBasisEffectRsp.iEffectHandle_7_0 |
+ pRsp->iPlayBasisEffectRsp.iEffectHandle_15_8 << KShiftByte |
+ pRsp->iPlayBasisEffectRsp.iEffectHandle_23_16 << KShift2Bytes |
+ pRsp->iPlayBasisEffectRsp.iEffectHandle_31_24 << KShift3Bytes;
+
+ TPckg<TInt> effectHandlePckg( effectHandle );
+ iReturnArray->AppendL( effectHandlePckg );
+ break;
+ }
+
+ case KVibeCmdPlayIVTEffectIncludeData: // flow through
+ case KVibeCmdPlayIVTEffectNoData:
+ {
+ aStatus = pRsp->iPlayIVTEffectRsp.iVibeStatus;
+ TInt effectHandle =
+ pRsp->iPlayIVTEffectRsp.iEffectHandle_7_0 |
+ pRsp->iPlayIVTEffectRsp.iEffectHandle_15_8 << KShiftByte |
+ pRsp->iPlayIVTEffectRsp.iEffectHandle_23_16 << KShift2Bytes |
+ pRsp->iPlayIVTEffectRsp.iEffectHandle_31_24 << KShift3Bytes;
+
+ TPckg<TInt> effectHandlePckg( effectHandle );
+ iReturnArray->AppendL( effectHandlePckg );
+ break;
+ }
+
+ case KVibeCmdModifyPlayingMagSweepEffect: // flow through
+ case KVibeCmdModifyPlayingPeriodicEffect:
+ {
+ aStatus = pRsp->iModifyBasisEffectRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdStopEffect:
+ {
+ aStatus = pRsp->iStopEffectRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdStopAllEffects:
+ {
+ aStatus = pRsp->iStopAllEffectsRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdGetDeviceCapabilities:
+ {
+ TInt capabilityValueType =
+ pRsp->iGetDeviceCapsRsp.iCapabilityValueType;
+
+ switch( capabilityValueType )
+ {
+ case KVibeValuetypeInt32:
+ {
+ aStatus = pRsp->iGetDeviceCapsRsp.iVibeStatus;
+ TUint8* intArr =
+ pRsp->iGetDeviceCapsRsp.iCapabilityValue;
+
+ TUint value = ( TUint( intArr[0] ) )
+ | ( TUint( intArr[1] ) << KShiftByte )
+ | ( TUint( intArr[2] ) << KShift2Bytes )
+ | ( TUint( intArr[3] ) << KShift3Bytes );
+
+ TPckg<TInt> deviceCapabilityValuePckg( value );
+ iReturnArray->AppendL( deviceCapabilityValuePckg );
+ break;
+ }
+
+ case KVibeValuetypeString:
+ {
+ aStatus = pRsp->iGetDeviceCapsRsp.iVibeStatus;
+ TUint8* text =
+ reinterpret_cast<TUint8*>(
+ pRsp->iGetDeviceCapsRsp.iCapabilityValue );
+ TInt stringSize ( pRsp->iGetDeviceCapsRsp.iSize );
+
+ if( stringSize > MaxCapabilityStringLength() )
+ {
+ // truncate string if too long
+ stringSize = MaxCapabilityStringLength();
+ }
+ TPtrC8 ptr( text, stringSize );
+
+ iReturnArray->AppendL( ptr );
+ break;
+ }
+ default:
+ break;
+ }// switch
+ break;
+ }
+
+ case KVibeCmdPlayStreamingSample:
+ {
+ aStatus = pRsp->iPlayStreamingSampleRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdCreateStreamingEffect:
+ {
+ aStatus = pRsp->iCreateStreamingEffectRsp.iVibeStatus;
+
+ TInt effectHandle =
+ pRsp->iCreateStreamingEffectRsp.iEffectHandle_7_0 |
+ pRsp->iCreateStreamingEffectRsp.iEffectHandle_15_8
+ << KShiftByte |
+ pRsp->iCreateStreamingEffectRsp.iEffectHandle_23_16
+ << KShift2Bytes |
+ pRsp->iCreateStreamingEffectRsp.iEffectHandle_31_24
+ << KShift3Bytes;
+
+ TPckg<TInt> effectHandlePckg( effectHandle );
+ iReturnArray->AppendL( effectHandlePckg );
+ break;
+ }
+
+ case KVibeCmdDestroyStreamingEffect:
+ {
+ aStatus = pRsp->iDestroyStreamingEffectRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdPausePlayingEffect:
+ {
+ aStatus = pRsp->iPausePlayingEffectRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdResumePausedEffect:
+ {
+ aStatus = pRsp->iResumePausedEffectRsp.iVibeStatus;
+ break;
+ }
+
+ case KVibeCmdGetEffectState:
+ {
+ aStatus = pRsp->iGetEffectStateRsp.iVibeStatus;
+ TInt effectState = pRsp->iGetEffectStateRsp.iEffectState;
+
+ TPckg<TInt> effectStatePckg( effectState );
+ iReturnArray->AppendL( effectStatePckg );
+ break;
+ }
+
+ default:
+ User::Leave( KErrGeneral );
+ }
+
+ // convert vibe error code to Symbian error code
+ aStatus = MapError( aStatus );
+
+ return iReturnArray;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::DeviceHandle()
+ {
+ return iDeviceHandle;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::InfiniteRepeat()
+ {
+ return static_cast<TInt>( KVibeRepeatCountInfinite );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::InfiniteDuration()
+ {
+ return KVibeTimeInfinite;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::MaxEffectNameLength()
+ {
+ return KVibeMaxEffectNameLength;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::MaxDeviceNameLength()
+ {
+ return KVibeMaxDeviceNameLength;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::MaxCapabilityStringLength()
+ {
+ return KVibeMaxCapabilityStringLength;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::MaxPropertyStringLength()
+ {
+ return KVibeMaxPropertyStringLength;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::MaxStreamingSampleSize()
+ {
+ return KVibeMaxStreamingSampleSize;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::DefaultDevicePriority()
+ {
+ return KVibeDevicePriorityDefault;
+ }
+
+// ---------------------------------------------------------------------------
+// Internal helper method. Fills Get Device Capability request data.
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetDeviceCapabilityReqInternal(
+ TInt aValueType, TInt aDeviceHandle, TInt aDevCapType, RBuf8& aBuffer )
+ {
+ TVibePacketGetDeviceCapabilitiesRequest* pReq =
+ reinterpret_cast<TVibePacketGetDeviceCapabilitiesRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdGetDeviceCapabilities;
+ pReq->iCapabilityValueType =
+ static_cast<TUint8>( aValueType );
+ pReq->iDeviceIndex_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceIndex_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceIndex_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceIndex_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iCapabilityType_7_0 =
+ static_cast<TUint8>( aDevCapType & 0xFF );
+ pReq->iCapabilityType_15_8 =
+ static_cast<TUint8>( ( aDevCapType >> KShiftByte ) & 0xFF );
+ pReq->iCapabilityType_23_16 =
+ static_cast<TUint8>( ( aDevCapType >> KShift2Bytes ) & 0xFF );
+ pReq->iCapabilityType_31_24 =
+ static_cast<TUint8>( ( aDevCapType >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength(
+ sizeof ( TVibePacketGetDeviceCapabilitiesRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+// Internal helper method. Fills Get Device Property request data.
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncGetDevicePropertyReqInternal(
+ TInt aValueType, TInt aDeviceHandle, TInt aDevPropType, RBuf8& aBuffer )
+ {
+ TVibePacketGetDevicePropertyRequest* pReq =
+ reinterpret_cast<TVibePacketGetDevicePropertyRequest*>
+ ( const_cast<TUint8*>( iReqBuf.Ptr() ) );
+
+ if ( pReq )
+ {
+ pReq->iCmdCode = KVibeCmdGetDeviceProperty;
+ pReq->iPropertyValueType =
+ static_cast<TUint8>( aValueType );
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iPropertyType_7_0 =
+ static_cast<TUint8>( aDevPropType & 0xFF );
+ pReq->iPropertyType_15_8 =
+ static_cast<TUint8>( ( aDevPropType >> KShiftByte ) & 0xFF );
+ pReq->iPropertyType_23_16 =
+ static_cast<TUint8>( ( aDevPropType >> KShift2Bytes ) & 0xFF );
+ pReq->iPropertyType_31_24 =
+ static_cast<TUint8>( ( aDevPropType >> KShift3Bytes ) & 0xFF );
+ iReqBuf.SetLength( sizeof ( TVibePacketGetDevicePropertyRequest ) );
+ }
+ else
+ {
+ iReqBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iReqBuf );
+ }
+
+// ---------------------------------------------------------------------------
+// Internal helper method. Fills Play Streaming Sample request data.
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::EncPlayStreamingSampleInternal(
+ TInt aDeviceHandle, TInt aEffectHandle, const TDesC8& aStreamingSample,
+ TInt aOffsetTime, RBuf8& aBuffer )
+ {
+ iDataBuf.Close();
+ TInt err = iDataBuf.Create( aStreamingSample.Size() + KMsgDefaultSize );
+
+ TVibePacketPlayStreamingSampleRequest* pReq =
+ reinterpret_cast<TVibePacketPlayStreamingSampleRequest*>
+ ( const_cast<TUint8*>( iDataBuf.Ptr() ) );
+
+ if ( !err && pReq &&
+ ( ( aStreamingSample.Size() + KMsgDefaultSize ) <=
+ KVibePacketMaxSize ) )
+ {
+ pReq->iCmdCode = KVibeCmdPlayStreamingSample;
+ pReq->iDeviceHandle_7_0 =
+ static_cast<TUint8>( aDeviceHandle & 0xFF );
+ pReq->iDeviceHandle_15_8 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShiftByte ) & 0xFF );
+ pReq->iDeviceHandle_23_16 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iDeviceHandle_31_24 =
+ static_cast<TUint8>( ( aDeviceHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iEffectHandle_7_0 =
+ static_cast<TUint8>( aEffectHandle & 0xFF );
+ pReq->iEffectHandle_15_8 =
+ static_cast<TUint8>( ( aEffectHandle >> KShiftByte ) & 0xFF );
+ pReq->iEffectHandle_23_16 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift2Bytes ) & 0xFF );
+ pReq->iEffectHandle_31_24 =
+ static_cast<TUint8>( ( aEffectHandle >> KShift3Bytes ) & 0xFF );
+ pReq->iSize = static_cast<TUint8>( aStreamingSample.Size() );
+ pReq->iEffectOffsetTime_7_0 =
+ static_cast<TUint8>( aOffsetTime & 0xFF );
+ pReq->iEffectOffsetTime_15_8 =
+ static_cast<TUint8>( ( aOffsetTime >> KShiftByte ) & 0xFF );
+
+ memcpy( pReq->iStreamingData,
+ reinterpret_cast<TUint8*>(
+ const_cast<TUint8*>( aStreamingSample.Ptr() ) ),
+ aStreamingSample.Size() );
+
+ iDataBuf.SetLength(
+ sizeof ( TVibePacketPlayStreamingSampleRequest )
+ + aStreamingSample.Size() -1 );
+ }
+ else
+ {
+ iDataBuf.SetLength( 0 );
+ }
+
+ return aBuffer.Create( iDataBuf );
+ }
+
+// ---------------------------------------------------------------------------
+// Maps Vibe error code to Symbian error code.
+// ---------------------------------------------------------------------------
+//
+TInt CHWRMHapticsVibePacketizer::MapError( TInt aVibeError )
+ {
+ TInt error = KErrNone;
+
+ switch ( aVibeError )
+ {
+ case KVibeErrAlreadyInitialized:
+ {
+ error = KErrAlreadyExists;
+ break;
+ }
+
+ case KVibeErrNotInitialized:
+ {
+ error = KErrNotReady;
+ break;
+ }
+
+ case KVibeWarningNotPlaying: // flow through
+ case KVibeErrInvalidArgument:
+ {
+ error = KErrArgument;
+ break;
+ }
+
+ case KVibeErrFail:
+ {
+ error = KErrGeneral;
+ break;
+ }
+
+ case KVibeErrIncompatibleEffectType: // flow through
+ case KVibeErrIncompatibleCapabilityType: // flow through
+ case KVibeErrIncompatiblePropertyType:
+ {
+ error = KErrNotSupported;
+ break;
+ }
+
+ case KVibeErrDeviceNeedsLicense:
+ {
+ error = KErrAccessDenied;
+ break;
+ }
+
+ case KVibeErrNotEnoughMemory:
+ {
+ error = KErrNoMemory;
+ break;
+ }
+
+ case KVibeErrServiceNotRunning:
+ {
+ error = KErrNotReady;
+ break;
+ }
+
+ case KVibeErrInsufficientPriority:
+ {
+ error = KErrAccessDenied;
+ break;
+ }
+
+ case KVibeErrServiceBusy:
+ {
+ error = KErrInUse;
+ break;
+ }
+
+ case KVibeStatusSuccess:
+ {
+ error = KErrNone;
+ break;
+ }
+
+ default:
+ {
+ // All the warning codes, except KVibeWarningNotPlaying
+ // are handled here. Thus they are converted to KErrNone.
+ break;
+ }
+ }
+
+ return error;
+ }
+
+// ---------------------------------------------------------------------------
+// ImplementationTable[]
+// ---------------------------------------------------------------------------
+//
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( 0x20021207, CHWRMHapticsVibePacketizer::NewL )
+ };
+
+// ---------------------------------------------------------------------------
+// TImplementationProxy* ImplementationGroupProxy()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }
+
+// End of file