Информационный сайт

 

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

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

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 128 129 130 131 132 133 < 134 > 135 136 137 138 139 140 .. 166 >> Следующая

CloseServiceHandle(hSCMan);
Exit; End;
IpServiceArgVectors:=nil;
WinSvc.StartService(hService, 0, IpServiceArgVectors); WinSvc.CloseServiceHandle(hService); WinSvc.CloseServiceHandle(hSCMan); Result:= True; End;
Il Останов сервиса драйвера
Function TAT89DriverLoader.StopService : Boolean;
Глава 14. Создание USB-устройства на основе ATMEL АТ89С5131
433
var serviceStatus : TServiceStatus;
hSCMan, hService : SC-HANDLE; Begin
Result:- False;
Il Остановка сервиса
hSCMan:= WinSvc.OpenSCManager(Nil, Nil, SC_MANAGER_CONNECT); If hSCMan = O then Exit;
hService:= WinSvc.OpenService(hSCMan, DriverName, SERVICE_STOP); If hService = O then begin
WinSvc.CloseServiceHandle(hSCMan);
Exit; End;
Il Останов
WinSvc.ControlService(hService, SERVICE_CONTROL_STOP, serviceStatus); WinSvc.CloseServiceHandle(hService); WinSvc.CloseServiceHandle(hSCMan); Result:= True; End;
Il Открытие драйвера. Параметр Devlndex передает номер Il устройства (согласно параметру га_Unit в листинге 14.4) Function TAT89DriverLoader.Open(Devlndex : Integer) : Boolean; Var DevName : String; Begin
If Devlndex <> -1 then DevName:= DriverPath + IntToStr(Devlndex) Else DevName:= DriverPath;
hDevice:= CreateFile(@DevName[l],
GENERIC_READ or GENERICJWRITE, 0,nil,
OPEN_EXISTING,
FIIJE-ATTRIBUTE-NORMAl,
O
);
Result:= hDevice О INVALID_HANDLE_VALUE; If not Result then begin
MessageDlg(SysErrorMessage(GetLastError), mtError, [rribOK], 0); End; End;
434
Часть IV. Создание USB-устройств
Il Закрыть дескриптор драйвера Procedure TAT89DriverLoader.Close; -Begin
If hDevice о INVALID_HANDLE_VALUE then CloseHandle(hDevice); hDevice:= INVALI D_HANDLE_VALLTE ; End;
Il параметры вызова DeviceloControl Coast
FILE_DEVICE_UNKNOWN = $22; METHOD_BOFFERED = 0; FILE_ANY_ACCESS = $0000;
// Формирование CTL-кода
function Get_Ctl_Code(Nr: Integer): Integer; begin Result:=
(FILE_DEVICE_UNKNOWN shl 16) or
(FILE_ANY_ACCESS shl 14) or
(Nr shl 2) or
METHOD_BUFFERED;
end;
// Выполнение функции DeviceloControl Function TAT89DriverLoader.Funcl : Cardinal; Var Res : Cardinal; Begin
If hDevice = INVALID_HANDLE_VALUE then Exit; DeviceloControl(hDevice, Get_Ctl_Code($800),...); End;
Il Функция чтения 8 Сайт
Function TAT89DriverLoader.Read : String;
Var A : Array[1..8] of Byte;
ReadBytes : Cardinal;
і : Integer; Begin
I/ Инициализация буфера For і:= 1 to 8 do A[i]:= 0;
Глава 14. Создание USB-устройства на основе ATMEL АТ89С5131_ 435
If Чтение
If not ReadFile(hDevice, A, 8, ReadBytes, nil) then MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOK], 0);
Il Шестнадцатеричная строка For і:- 1 to 8 do Result:- Result + IntToHex(A[i],2)+' ¦; End;
end.
Код тестовой программы, использующей модуль DrvLoader, показан в листинге 14.9, а вид формы и результат работы — на рис. 14.24 (для контроля мы запустили программу DebugView, показывающую отладочные сообщения драйвера).
-стинг 14.9. Тестовая программа чтения данньїх с USB^y^pOMCp^l * - «||||] unit Unitl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DrvLoader, ExtCtrls, Spin;
type
TForml - class(TForm) btnLoad: TButton; btnUnload: TButton; Bevel1: TBevel; btnOpen: TButton; btnClose: TButton; Bevel2: TBevel; btnFuncl: TButton; EOutput: TEdit;
Result:- ";
If hDevice - INVALID HANDLE VALUE then Exit;
436
Часть IV. Создание USB-устройств
Buttonl: TButton; SpinEditl: TSpinEdit;
procedure btnLoadClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnUnloadClick(Sender: TObj ect);
procedure btnOpenClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure btnFunclClick(Sender: TObject);
procedure ButtonlClick(Sender: TObject); private public
Driver : TAT89DriverLoader; end;
var
Forml: TForml ; implementation {$R *.dfm}
Il Создание компонента TDriverLoader procedure TForml.FormCreate(Sender: TObj ect); begin
Driver:= TAT89DriverLoader.Create; end;
Il Уничтожение компонента TDriverLoader procedure TForml.FormDestroy(Sender: TObject); begin
Driver.Free; end;
Il Регистрация сервиса в реестре и старт procedure TForml.btnLoadClick(Sender: TObject); begin
Driver.CreateServiсе(ExtractFilePath(ParamStr(0))); Driver. Startservice; end;
Гпава 14. Создание USB-устройства на основе ATMEL АТ89С5131
437
Il Останов сервиса и удаление из реестра procedure TForml.btnUnloadClick(Sender: TObject); begin
Driver.StopService;
Driver.RemoveService; end;
Il Открытие драйвера
procedure TForml.btnOpenClick(Sender: TObject); begin
If Driver.Open(SpinEditl.Value) then MessageDlg('Драйвер открыт успешно', mtConfirmation, [mbOK], 0) else MessageDlg('Ошибка открытия драйвера', mtError, [mbOK], 0); end;
Il Закрытие драйвера
procedure TForml.btnCloseClick(Sender: TObj ect); begin
Driver.Close; end;
Il Выполнение DeviceloControl($800)
procedure TForml.btnFunclClick(Sender: TObject);
begin
EOutput. Text:= IntToStr(Driver. Fund); end;
Предыдущая << 1 .. 128 129 130 131 132 133 < 134 > 135 136 137 138 139 140 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100