11 #include <sys/trigger.h>
12 #include <drv/input/mouse.h>
13 #include "io/screen.h"
38 unsigned int left_button : 1;
39 unsigned int right_button : 1;
40 unsigned int middle_button : 1;
42 unsigned int always1 : 1;
44 unsigned int x_sign : 1;
45 unsigned int y_sign : 1;
47 unsigned int x_overflow : 1;
48 unsigned int y_overflow : 1;
55 struct dev_ps2m_mouse_packet {
79 if (mfb->x_overflow || mfb->y_overflow || !mfb->always1) {
83 int offx = (int16_t) (0xff00 * mfb->x_sign) | buf[1];
84 int offy = (int16_t) (0xff00 * mfb->y_sign) | buf[2];
90 ps2m_buffer.movement_x = offx;
91 ps2m_buffer.movement_y = offy;
105 mouse_wheel += (char) ((!!(buf[3] & 0x8)) * 0xf8 | (buf[3] & 0x7));
119 uint8_t status = inb(0x64);
120 if ((status & 1) == 0 || (status >> 5 & 1) == 0) {
124 static int recbyte = 0;
125 static char mousebuf[5];
127 mousebuf[recbyte++] = inb(0x60);
136 if (
mouse_x > (
int) (getScreenWidth()))
mouse_x = getScreenWidth();
137 if (
mouse_y > (
int) (getScreenHeight()))
mouse_y = getScreenHeight();
150 uint32_t _time_out = 100;
152 while (_time_out--) {
153 if ((inb(0x64) & 1) == 1) {
159 while (_time_out--) {
160 if ((inb(0x64) & 2) == 0) {
176 ps2_in_wait_until_empty();
178 outb(PS2_STATE_REG, 0xD4);
181 ps2_in_wait_until_empty();
183 outb(PS2_DATA_PORT, a_write);
194 ps2_out_wait_until_full();
195 return inb(PS2_DATA_PORT);
204 uint8_t status = ps2_read_configuration_byte();
206 ps2_write_configuration_byte(status | 2);
217 mouse_x = getScreenWidth() / 2;
218 mouse_y = getScreenHeight() / 2;
221 void ps2_mouse_install_irq() {
226 uint32_t mouse_get_x() {
return mouse_x;}
227 uint32_t mouse_get_y() {
return mouse_y;}
228 uint8_t mouse_get_b1() {
return mouse_b1;}
229 uint8_t mouse_get_b2() {
return mouse_b2;}
230 uint8_t mouse_get_b3() {
return mouse_b3;}
231 uint8_t mouse_get_b4() {
return mouse_b4;}
232 uint8_t mouse_get_b5() {
return mouse_b5;}
int32_t mouse_oy
Позиция мыши по Y (старое значение)
void mouse_wait(uint8_t a_type)
Ожидание ответа мыши
int mouse_wheel
После каждого чтения меняем на 0.
void mouse_install()
Установщик драйвера мыши
uint32_t mouse_b3
Средняя кнопка мыши
uint32_t mouse_x
Позиция мыши по X.
struct mouse_flags_byte __attribute__((packed))
Структура данных пакета от мыши
uint8_t mouse_ready
Готова ли мышь к работе
void mouse_write(uint8_t a_write)
Отправка данных для мыши
uint32_t mouse_b1
Левая кнопка мыши
int32_t mouse_ox
Позиция мыши по X (старое значение)
uint32_t mouse_y
Позиция мыши по Y.
void mouse_parse_packet(const char *buf, uint8_t has_wheel, uint8_t has_5_buttons)
Парсинг пакета мыши
uint32_t mouse_b2
Правая кнопка мыши
bool isMouseInit()
Инициализирована ли мышь?
uint8_t mouse_read()
Считывание данных с мыши
void mouse_handler(__attribute__((unused)) struct registers r)
Обработчик мыши
Структура данных пакета от мыши
void CallTrigger(int type, void *data1, void *data2, void *data3, void *data4, void *data5)
Функция для вызовов триггеров (Если самостоятельно надо вызвать триггер)