Usb упражнение: Difference between revisions
Created page with "Да се проверят наличните usb устройства: Да се определи *текущ адрес на устройството *брой на конф..." |
No edit summary |
||
| (32 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
==Теория [[USB]]== | |||
==Цел== | |||
Диагностика на usb устройства в Linux с инструментите | |||
*lsusb | |||
*udevadm | |||
*dmesg | |||
*wireshark | |||
Създаване на правила, които се изпълняват при инициализация на usb устройства | |||
Прихващане на събития при инициализация в Windows с С# | |||
==Задачи за изпълнение== | |||
Задачите се изпълняват на виртулна машина предварително подготвена от ръководителя на приложението. | |||
0. Включване на usb устройство към виртуалната машина. | |||
1. Да се проверят наличните usb устройства: | |||
*Иползвайте инструмента ''lsusb'' | |||
2. Да се разгледат параметрите на различни USB устройства като се определят | |||
*текущ адрес на устройството | *текущ адрес на устройството | ||
*брой на конфигурациите | *брой на конфигурациите | ||
*заявена мощност | *заявена мощност | ||
*брой на интерфейсите | *брой на интерфейсите | ||
**типа на устройство | **типа на устройство ([[USB#Класове устройства|class]]) | ||
**конфигурирани канали | |||
**канали | |||
**тип предаване на данни | **тип предаване на данни | ||
С wireshark | lsusb -s Bus#:Device# -v|less | ||
3. Да се проследят промените с командата '''''dmesg''''' | |||
4. Да се наблюдават събитията при включване на usb устройство с '''udevadm''' | |||
udevadm monitor | |||
5. Да се разгледат параметрите на устройството | |||
udevadm info --attribute-walk --path=... | |||
udevadm info --attribute-walk --name=/dev/input/mouse1 | |||
6. Да се конфигурира събитие при включване на usb устройство. | |||
7. С wireshark да се проследи предаване на данни на usb устройството. | |||
*активира се '''usbmon''' | |||
modprobe usbmon | |||
*стартира се wireshark | |||
wireshark | |||
==Изпълнение на скрипт при инициализация на 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 – задължително разширение. | |||
*Може да стартираме изпълнение на скрипт към правилото на устройството. Към правилото на устройството ще добавим ''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# == | |||
=== Дефиниране кодовете на събития === | |||
*'''[https://msdn.microsoft.com/en-us/library/windows/desktop/aa363480%28v=vs.85%29.aspx 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 | |||
http://www.codeproject.com/Articles/60579/A-USB-Library-to-Detect-USB-Devices | |||
Latest revision as of 09:04, 10 February 2016
Теория USB
Цел
Диагностика на usb устройства в Linux с инструментите
- lsusb
- udevadm
- dmesg
- wireshark
Създаване на правила, които се изпълняват при инициализация на usb устройства
Прихващане на събития при инициализация в Windows с С#
Задачи за изпълнение
Задачите се изпълняват на виртулна машина предварително подготвена от ръководителя на приложението.
0. Включване на usb устройство към виртуалната машина.
1. Да се проверят наличните usb устройства:
- Иползвайте инструмента lsusb
2. Да се разгледат параметрите на различни USB устройства като се определят
- текущ адрес на устройството
- брой на конфигурациите
- заявена мощност
- брой на интерфейсите
- типа на устройство (class)
- конфигурирани канали
- тип предаване на данни
lsusb -s Bus#:Device# -v|less
3. Да се проследят промените с командата dmesg
4. Да се наблюдават събитията при включване на usb устройство с udevadm
udevadm monitor
5. Да се разгледат параметрите на устройството
udevadm info --attribute-walk --path=... udevadm info --attribute-walk --name=/dev/input/mouse1
6. Да се конфигурира събитие при включване на usb устройство.
7. С wireshark да се проследи предаване на данни на usb устройството.
- активира се usbmon
modprobe usbmon
- стартира се wireshark
wireshark
Изпълнение на скрипт при инициализация на 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 – задължително разширение.
- Може да стартираме изпълнение на скрипт към правилото на устройството. Към правилото на устройството ще добавим 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
http://www.codeproject.com/Articles/60579/A-USB-Library-to-Detect-USB-Devices