跨平台 System.IO.Ports.SerialPort 库是否可以在带有 FTDI UART 芯片的 Android 上工作? (例如 FT232R)?

问题描述 投票:0回答:1

我正在尝试编写一个跨平台 GUI 来控制在 Windows 和 Android 上使用的硬件。我使用的是 FTDI 串行电缆。当电缆插入时,SerialPort.GetPortNames() 将电缆标识为

/dev/ttyUSB0

当我尝试打开与此端口的连接时,出现异常并显示以下消息:

Access to the port '/dev/ttyUSB0' is denied.

我还尝试了以下字符串:

'ttyUSB0', 'USB0', 'dev/ttyUSB0'

我可以确认 Play 商店中的“串行 USB 终端”软件在我的 Android 设备上运行良好。我可以毫无问题地连接和发送字符串。

这个是跨平台的吗?
有关 Port.IO.SerialPort 支持 Android 能力的信息。
https://github.com/dotnet/runtime/pull/95749

我的问题:

  • IO.Ports 库 V9.0 应该使用此设置吗?
  • 如果不支持,以后会支持吗? (如果没有,我可能会放弃Android支持,只使用Windows FTDI DLL)
  • 我是否缺少一些神奇的 Android 权限小提琴?
  • 您是否有在另一个 Android 设置上与 FTDI UART 一起使用的 .NET IO.Ports 库?

据我所知:
我的感觉是,它的 Open() 依赖于 Linux,并期望按照以下方式安装驱动程序:
https://ftdichip.com/wp-content/uploads/2020/08/AN_220_FTDI_Drivers_Installation_Guide_for_Linux-1.pdf

欢迎在这里分享您的经验。当我看到“GetPortNames()”在我的手机上运行时,我非常兴奋,但再也没有进一步的了解。我是如此接近!

我的设置:

调试:
异常信息如下:

Access to the port '/dev/ttyUSB0' is denied.
 at System.IO.Ports.SafeSerialDeviceHandle.Open(string portName)
 at System.IO.Ports.SerialStream..ctor(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits, int readTimeout, int writeTimeout, Handshake handshake,
            bool dtrEnable, bool rtsEnable, bool _1 , byte _2)
 at System.IO.Ports.SerialPort.Open()
 at .. < then into my project code>

我认为异常消息与 .NET SerialPort 库中的这一行相关
https://github.com/dotnet/runtime/blob/1d1bf92fcf43aa6981804dc53c5174445069c9e4/src/libraries/System.IO.Ports/src/System/IO/Ports/SafeSerialDeviceHandle.Unix.cs#L29

android .net serial-port uart ftdi
1个回答
0
投票

我联系了开发商并得到了以下答复:

嘿,是的,System.IO.Ports 实现使用 /dev/tty 许多 Unix 系统共有的功能。不幸的是Android通过 默认情况下有一个 SELinux 策略阻止访问该设备:
https://github.com/dotnet/runtime/issues/86619#issuecomment-1843502371

如果您尝试

fopen("/dev/ttyUSB0", "r+")
,也会发生同样的情况 在常规的本机 C 代码中。

如果您无法root设备或无法使用自定义Android,那么据我所知 知道你运气不好,需要依赖自定义库/驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.