private async Task PauseReceiving()
        {
            if (_serialIoManager == null || !_serialIoManager.IsOpen)
            {
                return;
            }
            try
            {
                _serialIoManager.Close();
                await Task.Run(async() =>
                {
                    while (_serialIoManager != null && _serialIoManager.IsOpen)
                    {
                        await Task.Delay(200);
                    }
                });

                ToastService.ToastShortMessage(AppResources.Port_Closed);
            }
            catch (Exception)
            {
                ToastService.ToastShortMessage(AppResources.Port_Closed_Error);
            }
            finally
            {
                NotifyPropertyChanged(nameof(PortCommand));
                NotifyPropertyChanged(nameof(PortStatus));
            }
        }
예제 #2
0
        private async Task SaveSettings()
        {
            try
            {
                await SETTINGS_STORE.SaveAsync(CurrentSettings);

                MessagingCenter.Send <object>(this, "SettingsUpdated");
                ToastService.ToastShortMessage(AppResources.Save_Success);
            }
            catch (Exception)
            {
                ToastService.ToastShortMessage(AppResources.Save_Failed);
            }
        }
        private void WriteData(byte[] data)
        {
            if (_serialIoManager.IsOpen)
            {
                try
                {
                    _port.Write(data, UsbWriteDataTimeOut);
                }
                catch (Exception)
                {
                    ToastService.ToastShortMessage(AppResources.Write_Failed);
                    return;
                }

                _sentDataCount++;
                NotifyPropertyChanged(nameof(SentDataCount));
            }
        }
        private async void StartReceiving()
        {
            if (App.UsbManager == null || App.PortInfo == null)
            {
                ToastService.ToastShortMessage(AppResources.No_Device);
                return;
            }

            var driver =
                await FindDriversService.GetSpecificDriverAsync(App.UsbManager,
                                                                App.PortInfo);

            if (driver != null)
            {
                _port = driver.Ports[App.PortInfo.PortNumber];
            }
            else
            {
                ToastService.ToastShortMessage(AppResources.No_Driver);
                return;
            }

            CurrentDeviceName = _port.GetType().Name;
            NotifyPropertyChanged(nameof(CurrentDeviceName));

            _serialIoManager = new SerialInputOutputManager(_port)
            {
                BaudRate = CurrentSettings.BaudRate,
                DataBits = CurrentSettings.DataBits,
                StopBits = CurrentSettings.StopBits,
                Parity   = CurrentSettings.Parity
            };
            _serialIoManager.DataReceived += (sender, e) =>
            {
                Device.BeginInvokeOnMainThread(() => { UpdateReceivedData(e.Data); });
            };
            _serialIoManager.ErrorReceived += (sender, e) =>
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    ToastService.ToastShortMessage(AppResources
                                                   .Received_Error);
                });
            };
            ToastService.ToastShortMessage(AppResources.Port_Listening);

            try
            {
                _serialIoManager.Open(App.UsbManager);
            }
            catch (Exception)
            {
                ToastService.ToastShortMessage(
                    $"{AppResources.Open_Failed}: {CurrentDeviceName}");
            }
            finally
            {
                NotifyPropertyChanged(nameof(PortCommand));
                NotifyPropertyChanged(nameof(PortStatus));
            }
        }