From c3b38e3665207d029f617fc67bc9d19142ce5cd7 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Tue, 9 Sep 2014 11:46:49 +0200 Subject: mouse support --- kernel/mouse.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) (limited to 'kernel/mouse.c') diff --git a/kernel/mouse.c b/kernel/mouse.c index bee595c..d000b30 100644 --- a/kernel/mouse.c +++ b/kernel/mouse.c @@ -11,9 +11,9 @@ static volatile uint8_t mouse_cycle; -static volatile int8_t mouse_byte[3]; -static volatile uint8_t mouse_x; -static volatile uint8_t mouse_y; +static volatile uint8_t mouse_byte[3]; +volatile int16_t mouse_x; +volatile int16_t mouse_y; static volatile uint8_t mouse_a; @@ -30,7 +30,8 @@ int8_t mouse_get_y() void mouse_init() { - mouse_cycle=mouse_x=mouse_y=0; + mouse_x=mouse_y=0; + mouse_cycle=1; uint8_t _status; //unsigned char @@ -62,7 +63,41 @@ void mouse_init() void mouse_log() { - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%d delta x: %d delta y: %d ",mouse_a, mouse_x,mouse_y); + //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%02x / %02x / %02x ",mouse_byte[0], mouse_byte[1],mouse_byte[2]); + + if(mouse_byte[0]&0x80||mouse_byte[0]&0x40)return; //skip packet on overflow + if(!(mouse_byte[0]&0x8))panic(FOOLOS_MODULE_NAME,"mouse packets out of sync!?"); // this bit is always 1, otherwise panic! + + // + if(mouse_byte[1]>127){ + mouse_x-=256; + mouse_x+=mouse_byte[1]; + } + else + { + mouse_x+=mouse_byte[1]; + } + if(mouse_byte[2]>127){ + mouse_y-=256; + mouse_y+=mouse_byte[2]; + } + else + { + mouse_y+=mouse_byte[2]; + } + + + + + if(mouse_x<0)mouse_x=0; + if(mouse_y<0)mouse_y=0; + if(mouse_x>800)mouse_x=800; + if(mouse_y>600)mouse_y=600; + + + //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%d / %d / %02x ",mouse_x, mouse_y,mouse_byte[2]); + PutFont('X', mouse_x,600-mouse_y, 0xffffff); + } //Mouse functions void mouse_handler()//struct regs *a_r) //struct regs *a_r (not used but just there) @@ -81,9 +116,6 @@ void mouse_handler()//struct regs *a_r) //struct regs *a_r (not used but just th break; case 2: mouse_byte[2]=x86_inb(0x60); - mouse_a=mouse_byte[0]; - mouse_x=mouse_byte[1]; - mouse_y=mouse_byte[2]; mouse_cycle=0; mouse_log(); break; -- cgit v1.2.3