如何查找设备并切换到 Kithara 驱动
目录
在本教程中,您将学习如何使用 KS_enumDevices 查找设备,以及如何使用 KS_getDeviceInfo 获取更多设备信息。此外,还解释了 Kithara 设备实例字符串。最后,描述了如何将设备切换到 Kithara 驱动程序以使用它。本教程将引导您完成以下步骤:
第 1 步:使用 KS_enumDevices 枚举设备
函数 ‘KS_enumDevices’ 允许您枚举系统中可用的各种设备。它返回一个 Kithara 设备实例字符串,Kithara RealTime Suite 的所有接受设备字符串的函数都可以理解该字符串。建议在将设备字符串传递给任何其他函数之前先枚举设备,这是确保设备字符串正确且设备在系统中可用的最安全方法。
参数 deviceType 和 flags 允许您筛选所需的设备。
deviceType 的可能参数:
设备类型 | 描述 |
---|---|
CAN | 可用作 CAN 控制器的设备(PCI、USB 等) |
COM | 串行端口 |
DISK | 磁盘 / 驱动器 |
ECAT | Ethercat 从站 |
FLEXRAY | Flexray 设备 |
FTDIBUS | 通过 FTDI 连接的设备 |
LIN | 可用作 LIN 控制器的设备(UART 等) |
LPT | 并行端口 |
MF | 可用作多功能板(PCI、USB 等)的设备 |
NET | 可以用作网络适配器的设备(PCI、USB 等) |
PBUS | 可用作 Profibus 控制器的设备(PCI、USB 等) |
PCI | PCI 设备(PCI、PCIe、PCI-X) |
UART | 可用作 UART 设备的设备(PCI、PCIe 等) |
USB | USB 设备 |
XHCI | 可扩展主机控制器接口上的 USB 设备 |
flags 的可能参数(标志可以一起 “|” 组合以适应多个条件):
旗帜 | 描述 |
---|---|
‘KSF_NO_FLAGS’ | 满足 ‘deviceType’ |
‘KSF_ACTIVE’ | 该设备不仅在系统中可用,而且还与您的 Kithara 驱动程序永久连接。 |
‘KSF_SAFE_START’ | 如果枚举 PCI 或 USB 设备,则此标志可确保此设备也被识别为 CAN、NET、MF 或 PBUS 设备 |
使用 Kithara 驱动程序有两种方法可以访问设备,具体取决于实际连接到设备的驱动程序,如设备管理器中所示:
-
永久切换:为设备安装了 Kithara 驱动程序,并删除了 Windows 驱动程序。因此,无法从 Windows 访问该设备,而只能通过 KRTS API 访问。
-
动态切换:设备在与 KRTS API 一起使用时仅临时切换到 Kithara 驱动程序。使用 KRTS API 关闭设备后,Kithara 驱动程序将被 Windows 驱动程序替换,并且该设备现在再次可用于 Windows。
有关设置这些访问方法,请参阅 步骤 4:将设备专用于实时和步骤 5:将设备从实时动态切换到 Windows中。
可移动设备的注意事项
某些设备可以在系统运行时删除或连接,例如 USB 设备。因此,Kithara 驱动程序可能不知道该设备。若要解决此问题,应强制驱动程序更新其设备数据库。这是通过调用 ‘KS_enumDevices’ 并将参数 index 设置为 -1 来完成的。例如:
KS_enumDevices(NULL, -1, NULL, 0);
第 2 步:Kithara 设备实例字符串
接受设备字符串的函数通常对接受的字符串类型非常宽松。他们将接受 ‘KS_enumDevices’ 返回的 Kithara 设备字符串或 Windows 设备字符串,如 Microsoft Windows 的设备管理器中看到的那样。
一般来说,你应该更喜欢 Kithara 设备字符串,并首先用 ‘KS_enumDevices’ 枚举你的设备。
获取 deviceString 参数的函数也可以接受仅部分指定的设备字符串,只要此字符串可以明确标识设备即可。例子:
-
系统中只有一个网卡:使用设备字符串 NET 调用 ‘KS_openAdapter’ 将成功。
-
系统中有两个 PCI 网卡(一个 Realtek 和一个 Intel):使用设备字符串 ‘PCI\VEN_8086’ 调用 ‘KS_openAdapter’ 将成功(前提是 Intel 网卡已打开)。
如果无法明确识别设备,将返回错误代码"KSERROR_DEVICE_NOT_FOUND"。Kithara 设备实例字符串具有以下格式:
PCI\VEN_10EC&DEV_8168&SUBSYS_76401462&REV_03\#2
^^^------------------------------------------------ 总线或设备类型
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^------- 总线或设备特定标识
^^---- 实例计数器从 1 开始
方案 Serial 和 Parallel ports 与此不同,如后面的示例所示。
总线或设备的可能类型:
总线类型 | COM | FTDIBUS | LPT | PCI | USB | XHCI |
---|
设备类型 | CAN | DISK | ECAT | FLEXRAY | LIN | MF | NET | PBUS | UART | XHCI |
---|
Kithara 设备字符串示例:
串行端口
COM3
COM4
并行端口
LPT1
LPT2
PCI 设备
PCI\\VEN_10EC&DEV_8168&SUBSYS_76401462&REV_03\\#1
USB 设备
USB\\VID_046D&PID_08C5&REV_0005\\#4
CAN 控制器
CAN\\VEN_001C&DEV_0001&SUBSYS_0001001C\\#8
多功能板
MF\\VEN_10B5&DEV_9050&SUBSYS_11A310B5\\#1
网卡
PCI\\VEN_10EC&DEV_8168&SUBSYS_76401462&REV_03\\#3
Profibus 控制器
PCI\\VEN_15CF&DEV_0000\\#1
UART 控制器
PCI\\VEN_1393&DEV_1680
PCMCIA\\Socket-Serial_Port_HS_Card_Rev_2.5-56B5
PNP0501
第 3 步:使用 KS_getDeviceInfo 获取设备信息
函数 KS_getDeviceInfo 提供有关设备的信息。作为参数,需要传递设备名称、指向 [KSDeviceInfo] (https://kithara.com/cn/docs/krts:api:ksdeviceinfo “KSDeviceInfo”) 和标志类型的结构的指针。可以使用函数 ‘KS_enumDevices’ 检索设备名称。使用标志 ‘KSF_ACTIVE’ 时,仅显示永久附加到 Kithara 驱动程序的设备。调用 KS_getDeviceInfo 后,设备信息包含在 KSDeviceInfo 类型的结构中。
参数 deviceName 应该是硬件 ID 或至少是其中的重要部分,例如"USB\VID_046D&PID_C069&REV_5601"或"PCI\VEN_10B5&DEV_9050&SUBSYS_000412FE&REV_02"是有效的硬件 ID。在此示例中,如果系统中只有一台来自该供应商的设备,则"VEN_10B5"将是合法且有效的。如果系统中存在多个相同类型的设备,请使用 “#1” 或如上所示的适当设备,以便区分它们。
第 4 步:将设备专用于实时
从版本 10.21 开始,设备的默认用途是将它们专用于实时环境(从而使它们对 Windows 环境不可用)。在实时环境中打开的设备在关闭时不会自动交还给关联的 Windows 驱动程序。
通过在设备管理器中为它们分配适当的 Windows 驱动程序,或者通过调用 KS_updateDriver 来使用 KRTS API,可以手动将它们切换回 Windows 驱动程序(使其再次可用于 Windows)。
第 5 步:将设备从实时动态切换到 Windows
动态设备切换从 KRTS 版本 10.21 开始被视为已弃用!
虽然不再 建议 你仍然可以使用以前驱动程序版本的默认行为:
要将设备分配回 Windows,您可以在关闭后执行以下任一操作
-
打开带有"KSF_DYNAMIC_SWITCH"标志的设备,这将导致该设备在关闭时切换回 Windows 驱动程序
-
在Windows注册表中,在键’HKEY_LOCAL_MACHINE\SOFTWARE\Kithara\Drivers’下创建’DWORD’值’SwitchAlwaysDynamic’<driver_name>,并将其值设置为’1’,这将导致在实时环境中打开的所有设备在关闭时切换回Windows驱动程序(Kithara实时环境的默认行为,适用于10.21之前的版本)