hwrmhaptics/hapticspacketizer/plugins/hapticsvibepacketizerplugin/src/hwrmhapticsvibepacketizer.cpp
changeset 0 4e1aa6a622a0
--- /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