summaryrefslogtreecommitdiff
path: root/src/microtouch.h
blob: 696b12e77677c54e9cf07715300316e552be19ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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