Suporte a extensões MTP

Protocolo de Transferência de Mídia

O MTP (Media Transfer Protocol) é uma extensão para o PTP (Protocolo de Transferência de Imagem). Como resultado, todas as semânticas de protocolo PTP são válidas no MTP.

O MTP se comunica usando comandos e respostas entre duas partes, o iniciador e o respondente. As funções dos dispositivos envolvidos são claramente definidas. O computador normalmente é o iniciador e o dispositivo é sempre o respondente. Um dispositivo não PC também pode ser um iniciador (por exemplo, um deck de carro ou uma caixa X da Microsoft). Um dispositivo nunca pode assumir ambas as funções ao mesmo tempo.

O iniciador inicia a comunicação enviando um comando para o respondente. O respondente processa o comando e envia uma resposta apropriada. Pode haver uma fase de dados associada ao comando. Se esse for o caso, a direção do fluxo de dados deverá ser conhecida antecipadamente e aceita pelo iniciador e pelo respondente. Lembre-se de que não há um cabeçalho descritivo que indique fluxos de dados para novos comandos.

O respondente pode iniciar a comunicação independente do iniciador. Por exemplo, o respondente pode enviar eventos para o iniciador. No entanto, nenhum dado pode ser enviado junto com o evento. Se houver dados que precisem ser lidos como parte do evento, o iniciador deverá enviar um comando MTP e, em seguida, o dispositivo poderá enviar dados em resposta ao comando.

Para obter uma descrição completa do MTP, consulte a especificação MTP.

Enviando comandos MTP

Os aplicativos podem enviar comandos MTP para um dispositivo invocando o método IPortableDevice::SendCommand . O comando enviado depende se há uma fase de dados e se os dados que acompanham são lidos ou gravados no dispositivo. A tabela a seguir descreve os três comandos de extensão MTP possíveis.

Lembre-se de que esses comandos são específicos do MTP; e, portanto, são implementados apenas pelo driver de classe MTP do WPD.

Comando Descrição
WPD_COMMAND_MTP_EXT_END_DATA_TRANSFER Emite um comando MTP que sinaliza a conclusão de uma operação de leitura ou gravação de dados.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITHOUT_DATA_PHASE Emite um comando MTP sem uma fase de dados correspondente.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_WRITE Emite um comando MTP que é seguido pelos dados que acompanham, que serão gravados no dispositivo.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_READ Emite um comando MTP que é seguido pelos dados que acompanham, que são lidos do dispositivo.
WPD_COMMAND_MTP_EXT_READ_DATA Emite um comando MTP que envia dados do dispositivo para o computador.
WPD_COMMAND_MTP_EXT_WRITE_DATA Emite um comando MTP que envia dados para o dispositivo do computador.

 

Independentemente da fase, WPD_PROPERTY_MTP_EXT_OPERATION_CODE e WPD_PROPERTY_MTP_EXT_OPERATION_PARAMS devem ser especificados.

Se o driver MTP conseguiu enviar o comando para o dispositivo, os valores retornados sempre conterão WPD_PROPERTY_MTP_EXT_RESPONSE_CODE. Se o código de resposta indicar êxito e se a semântica do comando permitir parâmetros de resposta, WPD_PROPERTY_MTP_EXT_RESPONSE_PARAMS também estará disponível.

Guia de Programação