/* Generated by ./xlat/gen.sh from ./xlat/evdev_ff_types.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(FF_RUMBLE) || (defined(HAVE_DECL_FF_RUMBLE) && HAVE_DECL_FF_RUMBLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_RUMBLE) == (0x50), "FF_RUMBLE != 0x50");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_RUMBLE 0x50
#endif
#if defined(FF_PERIODIC) || (defined(HAVE_DECL_FF_PERIODIC) && HAVE_DECL_FF_PERIODIC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_PERIODIC) == (0x51), "FF_PERIODIC != 0x51");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_PERIODIC 0x51
#endif
#if defined(FF_CONSTANT) || (defined(HAVE_DECL_FF_CONSTANT) && HAVE_DECL_FF_CONSTANT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_CONSTANT) == (0x52), "FF_CONSTANT != 0x52");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_CONSTANT 0x52
#endif
#if defined(FF_SPRING) || (defined(HAVE_DECL_FF_SPRING) && HAVE_DECL_FF_SPRING)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_SPRING) == (0x53), "FF_SPRING != 0x53");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_SPRING 0x53
#endif
#if defined(FF_FRICTION) || (defined(HAVE_DECL_FF_FRICTION) && HAVE_DECL_FF_FRICTION)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_FRICTION) == (0x54), "FF_FRICTION != 0x54");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_FRICTION 0x54
#endif
#if defined(FF_DAMPER) || (defined(HAVE_DECL_FF_DAMPER) && HAVE_DECL_FF_DAMPER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_DAMPER) == (0x55), "FF_DAMPER != 0x55");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_DAMPER 0x55
#endif
#if defined(FF_INERTIA) || (defined(HAVE_DECL_FF_INERTIA) && HAVE_DECL_FF_INERTIA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_INERTIA) == (0x56), "FF_INERTIA != 0x56");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_INERTIA 0x56
#endif
#if defined(FF_RAMP) || (defined(HAVE_DECL_FF_RAMP) && HAVE_DECL_FF_RAMP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_RAMP) == (0x57), "FF_RAMP != 0x57");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_RAMP 0x57
#endif
#if defined(FF_SQUARE) || (defined(HAVE_DECL_FF_SQUARE) && HAVE_DECL_FF_SQUARE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_SQUARE) == (0x58), "FF_SQUARE != 0x58");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_SQUARE 0x58
#endif
#if defined(FF_TRIANGLE) || (defined(HAVE_DECL_FF_TRIANGLE) && HAVE_DECL_FF_TRIANGLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_TRIANGLE) == (0x59), "FF_TRIANGLE != 0x59");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_TRIANGLE 0x59
#endif
#if defined(FF_SINE) || (defined(HAVE_DECL_FF_SINE) && HAVE_DECL_FF_SINE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_SINE) == (0x5a), "FF_SINE != 0x5a");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_SINE 0x5a
#endif
#if defined(FF_SAW_UP) || (defined(HAVE_DECL_FF_SAW_UP) && HAVE_DECL_FF_SAW_UP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_SAW_UP) == (0x5b), "FF_SAW_UP != 0x5b");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_SAW_UP 0x5b
#endif
#if defined(FF_SAW_DOWN) || (defined(HAVE_DECL_FF_SAW_DOWN) && HAVE_DECL_FF_SAW_DOWN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_SAW_DOWN) == (0x5c), "FF_SAW_DOWN != 0x5c");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_SAW_DOWN 0x5c
#endif
#if defined(FF_CUSTOM) || (defined(HAVE_DECL_FF_CUSTOM) && HAVE_DECL_FF_CUSTOM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_CUSTOM) == (0x5d), "FF_CUSTOM != 0x5d");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_CUSTOM 0x5d
#endif
#if defined(FF_GAIN) || (defined(HAVE_DECL_FF_GAIN) && HAVE_DECL_FF_GAIN)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_GAIN) == (0x60), "FF_GAIN != 0x60");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_GAIN 0x60
#endif
#if defined(FF_AUTOCENTER) || (defined(HAVE_DECL_FF_AUTOCENTER) && HAVE_DECL_FF_AUTOCENTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FF_AUTOCENTER) == (0x61), "FF_AUTOCENTER != 0x61");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FF_AUTOCENTER 0x61
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat evdev_ff_types in mpers mode

# else

static
const struct xlat evdev_ff_types[] = {

 XLAT(FF_RUMBLE),
 XLAT(FF_PERIODIC),
 XLAT(FF_CONSTANT),
 XLAT(FF_SPRING),
 XLAT(FF_FRICTION),
 XLAT(FF_DAMPER),
 XLAT(FF_INERTIA),
 XLAT(FF_RAMP),
 XLAT(FF_SQUARE),
 XLAT(FF_TRIANGLE),
 XLAT(FF_SINE),
 XLAT(FF_SAW_UP),
 XLAT(FF_SAW_DOWN),
 XLAT(FF_CUSTOM),
 XLAT(FF_GAIN),
 XLAT(FF_AUTOCENTER),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
