예제 #1
0
 public SerialPortManager(SerialPortSetting setting)
 {
     this.PortSetting.AssignFrom(setting.ToString());
     InitSerialPort();
 }
        /// <summary>
        /// 从CSV 字符串中读取串口配置
        /// "COM1,9600,8,1,1"
        ///  $"{settings.PortName},{settings.BaudRate},{settings.DataBits},{settings.StopBits},{settings.Parity}"
        /// </summary>
        /// <param name="setting"></param>
        /// <param name="settingParam"></param>
        /// <returns></returns>
        public static SerialPortSetting AssignFrom(this SerialPortSetting setting, string settingParam)
        {
            if (string.IsNullOrEmpty(settingParam))
            {
                //返回默认值
                return(setting);
            }

            if (string.Equals(setting.ToString(), settingParam))
            {
                //setting 没有变化
                return(setting);
            }
            if (settingParam.Contains(","))
            {
                var values = settingParam.Split(',');

                for (int i = 0; i < values.Length; i++)
                {
                    var val = values[i];
                    if (string.IsNullOrEmpty(val))
                    {
                        continue;
                    }
                    switch (i)
                    {
                    case 0:
                        setting.PortName = val;
                        break;

                    case 1:
                        setting.SetProperty(s => s.BaudRate, val);
                        break;

                    case 2:
                        setting.SetProperty(s => s.DataBits, val);
                        break;

                    case 3:
                        setting.SetProperty(s => s.StopBits, val);
                        break;

                    case 4:
                        setting.SetProperty(s => s.Parity, val);
                        break;

                    case 5:
                        setting.SetProperty(s => s.Handshake, val);
                        break;

                    default:
                        if (string.Equals(val, "DTR", StringComparison.CurrentCultureIgnoreCase))
                        {
                            setting.Dtr = true;
                        }

                        if (string.Equals(val, "RTS", StringComparison.CurrentCultureIgnoreCase))
                        {
                            setting.Rts = true;
                        }
                        break;
                    }
                }
            }
            else
            {
                if (SerialPort.GetPortNames().Contains(settingParam))
                {
                    setting.PortName = settingParam;
                }
            }
            setting.RasieOnChanged();
            return(setting);
        }