/shark/trunk/drivers/input/makefile.full |
---|
File deleted |
/shark/trunk/drivers/input/joystick/analog.c |
---|
1,5 → 1,5 |
/* |
* $Id: analog.c,v 1.1 2004-03-08 18:47:38 giacomo Exp $ |
* $Id: analog.c,v 1.2 2004-03-29 18:27:43 mauro Exp $ |
* |
* Copyright (c) 1996-2001 Vojtech Pavlik |
*/ |
139,9 → 139,13 |
*/ |
#ifdef __i386__ |
#define GET_TIME(x) do { if (cpu_has_tsc) rdtscl(x); else x = get_time_pit(); } while (0) |
/* !!! Added by Nino !!! */ |
#define GET_TIME(x) (x = get_time_pit()) |
#define DELTA(x,y) ((y)-(x)) |
#define TIME_NAME ("Shark") |
/*#define GET_TIME(x) do { if (cpu_has_tsc) rdtscl(x); else x = get_time_pit(); } while (0) |
#define DELTA(x,y) (cpu_has_tsc?((y)-(x)):((x)-(y)+((x)<(y)?1193182L/HZ:0))) |
#define TIME_NAME (cpu_has_tsc?"TSC":"PIT") |
#define TIME_NAME (cpu_has_tsc?"TSC":"PIT")*/ |
static unsigned int get_time_pit(void) |
{ |
extern spinlock_t i8253_lock; |
335,7 → 339,7 |
if (port->analog[i].mask) |
analog_decode(port->analog + i, port->axes, port->initial, port->buttons); |
mod_timer(&port->timer, jiffies + ANALOG_REFRESH_TIME); |
mod_timer(&port->timer, jiffies26 + ANALOG_REFRESH_TIME); |
} |
/* |
346,7 → 350,7 |
{ |
struct analog_port *port = dev->private; |
if (!port->used++) |
mod_timer(&port->timer, jiffies + ANALOG_REFRESH_TIME); |
mod_timer(&port->timer, jiffies26 + ANALOG_REFRESH_TIME); |
return 0; |
} |
/shark/trunk/drivers/input/include/drivers/shark_joy26.h |
---|
0,0 → 1,46 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Mauro Marinoni <mauro.marinoni@unipv.it> |
* |
* |
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
* |
* http://www.sssup.it |
* http://retis.sssup.it |
* http://shark.sssup.it |
*/ |
/* |
* Copyright (C) 2000 Paolo Gai |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
*/ |
/* Game Header Linux Input Driver*/ |
#ifndef __SHARK_JOY26_H__ |
#define __SHARK_JOY26_H__ |
int JOY26_init(void); |
int JOY26_close(void); |
#endif |
/shark/trunk/drivers/input/include/drivers/shark_mouse26.h |
---|
125,6 → 125,66 |
int mouse_setthreshold(int t); |
void mouse_hook(MOUSE_HANDLER h); |
/* |
* |
* mouse autocursor management |
* |
*/ |
/* commands for mouse_grxcursor() & mouse_txtcursor() */ |
#define DISABLE 0x00 |
#define ENABLE 0x01 |
/* flags for mouse_grxcursor() & mouse_txtcursor() (to use with '|') */ |
#define WITHOUTSEM 0x10 |
#define AUTOOFF 0x20 |
/* mask to extrac the status from autocursormode */ |
#define STATUSMASK 0x0f |
/* flags for autocursormode (there are some other flags into mouse.h) */ |
#define GRXCURSOR 0x100 |
#define TXTCURSOR 0x200 |
/* dimensions of the grx shape */ |
#define MOUSESHAPEDX 16 |
#define MOUSESHAPEDY 16 |
/* hot-spot of the grx image (coordinates of the center's shape, zero-based) */ |
#define MOUSEHOTSPOTX 3 |
#define MOUSEHOTSPOTY 1 |
/* those macros can be used to set the correct mouse_limit() when |
* the graphics autocursor is enable (to avoid wrong shape position because |
* there is not graphics clip functions) |
*/ |
#define XMINLIMIT(dimx,dimy) (MOUSEHOTSPOTX) |
#define XMAXLIMIT(dimx,dimy) ((dimx)-MOUSESHAPEDX+MOUSEHOTSPOTX) |
#define YMINLIMIT(dimx,dimy) (MOUSEHOTSPOTY) |
#define YMAXLIMIT(dimx,dimy) ((dimy)-MOUSESHAPEDY+MOUSEHOTSPOTY) |
#define mouse_grxlimit(dimx,dimy) mouse_limit(\ |
XMINLIMIT(dimx,dimy), \ |
YMINLIMIT(dimx,dimy), \ |
XMAXLIMIT(dimx,dimy), \ |
YMAXLIMIT(dimx,dimy) \ |
) |
/* these are used to select the mouse shape */ |
int mouse_txtshape(DWORD img); |
int mouse_grxshape(BYTE *shape, BYTE *mask, int bpp_in); |
/* enable/disable mouse pointer */ |
/* (return <0 on error) */ |
/* (for the cmd parameter see above) */ |
int mouse_grxcursor(int cmd, int bpp); |
int mouse_txtcursor(int cmd); |
/* mouse on/off (or show/hide) */ |
void (*mouse_on)(void); |
void (*mouse_off)(void); |
#ifdef __cplusplus |
}; |
#endif |
/shark/trunk/drivers/input/shark/shark_mouse.c |
---|
75,7 → 75,8 |
static int mouse_z = 0; |
static unsigned long mouse_buttons = 0; |
static MOUSE_HANDLER mouse_handler = NULL; |
MOUSE_HANDLER user_mouse_handler = NULL; |
MOUSE_HANDLER show_mouse_handler = NULL; |
#ifdef MOUSE_TASK |
/* mouse task PID */ |
143,7 → 144,10 |
dx, dy, dz, (int)dbuttons, mouse_x, mouse_y, mouse_z, (int)mouse_buttons); |
#endif |
/* mouse handler */ |
if (mouse_handler!=NULL) mouse_handler(&ev); |
if (show_mouse_handler != NULL) |
show_mouse_handler(&ev); |
else if (user_mouse_handler != NULL) |
user_mouse_handler(&ev); |
} |
} |
#ifdef MOUSE_TASK |
216,7 → 220,7 |
void mouse_hook(MOUSE_HANDLER h) |
{ |
mouse_handler = h; |
user_mouse_handler = h; |
} |
int mouse_getthreshold(void) |
/shark/trunk/drivers/input/shark/mcurtxt.c |
---|
0,0 → 1,348 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@gandalf.sssup.it> |
* Massimiliano Giorgi <massy@gandalf.sssup.it> |
* Luca Abeni <luca@gandalf.sssup.it> |
* Mauro Marinoni <mauro.marinoni@unipv.it> |
* (see the web pages for full authors list) |
* |
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
* |
* http://www.sssup.it |
* http://retis.sssup.it |
* http://shark.sssup.it |
*/ |
/* |
* Copyright (C) 2000 Paolo Gai |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
*/ |
/* |
* |
* Auto Pointer management |
* |
*/ |
#include <kernel/kern.h> |
#include <modules/sem.h> |
#include "../include/drivers/shark_input26.h" |
#include "../include/drivers/shark_mouse26.h" |
//#define CURTXT_DEBUG |
/* these variables are managed by this module but MUST be declared |
* into shark_mouse.c to prevent implicit inclusion of this module |
* when a user link the mouse library |
*/ |
extern MOUSE_HANDLER show_mouse_handler; |
extern MOUSE_HANDLER user_mouse_handler; |
/* a mutex semaphore */ |
static sem_t mutex=-1; |
/* Setup function */ |
int _mouse_cursor_init(int cmd, void(*my_show_cursor)(int, int), void(*my_restore_cursor)(int, int)); |
/* |
* |
* autocursor mouse handler |
* |
*/ |
/* >=0 hide cursor; <0 show cursor */ |
static int mouse_cursor_state = 0; |
/* mouse status */ |
static int autocursormode = 0; |
/* saved mouse_position */ |
static int saved_x, saved_y; |
static void dummy(int x,int y){} |
static void (*show_cursor)(int x, int y) = dummy; |
static void (*restore_cursor)(int x, int y) = dummy; |
/* those are the 4 mouse handlers */ |
/* AUTOOFF -> call the user handler with no mouse displayed */ |
/* WITHOUTSEM -> does not use a mutex semaphore */ |
/* with no flags */ |
static void autocursor_mouse_handler_1(MOUSE_EVT *event) |
{ |
#ifdef CURTXT_DEBUG |
printk(KERN_DEBUG "mcurtxt.c: autocursor_mouse_handler_1\n"); |
#endif |
if (user_mouse_handler != NULL) |
user_mouse_handler(event); |
sem_wait(&mutex); |
if ( (mouse_cursor_state < 0) && (event->x != saved_x || event->y != saved_y)) { |
restore_cursor(saved_x, saved_y); |
saved_x = event->x; |
saved_y = event->y; |
show_cursor(saved_x, saved_y); |
} |
sem_post(&mutex); |
} |
/* with WITHOUTSEM flag*/ |
static void autocursor_mouse_handler_2(MOUSE_EVT *event) |
{ |
#ifdef CURTXT_DEBUG |
printk(KERN_DEBUG "mcurtxt.c: autocursor_mouse_handler_2\n"); |
#endif |
if (user_mouse_handler != NULL) |
user_mouse_handler(event); |
if ( (mouse_cursor_state < 0) && (event->x != saved_x || event->y != saved_y)) { |
restore_cursor(saved_x, saved_y); |
saved_x = event->x; |
saved_y = event->y; |
show_cursor(saved_x, saved_y); |
} |
} |
/* with AUTOOFF flag*/ |
static void autocursor_mouse_handler_3(MOUSE_EVT *event) |
{ |
#ifdef CURTXT_DEBUG |
printk(KERN_DEBUG "mcurtxt.c: autocursor_mouse_handler_3\n"); |
#endif |
sem_wait(&mutex); |
if (mouse_cursor_state < 0) { |
restore_cursor(saved_x, saved_y); |
saved_x = event->x; |
saved_y = event->y; |
if (user_mouse_handler != NULL) |
user_mouse_handler(event); |
show_cursor(saved_x, saved_y); |
} else if (user_mouse_handler != NULL) |
user_mouse_handler(event); |
sem_post(&mutex); |
} |
/* with WITHOUTSEM & AUTOOFF flags */ |
static void autocursor_mouse_handler_4(MOUSE_EVT *event) |
{ |
#ifdef CURTXT_DEBUG |
printk(KERN_DEBUG "mcurtxt.c: autocursor_mouse_handler_4\n"); |
#endif |
if (mouse_cursor_state < 0) { |
restore_cursor(saved_x, saved_y); |
saved_x = event->x; |
saved_y = event->y; |
if (user_mouse_handler != NULL) |
user_mouse_handler(event); |
show_cursor(saved_x, saved_y); |
} else if (user_mouse_handler != NULL) |
user_mouse_handler(event); |
} |
/* -------------- |
* TXT management |
* -------------- |
*/ |
/* text cursor shape */ |
#define DEFAULTTXTSHAPE 0x7700ffff |
static DWORD saved_txtshape = DEFAULTTXTSHAPE; |
static BYTE attr_andmask, attr_xormask; |
static BYTE c_andmask, c_xormask; |
/* saved values */ |
static BYTE saved_attr, saved_c; |
/* show txt cursor */ |
void show_txt_cursor(int x, int y) |
{ |
int attr,c; |
getc_xy(x, y, &saved_attr, &saved_c); |
attr = (saved_attr & attr_andmask) ^ attr_xormask; |
c = (saved_c & c_andmask) ^ c_xormask; |
putc_xy(x, y, attr, c); |
} |
/* restore txt cursor */ |
static void restore_txt_cursor(int x, int y) |
{ |
putc_xy(x, y, saved_attr, saved_c); |
} |
/* define text shape */ |
int mouse_txtshape(DWORD img) |
{ |
int cond; |
if (img == DEFAULT) |
img = DEFAULTTXTSHAPE; |
cond = ( (autocursormode & STATUSMASK) == ENABLE && (autocursormode & TXTCURSOR) == TXTCURSOR ); |
if (cond) |
restore_txt_cursor(saved_x, saved_y); |
saved_txtshape = img; |
c_andmask = img & 0xff; |
attr_andmask = (img & 0xff00) >> 8; |
c_xormask = (img & 0xff0000) >> 16; |
attr_xormask = (img & 0xff000000) >> 24; |
#ifdef CURTXT_DEBUG |
printk(KERN_DEBUG "MouseTxt_Shape: %x %x %x %x\n", c_andmask, attr_andmask, c_xormask, attr_xormask); |
#endif |
if (cond) |
show_txt_cursor(saved_x, saved_y); |
return 0; |
} |
/* |
* User interface to autocursor functions |
*/ |
/* display the cursor */ |
#define MOUSE_ON() { \ |
int unused; \ |
unsigned long lunused; \ |
mouse_cursor_state--; \ |
if (mouse_cursor_state == -1) { \ |
mouse_getpos(&saved_x, &saved_y, &unused, &lunused); \ |
show_cursor(saved_x, saved_y); \ |
} \ |
} |
static void mouse_on_sem(void) |
{ |
sem_wait(&mutex); |
MOUSE_ON(); |
sem_post(&mutex); |
} |
static void mouse_on_nosem(void) |
{ |
MOUSE_ON(); |
} |
void (*mouse_on)(void)=mouse_on_nosem; |
/* hide the cursor */ |
#define MOUSE_OFF() { \ |
mouse_cursor_state++; \ |
if (mouse_cursor_state == 0) \ |
restore_cursor(saved_x, saved_y); \ |
} |
void mouse_off_sem(void) |
{ |
sem_wait(&mutex); |
MOUSE_OFF(); |
sem_post(&mutex); |
} |
void mouse_off_nosem(void) |
{ |
MOUSE_OFF(); |
} |
void (*mouse_off)(void) = mouse_off_nosem; |
static MOUSE_HANDLER wich_handler(int cmd) |
{ |
if ( ((cmd & WITHOUTSEM) == WITHOUTSEM) && ((cmd & AUTOOFF) == AUTOOFF) ) |
return autocursor_mouse_handler_4; |
if ((cmd & WITHOUTSEM) == WITHOUTSEM) |
return autocursor_mouse_handler_2; |
if ((cmd & AUTOOFF) == AUTOOFF) |
return autocursor_mouse_handler_3; |
return autocursor_mouse_handler_1; |
} |
int mouse_txtcursor(int cmd) |
{ |
mouse_txtshape(saved_txtshape); |
return _mouse_cursor_init(cmd|TXTCURSOR, show_txt_cursor, restore_txt_cursor); |
} |
/* Generic functions, both for text & graphics mode */ |
int _mouse_cursor_init(int cmd, void(*my_show_cursor)(int, int), void(*my_restore_cursor)(int, int)) |
{ |
if (mutex == -1) { |
if (sem_init(&mutex, 0, 1) == -1) |
return -1; |
} |
#ifdef CURTXT_DEBUG |
printk(KERN_DEBUG "mouse_cursor_init: command %x\n", cmd); |
#endif |
switch (cmd & STATUSMASK) { |
case DISABLE: |
//show_mouse_handler = user_mouse_handler; |
show_mouse_handler = NULL; |
restore_cursor(saved_x, saved_y); |
show_cursor = dummy; |
restore_cursor = dummy; |
mouse_cursor_state = 0; |
break; |
case ENABLE: |
restore_cursor(saved_x, saved_y); |
restore_cursor = my_restore_cursor; |
show_cursor = my_show_cursor; |
if ((autocursormode & STATUSMASK) == DISABLE) { |
//user_mouse_handler = show_mouse_handler; |
show_mouse_handler = wich_handler(cmd); |
} |
mouse_cursor_state = -1; |
break; |
default: |
return -1; |
} |
autocursormode = cmd; |
if ((autocursormode & STATUSMASK) == ENABLE) { |
if ((cmd & WITHOUTSEM) == WITHOUTSEM) { |
mouse_on = mouse_on_nosem; |
mouse_off = mouse_off_nosem; |
} else { |
mouse_on = mouse_on_sem; |
mouse_off = mouse_off_sem; |
} |
} |
return 0; |
} |
void _mouse_cursor_getposition(int *xptr, int *yptr) |
{ |
*xptr = saved_x; |
*yptr = saved_y; |
} |
/shark/trunk/drivers/input/shark/shark_input.c |
---|
51,16 → 51,6 |
/*extern int serport_init(void); |
extern int serport_exit(void);*/ |
/* Devices */ |
/*extern int ns558_init(void); |
extern int ns558_exit(void); |
extern int analog_init(void); |
extern int analog_exit(void); |
extern int joydump_init(void); |
extern int joydump_exit(void);*/ |
/* Handlers */ |
extern int evbug_init(void); |
extern int evbug_exit(void); |
116,41 → 106,7 |
return -1; |
} |
/* Init the Linux Joystick Driver */ |
/*int JOY26_init() { |
int ret; |
if (input_installed == FALSE) |
if (INPUT26_init()) { |
printk(KERN_ERR "Unable to open Input SubSystem.\n"); |
return -1; |
} |
ret = ns558_init(); |
if (ret) { |
printk(KERN_ERR "Gameport_Init return: %d\n", ret); |
return -1; |
} |
//ret = analog_init(); |
ret = joydump_init(); |
if (ret) { |
printk(KERN_ERR "Joystick_Init return: %d\n", ret); |
return -1; |
} |
return 0; |
} |
int JOY26_close() { |
//analog_exit(); |
joydump_exit(); |
ns558_exit(); |
return 0; |
}*/ |
/* Init the Linux Event Debug Driver */ |
int EVBUG26_init() { |
evbug_init(); |
/shark/trunk/drivers/input/shark/mcurgrx.c |
---|
0,0 → 1,205 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Paolo Gai <pj@gandalf.sssup.it> |
* Massimiliano Giorgi <massy@gandalf.sssup.it> |
* Luca Abeni <luca@gandalf.sssup.it> |
* (see the web pages for full authors list) |
* |
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
* |
* http://www.sssup.it |
* http://retis.sssup.it |
* http://shark.sssup.it |
*/ |
/* |
* Copyright (C) 2000 Paolo Gai |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
*/ |
/*---------------* |
* GRX Management* |
*---------------*/ |
#include <kernel/kern.h> |
//#include <drivers/glib.h> |
#include "../include/drivers/shark_input26.h" |
#include "../include/drivers/shark_mouse26.h" |
/* External functions */ |
extern void grx_getimage(WORD x1, WORD y1, WORD x2, WORD y2, BYTE *buf); |
extern void grx_putimage(WORD x1, WORD y1, WORD x2, WORD y2, BYTE *buf); |
extern int _mouse_cursor_init(int cmd, void(*my_show_cursor)(int, int), void(*my_restore_cursor)(int, int)); |
extern void _mouse_cursor_getposition(int *xptr, int *yptr); |
extern int autocursormode; |
static BYTE left_ptr_bits[] = { 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x38, 0x00, |
0x78, 0x00, 0xf8, 0x00, 0xf8, 0x01, 0xf8, 0x03, |
0xf8, 0x07, 0xf8, 0x00, 0xd8, 0x00, 0x88, 0x01, |
0x80, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00 }; |
static BYTE left_ptrmsk_bits[] = { 0x0c, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x7c, 0x00, |
0xfc, 0x00, 0xfc, 0x01, 0xfc, 0x03, 0xfc, 0x07, |
0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x01, 0xdc, 0x03, |
0xcc, 0x03, 0x80, 0x07, 0x80, 0x07, 0x00, 0x03 }; |
/* dimensions (16x16) */ |
#define SHAPE_DX MOUSESHAPEDX |
#define SHAPE_DY MOUSESHAPEDY |
/* shape hot spot (3,1) */ |
#define HOTSPOT_X MOUSEHOTSPOTX |
#define HOTSPOT_Y MOUSEHOTSPOTY |
/* cursor shape */ |
static BYTE shape[SHAPE_DX * SHAPE_DY * 4]; |
/* cursor mask */ |
static BYTE mask[SHAPE_DX * SHAPE_DY * 4]; |
/* old memory buffer */ |
static BYTE saved_shape[SHAPE_DX * SHAPE_DY * 4]; |
/* new memory buffer */ |
static BYTE new_shape[SHAPE_DX * SHAPE_DY * 4]; |
static BYTE *saved_shapeptr = (void*)DEFAULT; |
static BYTE *saved_maskptr = (void*)DEFAULT; |
static int bpp; // bytes per pixel |
/* if called with NULL -> retrieve next bit of a bits-stream |
* else -> initialize the bit stream |
*/ |
static int get_bit(BYTE *p) |
{ |
static BYTE *ptr; |
static BYTE val; |
static int c; |
if (p != NULL) { |
ptr = p; |
val = 0; |
c = 8; |
return 0; |
} |
if (c==8) { |
c = 0; |
val = *ptr; |
ptr++; |
} else |
val >>= 1; |
c++; |
return val&1; |
} |
/* show grx cursor */ |
static void show_grx_cursor(int x, int y) |
{ |
int i; |
x -= HOTSPOT_X - 1; |
y -= HOTSPOT_Y - 1; |
grx_getimage(x, y, x+SHAPE_DX-1, y+SHAPE_DY-1, saved_shape); |
for(i=0; i < SHAPE_DX*SHAPE_DY*bpp/4; i++) |
((DWORD*)new_shape)[i] = ( ((DWORD*)saved_shape)[i] & ((DWORD*)mask)[i] ) | ((DWORD*)shape)[i]; |
grx_putimage(x, y, x+SHAPE_DX-1, y+SHAPE_DY-1, new_shape); |
} |
/* restore grx cursor */ |
static void restore_grx_cursor(int x, int y) |
{ |
x -= HOTSPOT_X - 1; |
y -= HOTSPOT_Y - 1; |
grx_putimage(x, y, x+SHAPE_DX-1, y+SHAPE_DY-1, saved_shape); |
} |
int mouse_grxcursor(int cmd, int bpp) |
{ |
mouse_grxshape(saved_shapeptr, saved_maskptr, bpp); |
return _mouse_cursor_init(cmd|GRXCURSOR, show_grx_cursor, restore_grx_cursor); |
} |
/* compute the shape and mask array */ |
int mouse_grxshape(BYTE *shapeptr, BYTE *maskptr, int bpp_in) |
{ |
BYTE b; |
int pc; |
int i,j; |
int saved_x, saved_y; |
int cond; |
/*int result; |
grx_vga_modeinfo info;*/ |
/* Autocalculate bpp */ |
/*result = gd_getmodeinfo(&info); |
if (result == -1) |
return -1; |
bpp = info.bytesperpixel;*/ |
cond = ( ((autocursormode & STATUSMASK) == ENABLE) && ((autocursormode & GRXCURSOR) == GRXCURSOR) ); |
if (cond) { |
_mouse_cursor_getposition(&saved_x,&saved_y); |
restore_grx_cursor(saved_x,saved_y); |
} |
if (bpp_in != -1) |
bpp = bpp_in; |
if (shapeptr == (void*)DEFAULT) { |
shapeptr = left_ptr_bits; |
pc = 0; |
get_bit(left_ptr_bits); |
for (i = 0; i < SHAPE_DX*SHAPE_DY; i++) { |
b = get_bit(NULL) ? 255 : 0; |
for (j = 0; j < bpp; j++) |
shape[pc++] = b; |
} |
} else { |
memcpy(shape, shapeptr, SHAPE_DX*SHAPE_DY*bpp); |
saved_shapeptr = shapeptr; |
} |
if (maskptr == (void*)DEFAULT) { |
maskptr = left_ptrmsk_bits; |
pc = 0; |
get_bit(left_ptrmsk_bits); |
for (i = 0; i < SHAPE_DX*SHAPE_DY; i++) { |
b=get_bit(NULL)?0:255; |
for (j = 0; j < bpp; j++) |
mask[pc++] = b; |
} |
} else { |
memcpy(mask, maskptr, SHAPE_DX*SHAPE_DY*bpp); |
saved_maskptr = maskptr; |
} |
if (cond) |
show_grx_cursor(saved_x,saved_y); |
return 0; |
} |
/shark/trunk/drivers/input/shark/shark_joy.c |
---|
0,0 → 1,112 |
/* |
* Project: S.Ha.R.K. |
* |
* Coordinators: |
* Giorgio Buttazzo <giorgio@sssup.it> |
* Paolo Gai <pj@gandalf.sssup.it> |
* |
* Authors : |
* Mauro Marinoni <mauro.marinoni@unipv.it> |
* |
* |
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy) |
* |
* http://www.sssup.it |
* http://retis.sssup.it |
* http://shark.sssup.it |
*/ |
/* |
* Copyright (C) 2000 Paolo Gai |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
*/ |
#define __JOY_DEBUG__ |
//#define __JOY_DUMP__ |
#include <kernel/kern.h> |
#include "../include/drivers/shark_input26.h" |
#include "../include/drivers/shark_joy26.h" |
#include <kernel/func.h> |
/* Devices */ |
extern int ns558_init(void); |
extern int ns558_exit(void); |
extern int analog_init(void); |
extern int analog_exit(void); |
extern int joydump_init(void); |
extern int joydump_exit(void); |
/* Handler */ |
extern int joystick_init(void); |
extern int joystick_exit(void); |
extern int input_installed; |
/* User Functions */ |
/* Init the Linux Joystick Driver */ |
int JOY26_init() { |
int ret; |
if (input_installed == FALSE) |
if (INPUT26_init()) { |
printk(KERN_ERR "Unable to open Input SubSystem.\n"); |
return -1; |
} |
ret = ns558_init(); |
if (ret) { |
printk(KERN_ERR "Gameport_Init return: %d\n", ret); |
return -1; |
} |
#ifdef __JOY_DUMP__ |
ret = joydump_init(); |
#else |
ret = analog_init(); |
#endif |
if (ret) { |
printk(KERN_ERR "Joystick_Device_Init return: %d\n", ret); |
return -1; |
} |
ret = joystick_init(); |
if (ret) { |
printk(KERN_ERR "Joystick_Handler_Init return: %d\n", ret); |
return -1; |
} |
return 0; |
} |
int JOY26_close() { |
joystick_exit(); |
#ifdef __JOY_DUMP__ |
joydump_exit(); |
#else |
analog_exit(); |
#endif |
ns558_exit(); |
return 0; |
} |
/shark/trunk/drivers/input/handler/joystick.c |
---|
0,0 → 1,126 |
/* |
* Input driver event debug module - dumps all events into syslog |
*/ |
/* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
* (at your option) any later version. |
* |
* This program is distributed in the hope that it will be useful, |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with this program; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*/ |
#include <linuxcomp.h> |
#include <linux/slab.h> |
#include <linux/module.h> |
#include <linux/input.h> |
#include <linux/init.h> |
#include <linux/device.h> |
//#define DEBUG_JOY |
MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); |
MODULE_DESCRIPTION("Input driver joystick module"); |
MODULE_LICENSE("GPL"); |
static char joystick_name[] = "joystick"; |
static struct input_handler joystick_handler; |
static void joystick_event(struct input_handle *handle, unsigned int type, unsigned int code, int value) |
{ |
#ifdef DEBUG_JOY |
printk(KERN_DEBUG "joystick.c: Event. Dev: %s, Type: %d, Code: %d, Value: %d\n", handle->dev->phys, type, code, value); |
#endif |
} |
static struct input_handle *joystick_connect(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id) |
{ |
struct input_handle *handle; |
/* Avoid tablets */ |
if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_TOUCH, dev->keybit)) |
return NULL; |
if (!(handle = kmalloc(sizeof(struct input_handle), GFP_KERNEL))) |
return NULL; |
memset(handle, 0, sizeof(struct input_handle)); |
handle->dev = dev; |
handle->handler = handler; |
handle->name = joystick_name; |
input_open_device(handle); |
#ifdef DEBUG_JOY |
printk(KERN_DEBUG "joystick.c: Connected device: \"%s\", %s\n", dev->name, dev->phys); |
#endif |
return handle; |
} |
static void joystick_disconnect(struct input_handle *handle) |
{ |
#ifdef DEBUG_JOY |
printk(KERN_DEBUG "joystick.c: Disconnected device: %s\n", handle->dev->phys); |
#endif |
input_close_device(handle); |
kfree(handle); |
} |
/*static struct input_device_id joystick_ids[] = { |
{ .driver_info = 1 }, // Matches all devices |
{ }, // Terminating zero entry |
};*/ |
static struct input_device_id joystick_ids[] = { |
{ |
.flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_ABSBIT, |
.evbit = { BIT(EV_ABS) }, |
.absbit = { BIT(ABS_X) }, |
}, |
{ |
.flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_ABSBIT, |
.evbit = { BIT(EV_ABS) }, |
.absbit = { BIT(ABS_WHEEL) }, |
}, |
{ |
.flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_ABSBIT, |
.evbit = { BIT(EV_ABS) }, |
.absbit = { BIT(ABS_THROTTLE) }, |
}, |
{ }, /* Terminating entry */ |
}; |
MODULE_DEVICE_TABLE(input, joystick_ids); |
static struct input_handler joystick_handler = { |
.event = joystick_event, |
.connect = joystick_connect, |
.disconnect = joystick_disconnect, |
.name = "joystick", |
.id_table = joystick_ids, |
}; |
int __init joystick_init(void) |
{ |
input_register_handler(&joystick_handler); |
return 0; |
} |
void __exit joystick_exit(void) |
{ |
input_unregister_handler(&joystick_handler); |
} |
module_init(joystick_init); |
module_exit(joystick_exit); |
/shark/trunk/drivers/input/handler/keyboard.c |
---|
1,14 → 1,8 |
/* |
* $Id: keyboard.c,v 1.2 2004-03-23 15:37:21 mauro Exp $ |
* |
* Copyright (c) 1999-2001 Vojtech Pavlik |
* Input driver keyboard module |
*/ |
/* |
* Input driver event debug module - dumps all events into syslog |
*/ |
/* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
38,7 → 32,7 |
//#define DEBUG_KBD |
MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); |
MODULE_DESCRIPTION("Input driver event debug module"); |
MODULE_DESCRIPTION("Input driver keyboard module"); |
MODULE_LICENSE("GPL"); |
extern void shark_kbd_exec(void); |
/shark/trunk/drivers/input/handler/mouse.c |
---|
1,14 → 1,8 |
/* |
* $Id: mouse.c,v 1.2 2004-03-25 10:37:48 mauro Exp $ |
* |
* Copyright (c) 1999-2001 Vojtech Pavlik |
* Input driver mouse module |
*/ |
/* |
* Input driver event debug module - dumps all events into syslog |
*/ |
/* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
31,7 → 25,7 |
//#define DEBUG_MOUSE |
MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); |
MODULE_DESCRIPTION("Input driver event debug module"); |
MODULE_DESCRIPTION("Input driver mouse module"); |
MODULE_LICENSE("GPL"); |
extern void shark_mouse_exec(void); |
/shark/trunk/drivers/input/handler/speaker.c |
---|
1,14 → 1,8 |
/* |
* $Id: speaker.c,v 1.1 2004-03-22 14:48:15 mauro Exp $ |
* |
* Copyright (c) 1999-2001 Vojtech Pavlik |
* Input driver speaker module |
*/ |
/* |
* Input driver event debug module - dumps all events into syslog |
*/ |
/* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* the Free Software Foundation; either version 2 of the License, or |
35,7 → 29,7 |
//#define DEBUG_SPK |
MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); |
MODULE_DESCRIPTION("Input driver event debug module"); |
MODULE_DESCRIPTION("Input driver joystick module"); |
MODULE_LICENSE("GPL"); |
static char speaker_name[] = "speaker"; |
/shark/trunk/drivers/input/makefile |
---|
14,11 → 14,14 |
mouse/psmouse-base.o mouse/logips2pp.o mouse/synaptics.o\ |
keyboard/atkbd.o\ |
misc/pcspkr.o\ |
handler/evbug.o handler/keyboard.o\ |
handler/mouse.o handler/speaker.o\ |
gameport/gameport.o gameport/ns558.o\ |
joystick/analog.o joystick/joydump.o\ |
handler/mouse.o handler/keyboard.o handler/speaker.o\ |
handler/evbug.o handler/joystick.o\ |
shark/shark_input.o shark/shark_mouse.o\ |
shark/shark_keymap.o shark/shark_keyb.o\ |
shark/shark_spk.o |
shark/mcurtxt.o shark/mcurgrx.o\ |
shark/shark_spk.o shark/shark_joy.o |
OTHERINCL += -I$(BASE)/drivers/linuxc26/include |
25,7 → 28,3 |
C_OPT += -D__KERNEL__ |
include $(BASE)/config/lib.mk |
clean:: |
rm -f $(OBJS) |
/shark/trunk/drivers/input/gameport/ns558.c |
---|
1,5 → 1,5 |
/* |
* $Id: ns558.c,v 1.1 2004-03-08 18:47:38 giacomo Exp $ |
* $Id: ns558.c,v 1.2 2004-03-29 18:27:42 mauro Exp $ |
* |
* Copyright (c) 1999-2001 Vojtech Pavlik |
* Copyright (c) 1999 Brian Gerst |
93,6 → 93,7 |
outb(c, io); |
return; |
} |
/* |
* After a trigger, there must be at least some bits changing. |
*/ |
104,6 → 105,7 |
return; |
} |
wait_ms(3); |
/* |
* After some time (4ms) the axes shouldn't change anymore. |
*/ |