如何使用 SetupDiGetClassDevs() 函数访问 Windows 10 上的 GPIO、I²C、SPI 和 PWM,这里 GUID 的重要性是什么?
How to access GPIO, I²C, SPI, and PWM on Windows 10 using SetupDiGetClassDevs() function and what is the importance of GUID over here?
如何在Windows环境下访问GPIO、I²C、SPI、PWM等?
目前我有两块Intel NUC5i5MYBE主板。一块板有 WindRiver Linux,另一块板有 Windows 10 Enterprise。
在 Linux 上,我在访问上述所有内容时没有任何问题,但 Windows 环境有问题。
在Windows中,我的目标是利用Windows的CreateFile
功能来打开这样的接口
但在我调用这个函数之前,我需要为这个函数提供一个设备路径。为此,我的目标是使用以下函数以及数据结构来找出设备路径。
SetupDiGetClassDevs()
SetupDiEnumDeviceInterfaces()
SetupDiGetDeviceInterfaceDetail()
HDEVINFO
SP_DEVINFO_DATA
PSP_DEVICE_INTERFACE_DETAIL_DATA
但主要的问题和未知的事情是如何向 SetupDiGetClassDevs 提供 GUID 作为第一个参数?
SetupDiGetClassDevs 的 Windows 原型如下。
HDEVINFO SetupDiGetClassDevs(
_In_opt_ const GUID *ClassGuid,
_In_opt_ PCTSTR Enumerator,
_In_opt_ HWND hwndParent,
_In_ DWORD Flags
);
对于 known/specific 设备,您可以从其 INF 文件或从注册表中找到 Class Guid - 如此 post 建议 - Obtaining GUID for Existing USB Device on Windows XP。
然后在对 SetupDiGetClassDevs
的调用中使用此 Class Guid
来自 INF 文件的指南:
要访问 INF 文件条目,请使用 SetupOpenInfFile、SetupFindFirstLine 和 SetupGetStringField - 按照此 msdn 文档 https://msdn.microsoft.com/en-us/library/windows/hardware/ff549402(v=vs.85).aspx
来自注册表的 Guid:有很多 post 可以访问这样的注册表项 SO post - How to read a value from the Windows registry
最后记得在使用完 DeviceInfo 后销毁它们,如下所示:
if (hdevinfo) {
SetupDiDestroyDeviceInfoList(DeviceInfoSet);
}
如何在Windows环境下访问GPIO、I²C、SPI、PWM等?
目前我有两块Intel NUC5i5MYBE主板。一块板有 WindRiver Linux,另一块板有 Windows 10 Enterprise。
在 Linux 上,我在访问上述所有内容时没有任何问题,但 Windows 环境有问题。
在Windows中,我的目标是利用Windows的CreateFile
功能来打开这样的接口
但在我调用这个函数之前,我需要为这个函数提供一个设备路径。为此,我的目标是使用以下函数以及数据结构来找出设备路径。
SetupDiGetClassDevs()
SetupDiEnumDeviceInterfaces()
SetupDiGetDeviceInterfaceDetail()
HDEVINFO
SP_DEVINFO_DATA
PSP_DEVICE_INTERFACE_DETAIL_DATA
但主要的问题和未知的事情是如何向 SetupDiGetClassDevs 提供 GUID 作为第一个参数?
SetupDiGetClassDevs 的 Windows 原型如下。
HDEVINFO SetupDiGetClassDevs(
_In_opt_ const GUID *ClassGuid,
_In_opt_ PCTSTR Enumerator,
_In_opt_ HWND hwndParent,
_In_ DWORD Flags
);
对于 known/specific 设备,您可以从其 INF 文件或从注册表中找到 Class Guid - 如此 post 建议 - Obtaining GUID for Existing USB Device on Windows XP。
然后在对 SetupDiGetClassDevs
来自 INF 文件的指南: 要访问 INF 文件条目,请使用 SetupOpenInfFile、SetupFindFirstLine 和 SetupGetStringField - 按照此 msdn 文档 https://msdn.microsoft.com/en-us/library/windows/hardware/ff549402(v=vs.85).aspx
来自注册表的 Guid:有很多 post 可以访问这样的注册表项 SO post - How to read a value from the Windows registry
最后记得在使用完 DeviceInfo 后销毁它们,如下所示:
if (hdevinfo) {
SetupDiDestroyDeviceInfoList(DeviceInfoSet);
}