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; 

各容器类型的功能与使用场景

  1. MTP_CONTAINER_TYPE_COMMAND (命令容器)‌

    • ‌用途‌:用于设备间发起操作请求,例如读取文件列表、删除文件或修改设备属性等‌
    • ‌数据流向‌:由 Initiator(如 PC)向 Responder(如手机)发送。
    • ‌示例‌:MTP_OPERATION_GET_OBJECT(获取文件对象)命令‌
  2. MTP_CONTAINER_TYPE_DATA (数据容器)‌

    • ‌用途‌:传输实际数据内容,如文件内容、元数据或设备描述符‌
    • ‌数据流向‌:双向传输,可发送或接收。
    • ‌示例‌:传输照片文件的分块数据‌5。
  3. MTP_CONTAINER_TYPE_RESPONSE (响应容器)‌

    • ‌用途‌:响应方(如手机)对命令的执行结果反馈,包含操作状态码(成功/错误)‌
    • ‌数据流向‌:由 Responder 返回给 Initiator。
    • ‌示例‌:返回 MTP_RESPONSE_OK 表示命令执行成功‌1。
  4. MTP_CONTAINER_TYPE_EVENT (事件容器)‌

    • ‌用途‌:异步通知事件,例如设备存储状态变化(如新增/删除文件)或连接状态更新‌
    • ‌数据流向‌:通常由 Responder 主动发送给 Initiator。
    • ‌示例‌:MTP_EVENT_OBJECT_ADDED 表示设备新增了一个文件‌
  5. MTP_CONTAINER_TYPE_UNDEFINED (未定义容器)‌

    • ‌用途‌:保留类型,通常表示协议未明确定义的容器或错误状态‌

容器交互流程

  1. ‌命令-响应模式‌

    • Initiator 发送 ‌命令容器‌ → Responder 处理并返回 ‌响应容器‌‌
    • 若命令需要传输数据,Responder 可能附加 ‌数据容器‌(如返回文件内容)‌
  2. ‌事件驱动机制‌

    • Responder 通过 ‌事件容器‌ 主动通知状态变化,无需等待命令触发‌

 

 

 

posted @ 2025-03-17 20:52  流水灯  阅读(147)  评论(0)    收藏  举报