KRTS 如何查找设备并切换到 Kithara 驱动

如何查找设备并切换到 Kithara 驱动



在本教程中,您将学习如何使用 KS_enumDevices 查找设备,以及如何使用 KS_getDeviceInfo 获取更多设备信息。此外,还解释了 Kithara 设备实例字符串。最后,描述了如何将设备切换到 Kithara 驱动程序以使用它。本教程将引导您完成以下步骤:

第 1 步:使用 KS_enumDevices 枚举设备

函数 ‘KS_enumDevices’ 允许您枚举系统中可用的各种设备。它返回一个 Kithara 设备实例字符串,Kithara RealTime Suite 的所有接受设备字符串的函数都可以理解该字符串。建议在将设备字符串传递给任何其他函数之前先枚举设备,这是确保设备字符串正确且设备在系统中可用的最安全方法。

参数 deviceTypeflags 允许您筛选所需的设备。

deviceType 的可能参数:

设备类型描述
CAN可用作 CAN 控制器的设备(PCI、USB 等)
COM串行端口
DISK磁盘 / 驱动器
ECATEthercat 从站
FLEXRAYFlexray 设备
FTDIBUS通过 FTDI 连接的设备
LIN可用作 LIN 控制器的设备(UART 等)
LPT并行端口
MF可用作多功能板(PCI、USB 等)的设备
NET可以用作网络适配器的设备(PCI、USB 等)
PBUS可用作 Profibus 控制器的设备(PCI、USB 等)
PCIPCI 设备(PCI、PCIe、PCI-X)
UART可用作 UART 设备的设备(PCI、PCIe 等)
USBUSB 设备
XHCI可扩展主机控制器接口上的 USB 设备

flags 的可能参数(标志可以一起 “|” 组合以适应多个条件):

旗帜描述
‘KSF_NO_FLAGS’满足 ‘deviceType’
‘KSF_ACTIVE’该设备不仅在系统中可用,而且还与您的 Kithara 驱动程序永久连接。
‘KSF_SAFE_START’如果枚举 PCI 或 USB 设备,则此标志可确保此设备也被识别为 CANNETMFPBUS 设备

使用 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 与此不同,如后面的示例所示。

总线或设备的可能类型:

总线类型COMFTDIBUSLPTPCIUSBXHCI
设备类型CANDISKECATFLEXRAYLINMFNETPBUSUARTXHCI

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之前的版本)

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值