diff options
Diffstat (limited to 'src/wcmConfig.c')
-rw-r--r-- | src/wcmConfig.c | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/src/wcmConfig.c b/src/wcmConfig.c index f1d058b..6276bbd 100644 --- a/src/wcmConfig.c +++ b/src/wcmConfig.c @@ -710,6 +710,220 @@ static inline Bool filter_test_suite(WacomDevicePtr priv) return TRUE; } +/* Choose valid types according to device ID. */ +static void wcmDeviceTypeKeys(WacomDevicePtr priv) +{ + WacomCommonPtr common = priv->common; + + priv->common->tablet_id = common->wcmDevCls->ProbeKeys(priv); + + switch (priv->common->tablet_id) + { + case 0xF8: /* Cintiq 24HDT */ + case 0xF4: /* Cintiq 24HD */ + TabletSetFeature(priv->common, WCM_DUALRING); + _fallthrough_; + case 0x34D: /* MobileStudio Pro 13 */ + case 0x34E: /* MobileStudio Pro 16 */ + case 0x398: /* MobileStudio Pro 13 */ + case 0x399: /* MobileStudio Pro 16 */ + case 0x3AA: /* MobileStudio Pro 16 */ + TabletSetFeature(priv->common, WCM_LCD); + _fallthrough_; + case 0x357: /* Intuos Pro 2 M */ + case 0x358: /* Intuos Pro 2 L */ + case 0x360: /* Intuos Pro 2 M (Bluetooth) */ + case 0x36a: /* Intuos Pro 2 L (Bluetooth) */ + case 0x392: /* Intuos Pro 2 S */ + case 0x393: /* Intuos Pro 2 S (Bluetooth) */ + case 0x314: /* Intuos Pro S */ + case 0x315: /* Intuos Pro M */ + case 0x317: /* Intuos Pro L */ + case 0x26: /* I5 */ + case 0x27: /* I5 */ + case 0x28: /* I5 */ + case 0x29: /* I5 */ + case 0x2A: /* I5 */ + case 0xB8: /* I4 */ + case 0xB9: /* I4 */ + case 0xBA: /* I4 */ + case 0xBB: /* I4 */ + case 0xBC: /* I4 */ + case 0xBD: /* I4 */ + TabletSetFeature(priv->common, WCM_ROTATION); + _fallthrough_; + /* tablets with touch ring */ + case 0x17: /* BambooFun */ + case 0x18: /* BambooFun */ + TabletSetFeature(priv->common, WCM_RING); + break; + + /* tablets support dual input */ + case 0x20: /* I1 */ + case 0x21: /* I1 */ + case 0x22: /* I1 */ + case 0x23: /* I1 */ + case 0x24: /* I1 */ + case 0x41: /* I2 */ + case 0x42: /* I2 */ + case 0x43: /* I2 */ + case 0x44: /* I2 */ + case 0x45: /* I2 */ + case 0x47: /* I2 */ + TabletSetFeature(priv->common, WCM_DUALINPUT); + break; + + /* P4 display tablets */ + case 0x30: /* PL400 */ + case 0x31: /* PL500 */ + case 0x32: /* PL600 */ + case 0x33: /* PL600SX */ + case 0x34: /* PL550 */ + case 0x35: /* PL800 */ + case 0x37: /* PL700 */ + case 0x38: /* PL510 */ + case 0x39: /* PL710 */ + case 0x3A: /* DTI520 */ + case 0xC0: /* DTF720 */ + case 0xC2: /* DTF720a */ + case 0xC4: /* DTF521 */ + case 0xC7: /* DTU1931 */ + case 0xCE: /* DTU2231 */ + case 0xF0: /* DTU1631 */ + + /* Wacom One display tablet */ + case 0x3A6: /* DTC133 */ + TabletSetFeature(priv->common, WCM_LCD); + break; + + /* tablets support menu strips */ + case 0x3F: /* CintiqV5 */ + case 0xC5: /* CintiqV5 */ + case 0xC6: /* CintiqV5 */ + case 0xCC: /* CinitqV5 */ + case 0xFA: /* Cintiq 22HD */ + case 0x5B: /* Cintiq 22HDT Pen */ + TabletSetFeature(priv->common, WCM_LCD); + _fallthrough_; + case 0xB0: /* I3 */ + case 0xB1: /* I3 */ + case 0xB2: /* I3 */ + case 0xB3: /* I3 */ + case 0xB4: /* I3 */ + case 0xB5: /* I3 */ + case 0xB7: /* I3 */ + TabletSetFeature(priv->common, WCM_STRIP | WCM_ROTATION); + break; + + case 0x100: /* TPC with MT */ + case 0x101: /* TPC with MT */ + case 0x10D: /* TPC with MT */ + case 0x116: /* TPC with 1FGT */ + case 0x12C: /* TPC */ + case 0x4001: /* TPC with MT */ + case 0x4004: /* TPC with MT (no pen on Motion) */ + case 0x5000: /* TPC with MT */ + case 0x5002: /* TPC with MT */ + case 0xE2: /* TPC with 2FGT */ + case 0xE3: /* TPC with 2FGT */ + case 0xE5: /* TPC with MT */ + case 0xE6: /* TPC with 2FGT */ + case 0x93: /* TPC with 1FGT */ + case 0x9A: /* TPC with 1FGT */ + case 0xEC: /* TPC with 1FGT */ + case 0xED: /* TPC with 1FGT */ + case 0x90: /* TPC */ + case 0x97: /* TPC */ + case 0x9F: /* TPC */ + case 0xEF: /* TPC */ + TabletSetFeature(priv->common, WCM_TPC); + break; + + case 0x304:/* Cintiq 13HD */ + case 0x307:/* Cintiq Companion Hybrid */ + case 0x30A:/* Cintiq Companion */ + case 0x325:/* Cintiq Companion 2 */ + case 0x32A:/* Cintiq 27QHD */ + case 0x32B:/* Cintiq 27QHDT Pen */ + case 0x333:/* Cintiq 13HDT Pen */ + case 0x34F:/* Cintiq Pro 13 FHD */ + case 0x350:/* Cintiq Pro 16 UHD */ + case 0x351:/* Cintiq Pro 24 */ + case 0x352:/* Cintiq Pro 32 */ + case 0x37C:/* Cintiq Pro 24 Pen-Only */ + case 0x390:/* Cintiq 16 */ + case 0x391:/* Cintiq 22 */ + case 0x396:/* DTK-1660E */ + case 0x3AE:/* Cintiq 16 */ + case 0x3B0:/* DTK-1660E */ + TabletSetFeature(priv->common, WCM_ROTATION); + _fallthrough_; + case 0xF6: /* Cintiq 24HDT Touch */ + case 0x57: /* DTK2241 */ + case 0x59: /* DTH2242 Pen */ + case 0x5D: /* DTH2242 Touch */ + case 0x5E: /* Cintiq 22HDT Touch */ + case 0x309:/* Cintiq Companion Hybrid Touch */ + case 0x30C:/* Cintiq Companion Touch */ + case 0x326:/* Cintiq Companion 2 Touch */ + case 0x32C:/* Cintiq 27QHDT Touch */ + case 0x32F:/* DTU-1031X */ + case 0x335:/* Cintiq 13HDT Touch */ + case 0x336:/* DTU-1141 */ + case 0x343:/* DTK-1651 */ + case 0x34A:/* MobileStudio Pro 13 Touch */ + case 0x34B:/* MobileStudio Pro 16 Touch */ + case 0x353:/* Cintiq Pro 13 FHD Touch */ + case 0x354:/* Cintiq Pro 13 UHD Touch */ + case 0x355:/* Cintiq Pro 24 Touch */ + case 0x356:/* Cintiq Pro 32 Touch */ + case 0x359:/* DTU-1141B */ + case 0x35A:/* DTH-1152*/ + case 0x368:/* DTH-1152 Touch */ + case 0x382:/* DTK-2451 */ + case 0x37D:/* DTH-2452 */ + case 0x37E:/* DTH-2452 Touch */ + case 0x39A:/* MobileStudio Pro 13 Touch */ + case 0x39B:/* MobileStudio Pro 16 Touch */ + case 0x3AC:/* MobileStudio Pro 16 Touch */ + TabletSetFeature(priv->common, WCM_LCD); + break; + } + + if (ISBITSET(common->wcmInputProps, INPUT_PROP_DIRECT)) + TabletSetFeature(priv->common, WCM_LCD); + + if (ISBITSET(common->wcmKeys, BTN_TOOL_PEN)) + TabletSetFeature(priv->common, WCM_PEN); + + if (ISBITSET (common->wcmKeys, BTN_0) || + ISBITSET (common->wcmKeys, BTN_FORWARD)) + { + TabletSetFeature(priv->common, WCM_PAD); + } + + /* This handles both protocol 4 and 5 meanings of wcmKeys */ + if (common->wcmProtocolLevel == WCM_PROTOCOL_4) + { + /* TRIPLETAP means 2 finger touch */ + /* DOUBLETAP without TRIPLETAP means 1 finger touch */ + if (ISBITSET(common->wcmKeys, BTN_TOOL_TRIPLETAP)) + TabletSetFeature(priv->common, WCM_2FGT); + else if (ISBITSET(common->wcmKeys, BTN_TOOL_DOUBLETAP)) + TabletSetFeature(priv->common, WCM_1FGT); + } + + if (common->wcmProtocolLevel == WCM_PROTOCOL_GENERIC) + { + /* DOUBLETAP means 2 finger touch */ + /* FINGER without DOUBLETAP means 1 finger touch */ + if (ISBITSET(common->wcmKeys, BTN_TOOL_DOUBLETAP)) + TabletSetFeature(priv->common, WCM_2FGT); + else if (ISBITSET(common->wcmKeys, BTN_TOOL_FINGER)) + TabletSetFeature(priv->common, WCM_1FGT); + } +} + /* wcmPreInit - called for each input devices with the driver set to * "wacom" */ int wcmPreInit(WacomDevicePtr priv) |