Difference between revisions of "Usb упражнение"

From Ilianko
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://stackoverflow.com/questions/15877851/the-name-wm-devicechange-does-not-exist-in-the-current-context

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