Команда SC_ABORT_SRB

Для чего используется данная команда? Если был послан запрос устройству или ожидался ответ, но вдруг стало необходимо оборвать связь и вернуться в программу, надо выполнить команду SC_ABORT_SRB. Но, хотелось бы подчеркнуть, что, выполняя команду SC_ABORT_SRB, мы только запрашиваем интерфейс ASPI на возможность разрыва. Запрос может быть выполнен, а может остаться без внимания. Поэтому не стоит полагаться на эту команду, как на панацею от неправильной (некорректной) работы с оборудованием. Можно вызывать эту команду управления и перед выходом из программы.

Теперь разберем каждое поле структуры более подробно.

  • SRB_Cmd

    Сюда заносим код команды SC_ABORT_SRB.

  • SRB_Status

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

    • SS_COMP — говорит о завершении команды без ошибок, но не указывает на то, что связь с текущим устройством была успешно разорвана. Для получения подтверждения разрыва связи необходимо проверить значение SS_ABORTED.
    • SS_INVALID_HA — попытка использовать недопустимый (пустой) номер контроллера.
    • SS_INVALID_SRB — одно или более полей структуры SRB_Abort установлены неверно.
    • SS_ABORTED — попытка оборвать обмен данными с устройством успешно завершена. Только получив это значение, можно надеяться на успешный разрыв связи.
  • SRB_HaId

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

  • SRB_Flags

    Это поле не используется и сюда следует поместить 0.

  • SRB_Hdr_Rsvd

    Это поле зарезервировано и сюда следует поместить 0.

  • SRB_ToAbort

    В это поле надо занести указатель на структуру команды, которую требуется прервать.

По завершении выполнения команды SC_ABORT_SRB функция обработки запросов ASPI sendASPI32command возвратит одно из значений: SS__COMP, SS_INVALID_HA, SS_INVALID_SRB. Если программа инициировала разрыв связи, будет возвращено значение SS_ABORTED. He стоит повторять описание этих значений, поскольку оно фактически полностью совпадает с ранее означенным. Приведем простой пример использования команды SC_ABORT_SRB, который демонстрирует как разорвать связь с зависшим устройством.

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

Пример для Visual Basic выглядит тоже достаточно просто:

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

Как видите, работа с командой SC_ABORT_SRB не представляет особой сложности, поэтому переходим к следующей команде.

 

 

2021-04-01

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

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

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

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

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

подробнее

 

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

 

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

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

E-mail:e-mail