public async Task Open()
        {
            if (Status == ModbusServerStatus.Initialled)
            {
                try
                {
                    Status = ModbusServerStatus.Opening;
                    string aqs = SerialDevice.GetDeviceSelector(portName);
                    var dis = await DeviceInformation.FindAllAsync(aqs);
                    serialPort = await SerialDevice.FromIdAsync(dis[0].Id);

                    serialPort.WriteTimeout = TimeSpan.FromMilliseconds(WRITE_TIMEOUT);
                    serialPort.ReadTimeout = TimeSpan.FromMilliseconds(READ_TIMEOUT);
                    serialPort.BaudRate = BAUD_RATE;
                    serialPort.Parity = SERIAL_PARITY;
                    serialPort.StopBits = SERIAL_STOP_BIT_COUNT;
                    serialPort.DataBits = DATA_BITS;
                    serialPort.Handshake = SERIAL_HANDSHAKE;

                    readCancellationTokenSource = new CancellationTokenSource();

                    listen(1024);
                    Status = ModbusServerStatus.Opened;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
 public void Close()
 {
     if (serialPort != null)
     {
         serialPort.Dispose();
     }
     serialPort = null;
     Status = ModbusServerStatus.None;
 }
 public ModbusServer(string portName)
 {
     this.portName = portName;
     Status = ModbusServerStatus.Initialled;
 }
 public void Cancel()
 {
     if (readCancellationTokenSource != null)
     {
         if (!readCancellationTokenSource.IsCancellationRequested)
         {
             readCancellationTokenSource.Cancel();
         }
     }
     Status = ModbusServerStatus.Closed;
 }