Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 61

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 55 56 57 58 59 60 < 61 > 62 63 64 65 66 67 .. 168 >> Следующая

испытуемого устройства, с помощью ^которого можно выбрать и послать в
устройство стандартный набор запросов.
8.8. Взаимодействие с НЮ-драйвером
Любые операции с устройством (не только с HID, но и с любым другим)
производятся с помощью дескриптора устройства, получаемого с помощью
вызова функции createFj le. Основным параметром этой функции является имя
устройства. Получение имени USB-устройства мы будем обсуждать в
Гпава 8. НЮ-устройства
173
главе 10, посвященной Plug and Play, а пока предположим, что у нас есть
открытый дескриптор устройства.
Заголовки основных функций, предоставляемых HID-драйвером, приведены в
листинге 8.6.
: Листинг 8.6. Заголовки функций HID-драйвера (Delphi) 3
// возвращает.GUID, связанный с HID
procedure HidD_GetHidGuid(var HidGuid: TGUID) stdcall;
// возвращает атрибуты HID-устройства (идентификаторы // производителя и
продукта)
function HidD_GetAttributes(HidDeviceObject: THandle; var HidAttrs:
THIDDAttributes): LongBool; stdcall;
// возвращает указатель на буфер, содержащий информацию II о возможностях
устройства
function HidD_GetPreparsedData(HidDeviceObject; THandle; var
PreparsedData: PHIDPPreparsedData): LongBool; stdcall;
// возвращает структуру, описывающую возможности устройства
function HidP_GetCaps(PreparsedData: PHIDPPreparsedData; var
Capabilities: THIDPCaps): NTSTATUS; stdcall;
// читает feature-репорт из устройства
function HidD_GetFeature(HidDeviceObject: THandle; var Report;
Size: Integer): LongBool; stdcall;
// передает feature-репорт в устройство
¦function HidD_SetFeature(HidDeviceObject: THandle; ^ar Report;
Size: Integer): LongBool; stdcall;
Обмен данными с устройством можно производить с помощью обычных Windows
API функций ReadFile И WriteFile, соответственно для входных и выходных
репортов и функций HID API HidD_GetFeature и HidD_SetFeature для
специальных репортов (см. разд. 13.6).
Важно
При использовании функции ReadFile пользовательская программа
"проваливается" в системный HID-драйвер и будет находиться там до тех
пор, пока не получит от HID-устройства запрошенное количество данных. Не
помогает даже использование функции ReadFileEx. При написании программы
необходимо таким образом разместить вызовы ReadFile, чтобы она не
"вешала" основное приложение при ожидании данных с устройства.
HID-функции содержатся в модуле Hid:Dll. Для использования этих функций в
Visual Studio нужно подключить модуль hidsdi.h. В Borland Delphi при-
174
Часть III. Практика программирования
зется либо подключать эти функции вручную (как показано в листинге 8.7),
зибо использовать готовые классы, например, Hid.Pas из библиотеки JEDI
(http://delphi-jedi.org).
Листинг 8 7. Подключение HID-функции
;.................................. вМ.ННЫЬн./ЯЯЯл.'........... ЯКМЖ
const
HidModuleName = 'HID.dll';
procedure HidD_GetHidGuid(var HidGuid: TGUID) stdcall;
{$EXTERNALSYM HidD_GetHidGuid}
function HidD_GetPreparsedData(HidDeviceObject: THandle; var
PreparsedData: PHIDPPreparsedData): LongBool; stdcall;
($EXTERNALSYM HidD_GetPreparsedData}
function HidD_FreePreparsedData(PreparsedData: PHIDPPreparsedData):
LongBool; stdcall;
($EXTERNALSYM HidD_FreePreparsedData)
procedure HidD_GetHidGuid; external HidModuleName name 'HidD_GetHidGuid';
fimction HidD_GetPreparsedData; external HidModuleName name
•HidDjSetPreparsedData';
function HidD_FreePreparsedData; external HidModuleName name .
'HidD_FreePreparsedData';
В качестве примера приведем небольшую программу, получающую список HID-
устройств и отображающую свойства одного из них (листинг 8.8).
Листинг 8.8. Использование HID-функции
unit Unitl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;
Гпава 8. НЮ-устройства
175
type
TForml = class(TForm) lbLog: TListBox;
Panell: TPanel;
Buttonl: TButton;
procedure ButtonlClick(Sender: TObject); private
procedure DisplayHIDInformation(HidName : String); public end;
var
Forml; TForml ; implementation ($R *.dfm}
Uses SetupApi, Hid;
// Отображение списка HID-устройств // и их свойств
procedure TForml.ButtonlClick(Sender: TObject); var HidGuid : TGuid;
PnPHandle ; HDevInfo;
DevData: TSPDevInfoData;
DevicelnterfaceData: TSPDevicelnterfaceData; FunctionClassDeviceData:
PSPDevicelnterfaceDetailData; Success: LongBool;
Devlndex: DWORD;
BytesReturned: DWORD;
HidName : String; begin // Очистить лог lbLog.Items.Clear;
// Получить GUID для класса HID HidD_GetHidGuid(HidGuid);
// Получаем дескриптор PnP для HID-класса PnPHandle :=
SetupDiGetClassDevs(0HidGuid, nil,
0, DIGCF PRESENT or DIGCF DEVICEINTERFACE);
176
Часть III. Практика программирования
II Если ошибка, то выходим
If PnPHandle = Pointer(INVALID_HANDLE_VALUE) then Exit;
Try
// Индекс текущего устройства Devlndex := 0;
// Цикл по всем устройствам в HID-классе Repeat
DevicelnterfaceData.cbSize := SizeOf(TSPDevicelnterfaceData);
// Получить информацию об интерфейсах устройства номер Devlndex Success
Предыдущая << 1 .. 55 56 57 58 59 60 < 61 > 62 63 64 65 66 67 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.