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

From Ilianko
()
Line 37: Line 37:
  
 
6. [[Udev,_динамична_инициализация_на_периферия#Изпълнение на скрипт при инициализация на usb устройство|Да се конфигурира събитие при включване на usb устройство.]]
 
6. [[Udev,_динамична_инициализация_на_периферия#Изпълнение на скрипт при инициализация на usb устройство|Да се конфигурира събитие при включване на usb устройство.]]
 +
 +
==Изпълнение на скрипт при инициализация на usb устройство==
 +
[[Udev,_динамична_инициализация_на_периферия#Задаване на правила при инициализация на USB устройство|Kъм правилото на устройството]] се добавя скрипта за изпълнение ''RUN+="/root/program"''. Правилото за изпълнение на скрипта ''program'' при включване на мишка, би изглеждало така:
 +
SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse", NAME="testMouse", RUN+="/root/program"
 +
 +
Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл
 +
nano /root/program
 +
със следното съдържание:
 +
#!/bin/bash
 +
halt
 +
и се променят правата му, за да бъде изпълним
 +
chmod +x /root/program
 +
 +
 +
 +
==Изпълнение на скрипт при инициализация на usb устройство==
 +
[[Udev,_динамична_инициализация_на_периферия#Задаване на правила при инициализация на USB устройство|Kъм правилото на устройството]] се добавя скрипта за изпълнение ''RUN+="/root/program"''. Правилото за изпълнение на скрипта ''program'' при включване на мишка, би изглеждало така:
 +
SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse", NAME="testMouse", RUN+="/root/program"
 +
 +
Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл
 +
nano /root/program
 +
със следното съдържание:
 +
#!/bin/bash
 +
halt
 +
и се променят правата му, за да бъде изпълним
 +
chmod +x /root/program
  
  

Revision as of 06:45, 19 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 устройство.

Изпълнение на скрипт при инициализация на usb устройство

Kъм правилото на устройството се добавя скрипта за изпълнение RUN+="/root/program". Правилото за изпълнение на скрипта program при включване на мишка, би изглеждало така:

SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse", NAME="testMouse", RUN+="/root/program"

Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл

nano /root/program

със следното съдържание:

#!/bin/bash
halt

и се променят правата му, за да бъде изпълним

chmod +x /root/program


Изпълнение на скрипт при инициализация на usb устройство

Kъм правилото на устройството се добавя скрипта за изпълнение RUN+="/root/program". Правилото за изпълнение на скрипта program при включване на мишка, би изглеждало така:

SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse", NAME="testMouse", RUN+="/root/program"

Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл

nano /root/program

със следното съдържание:

#!/bin/bash
halt

и се променят правата му, за да бъде изпълним

chmod +x /root/program


  • WM_DEVICECHANGE - известява за хардуерни промени
  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

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;
}