Образовательный портал Claw.ru
Всё для учебы, работы и отдыха
» Шпаргалки, рефераты, курсовые
» Сочинения и изложения
» Конспекты и лекции
» Энциклопедии

В этом куске кода используется структура PSCSI_ADDRESS, которая выглядит следующим образом:

type

 TSCSI_ADDRESS = record

 Length : LongInt; // Размер структуры TSCSI_ADDRESS

 PortNumber : Byte; // Номер адаптера SCSI

 PathId : Byte; // Идентификатор адаптера SCSI

 TargetId : Byte; // Идентификатор объекта SCSI

 Lun : Byte; // Логический номер устройства

 end;

SCSI_ADDRESS = TSCSI_ADDRESS;

PSCSI_ADDRESS = ^TSCSI_ADDRESS;

Как вы уже успели заметить, SCSI-команды для интерфейсов ASPI и SPTI одинаковы, поэтому необходимо знать лишь сами команды и заполнять соответствующим образом CDB (Command Descriptor Block). Для наглядности приведу пример использования интерфейса SPTI для установки скорости CD-ROM. Сравните этот код с таким же, но использующим интерфейс ASPI, и вы сами увидите все отличия.

function SPTISetSpeed(ReadSpeed, WriteSpeed:integer):Boolean;

var

 spti:TScsiPassThroughWithBuffers;

const

 SCSI_IOCTL_DATA_OUT = 0;

 Rate = 176;

begin

 spti.Spt.Length := sizeof(TSCSIPASSTHROUGH);

 spti.Spt.CdbLength := 10;

 spti.Spt.SenseInfoLength := 24;

 spti.Spt.DataIn := SCSI_IOCTL_DATA_OUT;

 spti.Spt.TimeOutValue := 10;

 spti.spt.DataBufferOffset := DWORD(@spti.bDataBuf)-DWORD(@spti);

 spti.spt.SenseInfoOffset := DWORD(@spti.bSenseBuf)-DWORD(@spti);

 spti.Spt.DataTransferLength := sizeof(spti.bDataBuf);

 spti.spt.CDB[0] := $BB;

 spti.spt.CDB[2] := BYTE(ReadSpeed*Rate shr 8);

 spti.spt.CDB[3] := BYTE(ReadSpeed*Rate);

 

 if WriteSpeed<>0 then

 begin

 spti.spt.CDB[4] := BYTE(WriteSpeed*Rate shr 8);

 spti.spt.CDB[5] := BYTE(WriteSpeed*Rate);

 end else

 spti.spt.CDB[4] := $FF;

 spti.spt.CDB[5] := $FF;

 if DeviceIoControl(hDevice, IOCTL_SCSI_PASS_THROUGH, @spti, len, @spti, len, returned, nil) and

 (spti.spt.ScsiStatus=$00) then result := true

 else

 result := false;

end;

Думаю, данный код не нуждается в пояснениях.

Кстати, всё вышесказанное (в том числе и в предыдущей статье) относится не только к устройствам CD-ROM, но и к другим SCSI-устройствам. Отличия лишь в командах. Есть команды, которые обязательны для всех устройств (MODE SELECT, MODE SENSE, INQUIRY и т.д.), и есть команды, которые специфичны для разных типов устройств (BLANK – для устройств CD-RW, PRINT – для принтеров, SCAN – для сканеров, и т.д.).

Теперь вы знаете, как осуществляется управление устройствами, подключёнными к шине SCSI. Какой использовать интерфейс, ASPI или SPTI, или оба вместе – дело ваше. Могу сказать лишь, что для использования двух интерфейсов рациональнее будет либо создать два приложения для двух семейств операционных систем Windows, либо создать две отдельные библиотеки и подгружать их в зависимости от операционной системы, поскольку поддержка двух интерфейсов в одном приложении может отрицательно сказаться на его размере и объеме используемой оперативной памяти.


Скачали данный реферат: Евстрат, Сталин, Малютин, Andrejchenko, Kuzaev, Miheev, Semichaevskij.
Последние просмотренные рефераты на тему: банки рефератов, оценка курсовой работы, решебник 10 класс, реферат роль.



Категории:




Предыдущая страница реферата | 11  12  13  14  15  16  17  18  19  20  21


Поделитесь этой записью или добавьте в закладки

   



Рефераты от А до Я


Полезные заметки

  •