diff options
-rw-r--r-- | drivers/hid/hid-wiimote-core.c | 14 | ||||
-rw-r--r-- | drivers/hid/hid-wiimote-modules.c | 392 | ||||
-rw-r--r-- | drivers/hid/hid-wiimote.h | 3 | ||||
-rw-r--r-- | include/linux/mod_devicetable.h | 2 | ||||
-rw-r--r-- | include/uapi/linux/input.h | 25 |
5 files changed, 3 insertions, 433 deletions
diff --git a/drivers/hid/hid-wiimote-core.c b/drivers/hid/hid-wiimote-core.c index bd2bc4a1f378..abb20db2b443 100644 --- a/drivers/hid/hid-wiimote-core.c +++ b/drivers/hid/hid-wiimote-core.c @@ -455,12 +455,6 @@ static __u8 wiimote_cmd_read_ext(struct wiimote_data *wdata, __u8 *rmem) return WIIMOTE_EXT_BALANCE_BOARD; if (rmem[4] == 0x01 && rmem[5] == 0x20) return WIIMOTE_EXT_PRO_CONTROLLER; - if (rmem[0] == 0x01 && rmem[1] == 0x00 && - rmem[4] == 0x01 && rmem[5] == 0x03) - return WIIMOTE_EXT_GUITAR_HERO_DRUMS; - if (rmem[0] == 0x00 && rmem[1] == 0x00 && - rmem[4] == 0x01 && rmem[5] == 0x03) - return WIIMOTE_EXT_GUITAR_HERO_GUITAR; return WIIMOTE_EXT_UNKNOWN; } @@ -494,8 +488,6 @@ static bool wiimote_cmd_map_mp(struct wiimote_data *wdata, __u8 exttype) /* map MP with correct pass-through mode */ switch (exttype) { case WIIMOTE_EXT_CLASSIC_CONTROLLER: - case WIIMOTE_EXT_GUITAR_HERO_DRUMS: - case WIIMOTE_EXT_GUITAR_HERO_GUITAR: wmem = 0x07; break; case WIIMOTE_EXT_NUNCHUK: @@ -1083,8 +1075,6 @@ static const char *wiimote_exttype_names[WIIMOTE_EXT_NUM] = { [WIIMOTE_EXT_CLASSIC_CONTROLLER] = "Nintendo Wii Classic Controller", [WIIMOTE_EXT_BALANCE_BOARD] = "Nintendo Wii Balance Board", [WIIMOTE_EXT_PRO_CONTROLLER] = "Nintendo Wii U Pro Controller", - [WIIMOTE_EXT_GUITAR_HERO_DRUMS] = "Nintendo Wii Guitar Hero Drums", - [WIIMOTE_EXT_GUITAR_HERO_GUITAR] = "Nintendo Wii Guitar Hero Guitar", }; /* @@ -1670,10 +1660,6 @@ static ssize_t wiimote_ext_show(struct device *dev, return sprintf(buf, "balanceboard\n"); case WIIMOTE_EXT_PRO_CONTROLLER: return sprintf(buf, "procontroller\n"); - case WIIMOTE_EXT_GUITAR_HERO_DRUMS: - return sprintf(buf, "drums\n"); - case WIIMOTE_EXT_GUITAR_HERO_GUITAR: - return sprintf(buf, "guitar\n"); case WIIMOTE_EXT_UNKNOWN: /* fallthrough */ default: diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c index 7e124c351e67..2e7d644dba18 100644 --- a/drivers/hid/hid-wiimote-modules.c +++ b/drivers/hid/hid-wiimote-modules.c @@ -1834,396 +1834,6 @@ static const struct wiimod_ops wiimod_pro = { }; /* - * Drums - * Guitar-Hero, Rock-Band and other games came bundled with drums which can - * be plugged as extension to a Wiimote. Drum-reports are still not entirely - * figured out, but the most important information is known. - * We create a separate device for drums and report all information via this - * input device. - */ - -static inline void wiimod_drums_report_pressure(struct wiimote_data *wdata, - __u8 none, __u8 which, - __u8 pressure, __u8 onoff, - __u8 *store, __u16 code, - __u8 which_code) -{ - static const __u8 default_pressure = 3; - - if (!none && which == which_code) { - *store = pressure; - input_report_abs(wdata->extension.input, code, *store); - } else if (onoff != !!*store) { - *store = onoff ? default_pressure : 0; - input_report_abs(wdata->extension.input, code, *store); - } -} - -static void wiimod_drums_in_ext(struct wiimote_data *wdata, const __u8 *ext) -{ - __u8 pressure, which, none, hhp, sx, sy; - __u8 o, r, y, g, b, bass, bm, bp; - - /* Byte | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 1 | 0 | 0 | SX <5:0> | - * 2 | 0 | 0 | SY <5:0> | - * -----+-----+-----+-----------------------------+-----+ - * 3 | HPP | NON | WHICH <5:1> | ? | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 4 | SOFT <7:5> | 0 | 1 | 1 | 0 | ? | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 5 | ? | 1 | 1 | B- | 1 | B+ | 1 | ? | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 6 | O | R | Y | G | B | BSS | 1 | 1 | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * All buttons are 0 if pressed - * - * With Motion+ enabled, the following bits will get invalid: - * Byte | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 1 | 0 | 0 | SX <5:1> |XXXXX| - * 2 | 0 | 0 | SY <5:1> |XXXXX| - * -----+-----+-----+-----------------------------+-----+ - * 3 | HPP | NON | WHICH <5:1> | ? | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 4 | SOFT <7:5> | 0 | 1 | 1 | 0 | ? | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 5 | ? | 1 | 1 | B- | 1 | B+ | 1 |XXXXX| - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 6 | O | R | Y | G | B | BSS |XXXXX|XXXXX| - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - */ - - pressure = 7 - (ext[3] >> 5); - which = (ext[2] >> 1) & 0x1f; - none = !!(ext[2] & 0x40); - hhp = !(ext[2] & 0x80); - sx = ext[0] & 0x3f; - sy = ext[1] & 0x3f; - o = !(ext[5] & 0x80); - r = !(ext[5] & 0x40); - y = !(ext[5] & 0x20); - g = !(ext[5] & 0x10); - b = !(ext[5] & 0x08); - bass = !(ext[5] & 0x04); - bm = !(ext[4] & 0x10); - bp = !(ext[4] & 0x04); - - wiimod_drums_report_pressure(wdata, none, which, pressure, - o, &wdata->state.pressure_drums[0], - ABS_CYMBAL_RIGHT, 0x0e); - wiimod_drums_report_pressure(wdata, none, which, pressure, - r, &wdata->state.pressure_drums[1], - ABS_TOM_LEFT, 0x19); - wiimod_drums_report_pressure(wdata, none, which, pressure, - y, &wdata->state.pressure_drums[2], - ABS_CYMBAL_LEFT, 0x11); - wiimod_drums_report_pressure(wdata, none, which, pressure, - g, &wdata->state.pressure_drums[3], - ABS_TOM_FAR_RIGHT, 0x12); - wiimod_drums_report_pressure(wdata, none, which, pressure, - b, &wdata->state.pressure_drums[4], - ABS_TOM_RIGHT, 0x0f); - - /* Bass shares pressure with hi-hat (set via hhp) */ - wiimod_drums_report_pressure(wdata, none, hhp ? 0xff : which, pressure, - bass, &wdata->state.pressure_drums[5], - ABS_BASS, 0x1b); - /* Hi-hat has no on/off values, just pressure. Force to off/0. */ - wiimod_drums_report_pressure(wdata, none, hhp ? which : 0xff, pressure, - 0, &wdata->state.pressure_drums[6], - ABS_HI_HAT, 0x0e); - - input_report_abs(wdata->extension.input, ABS_X, sx - 0x20); - input_report_abs(wdata->extension.input, ABS_Y, sy - 0x20); - - input_report_key(wdata->extension.input, BTN_START, bp); - input_report_key(wdata->extension.input, BTN_SELECT, bm); - - input_sync(wdata->extension.input); -} - -static int wiimod_drums_open(struct input_dev *dev) -{ - struct wiimote_data *wdata = input_get_drvdata(dev); - unsigned long flags; - - spin_lock_irqsave(&wdata->state.lock, flags); - wdata->state.flags |= WIIPROTO_FLAG_EXT_USED; - wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL); - spin_unlock_irqrestore(&wdata->state.lock, flags); - - return 0; -} - -static void wiimod_drums_close(struct input_dev *dev) -{ - struct wiimote_data *wdata = input_get_drvdata(dev); - unsigned long flags; - - spin_lock_irqsave(&wdata->state.lock, flags); - wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED; - wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL); - spin_unlock_irqrestore(&wdata->state.lock, flags); -} - -static int wiimod_drums_probe(const struct wiimod_ops *ops, - struct wiimote_data *wdata) -{ - int ret; - - wdata->extension.input = input_allocate_device(); - if (!wdata->extension.input) - return -ENOMEM; - - input_set_drvdata(wdata->extension.input, wdata); - wdata->extension.input->open = wiimod_drums_open; - wdata->extension.input->close = wiimod_drums_close; - wdata->extension.input->dev.parent = &wdata->hdev->dev; - wdata->extension.input->id.bustype = wdata->hdev->bus; - wdata->extension.input->id.vendor = wdata->hdev->vendor; - wdata->extension.input->id.product = wdata->hdev->product; - wdata->extension.input->id.version = wdata->hdev->version; - wdata->extension.input->name = WIIMOTE_NAME " Drums"; - - set_bit(EV_KEY, wdata->extension.input->evbit); - set_bit(BTN_START, wdata->extension.input->keybit); - set_bit(BTN_SELECT, wdata->extension.input->keybit); - - set_bit(EV_ABS, wdata->extension.input->evbit); - set_bit(ABS_X, wdata->extension.input->absbit); - set_bit(ABS_Y, wdata->extension.input->absbit); - set_bit(ABS_TOM_LEFT, wdata->extension.input->absbit); - set_bit(ABS_TOM_RIGHT, wdata->extension.input->absbit); - set_bit(ABS_TOM_FAR_RIGHT, wdata->extension.input->absbit); - set_bit(ABS_CYMBAL_LEFT, wdata->extension.input->absbit); - set_bit(ABS_CYMBAL_RIGHT, wdata->extension.input->absbit); - set_bit(ABS_BASS, wdata->extension.input->absbit); - set_bit(ABS_HI_HAT, wdata->extension.input->absbit); - input_set_abs_params(wdata->extension.input, - ABS_X, -32, 31, 1, 1); - input_set_abs_params(wdata->extension.input, - ABS_Y, -32, 31, 1, 1); - input_set_abs_params(wdata->extension.input, - ABS_TOM_LEFT, 0, 7, 0, 0); - input_set_abs_params(wdata->extension.input, - ABS_TOM_RIGHT, 0, 7, 0, 0); - input_set_abs_params(wdata->extension.input, - ABS_TOM_FAR_RIGHT, 0, 7, 0, 0); - input_set_abs_params(wdata->extension.input, - ABS_CYMBAL_LEFT, 0, 7, 0, 0); - input_set_abs_params(wdata->extension.input, - ABS_CYMBAL_RIGHT, 0, 7, 0, 0); - input_set_abs_params(wdata->extension.input, - ABS_BASS, 0, 7, 0, 0); - input_set_abs_params(wdata->extension.input, - ABS_HI_HAT, 0, 7, 0, 0); - - ret = input_register_device(wdata->extension.input); - if (ret) - goto err_free; - - return 0; - -err_free: - input_free_device(wdata->extension.input); - wdata->extension.input = NULL; - return ret; -} - -static void wiimod_drums_remove(const struct wiimod_ops *ops, - struct wiimote_data *wdata) -{ - if (!wdata->extension.input) - return; - - input_unregister_device(wdata->extension.input); - wdata->extension.input = NULL; -} - -static const struct wiimod_ops wiimod_drums = { - .flags = 0, - .arg = 0, - .probe = wiimod_drums_probe, - .remove = wiimod_drums_remove, - .in_ext = wiimod_drums_in_ext, -}; - -/* - * Guitar - * Guitar-Hero, Rock-Band and other games came bundled with guitars which can - * be plugged as extension to a Wiimote. - * We create a separate device for guitars and report all information via this - * input device. - */ - -static void wiimod_guitar_in_ext(struct wiimote_data *wdata, const __u8 *ext) -{ - __u8 sx, sy, tb, wb, bd, bm, bp, bo, br, bb, bg, by, bu; - - /* Byte | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 1 | 0 | 0 | SX <5:0> | - * 2 | 0 | 0 | SY <5:0> | - * -----+-----+-----+-----+-----------------------------+ - * 3 | 0 | 0 | 0 | TB <4:0> | - * -----+-----+-----+-----+-----------------------------+ - * 4 | 0 | 0 | 0 | WB <4:0> | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 5 | 1 | BD | 1 | B- | 1 | B+ | 1 | 1 | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 6 | BO | BR | BB | BG | BY | 1 | 1 | BU | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * All buttons are 0 if pressed - * - * With Motion+ enabled, the following bits will get invalid: - * Byte | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 1 | 0 | 0 | SX <5:1> |XXXXX| - * 2 | 0 | 0 | SY <5:1> |XXXXX| - * -----+-----+-----+-----+-----------------------+-----+ - * 3 | 0 | 0 | 0 | TB <4:0> | - * -----+-----+-----+-----+-----------------------------+ - * 4 | 0 | 0 | 0 | WB <4:0> | - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 5 | 1 | BD | 1 | B- | 1 | B+ | 1 |XXXXX| - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - * 6 | BO | BR | BB | BG | BY | 1 |XXXXX|XXXXX| - * -----+-----+-----+-----+-----+-----+-----+-----+-----+ - */ - - sx = ext[0] & 0x3f; - sy = ext[1] & 0x3f; - tb = ext[2] & 0x1f; - wb = ext[3] & 0x1f; - bd = !(ext[4] & 0x40); - bm = !(ext[4] & 0x10); - bp = !(ext[4] & 0x04); - bo = !(ext[5] & 0x80); - br = !(ext[5] & 0x40); - bb = !(ext[5] & 0x20); - bg = !(ext[5] & 0x10); - by = !(ext[5] & 0x08); - bu = !(ext[5] & 0x01); - - input_report_abs(wdata->extension.input, ABS_X, sx - 0x20); - input_report_abs(wdata->extension.input, ABS_Y, sy - 0x20); - input_report_abs(wdata->extension.input, ABS_FRET_BOARD, tb); - input_report_abs(wdata->extension.input, ABS_WHAMMY_BAR, wb - 0x10); - - input_report_key(wdata->extension.input, BTN_MODE, bm); - input_report_key(wdata->extension.input, BTN_START, bp); - input_report_key(wdata->extension.input, BTN_STRUM_BAR_UP, bu); - input_report_key(wdata->extension.input, BTN_STRUM_BAR_DOWN, bd); - input_report_key(wdata->extension.input, BTN_FRET_FAR_UP, bg); - input_report_key(wdata->extension.input, BTN_FRET_UP, br); - input_report_key(wdata->extension.input, BTN_FRET_MID, by); - input_report_key(wdata->extension.input, BTN_FRET_LOW, bb); - input_report_key(wdata->extension.input, BTN_FRET_FAR_LOW, bo); - - input_sync(wdata->extension.input); -} - -static int wiimod_guitar_open(struct input_dev *dev) -{ - struct wiimote_data *wdata = input_get_drvdata(dev); - unsigned long flags; - - spin_lock_irqsave(&wdata->state.lock, flags); - wdata->state.flags |= WIIPROTO_FLAG_EXT_USED; - wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL); - spin_unlock_irqrestore(&wdata->state.lock, flags); - - return 0; -} - -static void wiimod_guitar_close(struct input_dev *dev) -{ - struct wiimote_data *wdata = input_get_drvdata(dev); - unsigned long flags; - - spin_lock_irqsave(&wdata->state.lock, flags); - wdata->state.flags &= ~WIIPROTO_FLAG_EXT_USED; - wiiproto_req_drm(wdata, WIIPROTO_REQ_NULL); - spin_unlock_irqrestore(&wdata->state.lock, flags); -} - -static int wiimod_guitar_probe(const struct wiimod_ops *ops, - struct wiimote_data *wdata) -{ - int ret; - - wdata->extension.input = input_allocate_device(); - if (!wdata->extension.input) - return -ENOMEM; - - input_set_drvdata(wdata->extension.input, wdata); - wdata->extension.input->open = wiimod_guitar_open; - wdata->extension.input->close = wiimod_guitar_close; - wdata->extension.input->dev.parent = &wdata->hdev->dev; - wdata->extension.input->id.bustype = wdata->hdev->bus; - wdata->extension.input->id.vendor = wdata->hdev->vendor; - wdata->extension.input->id.product = wdata->hdev->product; - wdata->extension.input->id.version = wdata->hdev->version; - wdata->extension.input->name = WIIMOTE_NAME " Guitar"; - - set_bit(EV_KEY, wdata->extension.input->evbit); - set_bit(BTN_MODE, wdata->extension.input->keybit); - set_bit(BTN_START, wdata->extension.input->keybit); - set_bit(BTN_FRET_FAR_UP, wdata->extension.input->keybit); - set_bit(BTN_FRET_UP, wdata->extension.input->keybit); - set_bit(BTN_FRET_MID, wdata->extension.input->keybit); - set_bit(BTN_FRET_LOW, wdata->extension.input->keybit); - set_bit(BTN_FRET_FAR_LOW, wdata->extension.input->keybit); - set_bit(BTN_STRUM_BAR_UP, wdata->extension.input->keybit); - set_bit(BTN_STRUM_BAR_DOWN, wdata->extension.input->keybit); - - set_bit(EV_ABS, wdata->extension.input->evbit); - set_bit(ABS_X, wdata->extension.input->absbit); - set_bit(ABS_Y, wdata->extension.input->absbit); - set_bit(ABS_FRET_BOARD, wdata->extension.input->absbit); - set_bit(ABS_WHAMMY_BAR, wdata->extension.input->absbit); - input_set_abs_params(wdata->extension.input, - ABS_X, -32, 31, 1, 1); - input_set_abs_params(wdata->extension.input, - ABS_Y, -32, 31, 1, 1); - input_set_abs_params(wdata->extension.input, - ABS_FRET_BOARD, 0, 0x1f, 1, 1); - input_set_abs_params(wdata->extension.input, - ABS_WHAMMY_BAR, 0, 0x0f, 1, 1); - - ret = input_register_device(wdata->extension.input); - if (ret) - goto err_free; - - return 0; - -err_free: - input_free_device(wdata->extension.input); - wdata->extension.input = NULL; - return ret; -} - -static void wiimod_guitar_remove(const struct wiimod_ops *ops, - struct wiimote_data *wdata) -{ - if (!wdata->extension.input) - return; - - input_unregister_device(wdata->extension.input); - wdata->extension.input = NULL; -} - -static const struct wiimod_ops wiimod_guitar = { - .flags = 0, - .arg = 0, - .probe = wiimod_guitar_probe, - .remove = wiimod_guitar_remove, - .in_ext = wiimod_guitar_in_ext, -}; - -/* * Builtin Motion Plus * This module simply sets the WIIPROTO_FLAG_BUILTIN_MP protocol flag which * disables polling for Motion-Plus. This should be set only for devices which @@ -2473,6 +2083,4 @@ const struct wiimod_ops *wiimod_ext_table[WIIMOTE_EXT_NUM] = { [WIIMOTE_EXT_CLASSIC_CONTROLLER] = &wiimod_classic, [WIIMOTE_EXT_BALANCE_BOARD] = &wiimod_bboard, [WIIMOTE_EXT_PRO_CONTROLLER] = &wiimod_pro, - [WIIMOTE_EXT_GUITAR_HERO_DRUMS] = &wiimod_drums, - [WIIMOTE_EXT_GUITAR_HERO_GUITAR] = &wiimod_guitar, }; diff --git a/drivers/hid/hid-wiimote.h b/drivers/hid/hid-wiimote.h index 379cdfb6bd25..f1474f372c0b 100644 --- a/drivers/hid/hid-wiimote.h +++ b/drivers/hid/hid-wiimote.h @@ -88,8 +88,6 @@ enum wiimote_exttype { WIIMOTE_EXT_CLASSIC_CONTROLLER, WIIMOTE_EXT_BALANCE_BOARD, WIIMOTE_EXT_PRO_CONTROLLER, - WIIMOTE_EXT_GUITAR_HERO_DRUMS, - WIIMOTE_EXT_GUITAR_HERO_GUITAR, WIIMOTE_EXT_NUM, }; @@ -137,7 +135,6 @@ struct wiimote_state { /* calibration data */ __u16 calib_bboard[4][3]; - __u8 pressure_drums[7]; }; struct wiimote_data { diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 329aa307cb77..45e921401b06 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -277,7 +277,7 @@ struct pcmcia_device_id { #define INPUT_DEVICE_ID_KEY_MIN_INTERESTING 0x71 #define INPUT_DEVICE_ID_KEY_MAX 0x2ff #define INPUT_DEVICE_ID_REL_MAX 0x0f -#define INPUT_DEVICE_ID_ABS_MAX 0x4f +#define INPUT_DEVICE_ID_ABS_MAX 0x3f #define INPUT_DEVICE_ID_MSC_MAX 0x07 #define INPUT_DEVICE_ID_LED_MAX 0x0f #define INPUT_DEVICE_ID_SND_MAX 0x07 diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h index 76457eef172a..d584047b072b 100644 --- a/include/uapi/linux/input.h +++ b/include/uapi/linux/input.h @@ -716,14 +716,6 @@ struct input_keymap_entry { #define BTN_DPAD_LEFT 0x222 #define BTN_DPAD_RIGHT 0x223 -#define BTN_FRET_FAR_UP 0x224 -#define BTN_FRET_UP 0x225 -#define BTN_FRET_MID 0x226 -#define BTN_FRET_LOW 0x227 -#define BTN_FRET_FAR_LOW 0x228 -#define BTN_STRUM_BAR_UP 0x229 -#define BTN_STRUM_BAR_DOWN 0x22a - #define BTN_TRIGGER_HAPPY 0x2c0 #define BTN_TRIGGER_HAPPY1 0x2c0 #define BTN_TRIGGER_HAPPY2 0x2c1 @@ -837,21 +829,8 @@ struct input_keymap_entry { #define ABS_MT_TOOL_X 0x3c /* Center X tool position */ #define ABS_MT_TOOL_Y 0x3d /* Center Y tool position */ -/* Drums and guitars (mostly toys) */ -#define ABS_TOM_FAR_LEFT 0x40 -#define ABS_TOM_LEFT 0x41 -#define ABS_TOM_RIGHT 0x42 -#define ABS_TOM_FAR_RIGHT 0x43 -#define ABS_CYMBAL_FAR_LEFT 0x44 -#define ABS_CYMBAL_LEFT 0x45 -#define ABS_CYMBAL_RIGHT 0x46 -#define ABS_CYMBAL_FAR_RIGHT 0x47 -#define ABS_BASS 0x48 -#define ABS_HI_HAT 0x49 -#define ABS_FRET_BOARD 0x4a /* Guitar fret board, vertical pos */ -#define ABS_WHAMMY_BAR 0x4b /* Guitar whammy bar (or vibrato) */ - -#define ABS_MAX 0x4f + +#define ABS_MAX 0x3f #define ABS_CNT (ABS_MAX+1) /* |