# HG changeset patch # User William Roberts # Date 1279812962 -3600 # Node ID 87195b5246798d5c5ef062522def935b3e5d70bf # Parent 29fd388ec5e90b688207f409a4baf5b271a0280c# Parent 89310418a649c62de7fa54c06f58c6be90d1a8a4 Catchup to latest Symbian^4 diff -r 29fd388ec5e9 -r 87195b524679 hapticsservices_pub/tactile_feedback_client_api/inc/touchfeedback.h --- a/hapticsservices_pub/tactile_feedback_client_api/inc/touchfeedback.h Fri Jun 11 16:24:59 2010 +0100 +++ b/hapticsservices_pub/tactile_feedback_client_api/inc/touchfeedback.h Thu Jul 22 16:36:02 2010 +0100 @@ -694,6 +694,25 @@ TTouchFeedbackType aFeedbackType, const TPointerEvent& aPointerEvent ) = 0; + /** + * Gives direct feedback. + * + * Notice that the feedback might not be actually played, if + * for example user has disabled the feedback from the settings. + * + * This function always causes a synchronous client-server transaction, + * and potentially flushing of window server client-side buffer. Using this + * overload it is also possible to disable unwanted feedback (vibra/audio) + * by giving only wanted feedback type as parameter. + * + * @since S60 5.2 + * @param aType - The logical feedback type to play. + * @param aFeedbackType - Feedback types to be played as a bitmask + * combination of enumeration items from + * TTouchFeedbackType + */ + virtual void InstantFeedback( TTouchLogicalFeedback aType, + TTouchFeedbackType aFeedbackType ) = 0; }; diff -r 29fd388ec5e9 -r 87195b524679 hapticsservices_pub/tactile_feedback_client_api/inc/touchlogicalfeedback.h --- a/hapticsservices_pub/tactile_feedback_client_api/inc/touchlogicalfeedback.h Fri Jun 11 16:24:59 2010 +0100 +++ b/hapticsservices_pub/tactile_feedback_client_api/inc/touchlogicalfeedback.h Thu Jul 22 16:36:02 2010 +0100 @@ -97,7 +97,8 @@ ETouchFeedbackRotateStep, ETouchFeedbackSensitiveSlider, ETouchFeedbackStopFlick, - ETouchFeedbackLongPress + ETouchFeedbackLongPress, + ETouchFeedbackLongTap }; /** diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilearearegistry/inc/tactileinternaldatatypes.h --- a/tactilefeedback/tactilearearegistry/inc/tactileinternaldatatypes.h Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilearearegistry/inc/tactileinternaldatatypes.h Thu Jul 22 16:36:02 2010 +0100 @@ -24,6 +24,7 @@ #include +#include #include diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilearearegistry/src/tactilearearegistry.cpp --- a/tactilefeedback/tactilearearegistry/src/tactilearearegistry.cpp Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilearearegistry/src/tactilearearegistry.cpp Thu Jul 22 16:36:02 2010 +0100 @@ -158,6 +158,8 @@ const TTactileFeedbackDisconnectData& aData ) { // #1 + iTactileSemaphore.Wait(); + for ( TInt i=0; i < iChunkArray.Count(); i++ ) { if ( iChunkArray[i].iWindowGroupId == aData.iWindowGroupId ) @@ -170,6 +172,8 @@ break; } } + + iTactileSemaphore.Signal(); } diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackclient/cenrep/2000B494.txt Binary file tactilefeedback/tactilefeedbackclient/cenrep/2000B494.txt has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackclient/conf/tactilefeedback.confml Binary file tactilefeedback/tactilefeedbackclient/conf/tactilefeedback.confml has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackclient/conf/tactilefeedback_2000B494.crml Binary file tactilefeedback/tactilefeedbackclient/conf/tactilefeedback_2000B494.crml has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackclient/inc/touchfeedbackimpl.h --- a/tactilefeedback/tactilefeedbackclient/inc/touchfeedbackimpl.h Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackclient/inc/touchfeedbackimpl.h Thu Jul 22 16:36:02 2010 +0100 @@ -305,6 +305,12 @@ TTouchFeedbackType aFeedbackType, const TPointerEvent& aPointerEvent ); + /** + * @see MTouchFeedback. + */ + void InstantFeedback( TTouchLogicalFeedback aType, + TTouchFeedbackType aFeedbackType ); + private: /** * Constructor. diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackclient/src/touchfeedbackimpl.cpp --- a/tactilefeedback/tactilefeedbackclient/src/touchfeedbackimpl.cpp Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackclient/src/touchfeedbackimpl.cpp Thu Jul 22 16:36:02 2010 +0100 @@ -1146,6 +1146,35 @@ } // --------------------------------------------------------------------------- +// CTouchFeedbackImpl::InstantFeedback +// --------------------------------------------------------------------------- +// +void CTouchFeedbackImpl::InstantFeedback( TTouchLogicalFeedback aType, + TTouchFeedbackType aFeedbackType ) + { + if ( iClient && ( iAudioEnabledForThisApp || iVibraEnabledForThisApp ) ) + { + // Initialize vibra and audio enablers as given in param. + TBool vibraEnabled = aFeedbackType & ETouchFeedbackVibra; + TBool audioEnabled = aFeedbackType & ETouchFeedbackAudio; + + // Check application level vibra and audio enablers + if ( !iVibraEnabledForThisApp ) + { + vibraEnabled = EFalse; + } + if ( !iAudioEnabledForThisApp ) + { + audioEnabled = EFalse; + } + + TRACE4( "CTouchFeedbackImpl::InstantFeedback, type:=%d Vibra:%d Audio:%d", + aType, vibraEnabled, audioEnabled ); + iClient->ImmediateFeedback( aType, vibraEnabled, audioEnabled ); + } + } + +// --------------------------------------------------------------------------- // Here we do the actual work for adding new area to the registry // (or updating an existing one). // @@ -1730,9 +1759,8 @@ item.iEventType = aEventType; // range check. update when logical feedback types are changed. - if (! ( aFeedback >= ETouchFeedbackNone || aFeedback <= ETouchFeedbackSensitive) - || ! ( aFeedback >= ETouchFeedbackBasicButton || - aFeedback <= ETouchFeedbackLongPress ) ) + if ( !(aFeedback >= ETouchFeedbackNone && aFeedback <= ETouchFeedbackSensitive) + && !(aFeedback >= ETouchFeedbackBasicButton && aFeedback <= ETouchFeedbackLongPress) ) { return KErrArgument; } diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel1_A.ivt Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel1_A.ivt has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel2_A.ivt Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel2_A.ivt has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel3_A.ivt Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel3_A.ivt has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel4_A.ivt Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel4_A.ivt has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel5_A.ivt Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel5_A.ivt has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/data/tactilefeedbackeffects.ivt Binary file tactilefeedback/tactilefeedbackresolver/data/tactilefeedbackeffects.ivt has changed diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/group/bld.inf --- a/tactilefeedback/tactilefeedbackresolver/group/bld.inf Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/group/bld.inf Thu Jul 22 16:36:02 2010 +0100 @@ -24,8 +24,17 @@ DEFAULT PRJ_EXPORTS -../data/tactilefeedbackeffects.ivt /epoc32/data/z/private/10003B20/TactileFeedbackEffects.ivt -../data/tactilefeedbackeffects.ivt /epoc32/release/winscw/udeb/Z/private/10003B20/TactileFeedbackEffects.ivt +// Tactile feedback effects files +../data/10.1_TactileFeedbackLevel1_A.ivt /epoc32/data/z/private/10003B20/10.1_TactileFeedbackLevel1_A.ivt +../data/10.1_TactileFeedbackLevel1_A.ivt /epoc32/release/winscw/udeb/Z/private/10003B20/10.1_TactileFeedbackLevel1_A.ivt +../data/10.1_TactileFeedbackLevel2_A.ivt /epoc32/data/z/private/10003B20/10.1_TactileFeedbackLevel2_A.ivt +../data/10.1_TactileFeedbackLevel2_A.ivt /epoc32/release/winscw/udeb/Z/private/10003B20/10.1_TactileFeedbackLevel2_A.ivt +../data/10.1_TactileFeedbackLevel3_A.ivt /epoc32/data/z/private/10003B20/10.1_TactileFeedbackLevel3_A.ivt +../data/10.1_TactileFeedbackLevel3_A.ivt /epoc32/release/winscw/udeb/Z/private/10003B20/10.1_TactileFeedbackLevel3_A.ivt +../data/10.1_TactileFeedbackLevel4_A.ivt /epoc32/data/z/private/10003B20/10.1_TactileFeedbackLevel4_A.ivt +../data/10.1_TactileFeedbackLevel4_A.ivt /epoc32/release/winscw/udeb/Z/private/10003B20/10.1_TactileFeedbackLevel4_A.ivt +../data/10.1_TactileFeedbackLevel5_A.ivt /epoc32/data/z/private/10003B20/10.1_TactileFeedbackLevel5_A.ivt +../data/10.1_TactileFeedbackLevel5_A.ivt /epoc32/release/winscw/udeb/Z/private/10003B20/10.1_TactileFeedbackLevel5_A.ivt // IBY file ../rom/tactilefeedbackresolver.iby CORE_IBY_EXPORT_PATH(mw, tactilefeedbackresolver.iby) diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackdomaincrkeys.h --- a/tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackdomaincrkeys.h Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackdomaincrkeys.h Thu Jul 22 16:36:02 2010 +0100 @@ -58,9 +58,13 @@ * Possible values are: * Valid path to IVT file. * -* Default value: "z:\\private\\10003B20\\tactilefeedbackeffects.ivt" +* Default value: "z:\\private\\10003B20\\10.1_TactileFeedbackLevel*_A.ivt" **/ -const TUint32 KTactileHapticsIVTFile = 0x00000015; +const TUint32 KTactileHapticsLevel1IVTFile = 0x00000015; +const TUint32 KTactileHapticsLevel2IVTFile = 0x00000016; +const TUint32 KTactileHapticsLevel3IVTFile = 0x00000017; +const TUint32 KTactileHapticsLevel4IVTFile = 0x00000018; +const TUint32 KTactileHapticsLevel5IVTFile = 0x00000019; /** * Number of steps used to adjust vibra feedback strength @@ -70,7 +74,7 @@ * * Default value: 10 **/ -const TUint32 KTactileFeedbackVibraLevels = 0x00000016; +const TUint32 KTactileFeedbackVibraLevels = 0x0000001a; /** * Number of steps used to adjust audio feedback volume @@ -80,7 +84,7 @@ * * Default value: 3 **/ -const TUint32 KTactileFeedbackAudioLevels = 0x00000017; +const TUint32 KTactileFeedbackAudioLevels = 0x0000001b; #endif // TACTILEFEEDBACKDOMAINCRKEYS_H diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackprivatecrkeys.h --- a/tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackprivatecrkeys.h Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackprivatecrkeys.h Thu Jul 22 16:36:02 2010 +0100 @@ -90,6 +90,30 @@ const TUint32 KTactileVibraIntensityBasicLevel3 = 0x00000022; /** +* Vibra intensity setting for logical feedback type ETouchFeedbackBasic +* and vibra effect level ETactileFeedbackVibraLevel4. +* +* Possible values are: +* Integers from 0 to 100. See HWRMVibra.h for more information. +* Zero intensity will disable this logical feedback type. +* +* Default value: 60 +**/ +const TUint32 KTactileVibraIntensityBasicLevel4 = 0x00000023; + +/** +* Vibra intensity setting for logical feedback type ETouchFeedbackBasic +* and vibra effect level ETactileFeedbackVibraLevel5. +* +* Possible values are: +* Integers from 0 to 100. See HWRMVibra.h for more information. +* Zero intensity will disable this logical feedback type. +* +* Default value: 80 +**/ +const TUint32 KTactileVibraIntensityBasicLevel5 = 0x00000024; + +/** * Vibra duration setting for logical feedback type ETouchFeedbackBasic * and vibra effect level ETactileFeedbackVibraLevel1. * @@ -101,7 +125,7 @@ * * Default value: 15 **/ -const TUint32 KTactileVibraDurationBasicLevel1 = 0x00000023; +const TUint32 KTactileVibraDurationBasicLevel1 = 0x00000025; /** * Vibra duration setting for logical feedback type ETouchFeedbackBasic @@ -115,7 +139,7 @@ * * Default value: 20 **/ -const TUint32 KTactileVibraDurationBasicLevel2 = 0x00000024; +const TUint32 KTactileVibraDurationBasicLevel2 = 0x00000026; /** * Vibra duration setting for logical feedback type ETouchFeedbackBasic @@ -129,7 +153,35 @@ * * Default value: 30 **/ -const TUint32 KTactileVibraDurationBasicLevel3 = 0x00000025; +const TUint32 KTactileVibraDurationBasicLevel3 = 0x00000027; + +/** +* Vibra duration setting for logical feedback type ETouchFeedbackBasic +* and vibra effect level ETactileFeedbackVibraLevel4. +* +* Duration is given in milliseconds, and zero value will disable this +* logical feedback type. +* +* Possible values are: +* Integer values from zero upwards. +* +* Default value: 40 +**/ +const TUint32 KTactileVibraDurationBasicLevel4 = 0x00000028; + +/** +* Vibra duration setting for logical feedback type ETouchFeedbackBasic +* and vibra effect level ETactileFeedbackVibraLevel5. +* +* Duration is given in milliseconds, and zero value will disable this +* logical feedback type. +* +* Possible values are: +* Integer values from zero upwards. +* +* Default value: 50 +**/ +const TUint32 KTactileVibraDurationBasicLevel5 = 0x00000029; /** @@ -142,7 +194,7 @@ * * Default value: 50 **/ -const TUint32 KTactileVibraIntensitySensitiveLevel1 = 0x00000026; +const TUint32 KTactileVibraIntensitySensitiveLevel1 = 0x0000002a; /** * Vibra intensity setting for logical feedback type ETouchFeedbackSensitive @@ -154,7 +206,7 @@ * * Default value: 100 **/ -const TUint32 KTactileVibraIntensitySensitiveLevel2 = 0x00000027; +const TUint32 KTactileVibraIntensitySensitiveLevel2 = 0x0000002b; /** * Vibra intensity setting for logical feedback type ETouchFeedbackSensitive @@ -166,7 +218,31 @@ * * Default value: 10 **/ -const TUint32 KTactileVibraIntensitySensitiveLevel3 = 0x00000028; +const TUint32 KTactileVibraIntensitySensitiveLevel3 = 0x0000002c; + +/** +* Vibra intensity setting for logical feedback type ETouchFeedbackSensitive +* and vibra effect level ETactileFeedbackVibraLevel4. +* +* Possible values are: +* Integers from 0 to 100. See HWRMVibra.h for more information. +* Zero intensity will disable this logical feedback type. +* +* Default value: 10 +**/ +const TUint32 KTactileVibraIntensitySensitiveLevel4 = 0x0000002d; + +/** +* Vibra intensity setting for logical feedback type ETouchFeedbackSensitive +* and vibra effect level ETactileFeedbackVibraLevel5. +* +* Possible values are: +* Integers from 0 to 100. See HWRMVibra.h for more information. +* Zero intensity will disable this logical feedback type. +* +* Default value: 10 +**/ +const TUint32 KTactileVibraIntensitySensitiveLevel5 = 0x0000002e; /** @@ -181,7 +257,7 @@ * * Default value: 5 **/ -const TUint32 KTactileVibraDurationSensitiveLevel1 = 0x00000029; +const TUint32 KTactileVibraDurationSensitiveLevel1 = 0x0000002f; /** * Vibra duration setting for logical feedback type ETouchFeedbackSensitive @@ -195,7 +271,7 @@ * * Default value: 10 **/ -const TUint32 KTactileVibraDurationSensitiveLevel2 = 0x0000002a; +const TUint32 KTactileVibraDurationSensitiveLevel2 = 0x00000030; /** * Vibra duration setting for logical feedback type ETouchFeedbackSensitive @@ -209,7 +285,35 @@ * * Default value: 15 **/ -const TUint32 KTactileVibraDurationSensitiveLevel3 = 0x0000002b; +const TUint32 KTactileVibraDurationSensitiveLevel3 = 0x00000031; + +/** +* Vibra duration setting for logical feedback type ETouchFeedbackSensitive +* and vibra effect level ETactileFeedbackVibraLevel4. +* +* Duration is given in milliseconds, and zero value will disable this +* logical feedback type. +* +* Possible values are: +* Integer values from zero upwards. +* +* Default value: 20 +**/ +const TUint32 KTactileVibraDurationSensitiveLevel4 = 0x00000032; + +/** +* Vibra duration setting for logical feedback type ETouchFeedbackSensitive +* and vibra effect level ETactileFeedbackVibraLevel5. +* +* Duration is given in milliseconds, and zero value will disable this +* logical feedback type. +* +* Possible values are: +* Integer values from zero upwards. +* +* Default value: 25 +**/ +const TUint32 KTactileVibraDurationSensitiveLevel5 = 0x00000033; @@ -259,6 +363,32 @@ const TUint32 KTactileAudioToneFreqBasicLevel3 = 0x00000042; /** +* Audio frequency setting for logical feedback type ETouchFeedbackBasic +* and audio effect level ETactileFeedbackAudioLevel4. +* +* Frequency is given in Hz. +* +* Possible values are: +* Positive integer values. +* +* Default value: 1100 +**/ +const TUint32 KTactileAudioToneFreqBasicLevel4 = 0x00000043; + +/** +* Audio frequency setting for logical feedback type ETouchFeedbackBasic +* and audio effect level ETactileFeedbackAudioLevel5. +* +* Frequency is given in Hz. +* +* Possible values are: +* Positive integer values. +* +* Default value: 1100 +**/ +const TUint32 KTactileAudioToneFreqBasicLevel5 = 0x00000044; + +/** * Audio duration setting for logical feedback type ETouchFeedbackBasic * and audio effect level ETactileFeedbackAudioLevel1. * @@ -269,7 +399,7 @@ * * Default value: 10 **/ -const TUint32 KTactileAudioToneDurationBasicLevel1 = 0x00000043; +const TUint32 KTactileAudioToneDurationBasicLevel1 = 0x00000045; /** * Audio duration setting for logical feedback type ETouchFeedbackBasic @@ -282,7 +412,7 @@ * * Default value: 10 **/ -const TUint32 KTactileAudioToneDurationBasicLevel2 = 0x00000044; +const TUint32 KTactileAudioToneDurationBasicLevel2 = 0x00000046; /** * Audio duration setting for logical feedback type ETouchFeedbackBasic @@ -295,7 +425,33 @@ * * Default value: 10 **/ -const TUint32 KTactileAudioToneDurationBasicLevel3 = 0x00000045; +const TUint32 KTactileAudioToneDurationBasicLevel3 = 0x00000047; + +/** +* Audio duration setting for logical feedback type ETouchFeedbackBasic +* and audio effect level ETactileFeedbackAudioLevel4. +* +* Duration is given in milliseconds. +* +* Possible values are: +* Zero (disables this feedback type) or positive integers +* +* Default value: 10 +**/ +const TUint32 KTactileAudioToneDurationBasicLevel4 = 0x00000048; + +/** +* Audio duration setting for logical feedback type ETouchFeedbackBasic +* and audio effect level ETactileFeedbackAudioLevel5. +* +* Duration is given in milliseconds. +* +* Possible values are: +* Zero (disables this feedback type) or positive integers +* +* Default value: 10 +**/ +const TUint32 KTactileAudioToneDurationBasicLevel5 = 0x00000049; /** * Audio volume setting for logical feedback type ETouchFeedbackBasic @@ -309,7 +465,7 @@ * * Default value: 20 **/ -const TUint32 KTactileAudioToneVolumeBasicLevel1 = 0x00000046; +const TUint32 KTactileAudioToneVolumeBasicLevel1 = 0x0000004a; /** * Audio volume setting for logical feedback type ETouchFeedbackBasic @@ -323,7 +479,7 @@ * * Default value: 40 **/ -const TUint32 KTactileAudioToneVolumeBasicLevel2 = 0x00000047; +const TUint32 KTactileAudioToneVolumeBasicLevel2 = 0x0000004b; /** * Audio volume setting for logical feedback type ETouchFeedbackBasic @@ -337,7 +493,35 @@ * * Default value: 60 **/ -const TUint32 KTactileAudioToneVolumeBasicLevel3 = 0x00000048; +const TUint32 KTactileAudioToneVolumeBasicLevel3 = 0x0000004c; + +/** +* Audio volume setting for logical feedback type ETouchFeedbackBasic +* and audio effect level ETactileFeedbackAudioLevel4. +* +* Volume level is given in percentages. 100% equals to +* CMdaAudioToneUtility::MaxVolume, and 0% will disable this feedback type. +* +* Possible values are: +* 0 - 100 +* +* Default value: 80 +**/ +const TUint32 KTactileAudioToneVolumeBasicLevel4 = 0x0000004d; + +/** +* Audio volume setting for logical feedback type ETouchFeedbackBasic +* and audio effect level ETactileFeedbackAudioLevel5. +* +* Volume level is given in percentages. 100% equals to +* CMdaAudioToneUtility::MaxVolume, and 0% will disable this feedback type. +* +* Possible values are: +* 0 - 100 +* +* Default value: 100 +**/ +const TUint32 KTactileAudioToneVolumeBasicLevel5 = 0x0000004e; /** @@ -351,7 +535,7 @@ * * Default value: 1100 **/ -const TUint32 KTactileAudioToneFreqSensitiveLevel1 = 0x00000049; +const TUint32 KTactileAudioToneFreqSensitiveLevel1 = 0x0000004f; /** * Audio frequency setting for logical feedback type ETouchFeedbackSensitive @@ -364,7 +548,7 @@ * * Default value: 1100 **/ -const TUint32 KTactileAudioToneFreqSensitiveLevel2 = 0x0000004a; +const TUint32 KTactileAudioToneFreqSensitiveLevel2 = 0x00000050; /** * Audio frequency setting for logical feedback type ETouchFeedbackSensitive @@ -377,7 +561,33 @@ * * Default value: 1100 **/ -const TUint32 KTactileAudioToneFreqSensitiveLevel3 = 0x0000004b; +const TUint32 KTactileAudioToneFreqSensitiveLevel3 = 0x00000051; + +/** +* Audio frequency setting for logical feedback type ETouchFeedbackSensitive +* and audio effect level ETactileFeedbackAudioLevel4. +* +* Frequency is given in Hz. +* +* Possible values are: +* Positive integer values. +* +* Default value: 1100 +**/ +const TUint32 KTactileAudioToneFreqSensitiveLevel4 = 0x00000052; + +/** +* Audio frequency setting for logical feedback type ETouchFeedbackSensitive +* and audio effect level ETactileFeedbackAudioLevel5. +* +* Frequency is given in Hz. +* +* Possible values are: +* Positive integer values. +* +* Default value: 1100 +**/ +const TUint32 KTactileAudioToneFreqSensitiveLevel5 = 0x00000053; /** @@ -391,7 +601,7 @@ * * Default value: 10 **/ -const TUint32 KTactileAudioToneDurationSensitiveLevel1 = 0x0000004c; +const TUint32 KTactileAudioToneDurationSensitiveLevel1 = 0x00000054; /** * Audio duration setting for logical feedback type ETouchFeedbackSensitive @@ -404,7 +614,7 @@ * * Default value: 10 **/ -const TUint32 KTactileAudioToneDurationSensitiveLevel2 = 0x0000004d; +const TUint32 KTactileAudioToneDurationSensitiveLevel2 = 0x00000055; /** * Audio duration setting for logical feedback type ETouchFeedbackSensitive @@ -417,7 +627,33 @@ * * Default value: 10 **/ -const TUint32 KTactileAudioToneDurationSensitiveLevel3 = 0x0000004e; +const TUint32 KTactileAudioToneDurationSensitiveLevel3 = 0x00000056; + +/** +* Audio duration setting for logical feedback type ETouchFeedbackSensitive +* and audio effect level ETactileFeedbackAudioLevel4. +* +* Duration is given in milliseconds. +* +* Possible values are: +* Zero (disables this feedback type) or positive integers +* +* Default value: 10 +**/ +const TUint32 KTactileAudioToneDurationSensitiveLevel4 = 0x00000057; + +/** +* Audio duration setting for logical feedback type ETouchFeedbackSensitive +* and audio effect level ETactileFeedbackAudioLevel5. +* +* Duration is given in milliseconds. +* +* Possible values are: +* Zero (disables this feedback type) or positive integers +* +* Default value: 10 +**/ +const TUint32 KTactileAudioToneDurationSensitiveLevel5 = 0x00000058; /** * Audio volume setting for logical feedback type ETouchFeedbackSensitive @@ -431,7 +667,7 @@ * * Default value: 10 **/ -const TUint32 KTactileAudioToneVolumeSensitiveLevel1 = 0x0000004f; +const TUint32 KTactileAudioToneVolumeSensitiveLevel1 = 0x00000059; /** * Audio volume setting for logical feedback type ETouchFeedbackSensitive @@ -445,7 +681,7 @@ * * Default value: 25 **/ -const TUint32 KTactileAudioToneVolumeSensitiveLevel2 = 0x00000050; +const TUint32 KTactileAudioToneVolumeSensitiveLevel2 = 0x0000005a; /** * Audio volume setting for logical feedback type ETouchFeedbackSensitive @@ -459,7 +695,35 @@ * * Default value: 40 **/ -const TUint32 KTactileAudioToneVolumeSensitiveLevel3 = 0x00000051; +const TUint32 KTactileAudioToneVolumeSensitiveLevel3 = 0x0000005b; + +/** +* Audio volume setting for logical feedback type ETouchFeedbackSensitive +* and audio effect level ETactileFeedbackAudioLevel4. +* +* Volume level is given in percentages. 100% equals to +* CMdaAudioToneUtility::MaxVolume, and 0% will disable this feedback type. +* +* Possible values are: +* 0 - 100 +* +* Default value: 55 +**/ +const TUint32 KTactileAudioToneVolumeSensitiveLevel4 = 0x0000005c; + +/** +* Audio volume setting for logical feedback type ETouchFeedbackSensitive +* and audio effect level ETactileFeedbackAudioLevel5. +* +* Volume level is given in percentages. 100% equals to +* CMdaAudioToneUtility::MaxVolume, and 0% will disable this feedback type. +* +* Possible values are: +* 0 - 100 +* +* Default value: 70 +**/ +const TUint32 KTactileAudioToneVolumeSensitiveLevel5 = 0x0000005d; // ============================================================================= // Configuration options related to audio .wav feedback diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackresolver.h --- a/tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackresolver.h Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/inc/tactilefeedbackresolver.h Thu Jul 22 16:36:02 2010 +0100 @@ -206,7 +206,16 @@ * the player plugin. */ void CreateAudioPlayerL( TUid aAudioUid ); - + + /** + * Return ETrue if aFeedback's priority is higher than current playing + * feedback, namely iLastFeedback. + * + * TODO: Currently, we only take Popup and Button effects into + * account. Ultimately, a complete priority queue should be set up. + */ + TBool IsHigherThanPlaying ( TTouchLogicalFeedback aFeedback ) const; + private: // data /** @@ -235,6 +244,12 @@ CRepository* iRepository; /** + * Central repository for reading profile settings. + * Own. + */ + CRepository* iProfileRepository; + + /** * Central repository notifier, which sends notification when tactile * feedback settings has been changed. * Own. @@ -279,6 +294,12 @@ * EFalse - audio feedback is played first. */ TBool iVibraFirst; + + /** + * Name of the last played feedback. + * + */ + TTouchLogicalFeedback iLastFeedback; }; diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/plugins/tactileaudioplugin/src/tactileaudioplayer.cpp --- a/tactilefeedback/tactilefeedbackresolver/plugins/tactileaudioplugin/src/tactileaudioplayer.cpp Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/plugins/tactileaudioplugin/src/tactileaudioplayer.cpp Thu Jul 22 16:36:02 2010 +0100 @@ -138,7 +138,6 @@ case ETouchFeedbackBounceEffect: // flow through case ETouchFeedbackBasicSlider: // flow through case ETouchFeedbackEditor: // flow through - case ETouchFeedbackSensitiveKeypad: case ETouchFeedbackLineSelection: // flow through case ETouchFeedbackBlankSelection: // flow through case ETouchFeedbackTextSelection: // flow through @@ -149,11 +148,22 @@ case ETouchFeedbackItemScroll: // flow through case ETouchFeedbackCheckbox: // flow through case ETouchFeedbackMultitouchActivate: + case ETouchFeedbackBasicKeypad: + case ETouchFeedbackFlick: + case ETouchFeedbackItemDrop: + case ETouchFeedbackItemMoveOver: + case ETouchFeedbackItemPick: + case ETouchFeedbackMultipleCheckbox: + case ETouchFeedbackRotateStep: + case ETouchFeedbackStopFlick: + case ETouchFeedbackLongPress: volumeIndex = 0; break; case ETouchFeedbackSensitive: // flow through case ETouchFeedbackSensitiveButton: // flow through case ETouchFeedbackSensitiveItem: + case ETouchFeedbackSensitiveKeypad: + case ETouchFeedbackSensitiveSlider: volumeIndex = 1; break; default: diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/plugins/tactilehapticsplugin/inc/tactilehapticsplayer.h --- a/tactilefeedback/tactilefeedbackresolver/plugins/tactilehapticsplugin/inc/tactilehapticsplayer.h Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/plugins/tactilehapticsplugin/inc/tactilehapticsplayer.h Thu Jul 22 16:36:02 2010 +0100 @@ -118,6 +118,11 @@ void DoPlayFeedbackL( TTouchLogicalFeedback aFeedback ); /** + * Get IVT file Id via vibra level. + */ + TUint32 IVTFileId(); + + /** * Reads IVT data from file to buffer. * */ @@ -204,6 +209,11 @@ * Own. */ CProfileChangeNotifyHandler* iProfileHandler; + + /** + * Current vibra level. + */ + TInt iVibraLevel; }; diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/plugins/tactilehapticsplugin/src/tactilehapticsplayer.cpp --- a/tactilefeedback/tactilefeedbackresolver/plugins/tactilehapticsplugin/src/tactilehapticsplayer.cpp Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/plugins/tactilehapticsplugin/src/tactilehapticsplayer.cpp Thu Jul 22 16:36:02 2010 +0100 @@ -46,39 +46,39 @@ _LIT8( KTFSensitive, "TFSensitive"); _LIT8( KTFBasicButton, "TFBasicButton"); _LIT8( KTFSensitiveButton, "TFSensitiveButton"); -_LIT8( KTFBasicItem, "TFList"); // Mapped to IVT file version 9.2 -_LIT8( KTFSensitiveItem, "TFSensitiveList"); // Mapped to IVT file version 9.2 -_LIT8( KTFBounceEffect, "TFBoundaryList"); // Mapped to IVT file version 9.2 -_LIT8( KTFBasicSlider, "TFSlider"); // Mapped to IVT file version 9.2 -_LIT8( KTFEditor, "TFEdit"); // Mapped to IVT file version 9.2 +_LIT8( KTFBasicItem, "TFBasicItem"); // Mapped to IVT file version 9.2 +_LIT8( KTFSensitiveItem, "TFSensitiveItem"); // Mapped to IVT file version 9.2 +_LIT8( KTFBounceEffect, "TFBounceEffect"); // Mapped to IVT file version 9.2 +_LIT8( KTFBasicSlider, "TFBasicSlider"); // Mapped to IVT file version 9.2 +_LIT8( KTFEditor, "TFEditor"); // Mapped to IVT file version 9.2 _LIT8( KTFLineSelection, "TFLineSelection"); _LIT8( KTFBlankSelection, "TFBlankSelection"); _LIT8( KTFTextSelection, "TFTextSelection"); _LIT8( KTFEmptyLineSelection, "TFEmptyLineSelection"); _LIT8( KTFPopUp, "TFPopUp"); -_LIT8( KTFPopupOpen, "TFIncreasingPopUp"); // Mapped to IVT file version 9.2 -_LIT8( KTFPopupClose, "TFDecreasingPopUp"); // Mapped to IVT file version 9.2 -_LIT8( KTFItemScroll, "TFFlick"); // Mapped to IVT file version 9.2 +_LIT8( KTFPopupOpen, "TFPopupOpen"); // Mapped to IVT file version 9.2 +_LIT8( KTFPopupClose, "TFPopupClose"); // Mapped to IVT file version 9.2 +_LIT8( KTFItemScroll, "TFItemScroll"); // Mapped to IVT file version 9.2 _LIT8( KTFCheckbox, "TFCheckbox"); -_LIT8( KTFBasicKeypad, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFSensitiveKeypad, "TFSensitiveInput"); // Mapped to IVT file version 9.2 -_LIT8( KTFMultitouchActivate, "TFMultiTouchRecognized"); // Mapped to IVT file version 9.2 -_LIT8( KTFFlick, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFItemDrop, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFItemMoveOver, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFItemPick, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFMultipleCheckbox, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFRotateStep, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFSensitiveSlider, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFStopFlick, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFLongPress, "TFBasic"); // To be released in IVT file version 10.1 +_LIT8( KTFBasicKeypad, "TFBasicKeypad"); // Mapped to IVT file version 10.1 +_LIT8( KTFSensitiveKeypad, "TFSensitiveKeypad"); // Mapped to IVT file version 9.2 +_LIT8( KTFMultitouchActivate, "TFMultitouchActivate"); // Mapped to IVT file version 9.2 +_LIT8( KTFFlick, "TFFlick"); // Mapped to IVT file version 10.1 +_LIT8( KTFItemDrop, "TFItemDrop"); // Mapped to IVT file version 10.1 +_LIT8( KTFItemMoveOver, "TFItemMoveOver"); // Mapped to IVT file version 10.1 +_LIT8( KTFItemPick, "TFItemPick"); // Mapped to IVT file version 10.1 +_LIT8( KTFMultipleCheckbox, "TFMultipleCheckbox"); // Mapped to IVT file version 10.1 +_LIT8( KTFRotateStep, "TFRotateStep"); // Mapped to IVT file version 10.1 +_LIT8( KTFSensitiveSlider, "TFSensitiveSlider"); // Mapped to IVT file version 10.1 +_LIT8( KTFStopFlick, "TFStopFlick"); // Mapped to IVT file version 10.1 +_LIT8( KTFLongPress, "TFLongPress"); // Mapped to IVT file version 10.1 // Continuous feedback's names _LIT8( KTFContinuousSmooth, "TFContinuousSmooth"); _LIT8( KTFContinuousSlider, "TFContinuousSlider"); _LIT8( KTFContinuousInput, "TFContinuousInput"); -_LIT8( KTFContinuousPopup, "TFBasic"); // To be released in IVT file version 10.1 -_LIT8( KTFContinuousPinch, "TFBasic"); // To be released in IVT file version 10.1 +_LIT8( KTFContinuousPopup, "TFContinuousPopup"); // Mapped to IVT file version 10.1 +_LIT8( KTFContinuousPinch, "TFContinuousPinch"); // Mapped to IVT file version 10.1 // --------------------------------------------------------------------------- // Constructor. // --------------------------------------------------------------------------- @@ -123,12 +123,26 @@ // As a temporary fix to EAKH-7LKANT, the strength is (over)read from // profiles engine InitializeProfilesEngineL(); + + if ( iVibraLevel > EProfileTactileFeedbackLevel5 ) + { + User::Leave( KErrGeneral ); + } User::LeaveIfError( iHaptics->SetDeviceProperty( CHWRMHaptics::EHWRMHapticsStrength, iStrength ) ); TFileName ivtFile; - iRepository.Get( KTactileHapticsIVTFile, ivtFile ); + if ( iVibraLevel != EProfileTactileFeedbackOff ) + { + iRepository.Get( IVTFileId(), ivtFile ); + } + else + { + // Load KTactileHapticsLevel1IVTFile as default IVT file + // to start up if vibra level is EProfileTactileFeedbackOff. + iRepository.Get( KTactileHapticsLevel1IVTFile, ivtFile ); + } HBufC8* ivtBuf = IVTBufAllocL( ivtFile ); CleanupStack::PushL( ivtBuf ); @@ -198,8 +212,9 @@ // void CTactileHapticsPlayer::DoPlayFeedbackL( TTouchLogicalFeedback aFeedback ) { - // Check if hapticts strength is set to zero. - if ( !iStrength ) + // Check if hapticts strength is set to zero or + // vibra level is EProfileTactileFeedbackOff. + if ( !iStrength || iVibraLevel == EProfileTactileFeedbackOff) { User::Leave(KErrNotReady); } @@ -315,6 +330,34 @@ } // --------------------------------------------------------------------------- +// Get IVT file Id via vibra level. +// --------------------------------------------------------------------------- +// +TUint32 CTactileHapticsPlayer::IVTFileId() + { + TUint32 fileId = 0; + switch ( iVibraLevel ) + { + case EProfileTactileFeedbackLevel1: + fileId = KTactileHapticsLevel1IVTFile; + break; + case EProfileTactileFeedbackLevel2: + fileId = KTactileHapticsLevel2IVTFile; + break; + case EProfileTactileFeedbackLevel3: + fileId = KTactileHapticsLevel3IVTFile; + break; + case EProfileTactileFeedbackLevel4: + fileId = KTactileHapticsLevel4IVTFile; + break; + case EProfileTactileFeedbackLevel5: + fileId = KTactileHapticsLevel5IVTFile; + break; + } + return fileId; + } + +// --------------------------------------------------------------------------- // Load IVT file. // --------------------------------------------------------------------------- // @@ -412,9 +455,9 @@ periodicDef ); // Effect's magnitude value in IVT file is used as max value for - // continuous effects. - iMultiplier = periodicDef.iMagnitude / 100; - periodicDef.iMagnitude = aIntensity * iMultiplier; + // continuous effects and Attack level is used as minimum value + iMultiplier = ( periodicDef.iMagnitude - periodicDef.iAttackLevel ) / 100; + periodicDef.iMagnitude = aIntensity * iMultiplier + periodicDef.iAttackLevel; if ( ret == KErrNone ) { @@ -431,10 +474,10 @@ iEffectIndex, magSweepDef ); - // Effect's magnitude value in IVT file is used as max value for - // continuous effects. - iMultiplier = magSweepDef.iMagnitude / 100; - magSweepDef.iMagnitude = aIntensity * iMultiplier; + // Effect's magnitude value in IVT file is used as max value for + // continuous effects and Attack level is used as minimum value + iMultiplier = ( magSweepDef.iMagnitude - magSweepDef.iAttackLevel ) / 100; + magSweepDef.iMagnitude = aIntensity * iMultiplier + magSweepDef.iAttackLevel; if ( ret == KErrNone ) { @@ -488,7 +531,7 @@ iEffectIndex, periodicDef ); - periodicDef.iMagnitude = intensity; + periodicDef.iMagnitude = intensity + periodicDef.iAttackLevel; iHaptics->ModifyPlayingPeriodicEffect( iEffectHandle, periodicDef ); @@ -502,7 +545,7 @@ iEffectIndex, magSweepDef ); - magSweepDef.iMagnitude = intensity; + magSweepDef.iMagnitude = intensity + magSweepDef.iAttackLevel; iHaptics->ModifyPlayingMagSweepEffect( iEffectHandle, magSweepDef ); @@ -553,10 +596,14 @@ iStrength ); } break; - case KTactileHapticsIVTFile: + case KTactileHapticsLevel1IVTFile: + case KTactileHapticsLevel2IVTFile: + case KTactileHapticsLevel3IVTFile: + case KTactileHapticsLevel4IVTFile: + case KTactileHapticsLevel5IVTFile: { TFileName ivtFile; - iRepository.Get( KTactileHapticsIVTFile, ivtFile ); + iRepository.Get( aId, ivtFile ); HBufC8* ivtBuf = IVTBufAllocL( ivtFile ); if ( ivtBuf ) @@ -652,8 +699,14 @@ TProfileEvent /*aProfileEvent*/, TInt /*aProfileId*/ ) { + TInt oldVibraLevel = iVibraLevel; InitializeProfilesEngineL(); - iHaptics->SetDeviceProperty( CHWRMHaptics::EHWRMHapticsStrength, iStrength ); + iHaptics->SetDeviceProperty( CHWRMHaptics::EHWRMHapticsStrength, iStrength ); + if ( iVibraLevel != oldVibraLevel && + iVibraLevel != EProfileTactileFeedbackOff ) + { + HandleNotifyGeneric( IVTFileId() ); + } } // --------------------------------------------------------------------------- @@ -676,10 +729,8 @@ const MProfileFeedbackSettings& feedbackSettings = extraSettings.ProfileFeedbackSettings(); - TProfileTactileFeedback strength = feedbackSettings.TactileFeedback(); - iStrength = 100 * ( EProfileTactileFeedbackLevel3 == strength ? 100 : - EProfileTactileFeedbackLevel2 == strength ? 60 : - EProfileTactileFeedbackLevel1 == strength ? 30 : 0 ); + iVibraLevel = feedbackSettings.TactileFeedback(); + iStrength = 100 * ( EProfileTactileFeedbackOff != iVibraLevel ? 100 : 0 ); activeProfile->Release(); diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/plugins/tactiletoneplugin/src/tactiletoneplayer.cpp --- a/tactilefeedback/tactilefeedbackresolver/plugins/tactiletoneplugin/src/tactiletoneplayer.cpp Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/plugins/tactiletoneplugin/src/tactiletoneplayer.cpp Thu Jul 22 16:36:02 2010 +0100 @@ -67,7 +67,7 @@ // settings from profiles engine InitializeProfilesEngineL(); - if ( iAudioLevel > EProfileAudioFeedbackLevel3 ) + if ( iAudioLevel > EProfileAudioFeedbackLevel5 ) { User::Leave( KErrGeneral ); } @@ -143,7 +143,6 @@ case ETouchFeedbackBounceEffect: // flow through case ETouchFeedbackBasicSlider: // flow through case ETouchFeedbackEditor: // flow through - case ETouchFeedbackSensitiveKeypad: case ETouchFeedbackLineSelection: // flow through case ETouchFeedbackBlankSelection: // flow through case ETouchFeedbackTextSelection: // flow through @@ -154,11 +153,22 @@ case ETouchFeedbackItemScroll: // flow through case ETouchFeedbackCheckbox: // flow through case ETouchFeedbackMultitouchActivate: + case ETouchFeedbackBasicKeypad: + case ETouchFeedbackFlick: + case ETouchFeedbackItemDrop: + case ETouchFeedbackItemMoveOver: + case ETouchFeedbackItemPick: + case ETouchFeedbackMultipleCheckbox: + case ETouchFeedbackRotateStep: + case ETouchFeedbackStopFlick: + case ETouchFeedbackLongPress: effectIndex = 0; break; case ETouchFeedbackSensitive: // flow through case ETouchFeedbackSensitiveButton: // flow through case ETouchFeedbackSensitiveItem: + case ETouchFeedbackSensitiveKeypad: + case ETouchFeedbackSensitiveSlider: effectIndex = 1; break; default: @@ -210,7 +220,7 @@ TInt ret( KErrArgument ); if ( aLevel > EProfileAudioFeedbackOff && - aLevel <= EProfileAudioFeedbackLevel3 ) + aLevel <= EProfileAudioFeedbackLevel5 ) { iOriginalLevel = iAudioLevel; iAudioLevel = aLevel; @@ -355,6 +365,42 @@ iRepository.Get( KTactileAudioToneVolumeSensitiveLevel3, sensitiveParams.iVolume ); } + else if ( iAudioLevel == EProfileAudioFeedbackLevel4 ) + { + // Read settings for ETouchFeedbackBasic, level 4 + iRepository.Get( KTactileAudioToneFreqBasicLevel4, + basicParams.iFrequency ); + iRepository.Get( KTactileAudioToneDurationBasicLevel4, + basicDuration ); + iRepository.Get( KTactileAudioToneVolumeBasicLevel4, + basicParams.iVolume ); + + // Read settings for ETouchFeedbackSensitive, level 4 + iRepository.Get( KTactileAudioToneFreqSensitiveLevel4, + sensitiveParams.iFrequency ); + iRepository.Get( KTactileAudioToneDurationSensitiveLevel4, + sensitiveDuration ); + iRepository.Get( KTactileAudioToneVolumeSensitiveLevel4, + sensitiveParams.iVolume ); + } + else if ( iAudioLevel == EProfileAudioFeedbackLevel5 ) + { + // Read settings for ETouchFeedbackBasic, level 5 + iRepository.Get( KTactileAudioToneFreqBasicLevel5, + basicParams.iFrequency ); + iRepository.Get( KTactileAudioToneDurationBasicLevel5, + basicDuration ); + iRepository.Get( KTactileAudioToneVolumeBasicLevel5, + basicParams.iVolume ); + + // Read settings for ETouchFeedbackSensitive, level 5 + iRepository.Get( KTactileAudioToneFreqSensitiveLevel5, + sensitiveParams.iFrequency ); + iRepository.Get( KTactileAudioToneDurationSensitiveLevel5, + sensitiveDuration ); + iRepository.Get( KTactileAudioToneVolumeSensitiveLevel5, + sensitiveParams.iVolume ); + } // Clear old parameters. Only do it at end, so that we still have the // old settings in case something fails when reading these from diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/plugins/tactilevibraplugin/src/tactilevibraplayer.cpp --- a/tactilefeedback/tactilefeedbackresolver/plugins/tactilevibraplugin/src/tactilevibraplayer.cpp Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/plugins/tactilevibraplugin/src/tactilevibraplayer.cpp Thu Jul 22 16:36:02 2010 +0100 @@ -52,7 +52,7 @@ User::LeaveIfError( iRepository.Get( KTactileFeedbackHapticsStrength, iVibraLevel ) ); - if ( iVibraLevel > EProfileTactileFeedbackLevel3 ) + if ( iVibraLevel > EProfileTactileFeedbackLevel5 ) { User::Leave( KErrGeneral ); } @@ -118,7 +118,6 @@ case ETouchFeedbackBounceEffect: // flow through case ETouchFeedbackBasicSlider: // flow through case ETouchFeedbackEditor: // flow through - case ETouchFeedbackSensitiveKeypad: case ETouchFeedbackLineSelection: // flow through case ETouchFeedbackBlankSelection: // flow through case ETouchFeedbackTextSelection: // flow through @@ -129,11 +128,22 @@ case ETouchFeedbackItemScroll: // flow through case ETouchFeedbackCheckbox: // flow through case ETouchFeedbackMultitouchActivate: + case ETouchFeedbackBasicKeypad: + case ETouchFeedbackFlick: + case ETouchFeedbackItemDrop: + case ETouchFeedbackItemMoveOver: + case ETouchFeedbackItemPick: + case ETouchFeedbackMultipleCheckbox: + case ETouchFeedbackRotateStep: + case ETouchFeedbackStopFlick: + case ETouchFeedbackLongPress: effectIndex = 0; break; case ETouchFeedbackSensitive: // flow through case ETouchFeedbackSensitiveButton: // flow through case ETouchFeedbackSensitiveItem: + case ETouchFeedbackSensitiveKeypad: + case ETouchFeedbackSensitiveSlider: effectIndex = 1; break; default: @@ -206,7 +216,7 @@ TInt ret( KErrArgument ); if ( aLevel > EProfileTactileFeedbackOff && - aLevel <= EProfileTactileFeedbackLevel3 ) + aLevel <= EProfileTactileFeedbackLevel5 ) { iOriginalLevel = iVibraLevel; iVibraLevel = aLevel; @@ -276,6 +286,34 @@ iRepository.Get( KTactileVibraDurationSensitiveLevel3, sensitiveParams.iTime ); } + else if ( iVibraLevel == EProfileTactileFeedbackLevel4 ) + { + // Read settings for ETouchFeedbackBasic + iRepository.Get( KTactileVibraIntensityBasicLevel4, + basicParams.iIntensity ); + iRepository.Get( KTactileVibraDurationBasicLevel4, + basicParams.iTime ); + + // Read settings for ETouchFeedbackSensitive + iRepository.Get( KTactileVibraIntensitySensitiveLevel4, + sensitiveParams.iIntensity ); + iRepository.Get( KTactileVibraDurationSensitiveLevel4, + sensitiveParams.iTime ); + } + else if ( iVibraLevel == EProfileTactileFeedbackLevel5 ) + { + // Read settings for ETouchFeedbackBasic + iRepository.Get( KTactileVibraIntensityBasicLevel5, + basicParams.iIntensity ); + iRepository.Get( KTactileVibraDurationBasicLevel5, + basicParams.iTime ); + + // Read settings for ETouchFeedbackSensitive + iRepository.Get( KTactileVibraIntensitySensitiveLevel5, + sensitiveParams.iIntensity ); + iRepository.Get( KTactileVibraDurationSensitiveLevel5, + sensitiveParams.iTime ); + } iVibraParams.Reset(); diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/rom/tactilefeedbackresolver.iby --- a/tactilefeedback/tactilefeedbackresolver/rom/tactilefeedbackresolver.iby Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/rom/tactilefeedbackresolver.iby Thu Jul 22 16:36:02 2010 +0100 @@ -27,6 +27,10 @@ file=ABI_DIR\BUILD_DIR\tactilefeedbackresolver.dll SHARED_LIB_DIR\tactilefeedbackresolver.dll // audio file(s) used for wav feed back -data=ZPRIVATE\10003B20\TactileFeedbackEffects.ivt private\10003B20\TactileFeedbackEffects.ivt +data=ZPRIVATE\10003B20\10.1_TactileFeedbackLevel1_A.ivt private\10003B20\10.1_TactileFeedbackLevel1_A.ivt +data=ZPRIVATE\10003B20\10.1_TactileFeedbackLevel2_A.ivt private\10003B20\10.1_TactileFeedbackLevel2_A.ivt +data=ZPRIVATE\10003B20\10.1_TactileFeedbackLevel3_A.ivt private\10003B20\10.1_TactileFeedbackLevel3_A.ivt +data=ZPRIVATE\10003B20\10.1_TactileFeedbackLevel4_A.ivt private\10003B20\10.1_TactileFeedbackLevel4_A.ivt +data=ZPRIVATE\10003B20\10.1_TactileFeedbackLevel5_A.ivt private\10003B20\10.1_TactileFeedbackLevel5_A.ivt #endif // TACTILEFEEDBACKRESOLVER_IBY diff -r 29fd388ec5e9 -r 87195b524679 tactilefeedback/tactilefeedbackresolver/src/tactilefeedbackresolver.cpp --- a/tactilefeedback/tactilefeedbackresolver/src/tactilefeedbackresolver.cpp Fri Jun 11 16:24:59 2010 +0100 +++ b/tactilefeedback/tactilefeedbackresolver/src/tactilefeedbackresolver.cpp Thu Jul 22 16:36:02 2010 +0100 @@ -23,6 +23,7 @@ #include #include +#include #include "tactilefeedbackprivatecrkeys.h" #include "tactilefeedbackinternalpskeys.h" @@ -47,7 +48,8 @@ // --------------------------------------------------------------------------- // CTactileFeedbackResolver::CTactileFeedbackResolver() : - iFeedbackStarted( EFalse ) + iFeedbackStarted( EFalse ), + iLastFeedback( ETouchFeedbackNone ) { } @@ -102,12 +104,33 @@ { delete iCenRepNotifier; delete iRepository; + delete iProfileRepository; delete iPropertyWatcher; delete iHapticsPlayer; delete iAudioPlayer; REComSession::FinalClose(); } + +TBool CTactileFeedbackResolver::IsHigherThanPlaying( + TTouchLogicalFeedback aFeedback ) const + { + if( aFeedback == ETouchFeedbackBasicItem && + iLastFeedback == ETouchFeedbackSensitiveItem ) + { + return ETrue; + } + return ( aFeedback == ETouchFeedbackPopUp || + aFeedback == ETouchFeedbackPopupOpen || + aFeedback == ETouchFeedbackPopupClose || + aFeedback == ETouchFeedbackBounceEffect ) && + ( iLastFeedback == ETouchFeedbackBasicButton || + iLastFeedback == ETouchFeedbackSensitiveButton || + iLastFeedback == ETouchFeedbackSensitiveItem || + iLastFeedback == ETouchFeedbackBasicItem || + iLastFeedback == ETouchFeedbackCheckbox ); + } + // --------------------------------------------------------------------------- // We play feedback in case all three conditions are met: // @@ -129,17 +152,30 @@ TTimeIntervalMicroSeconds interval = now.MicroSecondsFrom( iLastFeedbackTimeStamp ); + + TBool willPlay = EFalse; - if ( iMinimumInterval == TTimeIntervalMicroSeconds( 0 ) || - now < iLastFeedbackTimeStamp || - iMinimumInterval <= interval ) + if ( iMinimumInterval == TTimeIntervalMicroSeconds( 0 ) || + now < iLastFeedbackTimeStamp || + iMinimumInterval <= interval ) + { + willPlay = ETrue; + } + else if ( IsHigherThanPlaying( aFeedback ) ) + { + willPlay = ETrue; + StopFeedback(); + } + + if ( willPlay ) { // First store the timestamp of this feedback playing moment. // This really needs to be done when // actually playing feedback (not when feedback was requested // but filtered out). iLastFeedbackTimeStamp = now; - + + iLastFeedback = aFeedback; // Force vibra- and audio feedback off if those are globally disabled if ( !iVibraEnabled ) @@ -152,6 +188,16 @@ aPlayAudio = EFalse; } + // check silent mode, if device is in silent mode, + // audio feedback is not allowed. + TInt err; + TInt isAudioSupported; + err = iProfileRepository->Get( KProEngSilenceMode, isAudioSupported ); + if ( KErrNone == err && 1 == isAudioSupported ) + { + aPlayAudio = EFalse; + } + if ( ( aPlayVibra || aPlayAudio ) && // #1 aFeedback != ETouchFeedbackNone ) // #2 { @@ -196,7 +242,12 @@ if ( !iRepository ) { iRepository = CRepository::NewL( KCRUidTactileFeedback ); - } + } + + if ( !iProfileRepository ) + { + iProfileRepository = CRepository::NewL( KCRUidProfileEngine ); + } TInt minInterval(0); // Read and store minimun feedback interfal