--- 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;
};
--- 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
};
/**
--- 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 <e32std.h>
+#include <e32svr.h>
#include <touchlogicalfeedback.h>
--- 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();
}
Binary file tactilefeedback/tactilefeedbackclient/cenrep/2000B494.txt has changed
Binary file tactilefeedback/tactilefeedbackclient/conf/tactilefeedback.confml has changed
Binary file tactilefeedback/tactilefeedbackclient/conf/tactilefeedback_2000B494.crml has changed
--- 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.
--- 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;
}
Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel1_A.ivt has changed
Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel2_A.ivt has changed
Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel3_A.ivt has changed
Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel4_A.ivt has changed
Binary file tactilefeedback/tactilefeedbackresolver/data/10.1_TactileFeedbackLevel5_A.ivt has changed
Binary file tactilefeedback/tactilefeedbackresolver/data/tactilefeedbackeffects.ivt has changed
--- 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)
--- 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
--- 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
--- 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;
};
--- 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:
--- 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;
};
--- 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();
--- 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
--- 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();
--- 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
--- 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 <centralrepository.h>
#include <ecom/implementationinformation.h>
+#include <ProfileEngineInternalCRKeys.h>
#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