mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-12 18:26:50 +00:00
鼠标驱动程序的bug真不知道怎么改了...x先放着再说
This commit is contained in:
parent
2bb63e8e87
commit
8272257757
@ -9,7 +9,8 @@ static struct mouse_input_buffer *mouse_buf_ptr = NULL;
|
|||||||
static int c = 0;
|
static int c = 0;
|
||||||
struct apic_IO_APIC_RTE_entry mouse_entry;
|
struct apic_IO_APIC_RTE_entry mouse_entry;
|
||||||
static unsigned char mouse_id = 0;
|
static unsigned char mouse_id = 0;
|
||||||
|
struct mouse_packet_3bytes pak;
|
||||||
|
static mouse_count = 0;
|
||||||
/**
|
/**
|
||||||
* @brief 清空缓冲区
|
* @brief 清空缓冲区
|
||||||
*
|
*
|
||||||
@ -63,14 +64,14 @@ void mouse_handler(ul irq_num, ul param, struct pt_regs *regs)
|
|||||||
|
|
||||||
if (mouse_buf_ptr->count >= mouse_buffer_size)
|
if (mouse_buf_ptr->count >= mouse_buffer_size)
|
||||||
{
|
{
|
||||||
// kwarn("mouse input buffer is full.");
|
kwarn("mouse input buffer is full.");
|
||||||
// return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*mouse_buf_ptr->ptr_head = x;
|
*mouse_buf_ptr->ptr_head = x;
|
||||||
++(mouse_buf_ptr->count);
|
++(mouse_buf_ptr->count);
|
||||||
++(mouse_buf_ptr->ptr_head);
|
++(mouse_buf_ptr->ptr_head);
|
||||||
//printk("c=%d\tval = %d\n", ++c, x);
|
printk("c=%d\tval = %d\n", ++c, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
hardware_intr_controller mouse_intr_controller =
|
hardware_intr_controller mouse_intr_controller =
|
||||||
@ -241,8 +242,10 @@ void mouse_init()
|
|||||||
for (int j = 0; j < 1000; j++)
|
for (int j = 0; j < 1000; j++)
|
||||||
nop();
|
nop();
|
||||||
wait_keyboard_write();
|
wait_keyboard_write();
|
||||||
mouse_enable_5keys();
|
// mouse_enable_5keys();
|
||||||
mouse_get_mouse_ID();
|
//mouse_get_mouse_ID();
|
||||||
|
//mouse_set_sample_rate(100);
|
||||||
|
mouse_clear_buf();
|
||||||
kdebug("mouse ID:%d", mouse_id);
|
kdebug("mouse ID:%d", mouse_id);
|
||||||
c = 0;
|
c = 0;
|
||||||
}
|
}
|
||||||
@ -265,13 +268,13 @@ void mouse_exit()
|
|||||||
*/
|
*/
|
||||||
int mouse_get_packet(void *packet)
|
int mouse_get_packet(void *packet)
|
||||||
{
|
{
|
||||||
if (mouse_buf_ptr->count != 0)
|
// if (mouse_buf_ptr->count != 0)
|
||||||
kdebug("at get packet: count=%d", mouse_buf_ptr->count);
|
// kdebug("at get packet: count=%d", mouse_buf_ptr->count);
|
||||||
int code = 0;
|
int code = 0;
|
||||||
switch (mouse_id)
|
switch (mouse_id)
|
||||||
{
|
{
|
||||||
case 0: // 3bytes 数据包
|
case 0: // 3bytes 数据包
|
||||||
if (mouse_buf_ptr->count < 3)
|
if (mouse_buf_ptr->count < 4)
|
||||||
return EFAIL;
|
return EFAIL;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -296,7 +299,7 @@ int mouse_get_packet(void *packet)
|
|||||||
|
|
||||||
case 3: // 4bytes数据包
|
case 3: // 4bytes数据包
|
||||||
case 4:
|
case 4:
|
||||||
if (mouse_buf_ptr->count < 4)
|
if (mouse_buf_ptr->count < 5)
|
||||||
return EFAIL;
|
return EFAIL;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -331,4 +334,39 @@ int mouse_get_packet(void *packet)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void analyze_mousecode()
|
||||||
|
{
|
||||||
|
if(!mouse_buf_ptr->count)
|
||||||
|
return;
|
||||||
|
else printk_color(ORANGE, BLACK, "COUNT=%d\n", mouse_buf_ptr->count);
|
||||||
|
unsigned char x = mouse_get_scancode();
|
||||||
|
|
||||||
|
switch (mouse_count)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
mouse_count++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
pak.byte0 = x;
|
||||||
|
mouse_count++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
pak.movement_x = (char)x;
|
||||||
|
mouse_count++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
pak.movement_y = (char)x;
|
||||||
|
mouse_count = 1;
|
||||||
|
|
||||||
|
printk_color(RED, GREEN, "(M:%02x,X:%3d,Y:%3d)\tcount=%d\n", pak.byte0, pak.movement_x, pak.movement_y, mouse_buf_ptr->count);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
@ -104,4 +104,5 @@ int mouse_set_sample_rate(unsigned int hz);
|
|||||||
* @param packet 数据包的返回值
|
* @param packet 数据包的返回值
|
||||||
* @return int 错误码
|
* @return int 错误码
|
||||||
*/
|
*/
|
||||||
int mouse_get_packet(void *packet);
|
int mouse_get_packet(void *packet);
|
||||||
|
void analyze_mousecode();
|
@ -180,23 +180,29 @@ void Start_Kernel(void)
|
|||||||
// show_welcome();
|
// show_welcome();
|
||||||
// test_mm();
|
// test_mm();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
keyboard_analyze_keycode();
|
||||||
|
struct mouse_packet_3bytes packet = {0};
|
||||||
|
//struct mouse_packet_4bytes packet = {0};
|
||||||
|
int errcode = 0;
|
||||||
|
errcode = mouse_get_packet(&packet);
|
||||||
|
if(errcode == 0)
|
||||||
|
{
|
||||||
|
printk_color(GREEN, BLACK, " (Mouse: byte0:%d, x:%3d, y:%3d)\n", packet.byte0, packet.movement_x, packet.movement_y);
|
||||||
|
//printk_color(GREEN, BLACK, " (Mouse: byte0:%d, x:%3d, y:%3d, byte3:%3d)\n", packet.byte0, packet.movement_x, packet.movement_y, (unsigned char)packet.byte3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
keyboard_analyze_keycode();
|
analyze_mousecode();
|
||||||
struct mouse_packet_3bytes packet = {0};
|
|
||||||
//struct mouse_packet_4bytes packet = {0};
|
|
||||||
int errcode = 0;
|
|
||||||
errcode = mouse_get_packet(&packet);
|
|
||||||
if(errcode == 0)
|
|
||||||
{
|
|
||||||
printk_color(GREEN, BLACK, " (Mouse: byte0:%d, x:%3d, y:%3d)\n", packet.byte0, packet.movement_x, packet.movement_y);
|
|
||||||
//printk_color(GREEN, BLACK, " (Mouse: byte0:%d, x:%3d, y:%3d, byte3:%3d)\n", packet.byte0, packet.movement_x, packet.movement_y, (unsigned char)packet.byte3);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
while(1);
|
while (1)
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ignore_int()
|
void ignore_int()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user