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

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

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

Result:- True;
End;
// Старт сервиса драйвера
Function TAT89DriverLoader.StartService : Boolean; var
IpServiceArgVectors : PChar;
hSCMan, hService : SC_HANDLE;
Begin Result:- False;
// Старт зарегистрированного сервиса
hSCMan := WinSvc.OpenSCManager(Nil, Nil, SC_MANAGER_CONNECT);
If hSCMan = 0 then Exit;
hService:- WinSvc.OpenService(hSCMan, DriverName, SERVICE_START);
If hService - 0 then begin CloseServiceHandle(hSCMan);
Exit;
End;
IpServiceArgVectors:-nil;
WinSvc.StartService(hService, 0, IpServiceArgVectors);
WinSvc.CloseServiceHandle(hService);
WinSvc.CloseServiceHandle(hSCMan);
Result:- True;
End;
// Останов сервиса драйвера
Function TAT89DriverLoader.StopService : Boolean;
Глава 14. Создание USB-устройства на основе ATMEL АТ89С5131
433
var serviceStatus : TServiceStatus;
hSCMan, hService : SC_HANDLE;
Begin Result:- False;
// Остановка сервиса
hSCMan:= WinSvc.OpenSCManager(Nil, Nil, SC_MANAGER_CONNECT);
If hSCMan - 0 then Exit;
hService: = WinSvc.OpenService(hSCMan, DriverName, SERVICE_STOP);
If hService = 0 then begin WinSvc.CloseServiceHandle(hSCMan);
Exit;
End;
// Останов
WinSvc.ControlService(hService, SERVICE_CONTROL_STOP, serviceStatus);
WinSvc.CloseServiceHandle(hService);
WinSvc.CloseServiceHandle(hSCMan);
Result;- True;
End;
// Открытие драйвера. Параметр Devlndex передает номер // устройства
(согласно параметру m_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:- CreateFiie(0DevName[1],
GENERIC_READ or GENERICJWRITE,
0,nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);
Result:- hDevice <> INVALID_HANDLE_VALUE;
If not Result then begin
MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOK], 0);
End;
End;
434
Часть IV. Создание USB-устройств
// Закрыть дескриптор драйвера Procedure TAT89DriverLoader.Close; -Begin
If hDevice <> INVALID_HANDLE_VALUE then CloseHandle(hDevice); hDevice:=
INVALID_HANDLE_VALUE;
End;
// Параметры вызова DeviceloControl Coast
FILE_DEVICE_UNKNOWN =* $221 METHOD_BUFFERED =* 0;
FILE_ANY_ACCESS * $0000;
// Формирование CTL-кода
function Get_Ctl_Code(Nr: Integer): Integer; begin Result:"
(FILEJDEVICEJONKNOWN 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_VALCJE then Exit; DeviceloControl(hDevice,
Get_Ctl_Code($800),...); End;
// Функция чтения 8 Сайт
Function TAT89DriverLoader.Read : String;
Var A : Array[1..8] of Byte;
ReadBytes : Cardinal; i : Integer;
Begin
II Инициализация буфера For i:- 1 to 8 do A[i]:- 0;
Глава 14. Создание USB-устройства на основе ATMEL АТ89С5131
435
Result:- '';
If hDevice = INVALID_HANDLE_VALUE then Exit;
// Чтение
If not ReadFile(hDevice, A, 8, ReadBytes, nil) then
MessageDlg(SysErrorMessage(GetLastError), mtError, [iribOK], 0);
// Шестнадцатеричная строка For i:- 1 to 8 do Result:- Result +
IntToHex(A[i],2)+' End;
end.
Код тестовой программы, использующей модуль DrvLoader, показан в листинге
14.9, а вид формы и результат работы - на рис. 14.24 (для контроля мы
запустили программу DebugView, показывающую отладочные сообщения
драйвера).
Р^стинг 14.9. Тестовая программа чтения данных с USB-y
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;
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 : TAT8 9DriverLoader; end;
var
Forml: TForml; implementation ($R *.dfin)
// Создание компонента TDriverLoader procedure TForml.FOrmCreate(Sender:
TObj ect); begin
Driver:= TAT89DriverLoader.Create; end;
// Уничтожение компонента TDriverLoader procedure
TForml.FormDestroy(Sender: TObject); begin Driver.Free; end;
// Регистрация сервиса в реестре и старт procedure
TForml.btnLoadClick(Sender: TObject); begin
Driver.CreateService(ExtractFilePath(ParamStr(0))); Driver.StartService;
end;
Гпава 14. Создание USB-устройства на основе ATMEL АТ89С5131
437
// Останов сервиса и удаление из реестра procedure
TForml.btnUnloadClick(Sender: TObject); begin Driver.StppService;
Driver.RemoveService; end;
// Открытие драйвера
procedure TForml.btnOpenClick(Sender: TObject); begin
Предыдущая << 1 .. 129 130 131 132 133 134 < 135 > 136 137 138 139 140 141 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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