Команда MODE SENSE (IDE)
Команда MODE SENSE (IDE) позволяет определить разнообразные параметры CD-ROM и дополняет возможности команды MODE SELECT.
Описание команды.
- Байт 0
В байт следует поместить код команды MODE SENSE (5Ah).
- Байт 1
Состоит из нескольких частей, но все они зарезервированы и не используются.
- Байт 2
Состоит из двух частей.
- Биты с 7 по 6 — определяют код режима. В зависимости от установленного кода будут возвращены соответствующие значения. Код режима может принимать одно из четырех значений.
- Биты с 5 по 0 — определяют код страницы, который необходимо получить.
- Байты с 3 по 6
Зарезервированы и не используются.
- Байты с 7 по 8
Сюда следует поместить значение размера (в байтах) выделенного буфера данных.
- Байты с 9 по 11
Зарезервированы и не используются.
Как уже было сказано ранее, поле кода режима принимает несколько предопределенных значений. Первое (0h) запрашивает текущие значения CD-ROM, которые могут иметь три варианта представления:
- Текущие значения, установленные последней успешно выполненной командой MODE SELECT.
- Сохраненные ранее значения, если команда MODE SELECT потерпела неудачу.
- Значения по умолчанию, если сохраненные значения не доступны или не поддерживаются устройством.
Второе значение кода режима (1h) возвращает битовую маску изменяемых параметров. При этом изменяемые параметры будут иметь значение 1, а неизменяемые установятся в 0. Попытки изменить неизменяемые параметры приведут к аварийной ситуации.
Значение кода режима по умолчанию (2h) позволит получить значения параметров, поддерживаемых CD-ROM по умолчанию. Неподдерживаемые значения будут установлены в 0. Значения по умолчанию доступны для считывания даже когда устройство не готово.
Код режима, равный 3h, вернет поддерживаемые устройством сохраняемые значения параметров. Неподдерживаемые параметры будут установлены в 0. Сохраняемые параметры хранятся в энергонезависимой памяти и не теряются после выключения питания устройства.
Теперь рассмотрим подробнее форматы структур, возвращаемых после выполнения команд MODE SELECT и MODE SENSE.
Каждая страница будет содержать код страницы, длину страницы и набор параметров определенного режима.
Теперь разберем форматы страниц с данными, возвращаемыми устройством. Вначале рассмотрим код страницы (0Eh) управления звуком CD-ROM. Данная страница позволяет получить и установить режимы воспроизведения, значения громкости каждого канала звука.
Описание команды.
- Байт 0
Состоит из трех частей.
- Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит, зарезервирован и не используется.
- Бит 6 — зарезервирован и не используется.
- Биты 5—0 — указывают на код страницы, запрошенной командой MODE SENSE ИЛИ MODE SELECT.
- Байт 1
Содержит значение длины (в байтах) страницы управления звуком (0Eh).
- Байт 2
Состоит из четырех частей.
- Биты с 7 по 3 — зарезервированы и не используются.
- Бит 2 — является информационным (И) и указывает на начало воспроизведения музыкального диска. Всегда должен иметь значение 1.
- Бит 1 — указывает на режим остановки (РО). Если этот бит равен 1, то устройство должно закончить воспроизведение перед началом следующего трека.
- Бит 0 — зарезервирован и не используется.
- Байты с 3 по 5
Зарезервированы и не используются.
- Байты с 6 по 7
Указывают на количество логических блоков, обрабатываемых устройством при воспроизведении диска за одну секунду. По умолчанию это значение равно 75 блокам в секунду.
- Байты с 8 по 15
Указывают на возможные связи аудиоканалов диска и выходных портов устройства.
Байты 9, 11, 13, 15 указывают на относительные уровни громкости соответствующего канала. Значение 00h говорит о минимальном (выключено) уровне громкости, а значение FFh, наоборот, указывает на максимальную громкость. Производителям рекомендуют поддерживать хотя бы 16 уровней громкости (значения определяются по формуле: 20Log - двоичный уровень/256).
Теперь рассмотрим страницу CD-ROM (код ODh). Она позволяет получить параметры устройства, характерные для всех типов CD-ROM. Например, можно легко узнать время остановки вращения двигателя при отсутствии обращений к диску.
Описание команды.
- Байт 0
Состоит из трех частей.
- Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит зарезервирован и не используется. По умолчанию значение бита равно 0.
- Бит 6 — зарезервирован и не используется.
- Биты 5—0 — указывают на код страницы, запрошенной командами MODE SENSE ИЛИ MODE SELECT
- Байт 1
Содержит значение длины (в байтах) страницы CD-ROM (0Dh).
- Байт 2
Зарезервирован и не используется.
- Байт 3
Имеет две части. Первая (биты 7—4) зарезервирована и не используется. Вторая часть (биты 3—0) содержит значение времени, через которое двигатель устройства остановится, если отсутствуют обращения к диску.
- Байты с 4 по 5
Указывают на количество С-модулей в поле М при адресации через формат МСФ (минута, секунда, фрейм). Для носителей CD-ROM и CD-DA это значение равно 60.
- Байты с 6 по 7
Указывают на число Ф-модулей в поле С при адресации через формат МСФ (минута, секунда, фрейм). Для носителей CD-ROM и CD-DA это значение равно 75.
Следующая страница служит для определения параметров восстановления при ошибках, возникающих вследствие чтения данных с устройства (например, использование команд READ, READ ТОС).
Описание команды.
- Байт 0
Состоит из трех частей.
- Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит зарезервирован и не используется. По умолчанию значение бита равно 0.
- Бит 6 — зарезервирован и не используется.
- Биты 5—0 — указывают на код страницы, запрошенной командами MODE SENSE ИЛИ MODE SELECT.
Содержит значение длины (в байтах) страницы описания ошибок (01h).
Хранит значение параметра восстановления. Биты 7—6 и 3 зарезервированы и не используются. Бит 5 указывает на значение блока передачи (БП). Если значение бита равно 1, значит, не восстановленный блок данных будет передан программе управления прежде, чем будет возвращен код статуса. Бит 4 обозначает непрерывность чтения (НЧ). Значение 1 этого бита говорит о том, что CD-ROM должен передать полный затребованный блок данных. Если бит равен 0, то это означает, что возникли ошибки (задержки) при передаче данных. Бит 2 определяет ошибку пересылки (ОПР). Значение 1 указывает, что CD-ROM должен сообщить о восстановленных ошибках. Бит 1 отвечает за отключение передачи (ОП) данных. Значение единицы указывает, что CD-ROM должен завершить передачу данных после обнаружения ошибки, а значение ноль не требует завершения передачи. Бит 0 указывает на отключение исправлений (ОИ) Если значение бита равно 1, значит, коды исправления ошибок не долж¬ны использоваться для восстановления данных.
Определяет количество попыток, которое делает контроллер для исправления ошибки.
Зарезервированы и не используются.
Рассмотрим последнюю страницу возможностей и состояния CD-ROM, поддерживаемую командой MODE SENSE. Она позволяет определить тип используемого диска, состояние лотка, блокировку лотка, максимальную скорость чтения устройства, размер внутреннего буфера CD-ROM и многое другое.
Описание таблицы.
- Байт 0
Состоит из трех частей.
- Бит 7 — говорит о том, может ли быть сохранена (С) данная страница (только для команды MODE SENSE). Значение единицы поддерживает такую возможность. При использовании команды MODE SELECT данный бит зарезервирован и не используется. По умолчанию значение бита равно 0.
- Бит 6 зарезервирован и не используется.
- Биты 5—0 указывают на код страницы, запрошенной командами MODE SENSE ИЛИ MODE SELECT.
Содержит значение длины (в байтах) страницы описания ошибок (12h).
- Биты 7—3 — зарезервированы и не используются.
- Бит 2 — указывает на поддержку пакетного чтения (ПЧ) данных.
- Бит 1 — указывает на возможность чтения дисков в формате CD-E.
- Бит 0 — указывает на возможность чтения дисков в формате CD-R.
- Биты 7—2 — зарезервированы и не используются.
- Бит 1 — указывает на возможность записи дисков в формате CD-E.
- Бит 0 — указывает на возможность записи дисков в формате CD-R.
- Бит 7 — зарезервирован и не используется.
- Бит 6 — указывает на поддержку чтения мультисессионных (МС) дисков (например, Photo CD).
- Бит 5 — указывает на поддержку чтения секторов в формате Mode 2 Form 2.
- Бит 4 — говорит о поддержке чтения секторов в формате Mode 2 Form 1(XA).
- Бит 3 — указывает на поддержку цифрового выхода (IEC958 — протокол цифрового интерфейса для передачи данных между CD-ROM и внешним устройством цифровой звукозаписи) на втором порту.
- Бит 2 — указывает на поддержку цифрового выхода (IEC958) на первом порту.
- Бит 1 — говорит о поддержке композитного (аудио и видео) потока данных.
- Бит 0 — указывает на способность устройства воспроизводить аудиоданные и поддерживать информацию подканала звука
- Бит 7 — зарезервирован и не используется.
- Бит 6 — указывает на поддержку кода номера носителя (UPC — Universal Product Code).
- Бит 5 — указывает на поддержку кода международного эталона за¬писи (ISRC — International Standard Recording Code).
- Бит 4 — говорит о поддержке указателя ошибки (УО).
- Бит 3 — говорит о том, что данные подканала будут возвращены поочередно и с коррекцией ошибок.
- Бит 2 — указывает, что команды, возвращающие данные подканала, смешивают информацию.
- Бит 1 — указывает на поддержку устройством расширенных возможностей (РВ), т. е. дисковод может вернуть текущее положение без прерывания воспроизведения. Значение 0 говорит об отсутствии такой возможности, а значение 1 говорит о поддержке и гарантирует отсутствие ошибок.
- Бит 0 — указывает, что диск (аудио) может быть прочитан командой READ CD.
- Бит 7—5 указывают на способ загрузки диска. Это битовое поле может принимать одно из следующих значений.
- 000b — говорит о выдвижном механизме.
- 001b — говорит о лоточном механизме.
- 010b — указывает на выбрасывающий тип механизма.
- 011b — зарезервирован.
- 100b — механизм с индивидуально заменяемыми дисками.
- 101b — указывает на кассетный (картриджный) механизм.
- 110b — зарезервирован.
- 111b — зарезервирован.
- Бит 4 — зарезервирован и не используется.
- Бит 3 — указывает на поддержку выдачи диска командой START/STOP. Если тип механизма является картриджным, этот бит указывает на возможность выдачи картриджа устройством.
- Бит 2 — указывает на поддержку механизмом устройства джампера блокировки (ДБ), позволяя блокировать доступ к диску.
- Бит 1 — указывает на текущее состояние блокировки (ТСБ) меха¬низма. Значение 0 говорит о том, что устройство разблокировано и можно вставить диск. Значение 1 указывает, что механизм блокиро¬ван достать диск, пользуясь программными методами или кнопкой выдачи диска (Eject) нельзя, равно как в случае отсутствия диска в дисководе не удастся вставить никакой диск в устройство.
- Бит 0 — указывает на поддержку устройством функции блокировки (Б) механизма выдачи диска.
- Биты 7—4 — зарезервированы и не используются.
- Бит 3 — определяет ошибку загрузки (03), которая возникает при использовании команды LOAD UNLOAD CD, когда диск в дисководе отсутствует.
- Бит 2 — указывает на поддержку определения состояния слота (СС) устройства после того, как был вынут картридж. Последующий вызов команды MECHANISM STATUS позволит точно определить состояние слота.
- Бит 1 — указывает на поддержку независимого отключения каналов звука (НОКЗ) на устройстве.
- Бит 0 — указывает на поддержку независимой регулировки громкости (НРГ) каждого канала звука.
Здесь хранится значение максимальной поддерживаемой скорости (в Кбайт/с) чтения данным устройством CD-ROM. Оно не является постоянным и изменяется в зависимости от скорости вращения диска, местоположения текущего считывания и других факторов.
Хранят значение количества поддерживаемых уровней фомкости. Если поддерживает только включение и выключение звука, будет возвращено значение 2.
Сюда помещается значение (в Кбайтах) полного размера буфера данного устройства CD-ROM. Если привод не имеет буфера, будет возвращено нулевое значение.
Здесь хранится значение фактической скорости передачи данных, используемой дисководом в настоящий момент. Это значение представлено, как число в Кбайт/с.
Зарезервирован и не используется.
Описывает формат цифрового выхода устройства.
- Биты 7 и 6 — зарезервированы и не используются.
- Биты 5 и 4 — указывают на разрядность цифрового сигнала и могут иметь следующие значения:
- 00b — равно 32 бита;
- 01b — равно 16 бит;
- 10b — равно 24 бита;
- 11b — равно 24 бита.
- Бит 3 — установлен в 1, если первым идет младший значащий бит (МЗБ) значения, и в 0, если — (СЗБ).
- Бит 2 — установлен в 1, если используется левый канал, и в 0, если правый.
- Бит 1 — установлен, если данные сигнала правильны.
- Бит 0 — зарезервирован и не используется.
Exec.SRB_BufLen = 256; // размер буфера для данных
Exec.SRB_BufPointer = buffer; // указатель на буфер данных
Exec.SRB_SenseLen = SENSE_LEN; // размер поля отчета
Exec.SRB_PostProc = (LPVOID) hEventASPI; // определяем объект события
Exec.SRB_CDBLen = 12; // размер команды MODE SELECT
Exec.CDBByte[0] = SCSI_MODE_SEN10; // заносим по адресу первого байта
// значение команды MODE SENSE (0x5A)
// заносим по адресу 2 байта код нужной страницы
Exec.CDBByte[2] = 0х2А; // страница возможностей и состояния CD-ROM
// заносим длину буфера в 256 байт (100h в шестнадцатиричном виде)
Exec.CDBByte[7] = 0x01; // старший значащий бит
Exec.CDBByte[8] = 0x00; // младший значащий бит
Зарезервированы и не используются.
На этом можно завершить описание страниц поддержки CD-ROM и продемонстрировать пример их использования. Напишем функцию, которая определит максимальную скорость чтения, поддерживаемую установленным на компьютере устройством CD-ROM.
Листинг 1. Определение максимальной скорости чтения CD-ROM в Visual C++
Итак, мы получили значение максимальной скорости чтения. Как мы узнали, где хранится закодированная скорость? Очень просто: отсчитали 8 байтов заголовка страницы параметров, начиная с 0, и прибавили 8 байтов из страницы возможностей и состояния CD-ROM. Следующие по счету 2 байта (16 и 17) и есть значение искомой скорости. После это¬го с помощью оператора сдвига извлекли старший и младший значащие биты, получив конечный результат скорости в килобайтах в секунду.
2021-04-01
Google сообщил о запуске проекта Dunant
Проект Dunant, начатый в 2018 году, был запущен в эксплуатацию. Трансатлантический интернет-кабель соединяет США и континентальную Европу. Общая протяженность...
подробнее2020-04-06
Новшества в обновленной Windows 10
Корпорация Microsoft завершила разработку обновления, в котором добавлено множество функций. Обновление содержит как доработку уже имеющихся систем, так...
подробнее