0001
0002
0003
0004
0005 #ifndef WACOM_WAC_H
0006 #define WACOM_WAC_H
0007
0008 #include <linux/types.h>
0009 #include <linux/hid.h>
0010 #include <linux/kfifo.h>
0011
0012
0013 #define WACOM_PKGLEN_MAX 361
0014
0015 #define WACOM_NAME_MAX 64
0016 #define WACOM_MAX_REMOTES 5
0017 #define WACOM_STATUS_UNKNOWN 255
0018
0019
0020 #define WACOM_PKGLEN_BBFUN 9
0021 #define WACOM_PKGLEN_TPC1FG 5
0022 #define WACOM_PKGLEN_TPC1FG_B 10
0023 #define WACOM_PKGLEN_TPC2FG 14
0024 #define WACOM_PKGLEN_BBTOUCH 20
0025 #define WACOM_PKGLEN_BBTOUCH3 64
0026 #define WACOM_PKGLEN_BBPEN 10
0027 #define WACOM_PKGLEN_WIRELESS 32
0028 #define WACOM_PKGLEN_PENABLED 8
0029 #define WACOM_PKGLEN_BPAD_TOUCH 32
0030 #define WACOM_PKGLEN_BPAD_TOUCH_USB 64
0031
0032
0033 #define WACOM_BYTES_PER_MT_PACKET 11
0034 #define WACOM_BYTES_PER_24HDT_PACKET 14
0035 #define WACOM_BYTES_PER_QHDTHID_PACKET 6
0036
0037
0038 #define STYLUS_DEVICE_ID 0x02
0039 #define TOUCH_DEVICE_ID 0x03
0040 #define CURSOR_DEVICE_ID 0x06
0041 #define ERASER_DEVICE_ID 0x0A
0042 #define PAD_DEVICE_ID 0x0F
0043
0044
0045 #define WACOM_REPORT_PENABLED 2
0046 #define WACOM_REPORT_PENABLED_BT 3
0047 #define WACOM_REPORT_INTUOS_ID1 5
0048 #define WACOM_REPORT_INTUOS_ID2 6
0049 #define WACOM_REPORT_INTUOSPAD 12
0050 #define WACOM_REPORT_INTUOS5PAD 3
0051 #define WACOM_REPORT_DTUSPAD 21
0052 #define WACOM_REPORT_TPC1FG 6
0053 #define WACOM_REPORT_TPC2FG 13
0054 #define WACOM_REPORT_TPCMT 13
0055 #define WACOM_REPORT_TPCMT2 3
0056 #define WACOM_REPORT_TPCHID 15
0057 #define WACOM_REPORT_CINTIQ 16
0058 #define WACOM_REPORT_CINTIQPAD 17
0059 #define WACOM_REPORT_TPCST 16
0060 #define WACOM_REPORT_DTUS 17
0061 #define WACOM_REPORT_TPC1FGE 18
0062 #define WACOM_REPORT_24HDT 1
0063 #define WACOM_REPORT_WL 128
0064 #define WACOM_REPORT_USB 192
0065 #define WACOM_REPORT_BPAD_PEN 3
0066 #define WACOM_REPORT_BPAD_TOUCH 16
0067 #define WACOM_REPORT_DEVICE_LIST 16
0068 #define WACOM_REPORT_INTUOS_PEN 16
0069 #define WACOM_REPORT_REMOTE 17
0070 #define WACOM_REPORT_INTUOSHT2_ID 8
0071
0072
0073 #define WAC_CMD_WL_LED_CONTROL 0x03
0074 #define WAC_CMD_LED_CONTROL 0x20
0075 #define WAC_CMD_ICON_START 0x21
0076 #define WAC_CMD_ICON_XFER 0x23
0077 #define WAC_CMD_ICON_BT_XFER 0x26
0078 #define WAC_CMD_DELETE_PAIRING 0x20
0079 #define WAC_CMD_LED_CONTROL_GENERIC 0x32
0080 #define WAC_CMD_UNPAIR_ALL 0xFF
0081 #define WAC_CMD_WL_INTUOSP2 0x82
0082
0083
0084 #define WACOM_QUIRK_BBTOUCH_LOWRES 0x0001
0085 #define WACOM_QUIRK_SENSE 0x0002
0086 #define WACOM_QUIRK_AESPEN 0x0004
0087 #define WACOM_QUIRK_BATTERY 0x0008
0088 #define WACOM_QUIRK_TOOLSERIAL 0x0010
0089 #define WACOM_QUIRK_PEN_BUTTON3 0x0020
0090
0091
0092 #define WACOM_DEVICETYPE_NONE 0x0000
0093 #define WACOM_DEVICETYPE_PEN 0x0001
0094 #define WACOM_DEVICETYPE_TOUCH 0x0002
0095 #define WACOM_DEVICETYPE_PAD 0x0004
0096 #define WACOM_DEVICETYPE_WL_MONITOR 0x0008
0097 #define WACOM_DEVICETYPE_DIRECT 0x0010
0098
0099 #define WACOM_POWER_SUPPLY_STATUS_AUTO -1
0100
0101 #define WACOM_HID_UP_WACOMDIGITIZER 0xff0d0000
0102 #define WACOM_HID_SP_PAD 0x00040000
0103 #define WACOM_HID_SP_BUTTON 0x00090000
0104 #define WACOM_HID_SP_DIGITIZER 0x000d0000
0105 #define WACOM_HID_SP_DIGITIZERINFO 0x00100000
0106 #define WACOM_HID_WD_DIGITIZER (WACOM_HID_UP_WACOMDIGITIZER | 0x01)
0107 #define WACOM_HID_WD_PEN (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
0108 #define WACOM_HID_WD_SENSE (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
0109 #define WACOM_HID_WD_DIGITIZERFNKEYS (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
0110 #define WACOM_HID_WD_SERIALNUMBER (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
0111 #define WACOM_HID_WD_SERIALHI (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
0112 #define WACOM_HID_WD_BARRELSWITCH3 (WACOM_HID_UP_WACOMDIGITIZER | 0x5d)
0113 #define WACOM_HID_WD_TOOLTYPE (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
0114 #define WACOM_HID_WD_DISTANCE (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
0115 #define WACOM_HID_WD_TOUCHSTRIP (WACOM_HID_UP_WACOMDIGITIZER | 0x0136)
0116 #define WACOM_HID_WD_TOUCHSTRIP2 (WACOM_HID_UP_WACOMDIGITIZER | 0x0137)
0117 #define WACOM_HID_WD_TOUCHRING (WACOM_HID_UP_WACOMDIGITIZER | 0x0138)
0118 #define WACOM_HID_WD_TOUCHRINGSTATUS (WACOM_HID_UP_WACOMDIGITIZER | 0x0139)
0119 #define WACOM_HID_WD_REPORT_VALID (WACOM_HID_UP_WACOMDIGITIZER | 0x01d0)
0120 #define WACOM_HID_WD_SEQUENCENUMBER (WACOM_HID_UP_WACOMDIGITIZER | 0x0220)
0121 #define WACOM_HID_WD_ACCELEROMETER_X (WACOM_HID_UP_WACOMDIGITIZER | 0x0401)
0122 #define WACOM_HID_WD_ACCELEROMETER_Y (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
0123 #define WACOM_HID_WD_ACCELEROMETER_Z (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
0124 #define WACOM_HID_WD_BATTERY_CHARGING (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
0125 #define WACOM_HID_WD_TOUCHONOFF (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
0126 #define WACOM_HID_WD_BATTERY_LEVEL (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
0127 #define WACOM_HID_WD_EXPRESSKEY00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
0128 #define WACOM_HID_WD_EXPRESSKEYCAP00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0940)
0129 #define WACOM_HID_WD_MODE_CHANGE (WACOM_HID_UP_WACOMDIGITIZER | 0x0980)
0130 #define WACOM_HID_WD_MUTE_DEVICE (WACOM_HID_UP_WACOMDIGITIZER | 0x0981)
0131 #define WACOM_HID_WD_CONTROLPANEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0982)
0132 #define WACOM_HID_WD_ONSCREEN_KEYBOARD (WACOM_HID_UP_WACOMDIGITIZER | 0x0983)
0133 #define WACOM_HID_WD_BUTTONCONFIG (WACOM_HID_UP_WACOMDIGITIZER | 0x0986)
0134 #define WACOM_HID_WD_BUTTONHOME (WACOM_HID_UP_WACOMDIGITIZER | 0x0990)
0135 #define WACOM_HID_WD_BUTTONUP (WACOM_HID_UP_WACOMDIGITIZER | 0x0991)
0136 #define WACOM_HID_WD_BUTTONDOWN (WACOM_HID_UP_WACOMDIGITIZER | 0x0992)
0137 #define WACOM_HID_WD_BUTTONLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
0138 #define WACOM_HID_WD_BUTTONRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
0139 #define WACOM_HID_WD_BUTTONCENTER (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
0140 #define WACOM_HID_WD_FINGERWHEEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
0141 #define WACOM_HID_WD_OFFSETLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
0142 #define WACOM_HID_WD_OFFSETTOP (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
0143 #define WACOM_HID_WD_OFFSETRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32)
0144 #define WACOM_HID_WD_OFFSETBOTTOM (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
0145 #define WACOM_HID_WD_DATAMODE (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
0146 #define WACOM_HID_WD_DIGITIZERINFO (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
0147 #define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
0148 #define WACOM_HID_UP_G9 0xff090000
0149 #define WACOM_HID_G9_PEN (WACOM_HID_UP_G9 | 0x02)
0150 #define WACOM_HID_G9_TOUCHSCREEN (WACOM_HID_UP_G9 | 0x11)
0151 #define WACOM_HID_UP_G11 0xff110000
0152 #define WACOM_HID_G11_PEN (WACOM_HID_UP_G11 | 0x02)
0153 #define WACOM_HID_G11_TOUCHSCREEN (WACOM_HID_UP_G11 | 0x11)
0154 #define WACOM_HID_UP_WACOMTOUCH 0xff000000
0155 #define WACOM_HID_WT_TOUCHSCREEN (WACOM_HID_UP_WACOMTOUCH | 0x04)
0156 #define WACOM_HID_WT_TOUCHPAD (WACOM_HID_UP_WACOMTOUCH | 0x05)
0157 #define WACOM_HID_WT_CONTACTMAX (WACOM_HID_UP_WACOMTOUCH | 0x55)
0158 #define WACOM_HID_WT_SERIALNUMBER (WACOM_HID_UP_WACOMTOUCH | 0x5b)
0159 #define WACOM_HID_WT_X (WACOM_HID_UP_WACOMTOUCH | 0x130)
0160 #define WACOM_HID_WT_Y (WACOM_HID_UP_WACOMTOUCH | 0x131)
0161 #define WACOM_HID_WT_REPORT_VALID (WACOM_HID_UP_WACOMTOUCH | 0x1d0)
0162
0163 #define WACOM_BATTERY_USAGE(f) (((f)->hid == HID_DG_BATTERYSTRENGTH) || \
0164 ((f)->hid == WACOM_HID_WD_BATTERY_CHARGING) || \
0165 ((f)->hid == WACOM_HID_WD_BATTERY_LEVEL))
0166
0167 #define WACOM_PAD_FIELD(f) (((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \
0168 ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \
0169 ((f)->physical == WACOM_HID_WD_DIGITIZERINFO))
0170
0171 #define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \
0172 ((f)->physical == HID_DG_STYLUS) || \
0173 ((f)->physical == HID_DG_PEN) || \
0174 ((f)->application == HID_DG_PEN) || \
0175 ((f)->application == HID_DG_DIGITIZER) || \
0176 ((f)->application == WACOM_HID_WD_PEN) || \
0177 ((f)->application == WACOM_HID_WD_DIGITIZER) || \
0178 ((f)->application == WACOM_HID_G9_PEN) || \
0179 ((f)->application == WACOM_HID_G11_PEN))
0180 #define WACOM_FINGER_FIELD(f) (((f)->logical == HID_DG_FINGER) || \
0181 ((f)->physical == HID_DG_FINGER) || \
0182 ((f)->application == HID_DG_TOUCHSCREEN) || \
0183 ((f)->application == WACOM_HID_G9_TOUCHSCREEN) || \
0184 ((f)->application == WACOM_HID_G11_TOUCHSCREEN) || \
0185 ((f)->application == WACOM_HID_WT_TOUCHPAD) || \
0186 ((f)->application == HID_DG_TOUCHPAD))
0187
0188 #define WACOM_DIRECT_DEVICE(f) (((f)->application == HID_DG_TOUCHSCREEN) || \
0189 ((f)->application == WACOM_HID_WT_TOUCHSCREEN) || \
0190 ((f)->application == HID_DG_PEN) || \
0191 ((f)->application == WACOM_HID_WD_PEN))
0192
0193 enum {
0194 PENPARTNER = 0,
0195 GRAPHIRE,
0196 GRAPHIRE_BT,
0197 WACOM_G4,
0198 PTU,
0199 PL,
0200 DTU,
0201 DTUS,
0202 DTUSX,
0203 INTUOS,
0204 INTUOS3S,
0205 INTUOS3,
0206 INTUOS3L,
0207 INTUOS4S,
0208 INTUOS4,
0209 INTUOS4WL,
0210 INTUOS4L,
0211 INTUOS5S,
0212 INTUOS5,
0213 INTUOS5L,
0214 INTUOSPS,
0215 INTUOSPM,
0216 INTUOSPL,
0217 INTUOSP2_BT,
0218 INTUOSP2S_BT,
0219 INTUOSHT3_BT,
0220 WACOM_21UX2,
0221 WACOM_22HD,
0222 DTK,
0223 WACOM_24HD,
0224 WACOM_27QHD,
0225 CINTIQ_HYBRID,
0226 CINTIQ_COMPANION_2,
0227 CINTIQ,
0228 WACOM_BEE,
0229 WACOM_13HD,
0230 WACOM_MO,
0231 BAMBOO_PEN,
0232 INTUOSHT,
0233 INTUOSHT2,
0234 BAMBOO_TOUCH,
0235 BAMBOO_PT,
0236 WACOM_24HDT,
0237 WACOM_27QHDT,
0238 BAMBOO_PAD,
0239 WIRELESS,
0240 REMOTE,
0241 TABLETPC,
0242 TABLETPCE,
0243 TABLETPC2FG,
0244 MTSCREEN,
0245 MTTPC,
0246 MTTPC_B,
0247 HID_GENERIC,
0248 MAX_TYPE
0249 };
0250
0251 struct wacom_features {
0252 const char *name;
0253 int x_max;
0254 int y_max;
0255 int pressure_max;
0256 int distance_max;
0257 int type;
0258 int x_resolution;
0259 int y_resolution;
0260 int numbered_buttons;
0261 int offset_left;
0262 int offset_right;
0263 int offset_top;
0264 int offset_bottom;
0265 int device_type;
0266 int x_phy;
0267 int y_phy;
0268 unsigned unit;
0269 int unitExpo;
0270 int x_fuzz;
0271 int y_fuzz;
0272 int pressure_fuzz;
0273 int distance_fuzz;
0274 int tilt_fuzz;
0275 unsigned quirks;
0276 unsigned touch_max;
0277 int oVid;
0278 int oPid;
0279 int pktlen;
0280 bool check_for_hid_type;
0281 int hid_type;
0282 };
0283
0284 struct wacom_shared {
0285 bool stylus_in_proximity;
0286 bool touch_down;
0287
0288 unsigned touch_max;
0289 int type;
0290 struct input_dev *touch_input;
0291 struct hid_device *pen;
0292 struct hid_device *touch;
0293 bool has_mute_touch_switch;
0294 bool is_touch_on;
0295 };
0296
0297 struct hid_data {
0298 __s16 inputmode;
0299 __s16 inputmode_index;
0300 bool sense_state;
0301 bool inrange_state;
0302 bool invert_state;
0303 bool tipswitch;
0304 bool barrelswitch;
0305 bool barrelswitch2;
0306 bool barrelswitch3;
0307 bool serialhi;
0308 bool confidence;
0309 int x;
0310 int y;
0311 int pressure;
0312 int width;
0313 int height;
0314 int id;
0315 int cc_report;
0316 int cc_index;
0317 int cc_value_index;
0318 int last_slot_field;
0319 int num_expected;
0320 int num_received;
0321 int bat_status;
0322 int battery_capacity;
0323 int bat_charging;
0324 int bat_connected;
0325 int ps_connected;
0326 bool pad_input_event_flag;
0327 unsigned short sequence_number;
0328 };
0329
0330 struct wacom_remote_data {
0331 struct {
0332 u32 serial;
0333 bool connected;
0334 } remote[WACOM_MAX_REMOTES];
0335 };
0336
0337 struct wacom_wac {
0338 char name[WACOM_NAME_MAX];
0339 char pen_name[WACOM_NAME_MAX];
0340 char touch_name[WACOM_NAME_MAX];
0341 char pad_name[WACOM_NAME_MAX];
0342 unsigned char data[WACOM_PKGLEN_MAX];
0343 int tool[2];
0344 int id[2];
0345 __u64 serial[2];
0346 bool probe_complete;
0347 bool reporting_data;
0348 struct wacom_features features;
0349 struct wacom_shared *shared;
0350 struct input_dev *pen_input;
0351 struct input_dev *touch_input;
0352 struct input_dev *pad_input;
0353 struct kfifo_rec_ptr_2 *pen_fifo;
0354 int pid;
0355 int num_contacts_left;
0356 u8 bt_features;
0357 u8 bt_high_speed;
0358 int mode_report;
0359 int mode_value;
0360 struct hid_data hid_data;
0361 bool has_mute_touch_switch;
0362 bool is_soft_touch_switch;
0363 bool has_mode_change;
0364 bool is_direct_mode;
0365 bool is_invalid_bt_frame;
0366 };
0367
0368 #endif