usbredir-0.7内容详解(二)
usb_redir_interface_info
/*****************************************
usb_redir_header.type: usb_redir_interface_info
usb_redir_header.length: sizeof(usb_redir_interface_info_header)
usb_redir_header.id: 0 (always as this is an unsolicited packet)
**************************************************/
struct usb_redir_interface_info_header {
uint32_t interface_count; //接口数量
uint8_t interface[32]; //接口
uint8_t interface_class[32]; //接口类
uint8_t interface_subclass[32]; //子类
uint8_t interface_protocol[32]; //接口协议
}
/* usb-host发送这个消息包,告知usb-guest这个设备的接口.它包括接口数量,类和协议信息.这个信息将会在初始化链接成功set_config和set_alt_setting后才会被发送*/
usb_redir_ep_info
usb_redir_header.type: usb_redir_ep_info
usb_redir_header.length: sizeof(usb_redir_ep_info_header)
usb_redir_header.id: 0 (always as this is an unsolicited packet)
enum {
/* Note these 4 match the usb spec! */ //四种匹配类型
usb_redir_type_control, //控制
usb_redir_type_iso,
usb_redir_type_bulk,
usb_redir_type_interrupt, //中断
usb_redir_type_invalid = 255
}
struct usb_redir_ep_info_header {
uint8_t type[32];
uint8_t interval[32];
uint8_t interface[32];
uint16_t max_packet_size[32];
uint32_t max_streams[32];
}
/*usb-host发送这个包,让usb-guest得知端点类型,分区,和接口,他包含所有可能的端点,先是0-15 out端点,再是0-15的 in 端点.这个包是在初始化链接成功set_config和set_alt_setting后才会被发送.
当双方(usb-host和usb-guest)都含有sb_redir_cap_ep_info_max_packet_size时仅仅会发送max_packet_size,如果不是这种情况,这个包的大小至少是64字节!
当双方都含有usb_redir_cap_bulk_streams时max_streams才会被发送,如果不是这种情况这个包至少长度为128字节!
注意在使用usb_redir_cap_bulk_streams 的时候必须要含有usb_redir_cap_ep_info_max_packet_size,缺少了usb_redir_cap_ep_info_max_packet_size是不合法的.
*/
usb_redir_set_configuration
usb_redir_header.type: usb_redir_set_configuration
usb_redir_header.length: sizeof(usb_redir_set_configuration_header)
struct usb_redir_set_configuration_header {
uint8_t configuration;
}
/*usb-guest发送这个包去设置或者改变usb-device的配置*/
usb_redir_get_configuration
usb_redir_header.type: usb_redir_get_configuration
usb_redir_header.length: 0
/*usb-guest来发送它,今儿得到(查询)usb-device的主动配置*/
usb_redir_configuration_status
usb_redir_header.type: usb_redir_configuration_status
usb_redir_header.length: sizeof(usb_redir_configuration_status_header)
struct usb_redir_configuration_status_header {
uint8_t status;
uint8_t configuration;
}
/*这个包就是usb-host回应usb_redir_set_configuration和
usb_redir_get_configuration ,它包含状态码和陈宫的配置信息*/
/*注意:在usb_redir_set_configuration命令成功后,usbredir-host 必须首先发送一个usb_redir_ep_info包,其次在发送usb_redir_configuration_status之前发送usb_redir_interface_info,当开始使用新的配置时,来确保usb-guest含有新的信息*/
usb_redir_set_alt_setting
usb_redir_header.type: usb_redir_set_alt_setting
usb_redir_header.length: sizeof(usb_redir_set_alt_setting_header)
struct usb_redir_set_alt_setting_header {
uint8_t interface;
uint8_t alt;
}
/*usb-guest发送这个包,设置(修改)接口的alt_setting 由<interface> 到<alt>
usb_redir_get_alt_setting
usb_redir_header.type: usb_redir_get_alt_setting
usb_redir_header.length: sizeof(usb_redir_get_alt_setting_header)
struct usb_redir_get_alt_setting_header {
uint8_t interface;
}
/*usb-guest发送,来获取(查询)一个usb-device接口的主动alt_setting*/
usb_redir_alt_setting_status
usb_redir_header.type: usb_redir_alt_setting_status
usb_redir_header.length: sizeof(usb_redir_alt_setting_status_header)
struct usb_redir_alt_setting_status_header {
uint8_t status;
uint8_t interface;
uint8_t alt;
}
/*这个包是usb-host用来回应usb_redir_set_alt_setting 和
usb_redir_get_alt_setting ,他包含状态码,响应接口,和接口的alt_setting*/
/*注意:在usb_redir_set_alt_setting 命令成功后,usbredir-host 必须首先发送一个usb_redir_ep_info包,其次在发送usb_redir_alt_setting_status之前发送usb_redir_interface_info,当开始使用新的配置时,来确保usb-guest含有新的信息*/