diff options
Diffstat (limited to 'src/microtouch.h')
-rw-r--r-- | src/microtouch.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/microtouch.h b/src/microtouch.h new file mode 100644 index 0000000..696b12e --- /dev/null +++ b/src/microtouch.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) 1998 Metro Link Incorporated + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Except as contained in this notice, the name of the Metro Link shall not be + * used in advertising or otherwise to promote the sale, use or other dealings + * in this Software without prior written authorization from Metro Link. + * + */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/input/microtouch/microtouch.h,v 1.4 2000/03/03 20:36:41 dawes Exp $ */ + +#ifndef _microtouch_H_ +#define _microtouch_H_ + +/****************************************************************************** + * Definitions + * structs, typedefs, #defines, enums + *****************************************************************************/ +#define MuT_REPORT_SIZE 5 /* Size of a report packet. */ +#define MuT_BUFFER_SIZE 256 /* Size of input buffer. */ +#define MuT_PACKET_SIZE 10 /* Maximum size of a command/reply + * *including* */ +#define MuT_MAX_WRONG_PACKETS 20 /* Number of wrong packets to accept + * before giving up when looking for a + * specific packet type */ +#define MuT_MAX_EMPTY_PACKETS 5 /* Number of empty reads to accept before + * giving up when looking for a reply */ +#define MuT_RETRIES 3 +#define MuT_MAX_WAIT 100000 /* Max wait time for a reply + * (microsec) */ + + /* the leading and trailing bytes. */ +#define MuT_LEAD_BYTE 0x01 /* First byte of a command/reply packet. + * */ +#define MuT_TRAIL_BYTE 0x0D /* Last byte of a command/reply packet. + * */ + +/* + * Commands. + */ +#define MuT_RESET "R" /* Reset the controller. */ +#define MuT_OUTPUT_IDENT "OI" /* Ask some infos about the firmware. */ +#define MuT_UNIT_TYPE "UT" /* Ask some more infos about the * + * firmware. */ +#define MuT_UNIT_VERIFY "UV" /* Ask some more infos about the * + * firmware. some hardware only supports + * * this version */ +#define MuT_ABDISABLE "AD" /* disable auto baud detection */ +#define MuT_SETRATE "PN812" /* set com parameters to + * 8,1,none,9600 */ +#define MuT_FORMAT_TABLET "FT" /* Report events using tablet format. */ +#define MuT_FINGER_ONLY "FO" /* Always send reports. */ +#define MuT_MODE_STREAM "MS" /* Receive reports in stream mode */ +#define MuT_PARAM_LOCK "PL" /* write settings to nvram */ + +#define MuT_OK "0" /* Report success. */ +#define MuT_OK7 0xb0 /* 7bit Report success as seen in 8bit mode */ +#define MuT_ERROR "1" /* Report error. */ +#define MuT_ANY "" /* Accept any reply */ + +#define MuT_TOUCH_PEN_IDENT "P5" +#define MuT_SMT3_IDENT "Q1" +#define MuT_GENERAL_IDENT "A3" + +#define MuT_CONTACT 0x40 /* Report touch/untouch with touchscreen. */ + +#define ACK 0 +#define NACK -1 +#define TIMEOUT -2 +#define WRONG_PACKET -3 + +typedef enum +{ + microtouch_normal, microtouch_body, mtouch_binary +} +MuTState; + +typedef struct _MuTPrivateRec +{ + int min_x; /* Minimum x reported by calibration */ + int max_x; /* Maximum x */ + int min_y; /* Minimum y reported by calibration */ + int max_y; /* Maximum y */ + Bool proximity; /* is the stylus in proximity */ + Bool button_down; /* is the "button" currently down */ + int button_number; /* which button to report */ + int reporting_mode; /* TS_Raw or TS_Scaled */ + + int screen_num; /* Screen associated with the device */ + int screen_width; /* Width of the associated X screen */ + int screen_height; /* Height of the screen */ + XISBuffer *buffer; + unsigned char packet[MuT_BUFFER_SIZE]; /* packet being/just read */ + int packeti; /* index into packet */ + Bool cs7flag; + Bool binary_pkt; /* indicates packet was a binary touch */ + + MuTState lex_mode; + int bin_byte; /* bytes recieved in binary packet */ +} +MuTPrivateRec, *MuTPrivatePtr; + +/****************************************************************************** + * Declarations + *****************************************************************************/ +/*int DumpOpts (XF86OptionPtr opts); */ +static Bool DeviceControl (DeviceIntPtr dev, int mode); +static Bool DeviceOn (DeviceIntPtr dev); +static Bool DeviceOff (DeviceIntPtr dev); +static Bool DeviceInit (DeviceIntPtr dev); +static void ReadInput (LocalDevicePtr local); +static int ControlProc (LocalDevicePtr local, xDeviceCtl * control); +static void CloseProc (LocalDevicePtr local); +static int SwitchMode (ClientPtr client, DeviceIntPtr dev, int mode); +static Bool ConvertProc (LocalDevicePtr local, int first, int num, int v0, int v1, int v2, int v3, int v4, int v5, int *x, int *y); +static Bool xf86MuTSendCommand (unsigned char *type, MuTPrivatePtr priv); +static Bool QueryHardware (LocalDevicePtr local); +static void MuTNewPacket (MuTPrivatePtr priv); +static Bool xf86MuTSendPacket (unsigned char *type, int len, MuTPrivatePtr priv); +static int xf86MuTWaitReply (unsigned char *type, MuTPrivatePtr priv); +static Bool MuTGetPacket (MuTPrivatePtr priv); +static void xf86MuTPrintIdent (unsigned char *packet); +static Bool xf86MuTPrintHwStatus (unsigned char *packet); +/* + * DO NOT PUT ANYTHING AFTER THIS ENDIF + */ +#endif |