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);
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); } } } }
internal NamedPortEventArgs(PortEventType peType, byte data, INamedPort port) { PortEvent = peType; Port = port; Byte = data; }
internal NamedPortEventArgs(PortEventType peType, string text, INamedPort port) { PortEvent = peType; Port = port; Text = text; }
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 }