CDC SetEthernetPowerManagementPatternFilter
2025-07-11
0
0
1. SetEthernetPowerManagementPatternFilter 请求用途
SetEthernetPowerManagementPatternFilter 用于设置指定的以太网电源管理模式过滤器。
主机通过此请求配置设备的电源管理模式过滤器,使设备能够在特定网络模式出现时唤醒主机,实现远程唤醒功能。
2. USB 控制传输格式
字段 | 值/说明 |
---|---|
bmRequestType | 0x21 (00100001B) 方向:主机到设备,类型:类,接收者:接口 |
bRequest | 0x41 (SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER) |
wValue | 过滤器编号 |
wIndex | 接口号 |
wLength | 结构体大小 |
Data | 电源管理模式过滤器结构体 |
3. Power Management Pattern Filter Structure(Table 61)
字段名 | 大小 | 值/说明 |
---|---|---|
MaskSize | 2 | 包含Mask的大小(字节) |
Mask | MaskSize | 位掩码,每个字节包含8个掩码位,表示是否比较Pattern中对应字节与网络设备在媒体上看到的内容 |
Pattern | 由Mask指定 | 执行模式匹配的字节字符串,从以太网帧偏移0(目标地址)开始 |
4. 典型主机端请求示例
C 结构体示例:
typedef struct _POWER_MANAGEMENT_PATTERN_FILTER {
uint16_t MaskSize;
uint8_t Mask[6]; // 6字节掩码
uint8_t Pattern[6]; // 6字节模式
} POWER_MANAGEMENT_PATTERN_FILTER;
POWER_MANAGEMENT_PATTERN_FILTER filter = {
.MaskSize = 6,
.Mask = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // 全掩码
.Pattern = {0x01, 0x00, 0x5E, 0x00, 0x00, 0x01} // 多播地址模式
};
USB_SETUP_PACKET setup = {
.bmRequestType = 0x21, // 主机到设备,类,接口
.bRequest = 0x41, // SET_ETHERNET_POWER_MANAGEMENT_PATTERN_FILTER
.wValue = 0x0000, // 过滤器编号0
.wIndex = interface_number, // 通信接口号
.wLength = sizeof(filter)
};
// 发送setup包和filter数据
5. 设备端处理要点
- 解析wValue中的过滤器编号。
- 从Data阶段读取电源管理模式过滤器结构体。
- 如果wLength为0,清除指定过滤器的设置。
- 如果模式无法装入设备,将相关状态设置为FALSE。
- 完成后通过状态阶段(Status Stage)ACK主机。
6. 常见应用场景
场景 | 过滤器编号 | 模式示例 | 说明 |
---|---|---|---|
多播唤醒 | 0 | 01:00:5E:00:00:01 | 多播地址唤醒模式 |
单播唤醒 | 1 | 00:11:22:33:44:55 | 特定MAC地址唤醒模式 |
清除过滤器 | 0 | 无 | 清除过滤器设置 |
7. 参考
- USB CDC 以太网子类规范 6.4.3](https://www.usb.org/document-library/class-definitions-communication-devices-12)
- GetEthernetPowerManagementPatternFilter 6.4.4](https://www.usb.org/document-library/class-definitions-communication-devices-12)