windows网络适配器驱动开发-开发 WiFiCx 客户端驱动程序(三)
Wi-Fi 直接设备功能
WIFI_WIFIDIRECT_CAPABILITIES 表示以前通过WDI_P2P_CAPABILITIES和WDI_AP_CAPABILITIES TLV 在 WDI 中设置的所有相关功能。 客户端驱动程序调用 WifiDeviceSetWiFiDirectCapabilities ,以在设置设备功能阶段向 WiFiCx 报告 Wi-Fi 直接功能。
WIFI_WIFIDIRECT_CAPABILITIES wfdCapabilities = {}; // Set values wfdCapabilities.ConcurrentGOCount = 1; wfdCapabilities.ConcurrentClientCount = 1; // Report capabilities to WiFiCx WifiDeviceSetWiFiDirectCapabilities(Device, &wfdCapabilities);Wi-Fi“WfdDevice”的直接事件回调
对于 Wi-Fi Direct,“WfdDevice”是一个没有数据路径功能的控件对象。 因此,WiFiCx 具有名为 WIFIDIRECTDEVICE 的新 WDFObject。 在其 EvtWifiDeviceCreateWifiDirectDevice 回调函数中,客户端驱动程序:
- 调用 WifiDirectDeviceCreate 以创建 WIFIDIRECTDEVICE 对象。
- 调用 WifiDirectDeviceInitialize 以初始化对象。
- 调用 WifiDirectDeviceGetPortId 来确定端口 ID(在命令消息中使用)。
此示例演示如何创建和初始化 WIFIDIRECTDEVICE 对象。
NTSTATUS EvtWifiDeviceCreateWifiDirectDevice( WDFDEVICE Device, WIFIDIRECT_DEVICE_INIT * WfdDeviceInit ) { WDF_OBJECT_ATTRIBUTES wfdDeviceAttributes; WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&wfdDeviceAttributes, WIFI_WFDDEVICE_CONTEXT); wfdDeviceAttributes.EvtCleanupCallback = EvtWifiDirectDeviceContextCleanup; WIFIDIRECTDEVICE wfdDevice; NTSTATUS ntStatus = WifiDirectDeviceCreate(WfdDeviceInit, &wfdDeviceAttributes, &wfdDevice); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, "%!FUNC!: WifiDirectDeviceCreate failed, status=0x%x\n", ntStatus); return ntStatus; } ntStatus = WifiDirectDeviceInitialize(wfdDevice); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, "%!FUNC!: WifiDirectDeviceInitialize failed with %!STATUS!\n", ntStatus); return ntStatus; } ntStatus = ClientDriverInitWifiDirectDeviceContext( Device, wfdDevice, WifiDirectDeviceGetPortId(wfdDevice)); if (!NT_SUCCESS(ntStatus)) { TraceEvents(TRACE_LEVEL_ERROR, DBG_DEVICE, "%!FUNC!: ClientDriverInitWifiDirectDeviceContext failed with %!STATUS!\n", ntStatus); return ntStatus; } return ntStatus; }