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
|
#ifndef _SAMPLE_H_
#define _SAMPLE_H_
/******************************************************************************
* Definitions
* structs, typedefs, #defines, enums
*****************************************************************************/
#define SYNAPTICS_MOVE_HISTORY 5
#define SHM_SYNAPTICS 23947
typedef struct _SynapticsTapRec
{
int x, y;
unsigned int packet;
} SynapticsTapRec;
typedef struct _SynapticsMoveHist
{
int x, y;
} SynapticsMoveHistRec;
typedef struct _SynapticsSHM {
/* Current device state */
int x, y; /* actual x, y Coordinates */
int z; /* pressure value */
int w; /* finger width value */
int left, right, up, down; /* left/right/up/down buttons */
/* Probed hardware properties */
unsigned long int model_id; /* Model-ID */
unsigned long int capabilities; /* Capabilities */
unsigned long int identity; /* Identification */
Bool isSynaptics; /* Synaptics touchpad aktiv */
/* Parameter data */
int left_edge, right_edge, top_edge, bottom_edge;
/* edge coordinates absolute */
int finger_low, finger_high; /* finger detection values in Z-values */
int tap_time, tap_move; /* max. tapping-time and movement in packets and coord. */
int emulate_mid_button_time; /* Max time between left and right button presses to
emulate a middle button press. */
int scroll_dist_vert; /* Scrolling distance in absolute coordinates */
int scroll_dist_horiz; /* Scrolling distance in absolute coordinates */
double min_speed, max_speed, accl; /* movement parameters */
int edge_motion_speed; /* Edge motion speed when dragging */
char* repeater; /* Repeater on or off */
Bool updown_button_scrolling; /* Up/Down-Button scrolling or middle/double-click */
} SynapticsSHM, *SynapticsSHMPtr;
typedef struct _SynapticsPrivateRec
{
/* shared memory pointer */
SynapticsSHMPtr synpara;
/* Data read from the touchpad */
unsigned long int model_id; /* Model-ID */
unsigned long int capabilities; /* Capabilities */
unsigned long int identity; /* Identification */
Bool isSynaptics; /* Synaptics touchpad aktiv */
/* Data for normal processing */
XISBuffer *buffer;
unsigned char protoBuf[6]; /* Buffer for Packet */
unsigned char lastByte; /* letztes gelesene byte */
Bool inSync; /* Packets in sync */
int protoBufTail;
int fifofd; /* fd for fifo */
SynapticsTapRec touch_on; /* data when the touchpad is touched */
SynapticsMoveHistRec move_hist[SYNAPTICS_MOVE_HISTORY];
/* movement history */
int scroll_y; /* last y-scroll position */
int scroll_x; /* last x-scroll position */
unsigned int count_packet_finger; /* packet counter with finger on the touchpad */
unsigned int count_packet; /* packet counter */
unsigned int count_packet_tapping; /* packet counter for tapping */
unsigned int count_button_delay; /* button delay for 3rd button emulation */
unsigned int prev_up; /* Previous up button value, for double click emulation */
Bool finger_flag; /* previous finger */
Bool tap, drag, doubletap; /* feature flags */
Bool tap_left, tap_mid, tap_right; /* tapping buttons */
Bool vert_scroll_on; /* scrolling flag */
Bool horiz_scroll_on; /* scrolling flag */
double frac_x, frac_y; /* absoulte -> relative fraction */
Bool third_button; /* emulated 3rd button */
OsTimerPtr repeat_timer; /* for up/down-button repeat */
int repeatButtons; /* buttons for repeat */
int lastButtons; /* last State of the buttons */
int finger_count; /* tap counter for fingers */
int palm; /* Set to true when palm detected, reset to false when
* palm/finger contact disappears */
int prev_z; /* previous z value, for palm detection */
int avg_w; /* weighted average of previous w values */
}
SynapticsPrivateRec, *SynapticsPrivatePtr;
static Bool DeviceControl(DeviceIntPtr, int);
static void ReadInput(LocalDevicePtr);
static int ControlProc(LocalDevicePtr, xDeviceCtl*);
static void CloseProc(LocalDevicePtr);
static int SwitchMode(ClientPtr, DeviceIntPtr, int);
static Bool ConvertProc(LocalDevicePtr, int, int, int, int, int, int, int, int, int*, int*);
static Bool QueryHardware(LocalDevicePtr);
static Bool DeviceInit(DeviceIntPtr);
static Bool DeviceOn(DeviceIntPtr);
static Bool DeviceOff(DeviceIntPtr);
static Bool DeviceInit(DeviceIntPtr);
static Bool SynapticsGetPacket(LocalDevicePtr, SynapticsPrivatePtr);
static void PrintIdent(SynapticsPrivatePtr);
/*
* DO NOT PUT ANYTHING AFTER THIS ENDIF
*/
#endif
/* Local Variables: */
/* tab-width: 4 */
/* End: */
/* vim:ts=4:sw=4:cindent:
*/
|