At present, the best way to define effects that pre-exist in device
memory is by utilizing the custom_data field of ff_periodic_effect,
which it was not intended for, and which requires extra processing
by the driver.
Provide simpler option for interacting with pre-stored effects in
device memory.
Reviewed-by: Jeff LaBundy <[email protected]>
Signed-off-by: James Ogletree <[email protected]>
---
include/uapi/linux/input.h | 32 ++++++++++++++++++++++----------
1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
index 2557eb7b0561..689e5fa10647 100644
--- a/include/uapi/linux/input.h
+++ b/include/uapi/linux/input.h
@@ -428,17 +428,27 @@ struct ff_rumble_effect {
__u16 weak_magnitude;
};
+/**
+ * struct ff_prestored_effect - defines parameters of a pre-stored force-feedback effect
+ * @index: index of effect
+ * @bank: memory bank of effect
+ */
+struct ff_prestored_effect {
+ __u16 index;
+ __u16 bank;
+};
+
/**
* struct ff_effect - defines force feedback effect
* @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
- * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
+ * FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, FF_PRESTORED, or FF_CUSTOM)
* @id: an unique id assigned to an effect
* @direction: direction of the effect
* @trigger: trigger conditions (struct ff_trigger)
* @replay: scheduling of the effect (struct ff_replay)
* @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
- * ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
- * defining effect parameters
+ * ff_periodic_effect, ff_condition_effect, ff_rumble_effect, ff_prestored_effect)
+ * further defining effect parameters
*
* This structure is sent through ioctl from the application to the driver.
* To create a new effect application should set its @id to -1; the kernel
@@ -464,6 +474,7 @@ struct ff_effect {
struct ff_periodic_effect periodic;
struct ff_condition_effect condition[2]; /* One for each axis */
struct ff_rumble_effect rumble;
+ struct ff_prestored_effect prestored;
} u;
};
@@ -479,20 +490,21 @@ struct ff_effect {
#define FF_DAMPER 0x55
#define FF_INERTIA 0x56
#define FF_RAMP 0x57
+#define FF_PRESTORED 0x58
#define FF_EFFECT_MIN FF_RUMBLE
-#define FF_EFFECT_MAX FF_RAMP
+#define FF_EFFECT_MAX FF_PRESTORED
/*
* Force feedback periodic effect types
*/
-#define FF_SQUARE 0x58
-#define FF_TRIANGLE 0x59
-#define FF_SINE 0x5a
-#define FF_SAW_UP 0x5b
-#define FF_SAW_DOWN 0x5c
-#define FF_CUSTOM 0x5d
+#define FF_SQUARE 0x59
+#define FF_TRIANGLE 0x5a
+#define FF_SINE 0x5b
+#define FF_SAW_UP 0x5c
+#define FF_SAW_DOWN 0x5d
+#define FF_CUSTOM 0x5e
#define FF_WAVEFORM_MIN FF_SQUARE
#define FF_WAVEFORM_MAX FF_CUSTOM
--
2.25.1
Document FF_PRESTORED.
Signed-off-by: James Ogletree <[email protected]>
---
Documentation/input/ff.rst | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/input/ff.rst b/Documentation/input/ff.rst
index 5a1da42c33b3..1e0d00a42f25 100644
--- a/Documentation/input/ff.rst
+++ b/Documentation/input/ff.rst
@@ -85,6 +85,7 @@ following bits:
- FF_FRICTION can simulate friction
- FF_DAMPER can simulate damper effects
- FF_RUMBLE rumble effects
+- FF_PRESTORED pre-stored effects
- FF_INERTIA can simulate inertia
- FF_GAIN gain is adjustable
- FF_AUTOCENTER autocenter is adjustable
--
2.25.1
On Tue, Jan 02, 2024 at 02:56:13PM +0000, James Ogletree wrote:
> Document FF_PRESTORED.
>
> Signed-off-by: James Ogletree <[email protected]>
Reviewed-by: Jeff LaBundy <[email protected]>
> ---
> Documentation/input/ff.rst | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/input/ff.rst b/Documentation/input/ff.rst
> index 5a1da42c33b3..1e0d00a42f25 100644
> --- a/Documentation/input/ff.rst
> +++ b/Documentation/input/ff.rst
> @@ -85,6 +85,7 @@ following bits:
> - FF_FRICTION can simulate friction
> - FF_DAMPER can simulate damper effects
> - FF_RUMBLE rumble effects
> +- FF_PRESTORED pre-stored effects
> - FF_INERTIA can simulate inertia
> - FF_GAIN gain is adjustable
> - FF_AUTOCENTER autocenter is adjustable
> --
> 2.25.1
>
>