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

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

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

:= SetupDiEnuniDevicelnterfaces(
PnPHandle, nil, HidGuid, Devlndex, DevicelnterfaceData); If Success then
begin DevData.cbSize := SizeOf(DevData);
BytesReturned := 0;
// Получаем подробности об устройстве с интерфейсам //
DevicelnterfaceData
// Сначала вызываем с нулевым размерам буфера, получаем // размер
необходимого буфера, потам вызываем повторно,
// сформировав правильный буфер SetupDiGetDevi
celnterfaceDetai1(PnPHandle,
(c)DevicelnterfaceData, nil, 0, BytesReturned, (c)DevData);
If (BytesReturned <> 0) and
(GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin // Создаем буфер
FunctionClassDeviceData := AllocMem(BytesReturned);
FunctionClassDeviceData.cbSize := 5;
// Получаем информацию
If SetupDiGetDevicelnterfaceDetail(PnPHandle,
(c)DevicelnterfaceData, FunctionClassDeviceData,
BytesReturned, BytesReturned, (c)DevData) then begin // Отобразить имя PnP-
имя устройства
HidName:= StrPas(PChar((c)FunctionClassDeviceData.DevicePath)); lbliog.
Items. Add (HidName) ;
// Отобразить информацию об устройстве DisplayHIDInformation(HidName);
End;
Гпава 8. НЮ-устройства
177
11 Освободить буфер FreeMem(FunctionClassDeviceData);
End;
End;
t
II Следующее устройство Inc(Devlndex);
Until not Success;
Finally
SetupOiOestroyOevicelnfoList(PnPHandle);
End;
end;
П Отображение информации о HID-устройстве
procedure TForml.DisplayHIDInformation(HidName : String);
var HidHandle : THandle;
CanReadWriteAccess : Boolean;
Attributes : THIDDAttributes;
NumlnputBuffers ; Integer;
¦Buffer : array [0..253] of WideChar;
II Получение строки по дескриптору
Function GetString(StrDescriptor : Byte): WideString; var Buffer : array
[0..253] of WideChar; begin Result := 'Ошибка'; if StrDescriptor <> 0
then if HidD_GetIndexedString(HidHandle,
StrDescriptor, Buffer, SizeOf(Buffer)) then Result:= Buffer; end;
begin
// Сначала пробуем от!фыть устройство II в режиме r/w
lbLog.Items.Add(' Пробуем открыть HID-устройство,..'); HidHandle:=
CreateFi le(PChar(@HidName[1J),
GENERIC__READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE WRITE,
178
Часть III. Практика программирования
nil,
OPEN_EXISTING, О, О
) ;
// Устройство поддерживает запись?
CanReadWriteAccess:= HidHandle о INVALID_HANDLE_VALUE;
// Если не получилось, пробуем открыть //в режиме только чтения данных If
not CanReadWriteAccess then begin HidHandle:=
CreateFiie(PChar(0HidName[l]),
0,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
OPEN_EXISTING, 0, 0
);
End else begin
lbLog.Items.Add(' Устройство открыто в режиме read/write'); End;
// Если не получилось - ошибка и выход If HidHandle -
INVALID_HANDLE_VALUE then begin lbLog.Items.Add(' Ошибка открытия
устройства');
Exit;
End else begin
lbLog.Items.Add(' Устройство открыто в режиме read only!'); End;
// Получаем атрибуты устройства Attributes.Size :=
SizeOf(THIDDAttributes);
If HidD_GetAttributes(HidHandle, Attributes) then begin lbLog.Items.Add(
Format(' vendorID=%d, ProductID=%d,
VersionNumber=%d',[Attributes.VendorlD,
Attributes.ProductID, Attributes.VersionNumber]));
End else begin lbLog.Items.Add(' Ошибка HidD_GetAttributes');
End;
Гпава 8. НЮ-устройства
179
// Получаем число буферов
If HidD_GetNumInputBuffers{HidHandle, NumlnputBuffeгз) then begin
lbLog.Iterns.Add(
Format{' Число входных 6y$epoB-%d',[NumlnputBuffers]));
End else begin lbLog.Items.Add(' Ошибка HidD_GetNumInputBuffers1);
End;
// Получаем идентификатор изготовителя FillChar(Buffer, SizeOf(Buffer),
#0);
If HidD_GetManufacturerString(HidHandle, Buffer, SizeOf(Buffer)) then
begin
lbLog.Items.Add(Formate Производитель=%з',[Buffer]));
End else begin lbLog.Items.Add{' Ошибка HidD_GetManufacturerString');
End;
// Получаем идентификатор продукта FillChar(Buffer, SizeOf(Buffer), #0);
If HidD_GetProductString(HidHandle, Buffer, SizeOf(Buffer)) then begin
lbLog.Items.Add(Format(' Продукт=%з',[Buffer]));
End else begin lbLog.Items.AddC Ошибка HidD_GetProductString');
End;
// Получаем серийный номер FillChar(Buffer, SizeOf(Buffer), #0);
If HidD_GetSerialNumberString(HidHandle, Buffer, SizeOf(Buffer)) then
begin
lbLog.Items.Add(Format{' Серийный номер=%з',[Buffer]));
End else begin lbLog.Items.Add(' Ошибка HidD_GetSerialNumberString');
End;
// Освободить дескриптор устройства CloseHandle(HidHandle); end;
end.
180
Часть HI. Практика программирования
Вид формы и результат работы показаны на рис. 8.7.
\jif Использование HID-функций .-Eia.
\4?4hidttvid_l 241 &pid_1111 tt6&30e75ab0&0&0000tt<4d1 е55Ь2-(16f-11 cf-
88cb-00l 111000030} Пробуем открыть HID-устройство... Устройство открыто
в режиме read only! V endorl D=4673, ProductlD=4369, VersionNumber=256
Число входных буФеров=8 Поиск *j ! - ' i i :. . '¦
Рис. 8.7. Результат программы, демонстрирующей HID-функции
Заметим, что имя НШ-устройства непохоже на обычное имя устройства, как,
например, СОМ1 или LPT. Это имя присваивается менеджером системы Plug and
Play и выглядит, например, так:
\\?\hid#vid_1241&pid_llll#6s30e75ab0s0&0000#{4dle55b2-fl6f-llcf-88cb-
Предыдущая << 1 .. 56 57 58 59 60 61 < 62 > 63 64 65 66 67 68 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Завалишин Д. "Интернетско-русский разговорник" (Web-программирование)

Заенцев И.В. "Нейронные сети: основные модели" (Web-программирование)

Владимиров А.А. "Wi-фу: «боевые» приемы взлома и защиты беспроводных сетей" (Web-программирование)

Вьейра Р. "SQL Server 2000. Программирование в 2 ч." (Web-программирование)

Веллинг Л.Т. "Разработка web приложений с помощью php и mysql" (Web-программирование)
Авторские права © 2013 ComputersBooks. Все права защищены.

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed