1
0
mirror of https://github.com/mist-devel/mist-firmware.git synced 2026-02-05 23:54:47 +00:00

Merge pull request #74 from retrofun/add-more-ps2-mouse-commands

Add more PS2 mouse commands
This commit is contained in:
gyurco
2021-07-24 17:20:57 +02:00
committed by GitHub

View File

@@ -105,6 +105,10 @@ static char ps2_kbd_scan_set = 2;
typedef enum { PS2_MOUSE_IDLE, PS2_MOUSE_SETRESOLUTION, PS2_MOUSE_SETSAMPLERATE } ps2_mouse_state_t;
static ps2_mouse_state_t ps2_mouse_state;
static unsigned char ps2_mouse_status;
static unsigned char ps2_mouse_resolution;
static unsigned char ps2_mouse_samplerate;
// set by OSD code to suppress forwarding of those keys to the core which
// may be in use by an active OSD
static char osd_is_visible = false;
@@ -184,6 +188,9 @@ void user_io_reset() {
ps2_kbd_state = PS2_KBD_IDLE;
ps2_kbd_scan_set = 2;
ps2_mouse_state = PS2_MOUSE_IDLE;
ps2_mouse_status = 0;
ps2_mouse_resolution = 0;
ps2_mouse_samplerate = 0;
ps2_typematic_rate = 0x80;
}
@@ -1052,16 +1059,35 @@ static void handle_ps2_mouse_commands()
case 0xF6: // set defaults;
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
break;
case 0xE6: // set mouse scaling to 1:1
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
ps2_mouse_status &= ~0x10;
break;
case 0xE7: // set mouse scaling to 1:2
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
ps2_mouse_status |= 0x10;
break;
case 0xE8: // set resolution
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
ps2_mouse_state = PS2_MOUSE_SETRESOLUTION;
break;
case 0xE9: // status request
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
spi_uio_cmd8(UIO_MOUSE0_EXT, ps2_mouse_status);
spi_uio_cmd8(UIO_MOUSE0_EXT, ps2_mouse_resolution);
spi_uio_cmd8(UIO_MOUSE0_EXT, ps2_mouse_samplerate);
break;
case 0xF2: // get device ID
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
spi_uio_cmd8(UIO_MOUSE0_EXT, 0x00); // Normal PS2 mouse
break;
case 0xF4: // enable data reporting
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
ps2_mouse_status |= 0x20;
break;
case 0xF5: // disable data reporting
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
ps2_mouse_status &= ~0x20;
break;
case 0xF3: // set sample rate
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
@@ -1071,10 +1097,12 @@ static void handle_ps2_mouse_commands()
break;
case PS2_MOUSE_SETRESOLUTION:
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
ps2_mouse_resolution = cmd;
ps2_mouse_state = PS2_MOUSE_IDLE;
break;
case PS2_MOUSE_SETSAMPLERATE:
spi_uio_cmd8(UIO_MOUSE0_EXT, 0xFA); // ACK
ps2_mouse_samplerate = cmd;
ps2_mouse_state = PS2_MOUSE_IDLE;
break;
}