Compatibilidad con extensiones MTP

Protocolo de transferencia de medios

El Protocolo de transferencia de medios (MTP) es una extensión del Protocolo de transferencia de imágenes (PTP). Como resultado, todas las semánticas del protocolo PTP son válidas en MTP.

MTP se comunica mediante comandos y respuestas entre dos partes, el iniciador y el respondedor. Los roles de los dispositivos implicados están muy claramente definidos. Normalmente, el equipo es el iniciador y el dispositivo siempre es el respondedor. Un dispositivo que no es de PC también podría ser un iniciador (por ejemplo, una cubierta de automóvil o una caja X de Microsoft). Un dispositivo nunca puede asumir ambos roles al mismo tiempo.

El iniciador inicia la comunicación enviando un comando al respondedor. El respondedor procesa el comando y devuelve una respuesta adecuada. Puede haber una fase de datos asociada al comando . Si este es el caso, tanto el iniciador como el respondedor deben conocer la dirección del flujo de datos de antemano y aceptarla. Tenga en cuenta que no hay un encabezado descriptivo que indique flujos de datos para nuevos comandos.

El respondedor puede iniciar la comunicación independientemente del iniciador. Por ejemplo, el respondedor puede enviar eventos al iniciador. Sin embargo, no se puede enviar ningún dato junto con el evento . Si hay datos que deben leerse como parte del evento, el iniciador debe enviar un comando MTP y, a continuación, el dispositivo puede enviar datos en respuesta al comando.

Para obtener una descripción completa de MTP, consulte la especificación MTP.

Envío de comandos MTP

Las aplicaciones pueden enviar comandos MTP a un dispositivo invocando el método IPortableDevice::SendCommand . El comando que se envía depende de si hay una fase de datos y, sobre si los datos adjuntos se leen o escriben en el dispositivo. En la tabla siguiente se describen los tres posibles comandos de extensión MTP.

Tenga en cuenta que estos comandos son específicos de MTP; y, por lo tanto, solo se implementan mediante el controlador de clase MTP de WPD.

Get-Help Descripción
WPD_COMMAND_MTP_EXT_END_DATA_TRANSFER Emite un comando MTP que señala la conclusión de una operación de lectura o escritura de datos.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITHOUT_DATA_PHASE Emite un comando MTP sin una fase de datos correspondiente.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_WRITE Emite un comando MTP seguido de los datos adjuntos, que se escribirán en el dispositivo.
WPD_COMMAND_MTP_EXT_EXECUTE_COMMAND_WITH_DATA_TO_READ Emite un comando MTP seguido de los datos adjuntos, que se leen desde el dispositivo.
WPD_COMMAND_MTP_EXT_READ_DATA Emite un comando MTP que envía datos desde el dispositivo al equipo.
WPD_COMMAND_MTP_EXT_WRITE_DATA Emite un comando MTP que envía datos al dispositivo desde el equipo.

 

Independientemente de la fase, se deben especificar WPD_PROPERTY_MTP_EXT_OPERATION_CODE y WPD_PROPERTY_MTP_EXT_OPERATION_PARAMS .

Si el controlador MTP pudo enviar el comando al dispositivo, los valores devueltos siempre contendrán WPD_PROPERTY_MTP_EXT_RESPONSE_CODE. Si el código de respuesta indica que se ha realizado correctamente y si la semántica del comando permite parámetros de respuesta, WPD_PROPERTY_MTP_EXT_RESPONSE_PARAMS también estará disponible.

Guía de programación