private void RaisePortsChangedIfNecessary(PortEventType eventType)
        {
            lock (serialPorts)
            {
                string[] availableSerialPorts = GetAvailableSerialPorts();

                if (eventType == PortEventType.Insertion)
                {
                    if (!serialPorts?.SequenceEqual(availableSerialPorts) ?? false)
                    {
                        var added = availableSerialPorts.Except(serialPorts).ToArray();
                        if (added.Length > 0)
                        {
                            serialPorts = availableSerialPorts;

                            ComportEventOccured?.Invoke(PortEventType.Insertion, added[0]);
                        }
                    }
                }
                else if (eventType == PortEventType.Removal)
                {
                    var removed = serialPorts.Except(availableSerialPorts).ToArray();
                    if (removed.Length > 0)
                    {
                        serialPorts = availableSerialPorts;

                        ComportEventOccured?.Invoke(PortEventType.Removal, removed[0]);
                    }
                }
            }
        }
        public void ComportEventReceived(PortEventType comPortEvent, string portNumber)
        {
            DeviceEvent = (comPortEvent == PortEventType.Insertion) ? DeviceEvent.DevicePlugged : DeviceEvent.DeviceUnplugged;

            if (currentStateAction?.LaunchRules?.DisableRequestPreProcessing ?? false)
            {
                currentStateAction?.ComportEventReceived(comPortEvent, portNumber);
            }
            else
            {
                RequestCancellationIfNecessary();
            }
        }
 public void ComportEventReceived(PortEventType comPortEvent, string portNumber)
 {
 }
 public PortsChangedArgs(PortEventType eventType, string[] serialPorts)
 => (EventType, SerialPorts) = (eventType, serialPorts);
Example #5
0
        private void OnComPortEventReceived(PortEventType comPortEvent, string portNumber)
        {
            bool peformDeviceDiscovery = false;

            if (comPortEvent == PortEventType.Insertion)
            {
                peformDeviceDiscovery = true;
                //_ = LoggingClient.LogInfoAsync($"Comport Plugged. ComportNumber '{portNumber}'. Detecting a new connection...");
                Console.WriteLine($"Comport Plugged. ComportNumber '{portNumber}'. Detecting a new connection...");
            }
            else if (comPortEvent == PortEventType.Removal)
            {
                if (TargetDevices != null)
                {
                    // dispose of all existing connections so that device recovery re-validates them
                    var deviceDisconnected = TargetDevices.Where(a => a.DeviceInformation.ComPort.Equals(portNumber, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
                    if (deviceDisconnected != null)
                    {
                        peformDeviceDiscovery = true;

                        // dispose of all connections so that device recovery re-validates them
                        foreach (var device in TargetDevices)
                        {
                            if (string.Equals(portNumber, device.DeviceInformation.ComPort, StringComparison.CurrentCultureIgnoreCase))
                            {
                                //_ = LoggingClient.LogInfoAsync($"Comport unplugged. ComportNumber '{portNumber}', " +
                                //    $"DeviceType '{device.ManufacturerConfigID}', SerialNumber '{device.DeviceInformation?.SerialNumber}'");
                                Console.WriteLine($"Comport unplugged. ComportNumber '{portNumber}', " +
                                                  $"DeviceType '{device.ManufacturerConfigID}', SerialNumber '{device.DeviceInformation?.SerialNumber}'");
                            }
                            device.Dispose();
                        }
                    }
                }
                //else
                //{
                //_ = LoggingClient.LogInfoAsync($"Comport unplugged. ComportNumber '{portNumber}', " +
                //    $"DeviceType '{TargetDevice?.ManufacturerConfigID}', SerialNumber '{TargetDevice?.DeviceInformation?.SerialNumber}'");
                //TargetDevice?.Dispose();
                //}

                Console.WriteLine($"Comport unplugged. ComportNumber '{portNumber}'");
            }
            else
            {
                //_ = LoggingClient.LogInfoAsync($"Comport Event '{comPortEvent}' is not implemented ");
                Console.WriteLine($"Comport Event '{comPortEvent}' is not implemented ");
            }

            // only perform discovery when an existing device is disconnected or a new connection is detected
            if (peformDeviceDiscovery)
            {
                //LoggingClient.LogInfoAsync($"Device recovery in progress...");
                Console.WriteLine($"Device recovery in progress...");

                if (currentStateAction.WorkflowStateType == DeviceWorkflowState.Manage)
                {
                    currentStateAction.DoDeviceDiscovery();
                }
                else
                {
                    StateActionRules.NeedsDeviceRecovery = true;

                    if (subStateController != null)
                    {
                        IDeviceSubStateManager subStateManager = subStateController as IDeviceSubStateManager;
                        subStateManager.ComportEventReceived(comPortEvent, portNumber);
                    }
                }
            }
        }
Example #6
0
 internal NamedPortEventArgs(PortEventType peType, byte data, INamedPort port)
 {
     PortEvent = peType;
     Port      = port;
     Byte      = data;
 }
Example #7
0
 internal NamedPortEventArgs(PortEventType peType, string text, INamedPort port)
 {
     PortEvent = peType;
     Port      = port;
     Text      = text;
 }
Example #8
0
 internal NamedPortEventArgs(PortEventType peType, INamedPort port)
 {
     PortEvent = peType;
     Port      = port;
 }
 public void ComportEventReceived(PortEventType comPortEvent, string portNumber)
 {
     // TODO: currently the workflow supports a single TargetDevice - we need to enhance the code to support
     // multiple devices
 }