Difference between revisions of "Usb упражнение"
| Line 38: | Line 38: | ||
6. [[Udev,_динамична_инициализация_на_периферия#Изпълнение на скрипт при инициализация на usb устройство|Да се конфигурира събитие при включване на usb устройство.]] | 6. [[Udev,_динамична_инициализация_на_периферия#Изпълнение на скрипт при инициализация на usb устройство|Да се конфигурира събитие при включване на usb устройство.]] | ||
| + | |||
| + | |||
| + | == == | ||
| + | |||
| + | const int WM_DEVICECHANGE = 0x0219; | ||
| + | const int DBT_DEVICEARRIVAL = 0x8000; // system detected a new device | ||
| + | const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //device was removed | ||
| + | const int DBT_DEVNODES_CHANGED = 0x0007; //device changed | ||
| + | const int DBT_DEVTYP_VOLUME = 0x00000002; // logical volume | ||
| + | |||
| + | === | ||
| + | [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); | ||
| + | } | ||
http://stackoverflow.com/questions/15877851/the-name-wm-devicechange-does-not-exist-in-the-current-context | http://stackoverflow.com/questions/15877851/the-name-wm-devicechange-does-not-exist-in-the-current-context | ||
Revision as of 19:26, 18 March 2015
Теория USB
Задачи за изпълнение: Задачите се изпълняват на виртулна машина предварително подготвена от ръководителя на приложението.
0. Включване на usb устройство към виртуалната машина.
1. Да се проверят наличните usb устройства:
- Иползвайте инструмента lsusb
2. Да се разгледат параметрите на различни USB устройства като се определят
- текущ адрес на устройството
- брой на конфигурациите
- заявена мощност
- брой на интерфейсите
- типа на устройство (class)
- конфигурирани канали
- тип предаване на данни
lsusb -s Bus#:Device# -v|less
3. С wireshark да се проследи предаване на данни на usb устройството.
- активира се usbmon
modprobe usbmon
- стартира се wireshark
wireshark
4. Да се наблюдават събитията при включване на usb устройство с udevadm
udevadm monitor
5. Да се разгледат параметрите на устройството
udevadm info --attribute-walk --path=...
6. Да се конфигурира събитие при включване на usb устройство.
const int WM_DEVICECHANGE = 0x0219; const int DBT_DEVICEARRIVAL = 0x8000; // system detected a new device const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //device was removed const int DBT_DEVNODES_CHANGED = 0x0007; //device changed const int DBT_DEVTYP_VOLUME = 0x00000002; // logical volume
=
[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);
}
http://sam.xnet.tk/2010/04/detecting-drive-insertion-and-removal-in-c/
https://www.youtube.com/watch?v=GFDKJfC2qw4
http://stackoverflow.com/questions/102567/how-to-shutdown-the-computer-from-c-sharp