CDC CallStateChange通知
2025-07-11
0
0
CallStateChange 通知用途
CallStateChange 通知标识对应于接口或线路联合的线路上的通话状态发生了变化。
当通话状态发生变化时,设备会发送此通知告知主机,包括通话索引、状态变化值和相关的附加信息(如来电显示数据)。
通知格式
字段 | 值/说明 |
---|---|
bmRequestType | 0xA1 (10100001B) 方向:设备到主机,类型:类,接收者:接口 |
bNotification | 0x28 (CALL_STATE_CHANGE) |
wValue | 高字节D15-D8:通话索引<br>低字节D7-D0:通话状态变化值 |
wIndex | 接口号 |
wLength | 数据长度 |
Data | 包含通话状态变化附加信息的变长结构体 |
Call State Change Value Definitions(Table 70)
通话状态变化值 | 描述 |
---|---|
0x00 | 保留 |
0x01 | 通话变为空闲 |
0x02 | 拨号中 |
0x03 | 回铃音,提供额外字节描述回铃音类型:<br>0=正常,1=忙音,2=快速忙音,3-254=保留,255=未知 |
0x04 | 已连接,提供额外字节描述连接类型:<br>0=语音连接,1=答录机连接,2=传真机连接,3=数据调制解调器连接,4-254=保留,255=未知 |
0x05 | 来电,包含以下额外数据(最少4字节):<br>- 字节0:振铃模式(0-3=模式1-4,4-255=保留)<br>- 字节1:时间字符串大小<br>- 时间字符串<br>- 号码字符串大小<br>- 号码字符串<br>- 姓名字符串大小<br>- 姓名字符串 |
典型设备端通知示例
C 结构体示例:
// 来电通知
uint8_t incoming_call_notification[] = {
0xA1, // bmRequestType (设备到主机,类,接口)
0x28, // bNotification (CALL_STATE_CHANGE)
0x05, 0x00, // wValue (Call Index 0, State Change 0x05)
0x01, 0x00, // wIndex (Interface 1)
0x08, 0x00, // wLength (8 bytes of data)
0x00, // Ringing pattern 1
0x04, // Time string size (4 bytes)
'1', '2', '3', '4', // Time string "1234"
0x03, // Number string size (3 bytes)
'5', '5', '5' // Number string "555"
};
主机端处理要点
- 通过中断端点接收通知。
- 解析wValue:
- 高字节:通话索引
- 低字节:状态变化值
- 根据状态变化值处理相应的事件。
- 解析附加数据(如来电显示信息)。
常见应用场景
场景 | 状态值 | 说明 |
---|---|---|
通话空闲 | 0x01 | 通话结束或未建立 |
拨号中 | 0x02 | 正在拨号 |
回铃音 | 0x03 | 听到回铃音 |
已连接 | 0x04 | 通话建立 |
来电 | 0x05 | 收到来电,包含来电显示 |
参考
- USB CDC PSTN 子类规范 6.3.6](https://www.usb.org/document-library/class-definitions-communication-devices-12)