Difference between revisions of "Usb упражнение"
Line 37: | Line 37: | ||
udevadm info --attribute-walk --name=/dev/input/mouse1 | udevadm info --attribute-walk --name=/dev/input/mouse1 | ||
− | 6. | + | 6. Да се конфигурира събитие при включване на usb устройство. |
==Изпълнение на скрипт при инициализация на usb устройство== | ==Изпълнение на скрипт при инициализация на usb устройство== |
Revision as of 07:41, 24 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