#microsoft #usb-device #no-std #wcid #winusb

no-std usbd-microsoft-os

Microsoft OS USB描述符用于usb-device

1个不稳定版本

0.1.0 2023年5月15日

#1565嵌入式开发

MIT/Apache

53KB
914

usbd-microsoft-os

Microsoft OS USB描述符的usb-device实现。目前仅支持新的Microsoft OS 2.0 描述符标准。如果需要,未来可能添加版本1.0。

此crate提供了负责发送MS OS USB描述符和适当的BOS能力的类 MsOsUsbClass。它旨在使用描述符的const结构和生成原始描述符数据的fn方法进行配置,例如用于WinUSB

use usbd_microsoft_os::{os_20, MsOsUsbClass, WindowsVersion, utf16_lit, utf16_null_le_bytes};

const DESCRIPTOR_SET: os_20::DescriptorSet = os_20::DescriptorSet {
    version: WindowsVersion::MINIMAL,
    features: &[],
    configurations: &[
        os_20::ConfigurationSubset {
            configuration: 0,
            features: &[],
            functions: &[
                os_20::FunctionSubset {
                    first_interface: 3,
                    features: &[
                        os_20::FeatureDescriptor::CompatibleId {
                            id: b"WINUSB\0\0",
                            sub_id: b"\0\0\0\0\0\0\0\0",
                        },
                        os_20::FeatureDescriptor::RegistryProperty {
                            data_type: os_20::PropertyDataType::RegMutliSz,
                            name: &utf16_lit::utf16_null!("DeviceInterfaceGUIDs"),
                            data: &utf16_null_le_bytes!("{6b09aac4-333f-4467-9e23-f88b9e9d95f7}\0"),
                        },
                    ]
                }
            ]
        }
    ],
};

const CAPABILITIES: os_20::Capabilities = os_20::Capabilities {
    infos: &[
        os_20::CapabilityInfo {
            descriptors: &DESCRIPTOR_SET,
            alt_enum_cmd: os_20::ALT_ENUM_CODE_NOT_SUPPORTED,
        }
    ],
};

const DESCRIPTOR_SET_BYTES: [u8; DESCRIPTOR_SET.size()] = DESCRIPTOR_SET.descriptor();
const CAPABILITIES_BYTES: [u8; CAPABILITIES.data_len()] = CAPABILITIES.descriptor_data();

pub const fn class() -> MsOsUsbClass {
    MsOsUsbClass {
        os_20_capabilities_data: &CAPABILITIES_BYTES,
        os_20_descriptor_sets: &[&DESCRIPTOR_SET_BYTES],
    }
}

查看测试用例以查看规范中的更多示例。

依赖项

~155KB