### 云思创想云桌面USB重定向程序概要设计
#### 一、引言
##### 编写目的
本文档旨在提供云思创想云桌面USB重定向程序的设计概要,包括关键技术点、功能需求及性能指标等内容,以便开发团队能够明确项目目标并顺利推进项目的实施。
#### 二、背景
##### 定义
- **CLDMIND**:云思创想科技(北京)有限公司的注册商标。
#### 三、参考资料
- 《通用串行总线 (USB) 协议》
- 《虚拟化技术原理与应用》
#### 四、特性总体设计
##### 需求规定
**功能需求**:
1. **支持大存储设备**:包括但不限于U盘、移动硬盘等。
2. **支持USB打印机**:确保在云桌面环境中可以正常使用USB打印机进行打印操作。
3. **支持智能手机**:
- 支持主流安卓手机,包括LG、华为、联想、HTC、小米、魅族等品牌。
- 支持苹果手机。
4. **支持USB摄像头**:实现在云桌面环境中正常使用USB摄像头进行视频通话等功能。
5. **支持扫描仪**:确保扫描仪能够在云桌面环境中正常工作。
6. **支持热插拔**:实现USB设备即插即用的功能。
7. **支持扫描枪**:确保扫描枪可以在云桌面环境中正常识别条形码。
**性能需求**:
1. **USB2.0的U盘**:拷贝速率不低于2M/s。
2. **USB3.0的移动硬盘**:拷贝速率不低于30M/s。
#### 五、基本设计概念和处理流程
**通用串行总线(USB)**:是一种广泛应用于计算机主机与外围设备之间的通信协议。USB协议支持热插拔,使得设备与主机之间的交互变得简单易用。随着虚拟化技术的发展,云桌面技术逐渐普及,而USB设备的支持成为了一个重要的技术挑战。
**云思创想USB重定向技术**:通过使用Windows的虚拟总线枚举技术,将客户端接入的USB设备重定向到远程主机中。当客户端POND(云思创想远程交互协议客户端)向远程主机发起连接请求后,调用重定向程序的接口,启动USB重定向功能。重定向启动后,首先初始化USB设备重定向权限控制表,并扫描本地的USB设备,若设备允许被重定向至远程主机,则读取USB设备的信息,并向远程主机中的cldusbd程序发起重定向请求。
#### 六、软件结构图
- **客户端**:识别各类USB设备并向服务端发起连接请求。
- **服务端**:接收客户端请求,并负责驱动与数据传输。
#### 七、模块变更概述
##### 客户端设计(新增模块)
- **模块描述**:USB重定向客户端是云思创想桌面云之USB重定向的重要组成部分。
- **功能**:
- 识别各类USB设备。
- 向服务端发起连接请求。
- **性能设计方法(算法)**:
- **USB设备抽象层**:屏蔽不同USB设备的差异性,决定哪些USB设备可以被重定向。重定向主线程负责与远程主机交互,接收和转发URB(USB Request Block)请求。热插拔事件处理用于发现USB设备,并创建重定向主线程。
```c
typedef struct {
unsigned int ven_prod; // key,vendorID<<16|productID
int (*control)(void* private, char* setup);
int (*post_callback)(void* private, int status);
} cld_usb_op_t;
```
- **流程逻辑**:当USB设备被确认可以被重定向时,向远程主机发起连接请求。
- **关键数据结构**:`cld_usb_op_t`。
- **关键函数**:`control`、`post_callback`。
- **存储分配**:动态分配内存用于存储USB设备信息。
##### 服务端设计(新增模块)
- **模块描述**:USB重定向服务端是云思创想桌面云之USB重定向的关键组成部分。
- **功能**:接收客户端请求,并负责驱动与数据传输。
- **性能设计方法(算法)**:
- 流程逻辑:接收客户端请求,并处理相关的数据传输任务。
- 关键数据结构:待定义。
- 关键函数:待定义。
- 存储分配:合理分配内存资源以确保数据传输的高效性。
#### 八、总结
云思创想云桌面USB重定向程序的设计旨在解决云桌面环境中USB设备的支持问题。通过对USB设备进行抽象和重定向,实现了多种USB设备在云桌面环境下的正常使用。此外,还针对不同类型的USB设备设定了性能需求,确保用户体验不受影响。未来,随着技术的发展,该方案还将不断优化和完善,以满足更多应用场景的需求。