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

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

#if defined(ABS_X) || (defined(HAVE_DECL_ABS_X) && HAVE_DECL_ABS_X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_X) == (0x00), "ABS_X != 0x00");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_X 0x00
#endif
#if defined(ABS_Y) || (defined(HAVE_DECL_ABS_Y) && HAVE_DECL_ABS_Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_Y) == (0x01), "ABS_Y != 0x01");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_Y 0x01
#endif
#if defined(ABS_Z) || (defined(HAVE_DECL_ABS_Z) && HAVE_DECL_ABS_Z)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_Z) == (0x02), "ABS_Z != 0x02");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_Z 0x02
#endif
#if defined(ABS_RX) || (defined(HAVE_DECL_ABS_RX) && HAVE_DECL_ABS_RX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_RX) == (0x03), "ABS_RX != 0x03");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_RX 0x03
#endif
#if defined(ABS_RY) || (defined(HAVE_DECL_ABS_RY) && HAVE_DECL_ABS_RY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_RY) == (0x04), "ABS_RY != 0x04");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_RY 0x04
#endif
#if defined(ABS_RZ) || (defined(HAVE_DECL_ABS_RZ) && HAVE_DECL_ABS_RZ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_RZ) == (0x05), "ABS_RZ != 0x05");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_RZ 0x05
#endif
#if defined(ABS_THROTTLE) || (defined(HAVE_DECL_ABS_THROTTLE) && HAVE_DECL_ABS_THROTTLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_THROTTLE) == (0x06), "ABS_THROTTLE != 0x06");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_THROTTLE 0x06
#endif
#if defined(ABS_RUDDER) || (defined(HAVE_DECL_ABS_RUDDER) && HAVE_DECL_ABS_RUDDER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_RUDDER) == (0x07), "ABS_RUDDER != 0x07");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_RUDDER 0x07
#endif
#if defined(ABS_WHEEL) || (defined(HAVE_DECL_ABS_WHEEL) && HAVE_DECL_ABS_WHEEL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_WHEEL) == (0x08), "ABS_WHEEL != 0x08");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_WHEEL 0x08
#endif
#if defined(ABS_GAS) || (defined(HAVE_DECL_ABS_GAS) && HAVE_DECL_ABS_GAS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_GAS) == (0x09), "ABS_GAS != 0x09");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_GAS 0x09
#endif
#if defined(ABS_BRAKE) || (defined(HAVE_DECL_ABS_BRAKE) && HAVE_DECL_ABS_BRAKE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_BRAKE) == (0x0a), "ABS_BRAKE != 0x0a");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_BRAKE 0x0a
#endif
#if defined(ABS_HAT0X) || (defined(HAVE_DECL_ABS_HAT0X) && HAVE_DECL_ABS_HAT0X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT0X) == (0x10), "ABS_HAT0X != 0x10");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT0X 0x10
#endif
#if defined(ABS_HAT0Y) || (defined(HAVE_DECL_ABS_HAT0Y) && HAVE_DECL_ABS_HAT0Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT0Y) == (0x11), "ABS_HAT0Y != 0x11");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT0Y 0x11
#endif
#if defined(ABS_HAT1X) || (defined(HAVE_DECL_ABS_HAT1X) && HAVE_DECL_ABS_HAT1X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT1X) == (0x12), "ABS_HAT1X != 0x12");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT1X 0x12
#endif
#if defined(ABS_HAT1Y) || (defined(HAVE_DECL_ABS_HAT1Y) && HAVE_DECL_ABS_HAT1Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT1Y) == (0x13), "ABS_HAT1Y != 0x13");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT1Y 0x13
#endif
#if defined(ABS_HAT2X) || (defined(HAVE_DECL_ABS_HAT2X) && HAVE_DECL_ABS_HAT2X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT2X) == (0x14), "ABS_HAT2X != 0x14");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT2X 0x14
#endif
#if defined(ABS_HAT2Y) || (defined(HAVE_DECL_ABS_HAT2Y) && HAVE_DECL_ABS_HAT2Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT2Y) == (0x15), "ABS_HAT2Y != 0x15");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT2Y 0x15
#endif
#if defined(ABS_HAT3X) || (defined(HAVE_DECL_ABS_HAT3X) && HAVE_DECL_ABS_HAT3X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT3X) == (0x16), "ABS_HAT3X != 0x16");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT3X 0x16
#endif
#if defined(ABS_HAT3Y) || (defined(HAVE_DECL_ABS_HAT3Y) && HAVE_DECL_ABS_HAT3Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_HAT3Y) == (0x17), "ABS_HAT3Y != 0x17");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_HAT3Y 0x17
#endif
#if defined(ABS_PRESSURE) || (defined(HAVE_DECL_ABS_PRESSURE) && HAVE_DECL_ABS_PRESSURE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_PRESSURE) == (0x18), "ABS_PRESSURE != 0x18");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_PRESSURE 0x18
#endif
#if defined(ABS_DISTANCE) || (defined(HAVE_DECL_ABS_DISTANCE) && HAVE_DECL_ABS_DISTANCE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_DISTANCE) == (0x19), "ABS_DISTANCE != 0x19");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_DISTANCE 0x19
#endif
#if defined(ABS_TILT_X) || (defined(HAVE_DECL_ABS_TILT_X) && HAVE_DECL_ABS_TILT_X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_TILT_X) == (0x1a), "ABS_TILT_X != 0x1a");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_TILT_X 0x1a
#endif
#if defined(ABS_TILT_Y) || (defined(HAVE_DECL_ABS_TILT_Y) && HAVE_DECL_ABS_TILT_Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_TILT_Y) == (0x1b), "ABS_TILT_Y != 0x1b");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_TILT_Y 0x1b
#endif
#if defined(ABS_TOOL_WIDTH) || (defined(HAVE_DECL_ABS_TOOL_WIDTH) && HAVE_DECL_ABS_TOOL_WIDTH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_TOOL_WIDTH) == (0x1c), "ABS_TOOL_WIDTH != 0x1c");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_TOOL_WIDTH 0x1c
#endif
#if defined(ABS_VOLUME) || (defined(HAVE_DECL_ABS_VOLUME) && HAVE_DECL_ABS_VOLUME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_VOLUME) == (0x20), "ABS_VOLUME != 0x20");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_VOLUME 0x20
#endif
#if defined(ABS_MISC) || (defined(HAVE_DECL_ABS_MISC) && HAVE_DECL_ABS_MISC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MISC) == (0x28), "ABS_MISC != 0x28");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MISC 0x28
#endif
#if defined(ABS_MT_SLOT) || (defined(HAVE_DECL_ABS_MT_SLOT) && HAVE_DECL_ABS_MT_SLOT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_SLOT) == (0x2f), "ABS_MT_SLOT != 0x2f");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_SLOT 0x2f
#endif
#if defined(ABS_MT_TOUCH_MAJOR) || (defined(HAVE_DECL_ABS_MT_TOUCH_MAJOR) && HAVE_DECL_ABS_MT_TOUCH_MAJOR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_TOUCH_MAJOR) == (0x30), "ABS_MT_TOUCH_MAJOR != 0x30");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_TOUCH_MAJOR 0x30
#endif
#if defined(ABS_MT_TOUCH_MINOR) || (defined(HAVE_DECL_ABS_MT_TOUCH_MINOR) && HAVE_DECL_ABS_MT_TOUCH_MINOR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_TOUCH_MINOR) == (0x31), "ABS_MT_TOUCH_MINOR != 0x31");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_TOUCH_MINOR 0x31
#endif
#if defined(ABS_MT_WIDTH_MAJOR) || (defined(HAVE_DECL_ABS_MT_WIDTH_MAJOR) && HAVE_DECL_ABS_MT_WIDTH_MAJOR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_WIDTH_MAJOR) == (0x32), "ABS_MT_WIDTH_MAJOR != 0x32");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_WIDTH_MAJOR 0x32
#endif
#if defined(ABS_MT_WIDTH_MINOR) || (defined(HAVE_DECL_ABS_MT_WIDTH_MINOR) && HAVE_DECL_ABS_MT_WIDTH_MINOR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_WIDTH_MINOR) == (0x33), "ABS_MT_WIDTH_MINOR != 0x33");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_WIDTH_MINOR 0x33
#endif
#if defined(ABS_MT_ORIENTATION) || (defined(HAVE_DECL_ABS_MT_ORIENTATION) && HAVE_DECL_ABS_MT_ORIENTATION)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_ORIENTATION) == (0x34), "ABS_MT_ORIENTATION != 0x34");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_ORIENTATION 0x34
#endif
#if defined(ABS_MT_POSITION_X) || (defined(HAVE_DECL_ABS_MT_POSITION_X) && HAVE_DECL_ABS_MT_POSITION_X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_POSITION_X) == (0x35), "ABS_MT_POSITION_X != 0x35");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_POSITION_X 0x35
#endif
#if defined(ABS_MT_POSITION_Y) || (defined(HAVE_DECL_ABS_MT_POSITION_Y) && HAVE_DECL_ABS_MT_POSITION_Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_POSITION_Y) == (0x36), "ABS_MT_POSITION_Y != 0x36");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_POSITION_Y 0x36
#endif
#if defined(ABS_MT_TOOL_TYPE) || (defined(HAVE_DECL_ABS_MT_TOOL_TYPE) && HAVE_DECL_ABS_MT_TOOL_TYPE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_TOOL_TYPE) == (0x37), "ABS_MT_TOOL_TYPE != 0x37");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_TOOL_TYPE 0x37
#endif
#if defined(ABS_MT_BLOB_ID) || (defined(HAVE_DECL_ABS_MT_BLOB_ID) && HAVE_DECL_ABS_MT_BLOB_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_BLOB_ID) == (0x38), "ABS_MT_BLOB_ID != 0x38");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_BLOB_ID 0x38
#endif
#if defined(ABS_MT_TRACKING_ID) || (defined(HAVE_DECL_ABS_MT_TRACKING_ID) && HAVE_DECL_ABS_MT_TRACKING_ID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_TRACKING_ID) == (0x39), "ABS_MT_TRACKING_ID != 0x39");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_TRACKING_ID 0x39
#endif
#if defined(ABS_MT_PRESSURE) || (defined(HAVE_DECL_ABS_MT_PRESSURE) && HAVE_DECL_ABS_MT_PRESSURE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_PRESSURE) == (0x3a), "ABS_MT_PRESSURE != 0x3a");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_PRESSURE 0x3a
#endif
#if defined(ABS_MT_DISTANCE) || (defined(HAVE_DECL_ABS_MT_DISTANCE) && HAVE_DECL_ABS_MT_DISTANCE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_DISTANCE) == (0x3b), "ABS_MT_DISTANCE != 0x3b");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_DISTANCE 0x3b
#endif
#if defined(ABS_MT_TOOL_X) || (defined(HAVE_DECL_ABS_MT_TOOL_X) && HAVE_DECL_ABS_MT_TOOL_X)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_TOOL_X) == (0x3c), "ABS_MT_TOOL_X != 0x3c");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_TOOL_X 0x3c
#endif
#if defined(ABS_MT_TOOL_Y) || (defined(HAVE_DECL_ABS_MT_TOOL_Y) && HAVE_DECL_ABS_MT_TOOL_Y)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ABS_MT_TOOL_Y) == (0x3d), "ABS_MT_TOOL_Y != 0x3d");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ABS_MT_TOOL_Y 0x3d
#endif

