Поддержка расширений MTP

Протокол передачи мультимедиа

Протокол MTP — это расширение протокола PTP. В результате все семантики протокола PTP допустимы в MTP.

MTP взаимодействует с помощью команд и ответов между двумя сторонами, инициатором и ответчиком. Роли участвующих устройств очень четко определены. Компьютер обычно является инициатором, и устройство всегда является ответчиком. Устройство, отличное от ПК, также может быть инициатором (например, палубой автомобиля или microsoft X-box). Устройство никогда не может принимать обе роли одновременно.

Инициатор начинает обмен данными, отправляя команду ответчику. Ответитель обрабатывает команду и отправляет соответствующий ответ. С командой может быть связан этап данных. В этом случае направление потока данных должно быть известно заранее и принято инициатором и ответчиком. Имейте в виду, что нет описательного заголовка, указывающего потоки данных для новых команд.

Ответчик может начать обмен данными независимо от инициатора. Например, ответчик может отправлять события инициатору. Однако данные не могут быть отправлены вместе с событием. Если есть какие-либо данные, которые необходимо прочитать в рамках события, инициатор должен отправить команду MTP, а устройство может отправлять данные в ответ на команду.

Полное описание MTP см. в спецификации MTP.

Отправка команд MTP

Приложения могут отправлять команды MTP на устройство, вызывая метод IPortableDevice::SendCommand . Отправленная команда зависит от того, существует ли этап данных и от того, считываются ли любые сопутствующие данные с устройства или записываются на него. В следующей таблице описаны три возможных команды расширения MTP.

Имейте в виду, что эти команды относятся к MTP; и поэтому реализуются только драйвером класса WPD MTP.

Get-Help Описание
WPD_COMMAND_MTP_EXT_END_DATA_TRANSFER Выдает команду MTP, которая сигнализирует о завершении операции чтения или записи данных.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITHOUT_DATA_PHASE Выдает команду MTP без соответствующего этапа данных.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_WRITE Выдает команду MTP, за которой следует сопутствующие данные, которые будут записаны на устройство.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_READ Выдает команду MTP, за которой следует сопутствующие данные, которые считываются с устройства.
WPD_COMMAND_MTP_EXT_READ_DATA Выдает команду MTP, которая отправляет данные с устройства на компьютер.
WPD_COMMAND_MTP_EXT_WRITE_DATA Выдает команду MTP, которая отправляет данные на устройство с компьютера.

 

Независимо от этапа необходимо указать WPD_PROPERTY_MTP_EXT_OPERATION_CODE и WPD_PROPERTY_MTP_EXT_OPERATION_PARAMS .

Если драйвер MTP смог отправить команду на устройство, возвращаемые значения всегда будут содержать WPD_PROPERTY_MTP_EXT_RESPONSE_CODE. Если код ответа указывает на успешность и если семантика команды разрешает параметры ответа, WPD_PROPERTY_MTP_EXT_RESPONSE_PARAMS также будет доступна.

Руководство по программированию