Команда SC_RESET_DEV

Команда SC_RESET_DEV позволяет в процессе работы послать определенному устройству на шине сигнал сброса, приведя его тем самым в исходное состояние. Структура, описывающая данную команду, называется SRB_BusDeviceReset.

Разберем более подробно поля структуры.

  • SRB_Cmd

    Это поле должно содержать код команды SC_RESET_DEV.

  • SRB_Status

    После выполнения команды здесь будет храниться результат вызова функции SendASPI32Command. Ниже приведены возможные значения:

    • SS_PENDING — происходит попытка выполнить команду.
    • SS_COMP — операция успешно завершена.
    • SS_ABORTED — команда SCSI была грубо прервана.
    • SS_ABORT_FAIL — не удалось грубо завершить команду.
    • SS_ERR — команда SCSI была завершена с ошибкой.
    • SS_INVALID_SRB — одно или большее количество полей в структуре SRB_BusDeviceReset были установлены неправильно.
    • SS_INVALID_PATH_ID — недопустимые значения идентификатора и (или) логического номера устройства.
  • SRB_HaId

    Сюда нужно поместить номер выбранного контроллера. Нумерация начинается с 0. Максимальное значение номера контроллера равно 7.

  • SRB_Flags

    Это поле зарезервировано и должно быть установлено в 0.

  • SRB_Hdr_Rsvd

    Это поле зарезервировано и должно быть установлено в 0.

  • SRB_Target

    Сюда помещается идентификатор устройства. Получить это значение можно, используя команду SC_HA_INQUIRY. Нумерация устройств всегда начинается с 0.

  • SRB_Lun

    Логический адрес устройства. В Win32 это поле игнорируется.

  • SRB_HaStat

    После удачного завершения команды в это поле будет помещено определенное значение о состоянии контроллера. Вот эти значения.

    • HASTAT_OK — контроллер ошибок не обнаружил.
    • HASTAT_TIMEOUT — время, отпущенное на выполнение текущей операции, закончилось.
    • HASTAT_COMMAND_TIMEOUT — время ожидания обработки данной команды истекло.
    • HASTAT_SEL_TO — время обслуживания выбранного устройства вышло.
    • HASTAT_MESSAGE_REJECT — при обработке команды контроллером прошло неверное сообщение.
    • HASTAT_BUS_RESET — был обнаружен общий сброс шины.
    • HASTAT_PARITY_ERROR — была обнаружена ошибка четности.
    • HASTAT_REQUEST_SENSE_FAILED — контроллер не сумел правильно обработать данные отчета, полученные от целевого устройства.
    • HASTAT_DO_DU — произошло переполнение данных.
    • HASTAT_BUS_FREE — неожидаемая очистка шины.
    • HASTAT_PHASE_ERR — отказ механизма последовательного распределения идентификаторов на шине.
  • SRB_TargStat

    После успешного завершения команды SCSI в это поле будет занесено значение состояния, возвращаемого текущим устройством. Не следует обрабатывать это значение, если поле SRB_Status возвратит SS_COMP. Ниже приведены общие случаи возвращаемого значения.

    • STATUS_GOOD — данные о состоянии устройства отсутствуют.
    • STATUS_CHKCOND — данные о состоянии находятся в поле SenseArea (не обязательно).
    • STATUS_BUSY — указанный идентификатор (логический адрес) устройства занят.
    • STATUS_RESCONF — возник конфликт резервирования адресов.
  • SRB_PostProc

    Если установлен флажок SRB_POSTING, в это поле необходимо занести функцию обратного вызова для обработки уведомляющих сообщений интерфейса ASPI. Если установлен флаг SRB_EVENT_NOTIFY, сюда помещается дескриптор пользовательского события для обработки сообщений ASPI. Возвращаемым значением функции SendASPI32Command при выполнении управляющей команды SC_EXEC_SCSI_SMD является SS_PENDING.

    К сожалению, в операционных системах Windows 95/98/ME/NT/2000 выполнение команды SC_RESET_DEV может не дать ожидаемого результата. Нет гарантии в правильном выполнении запроса на сброс устройства. Использование команды объясняется требованиями совместимости при переходе от Winl6 на Win32 платформу. Приведем пример использования команды SC_RESET_DEV, В котором посылается команда сброса на устройство под номером 3, расположенном на контроллере под номером 0.

    Листинг 2.10. Пример использования команды SC_RESET_DEV на Visual C++

    Листинг 2.11. Пример использования команды SC_RESET_DEV на Visual Basic

    Данный пример кода посылает команду сброса на устройство под номером три, расположенное на контроллере номер 0.

 

 

2021-04-01

Google сообщил о запуске проекта Dunant

Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...

подробнее
2020-04-06

Новшества в обновленной Windows 10

Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...

подробнее

 

Все новости...

 

Научно-Техническое Объединение

Тел.: +7(4752) 55-95-86

E-mail:e-mail