NCM 通知顺序
2025-07-08
0
0
通知序列
NCM功能需要以特定顺序发送ConnectionSpeedChange和NetworkConnection通知。为了简化主机设备驱动程序的编码,将要发送wValue == 0001h的NetworkConnection通知的功能必须首先发送ConnectionSpeedChange通知,该通知指示新连接生效时将生效的连接速度。
序列要求
正确的通知顺序
- ConnectionSpeedChange通知 - 报告连接速度
- NetworkConnection通知 - 报告连接状态 (wValue == 0001h)
错误顺序示例
- NetworkConnection通知 - 报告连接状态
- ConnectionSpeedChange通知 - 报告连接速度 ❌
序列合理性
问题分析
如果ConnectionSpeedChange通知跟随NetworkConnection通知,则主机驱动程序在收到ConnectionSpeedChange之前无法以正确速度发出网络连接信号。这种延迟可能:
- 在总线事件和系统事件之间引入延迟
- 由于速度的虚假变化导致主机系统开销
解决方案
如果功能首先发出连接速度信号,则主机驱动程序将在网络连接变为有效时知道信令速度。
开发者注意事项
重要差异
- 此通知序列(速度在连接之前)与[USBECM12]中指定的序列不同
- 开发者应意识到这种差异
- NCM和ECM的通知序列要求不同
实现建议
正确的实现流程
// 1. 首先发送速度变化通知
SendConnectionSpeedChangeNotification(newSpeed);
// 2. 然后发送连接状态通知
SendNetworkConnectionNotification(1); // wValue == 0001h
避免的问题
- 延迟通知
- 系统开销
- 不正确的速度信息
- 驱动程序复杂性
总结
- NCM要求特定的通知序列
- 速度通知必须在连接通知之前
- 与ECM规范存在差异
- 简化主机驱动程序编码
- 减少系统延迟和开销