Difference between revisions of "Usb упражнение"
Line 1: | Line 1: | ||
==Теория [[USB]]== | ==Теория [[USB]]== | ||
− | ==Задачи за изпълнение | + | ==Задачи за изпълнение== |
Задачите се изпълняват на виртулна машина предварително подготвена от ръководителя на приложението. | Задачите се изпълняват на виртулна машина предварително подготвена от ръководителя на приложението. | ||
Line 20: | Line 20: | ||
lsusb -s Bus#:Device# -v|less | lsusb -s Bus#:Device# -v|less | ||
− | 3. С wireshark да се проследи предаване на данни на usb устройството. | + | 3. Да се проследят промените с командата '''''dmesg''''' |
+ | |||
+ | 4. Да се наблюдават събитията при включване на usb устройство с '''udevadm''' | ||
+ | udevadm monitor | ||
+ | |||
+ | 5. С wireshark да се проследи предаване на данни на usb устройството. | ||
*активира се '''usbmon''' | *активира се '''usbmon''' | ||
modprobe usbmon | modprobe usbmon | ||
Line 26: | Line 31: | ||
wireshark | wireshark | ||
− | |||
− | |||
− | |||
− | |||
5. Да се разгледат параметрите на устройството | 5. Да се разгледат параметрите на устройството | ||
udevadm info --attribute-walk --path=... | udevadm info --attribute-walk --path=... | ||
+ | udevadm info --attribute-walk --name=/dev/input/mouse1 | ||
6. [[Udev,_динамична_инициализация_на_периферия#Изпълнение на скрипт при инициализация на usb устройство|Да се конфигурира събитие при включване на usb устройство.]] | 6. [[Udev,_динамична_инициализация_на_периферия#Изпълнение на скрипт при инициализация на usb устройство|Да се конфигурира събитие при включване на usb устройство.]] |
Revision as of 07:32, 19 March 2015
Contents
Теория USB
Задачи за изпълнение
Задачите се изпълняват на виртулна машина предварително подготвена от ръководителя на приложението.
0. Включване на usb устройство към виртуалната машина.
1. Да се проверят наличните usb устройства:
- Иползвайте инструмента lsusb
2. Да се разгледат параметрите на различни USB устройства като се определят
- текущ адрес на устройството
- брой на конфигурациите
- заявена мощност
- брой на интерфейсите
- типа на устройство (class)
- конфигурирани канали
- тип предаване на данни
lsusb -s Bus#:Device# -v|less
3. Да се проследят промените с командата dmesg
4. Да се наблюдават събитията при включване на usb устройство с udevadm
udevadm monitor
5. С wireshark да се проследи предаване на данни на usb устройството.
- активира се usbmon
modprobe usbmon
- стартира се wireshark
wireshark
5. Да се разгледат параметрите на устройството
udevadm info --attribute-walk --path=... udevadm info --attribute-walk --name=/dev/input/mouse1
6. Да се конфигурира събитие при включване на usb устройство.
Изпълнение на скрипт при инициализация на usb устройство
Задаване на правила при инициализация на USB устройство
- Може да използваме атрибутите на хардуерното устройство, за да го идентифицираме пред операционната система, с което ще могат да се зададат специални правила при неговата инициализация. Примерно с мишката, може да вземем наименованието и физическото място, където е включена мишката. Примерно:
$udevadm info --attribute-walk --name=/dev/input/mouse1
... ATTRS{name}=="Logitech USB Optical Mouse" ATTRS{phys}=="usb-0000:00:1d.0-2/input0" ...
- Дадените стойности зависят от модела на мишката и USB порта на включване. Правилото се описва с файл в директория
/etc/udev/rules.d
със следния формат на името xx-ime.rules, където:
- xx – приоритет на изпълнение, първо ще се изпълнят правилата с по-малка стойност;
- ime – произволно име;
- .rules – задължително разширение.
С цел да разглеждаме информацията пристигаща от мишката, без тя да се предава към системата управляваща прозорците на операционната система, ще дадем ръчно наименование на нода, с който мишката ще бъде представена в /dev.
- Примерно може да инициализираме мишката като друго устройство се създава файл със следното съдържание:
SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse", NAME="testMouse"
Файлът се записва в /etc/udev/rules.d с име в съответствие с формата xx-ime.rules. Ако мишката е с USB интерфейс, след изключване и включване, тя вече няма да управлява курсора и ще можем да видим новосъздадено устройство /dev/testMouse. Може да тестваме дали мишката работи, като четем това устройство -
$cat /dev/testMouse.
- Може да стартираме изпълнение на скрипт към правилото на устройството. Към правилото на устройството ще добавим RUN+="/root/program". Правилото за изпълнение на скрипта program при включване на мишка, би изглеждало така:
SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse",RUN+="/root/program"
Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл
nano /root/program
със следното съдържание:
#!/bin/bash eject eject -t
и се променят правата му, за да бъде изпълним
chmod +x /root/program
Събитие при хардуерни промени в C#
Дефиниране кодовете на събития
- WM_DEVICECHANGE - известява за хардуерни промени
const int WM_DEVICECHANGE = 0x0219; const int DBT_DEVICEARRIVAL = 0x8000; // Открито ново устрой const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //Премахнато устройство const int DBT_DEVNODES_CHANGED = 0x0007; // Промяна в състоянието на устройството
права за достъп
using System.Security.Permissions; [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] protected override void WndProc(ref Message m) { if (m.Msg == WM_DEVICECHANGE // && m.WParam.ToInt32() != DBT_DEVNODES_CHANGED && m.WParam.ToInt32() == DBT_DEVICEARRIVAL) { MessageBox.Show("xxx"); } base.WndProc(ref m); }
системен звук
for (int i = 0; i < 5; i++) { System.Threading.Thread.Sleep(1000); System.Media.SystemSounds.Beep.Play(); }
изпълнение на системна команда
var psi = new System.Diagnostics.ProcessStartInfo("shutdown", "/s /f /t 0"); psi.CreateNoWindow = true; psi.UseShellExecute = false; System.Diagnostics.Process.Start(psi);
скриване прозореца на приложението
public Form1() { InitializeComponent(); this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; }
Добавяне на приложението в startUp
%UserProfile%\Start Menu\Startup