CDC SetLineParms
2025-07-11
0
0
1. SetLineParms 请求用途
SetLineParms 用于改变线路状态,对应发送命令的接口或联合主接口。
主机通过此请求控制电话线路的状态变化,如挂断通话、开始新通话、应用振铃等操作。
2. USB 控制传输格式
字段 | 值/说明 |
---|---|
bmRequestType | 0x21 (00100001B) 方向:主机到设备,类型:类,接收者:接口 |
bRequest | 0x34 (SET_LINE_PARMS) |
wValue | 线路状态改变值(Line State Change,见下表) |
wIndex | 接口号 |
wLength | 数据长度(某些命令需要额外数据) |
Data | 额外数据(如通话索引等) |
3. Line State Change Value Definitions(Table 54)
线路状态改变值 | wValue | 描述 |
---|---|---|
Drop Call | 0x0000 | 挂断线路上的活动通话 |
Start Call | 0x0001 | 在线路上开始新通话 |
Apply Ringing | 0x0002 | 在线路上应用振铃 |
Remove Ringing | 0x0003 | 从线路移除振铃 |
Switch Call | 0x0004 | 切换到线路上的特定通话。Data用于传递1字节通话索引来标识通话。 |
4. 典型主机端请求示例
C 结构体示例:
USB_SETUP_PACKET setup = {
.bmRequestType = 0x21, // 主机到设备,类,接口
.bRequest = 0x34, // SET_LINE_PARMS
.wValue = 0x0001, // 0x0000: Drop Call, 0x0001: Start Call, 0x0002: Apply Ringing, 0x0003: Remove Ringing, 0x0004: Switch Call
.wIndex = interface_number, // 通信接口号
.wLength = 0 // 无额外数据
};
// 发送setup包,无data阶段
切换到特定通话示例:
uint8_t call_index = 0x01; // 通话索引
USB_SETUP_PACKET setup = {
.bmRequestType = 0x21,
.bRequest = 0x34,
.wValue = 0x0004, // Switch Call
.wIndex = interface_number,
.wLength = 1 // 1字节通话索引
};
// 发送setup包和call_index数据
5. 设备端处理要点
- 检查 wValue,执行相应的线路状态改变操作。
- 对于Switch Call(0x0004),从Data阶段读取1字节通话索引。
- 完成后通过状态阶段(Status Stage)ACK主机。
6. 常见应用场景
场景 | wValue | 数据长度 | 说明 |
---|---|---|---|
挂断通话 | 0x0000 | 0 | 挂断当前通话 |
开始新通话 | 0x0001 | 0 | 开始新的通话 |
应用振铃 | 0x0002 | 0 | 在线路上产生振铃 |
移除振铃 | 0x0003 | 0 | 停止线路振铃 |
切换通话 | 0x0004 | 1 | 切换到指定通话 |
7. 参考
- USB CDC PSTN 子类规范 6.3.17](https://www.usb.org/document-library/class-definitions-communication-devices-12)