Rev 553 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
519 | mauro | 1 | /* |
2 | * Project: S.Ha.R.K. |
||
3 | * |
||
4 | * Coordinators: |
||
5 | * Giorgio Buttazzo <giorgio@sssup.it> |
||
6 | * Paolo Gai <pj@gandalf.sssup.it> |
||
7 | * |
||
8 | * Authors : |
||
9 | * Paolo Gai <pj@gandalf.sssup.it> |
||
10 | * Massimiliano Giorgi <massy@gandalf.sssup.it> |
||
11 | * Luca Abeni <luca@gandalf.sssup.it> |
||
12 | * Mauro Marinoni <mauro.marinoni@unipv.it> |
||
13 | * |
||
14 | * |
||
15 | * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
||
16 | * |
||
17 | * http://www.sssup.it |
||
18 | * http://retis.sssup.it |
||
19 | * http://shark.sssup.it |
||
20 | */ |
||
21 | |||
22 | /* Glue Layer Header Linux Input Driver*/ |
||
23 | |||
24 | #ifndef __SHARK_MOUSE26_H__ |
||
25 | #define __SHARK_MOUSE26_H__ |
||
26 | |||
523 | mauro | 27 | #include <kernel/const.h> |
28 | #include <kernel/model.h> |
||
29 | |||
30 | #ifdef __cplusplus |
||
31 | extern "C" { |
||
32 | #endif |
||
33 | |||
519 | mauro | 34 | /* mouse buttons constant */ |
554 | mauro | 35 | #define MOUSE_RBUTTON 0x02 |
36 | #define MOUSE_CBUTTON 0x04 |
||
37 | #define MOUSE_LBUTTON 0x01 |
||
519 | mauro | 38 | |
39 | /* the mouse event struct */ |
||
40 | typedef struct { |
||
41 | int x, y, z; /* mouse position */ |
||
523 | mauro | 42 | int dx, dy, dz; /* distance covered by mouse */ |
43 | unsigned long buttons; /* buttons flags */ |
||
519 | mauro | 44 | } MOUSE_EVT; |
45 | |||
46 | /* macros to test mouse buttons */ |
||
554 | mauro | 47 | #define isLeftButton(b) ((b) & MOUSE_LBUTTON) |
48 | #define isRightButton(b) ((b) & MOUSE_RBUTTON) |
||
49 | #define isCentralButton(b) ((b) & MOUSE_CBUTTON) |
||
519 | mauro | 50 | |
523 | mauro | 51 | /* |
52 | * mouse initialization |
||
53 | */ |
||
54 | |||
55 | /* the MOUSE_PARMS structure used by MOUSE26_init() */ |
||
56 | typedef struct mouse_parms { |
||
57 | TASK_MODEL *tm; |
||
549 | mauro | 58 | int x0, y0, z0; |
523 | mauro | 59 | int xmin; |
60 | int ymin; |
||
61 | int xmax; |
||
62 | int ymax; |
||
63 | int threshold; |
||
64 | } MOUSE_PARMS; |
||
65 | |||
66 | #define MOUSE_DEFAULT (DWORD)-1 |
||
67 | |||
68 | /* the default values for the MOUSE_PARMS structure */ |
||
69 | #define BASE_MOUSE {(TASK_MODEL *)MOUSE_DEFAULT, \ |
||
70 | (int)MOUSE_DEFAULT, \ |
||
71 | (int)MOUSE_DEFAULT, \ |
||
72 | (int)MOUSE_DEFAULT, \ |
||
73 | (int)MOUSE_DEFAULT, \ |
||
549 | mauro | 74 | (int)MOUSE_DEFAULT, \ |
75 | (int)MOUSE_DEFAULT, \ |
||
76 | (int)MOUSE_DEFAULT, \ |
||
523 | mauro | 77 | (int)MOUSE_DEFAULT} |
78 | |||
79 | /* to change the MOUSE_PARMS struct */ |
||
80 | #define mouse_default_parms(s) (s).tm = (TASK_MODEL *)MOUSE_DEFAULT, \ |
||
549 | mauro | 81 | (s).x0 = (int)MOUSE_DEFAULT, \ |
82 | (s).y0 = (int)MOUSE_DEFAULT, \ |
||
83 | (s).z0 = (int)MOUSE_DEFAULT, \ |
||
523 | mauro | 84 | (s).xmin = (int)MOUSE_DEFAULT, \ |
549 | mauro | 85 | (s).xmax = (int)MOUSE_DEFAULT, \ |
86 | (s).ymin = (int)MOUSE_DEFAULT, \ |
||
87 | (s).ymax = (int)MOUSE_DEFAULT, \ |
||
88 | (s).threshold = (int)MOUSE_DEFAULT |
||
523 | mauro | 89 | |
90 | #define mouse_def_task(s,m) (s).tm = (TASK_MODEL *)(m) |
||
549 | mauro | 91 | #define mouse_def_threshold(s,v) (s).threshold = (v) |
523 | mauro | 92 | #define mouse_def_xmin(s,v) (s).xmin = (v) |
93 | #define mouse_def_ymin(s,v) (s).ymin = (v) |
||
94 | #define mouse_def_xmax(s,v) (s).xmax = (v) |
||
95 | #define mouse_def_ymax(s,v) (s).ymax = (v) |
||
549 | mauro | 96 | #define mouse_def_x0(s,v) (s).x0 = (v) |
97 | #define mouse_def_y0(s,v) (s).y0 = (v) |
||
98 | #define mouse_def_z0(s,v) (s).y0 = (v) |
||
523 | mauro | 99 | |
519 | mauro | 100 | /* user mouse handler */ |
101 | typedef void (*MOUSE_HANDLER)(MOUSE_EVT*); |
||
102 | |||
523 | mauro | 103 | /* |
104 | * user mouse interface |
||
105 | */ |
||
549 | mauro | 106 | int MOUSE26_installed(void); |
523 | mauro | 107 | int MOUSE26_init(MOUSE_PARMS *s); |
108 | int MOUSE26_close(void); |
||
109 | |||
110 | void mouse_enable(void); |
||
111 | void mouse_disable(void); |
||
549 | mauro | 112 | void mouse_getposition(int *x, int *y, int *z, unsigned long *buttons); |
113 | void mouse_setposition(int x, int y, int z); |
||
114 | void mouse_getlimits(int *xmin, int *ymin, int *xmax, int *ymax); |
||
115 | int mouse_setlimits(int xmin, int ymin, int xmax, int ymax); |
||
523 | mauro | 116 | int mouse_getthreshold(void); |
117 | int mouse_setthreshold(int t); |
||
118 | void mouse_hook(MOUSE_HANDLER h); |
||
519 | mauro | 119 | |
538 | mauro | 120 | |
121 | /* |
||
122 | * |
||
123 | * mouse autocursor management |
||
124 | * |
||
125 | */ |
||
126 | |||
127 | /* commands for mouse_grxcursor() & mouse_txtcursor() */ |
||
128 | #define DISABLE 0x00 |
||
129 | #define ENABLE 0x01 |
||
130 | |||
131 | /* flags for mouse_grxcursor() & mouse_txtcursor() (to use with '|') */ |
||
132 | #define WITHOUTSEM 0x10 |
||
133 | #define AUTOOFF 0x20 |
||
134 | |||
135 | /* mask to extrac the status from autocursormode */ |
||
136 | #define STATUSMASK 0x0f |
||
137 | |||
138 | /* flags for autocursormode (there are some other flags into mouse.h) */ |
||
139 | #define GRXCURSOR 0x100 |
||
140 | #define TXTCURSOR 0x200 |
||
141 | |||
142 | /* dimensions of the grx shape */ |
||
143 | #define MOUSESHAPEDX 16 |
||
144 | #define MOUSESHAPEDY 16 |
||
145 | |||
146 | /* hot-spot of the grx image (coordinates of the center's shape, zero-based) */ |
||
147 | #define MOUSEHOTSPOTX 3 |
||
148 | #define MOUSEHOTSPOTY 1 |
||
149 | |||
150 | /* those macros can be used to set the correct mouse_limit() when |
||
151 | * the graphics autocursor is enable (to avoid wrong shape position because |
||
152 | * there is not graphics clip functions) |
||
153 | */ |
||
154 | #define XMINLIMIT(dimx,dimy) (MOUSEHOTSPOTX) |
||
155 | #define XMAXLIMIT(dimx,dimy) ((dimx)-MOUSESHAPEDX+MOUSEHOTSPOTX) |
||
156 | #define YMINLIMIT(dimx,dimy) (MOUSEHOTSPOTY) |
||
157 | #define YMAXLIMIT(dimx,dimy) ((dimy)-MOUSESHAPEDY+MOUSEHOTSPOTY) |
||
158 | |||
549 | mauro | 159 | #define mouse_grxlimits(dimx,dimy) mouse_setlimits(\ |
538 | mauro | 160 | XMINLIMIT(dimx,dimy), \ |
161 | YMINLIMIT(dimx,dimy), \ |
||
162 | XMAXLIMIT(dimx,dimy), \ |
||
163 | YMAXLIMIT(dimx,dimy) \ |
||
164 | ) |
||
165 | |||
166 | /* these are used to select the mouse shape */ |
||
167 | int mouse_txtshape(DWORD img); |
||
168 | int mouse_grxshape(BYTE *shape, BYTE *mask, int bpp_in); |
||
169 | |||
170 | /* enable/disable mouse pointer */ |
||
171 | /* (return <0 on error) */ |
||
172 | /* (for the cmd parameter see above) */ |
||
173 | int mouse_grxcursor(int cmd, int bpp); |
||
174 | int mouse_txtcursor(int cmd); |
||
175 | |||
176 | /* mouse on/off (or show/hide) */ |
||
177 | void (*mouse_on)(void); |
||
178 | void (*mouse_off)(void); |
||
179 | |||
523 | mauro | 180 | #ifdef __cplusplus |
181 | }; |
||
519 | mauro | 182 | #endif |
183 | |||
523 | mauro | 184 | #endif |
185 |