82 lines
2.9 KiB
C#
82 lines
2.9 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.IO.Ports;
|
|||
|
using System.Linq;
|
|||
|
using XiaoZhiSharp.Kernels;
|
|||
|
using OperatingSystem = XiaoZhiSharp.Kernels.OperatingSystem;
|
|||
|
|
|||
|
namespace XiaoZhiSharp.Utils.Com
|
|||
|
{
|
|||
|
public static class ComUtil
|
|||
|
{
|
|||
|
private static readonly string WinComPrefix = "COM";
|
|||
|
private static readonly string LinuxUsbComPrefix = "/dev/ttyUSB";//USB串口
|
|||
|
private static readonly string LinuxSysComPrefix = "/dev/ttyS";//PC上的串口一般是ttyS;板子上Linux的串口一般叫做ttySAC
|
|||
|
|
|||
|
public static List<LinuxCom> LinuxComList { set; get; } = new List<LinuxCom>();
|
|||
|
|
|||
|
public static string[] GetLocalComs()
|
|||
|
{
|
|||
|
return SerialPort.GetPortNames();
|
|||
|
}
|
|||
|
|
|||
|
public static string PortToString(int port)
|
|||
|
{
|
|||
|
string prefix = string.Empty;
|
|||
|
OperatingSystemType plat = OperatingSystem.GetOperatingSystemType();
|
|||
|
if (plat == OperatingSystemType.Windows)
|
|||
|
{
|
|||
|
prefix = WinComPrefix;
|
|||
|
}
|
|||
|
else if (plat == OperatingSystemType.Linux)
|
|||
|
{
|
|||
|
prefix = LinuxSysComPrefix;
|
|||
|
LinuxCom linuxCom = LinuxComList.FirstOrDefault(l => l.LinuxPort == port);
|
|||
|
if (linuxCom != null)
|
|||
|
{
|
|||
|
if (linuxCom.LinuxComType == LinuxComType.Usb)
|
|||
|
{
|
|||
|
prefix = LinuxUsbComPrefix;
|
|||
|
}
|
|||
|
else if (linuxCom.LinuxComType == LinuxComType.System)
|
|||
|
{
|
|||
|
prefix = LinuxSysComPrefix;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return string.Format("{0}{1}", prefix, port.ToString());
|
|||
|
}
|
|||
|
|
|||
|
public static int PortToInt(string portString)
|
|||
|
{
|
|||
|
string prefix = string.Empty;
|
|||
|
OperatingSystemType plat = OperatingSystem.GetOperatingSystemType();
|
|||
|
if (plat == OperatingSystemType.Windows)
|
|||
|
{
|
|||
|
prefix = WinComPrefix;
|
|||
|
}
|
|||
|
else if (plat == OperatingSystemType.Linux)
|
|||
|
{
|
|||
|
prefix = LinuxSysComPrefix;
|
|||
|
LinuxCom linuxCom = LinuxComList.FirstOrDefault(l => portString.Contains(l.LinuxPort.ToString()));
|
|||
|
if (linuxCom != null)
|
|||
|
{
|
|||
|
if (linuxCom.LinuxComType == LinuxComType.Usb)
|
|||
|
{
|
|||
|
prefix = LinuxUsbComPrefix;
|
|||
|
}
|
|||
|
else if (linuxCom.LinuxComType == LinuxComType.System)
|
|||
|
{
|
|||
|
prefix = LinuxSysComPrefix;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (prefix.Length <= 0)
|
|||
|
{
|
|||
|
throw new IndexOutOfRangeException("串口字符串无法转换");
|
|||
|
}
|
|||
|
return int.Parse(portString.Substring(prefix.Length));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|