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

From Ilianko
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
==Теория [[USB]]==
 
==Теория [[USB]]==
 +
 +
==Цел==
 +
Диагностика на usb устройства в Linux с инструментите
 +
*lsusb
 +
*udevadm
 +
*dmesg
 +
*wireshark
 +
 +
Създаване на правила, които се изпълняват при инициализация на usb устройства
 +
 +
Прихващане на събития при инициализация в Windows с С#
 +
  
 
==Задачи за изпълнение==
 
==Задачи за изпълнение==
Line 25: Line 37:
 
  udevadm monitor
 
  udevadm monitor
  
5. С wireshark да се проследи предаване на данни на usb устройството.
+
5. Да се разгледат параметрите на устройството
 +
 
 +
udevadm info --attribute-walk --path=...
 +
udevadm info --attribute-walk --name=/dev/input/mouse1
 +
 
 +
6. Да се конфигурира събитие при включване на usb устройство.
 +
 
 +
7. С wireshark да се проследи предаване на данни на usb устройството.
 
*активира се '''usbmon'''
 
*активира се '''usbmon'''
 
  modprobe usbmon
 
  modprobe usbmon
Line 31: Line 50:
 
  wireshark
 
  wireshark
  
 
5. Да се разгледат параметрите на устройството
 
 
udevadm info --attribute-walk --path=...
 
udevadm info --attribute-walk --name=/dev/input/mouse1
 
 
6. [[Udev,_динамична_инициализация_на_периферия#Изпълнение на скрипт при инициализация на usb устройство|Да се конфигурира събитие при включване на usb устройство.]]
 
  
 
==Изпълнение на скрипт при инициализация на usb устройство==
 
==Изпълнение на скрипт при инициализация на usb устройство==
Line 58: Line 70:
 
*ime – произволно име;
 
*ime – произволно име;
 
*.rules – задължително разширение.
 
*.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'' при включване на мишка, би изглеждало така:
 
*Може да стартираме изпълнение на скрипт към правилото на устройството. Към правилото на устройството ще добавим ''RUN+="/root/program"''. Правилото за изпълнение на скрипта ''program'' при включване на мишка, би изглеждало така:
 
  SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse",RUN+="/root/program"
 
  SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse",RUN+="/root/program"
 +
  
 
Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл
 
Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл
Line 131: Line 139:
  
 
%UserProfile%\Start Menu\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