-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocumentation_notes.txt
More file actions
62 lines (49 loc) · 2.97 KB
/
documentation_notes.txt
File metadata and controls
62 lines (49 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Dostęp do tych plików można uzyskać w repozytorium:
- https://github.com/NotUser1/OS_wireless_usb_mouse_driver
repo jest prywatne, więc trzeba wysłać prośbę o dostęp albo podać adres email, abym mógł Pana dodać
Wyjaśnienie makr i co ważniejszych funkcji:
usb_device_id - dzięki temu sterownik wie pod jakie urządzenie patrzeć
a) używamy makra USB_INTERFACE_INFO - określa klasę urządzenie i używany protokół
bInterfaceClass = USB_INTERFACE_CLASS_HID (0x03)
bInterfaceSubClass = USB_INTERFACE_SUBCLASS_BOOT (0x01)
bInterfaceProtocol = USB_INTERFACE_PROTOCOL_MOUSE (0x02)
MODULE_DEVICE_TABLE - eksportuje usb_device_id do przestrzeni użytkownika z przestrzeni kernelowej
umd_probe/umd_disconnect - wywoływane gdy urządzenie (interfejs) pasujący do id sterownika pojawia się i znika
usb_driver - deskryptor dla USB core appropriate
name - useless, do debugowania?
probe - setup urządzenia + zawołanie usb_set_intfdata
disconnect - bezpieczne "zniknięcie" urządzenia z systemu + clear usb_set_intfdata()
id_table - tablica usb_device_id - powiązanie id z urządzeniem
usb_mouse_callback - funkcja wywolujaca sie gdy przychodzi interrupt wywolujaca obsluge zdarzenia
usb_mouse_probe - funkcja wywolywana przy podlaczeniu urzadzenia (polecenie ...drivers/name/bind)
URB - USB Request Block - struktura opisujaca zadanie dla USB core, np. przeslanie/odbior danych
USB core - czesc kernela obsługująca USB
usb_mouse_disconnect - funkcja wywolywana przy odłączeniu urzadzenia (polecenie ...drivers/name/unbind)
Obsługa danych wejściowych:
- dane przychodzą w formacie HID (Human Interface Device)
- 64b paczki
- Bajt 0 - "nagłówek" 0x02 - copilot sugeruje, że to oznacza myszkę, ALE nie umeim tego potwierdzić w internecie
- Bajt 1 - przyciski (0x01 - lewy, 0x02 - prawy, 0x04 - środkowy)
- Bajt 2 - padding (0x00)
- Bajty 3-5 - ruch w osiach X i Y
- little endian
- ruch w X - bity 0-11
- ruch w Y - bity 12-23
- Bajt 6 - scroll
- Bajt 7 - padding (0x00)
Uruchomienie i podlaczenie do urządzenia:
- make
- sudo insmod wireless_usb_mouse.ko
rmmod wireless_usb_mouse.ko (jakby trzeba byo cos zmianiac)
- echo 1-1:1.0 | sudo tee /sys/bus/usb/drivers/usbhid/unbind
- echo 1-1:1.0 | sudo tee /sys/bus/usb/drivers/wireless_usb_mouse/bind
tu może być też 1-1:1-1, generalenie to moża podejrzeć, ale nie ma co
to jest przez to, że ten dongle może być do myszki i klawiatury
jedno jest myszka, drugie klawiatura, ale dla bezpieczeństwa można odbindować oba
i dodać do dowlolnego
Usefull stuff:
- dmesg | grep wireless_usb_mouse
[ 419.195884] usbcore: registered new interface driver wireless_usb_mouse
- lsusb -t
Bus 001 Device 003: ID 10c4:8105 Silicon Labs USB OPTICAL MOUSE
Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M