我应该使用哪个非托管API来控制串行端口?
|
传奇继续...
我很快就得出结论,我的串行设备过于脆弱,无法与
System.IO.Ports
提供的SerialPort
类一起很好地玩。
为了令人信服地成为供应商提供的软件,我试图匹配Portmon(在此处记录)和HHD的免费串行监视器记录的对话的各个方面。使用托管(.NET)库,我无法复制以下内容:
特殊的角色。如一个单独的问题所述,SerialPort不允许更改特殊字符集。它可能无关紧要,但是我希望能够断然拒绝它。
细粒度的超时。如MSDN所述,有5种超时设置决定了所产生的行为:
ReadIntervalTimeout
(RI)
ReadTotalTimeoutMultiplier
(RM)
ReadTotalTimeoutConstant
(RC)
WriteTotalTimeoutMultiplier
(WM)
WriteTotalTimeoutConstant
(WC)。
SerialPort.WriteTimeout(int)
和SerialPort.ReadTimeout(int)
仅更改WC和RC设置,这是一个小问题,但并没有将其他设置保持为0,.NET将RI和RM设置为-1。
港口开放期间的查询。在打开端口和设置波特之间,我的(.NET)应用程序和供应商提供的应用程序都进行了诸如“ѭ9”之类的查询。 .NET添加了一些供应商的应用程序无法执行的功能,例如IOCTL_SERIAL_GET_MODEMSTATUS
。我希望能够停止此操作。
多余的重复。在端口打开期间,由于某种原因,.NET会重复执行命令块(设置线路控制,波特,特殊字符和握手,清除RTS和DTR)。供应商提供的软件在运行该块一次后直接跳转。
就像我在上面说的那样,我不知道这些差异是否是造成我困境的原因,但是我希望能够找到答案。而且,我认为,对过程进行更好的控制将使我能够真正解决问题,无论结果如何。
那么我的问题是,我如何直接挂接到正确的API上,以控制螺母的水平控制串行端口?任何建议或指导表示赞赏!
没有找到相关结果
已邀请:
2 个回复
苦诫
细瑞