#ifndef XLAT_MACROS_ONLY

# ifndef IN_MPERS

const struct xlat evdev_abs[] = {
 [ABS_X] = XLAT(ABS_X),
 [ABS_Y] = XLAT(ABS_Y),
 [ABS_Z] = XLAT(ABS_Z),
 [ABS_RX] = XLAT(ABS_RX),
 [ABS_RY] = XLAT(ABS_RY),
 [ABS_RZ] = XLAT(ABS_RZ),
 [ABS_THROTTLE] = XLAT(ABS_THROTTLE),
 [ABS_RUDDER] = XLAT(ABS_RUDDER),
 [ABS_WHEEL] = XLAT(ABS_WHEEL),
 [ABS_GAS] = XLAT(ABS_GAS),
 [ABS_BRAKE] = XLAT(ABS_BRAKE),
 [ABS_HAT0X] = XLAT(ABS_HAT0X),
 [ABS_HAT0Y] = XLAT(ABS_HAT0Y),
 [ABS_HAT1X] = XLAT(ABS_HAT1X),
 [ABS_HAT1Y] = XLAT(ABS_HAT1Y),
 [ABS_HAT2X] = XLAT(ABS_HAT2X),
 [ABS_HAT2Y] = XLAT(ABS_HAT2Y),
 [ABS_HAT3X] = XLAT(ABS_HAT3X),
 [ABS_HAT3Y] = XLAT(ABS_HAT3Y),
 [ABS_PRESSURE] = XLAT(ABS_PRESSURE),
 [ABS_DISTANCE] = XLAT(ABS_DISTANCE),
 [ABS_TILT_X] = XLAT(ABS_TILT_X),
 [ABS_TILT_Y] = XLAT(ABS_TILT_Y),
 [ABS_TOOL_WIDTH] = XLAT(ABS_TOOL_WIDTH),
 [ABS_VOLUME] = XLAT(ABS_VOLUME),
 [ABS_MISC] = XLAT(ABS_MISC),
 [ABS_MT_SLOT] = XLAT(ABS_MT_SLOT),
 [ABS_MT_TOUCH_MAJOR] = XLAT(ABS_MT_TOUCH_MAJOR),
 [ABS_MT_TOUCH_MINOR] = XLAT(ABS_MT_TOUCH_MINOR),
 [ABS_MT_WIDTH_MAJOR] = XLAT(ABS_MT_WIDTH_MAJOR),
 [ABS_MT_WIDTH_MINOR] = XLAT(ABS_MT_WIDTH_MINOR),
 [ABS_MT_ORIENTATION] = XLAT(ABS_MT_ORIENTATION),
 [ABS_MT_POSITION_X] = XLAT(ABS_MT_POSITION_X),
 [ABS_MT_POSITION_Y] = XLAT(ABS_MT_POSITION_Y),
 [ABS_MT_TOOL_TYPE] = XLAT(ABS_MT_TOOL_TYPE),
 [ABS_MT_BLOB_ID] = XLAT(ABS_MT_BLOB_ID),
 [ABS_MT_TRACKING_ID] = XLAT(ABS_MT_TRACKING_ID),
 [ABS_MT_PRESSURE] = XLAT(ABS_MT_PRESSURE),
 [ABS_MT_DISTANCE] = XLAT(ABS_MT_DISTANCE),
 [ABS_MT_TOOL_X] = XLAT(ABS_MT_TOOL_X),
 [ABS_MT_TOOL_Y] = XLAT(ABS_MT_TOOL_Y),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
