uMTP-Responder --- 在 linux 运行的轻量级 USB 多媒体传输协议(MTP)从机进程
地址:https://github.com/viveris/uMTP-Responder
移植需要修改的文件:
usb_gadget.c
MTP 包数据格式:
数据包是以结构体 MTP_PACKET_HEADER 开始
typedef struct _MTP_PACKET_HEADER { uint32_t length; uint16_t operation; uint16_t code; uint32_t tx_id; }MTP_PACKET_HEADER;
各容器类型的功能与使用场景
-
MTP_CONTAINER_TYPE_COMMAND(命令容器)- 用途:用于设备间发起操作请求,例如读取文件列表、删除文件或修改设备属性等。
- 数据流向:由 Initiator(如 PC)向 Responder(如手机)发送。
- 示例:
MTP_OPERATION_GET_OBJECT(获取文件对象)命令。
-
MTP_CONTAINER_TYPE_DATA(数据容器)- 用途:传输实际数据内容,如文件内容、元数据或设备描述符。
- 数据流向:双向传输,可发送或接收。
- 示例:传输照片文件的分块数据5。
-
MTP_CONTAINER_TYPE_RESPONSE(响应容器)- 用途:响应方(如手机)对命令的执行结果反馈,包含操作状态码(成功/错误)。
- 数据流向:由 Responder 返回给 Initiator。
- 示例:返回
MTP_RESPONSE_OK表示命令执行成功1。
-
MTP_CONTAINER_TYPE_EVENT(事件容器)- 用途:异步通知事件,例如设备存储状态变化(如新增/删除文件)或连接状态更新。
- 数据流向:通常由 Responder 主动发送给 Initiator。
- 示例:
MTP_EVENT_OBJECT_ADDED表示设备新增了一个文件。
-
MTP_CONTAINER_TYPE_UNDEFINED(未定义容器)- 用途:保留类型,通常表示协议未明确定义的容器或错误状态。
容器交互流程
-
命令-响应模式
- Initiator 发送 命令容器 → Responder 处理并返回 响应容器。
- 若命令需要传输数据,Responder 可能附加 数据容器(如返回文件内容)。
-
事件驱动机制
- Responder 通过 事件容器 主动通知状态变化,无需等待命令触发。

浙公网安备 33010602011771号