private bool StateMachine_Searching(StepDefinition currentStep) { // get list of current system com ports var descriptions = ComPortInfo.GetDescriptions(); // clear out any old connections if (IsOpen) { IsConnected = false; CurrentConnection?.Disconnect(); } RunConnectionUpdate(); switch (TargetMode) { case ConnectionMode.AnyCom: CurrentConnection = AutoConnectComPort( descriptions.Select(s => s.Port).ToList(), ConnectionParameters); break; case ConnectionMode.SelectionRule: CurrentConnection = AutoConnectComPort( descriptions.Where(TargetSelectionRule).Select(s => s.Port).ToList(), ConnectionParameters); break; case ConnectionMode.PersistentPort: descriptions = descriptions.Where(TargetSelectionRule).ToList(); if (descriptions.Count == 1) { CurrentConnection = ConnectComPort( descriptions.Select(s => s.Port).First(), ConnectionParameters); CurrentConnection?.Connect(); if (CurrentConnection?.IsConnected != true) { CurrentConnection?.Disconnect(); CurrentConnection = null; } } else if (descriptions.Count > 1) { MachineFunctions.JumpToLast(currentStep); return(StepReturn.JumpCommandUsed); } break; default: break; } // if we didn't open a port, try again if (!IsOpen) { return(StepReturn.RepeatStep); } // we opened a port, so update the listeners ConnectionEventRegister(); RunConnectionUpdate(); // move to the next step return(StepReturn.ContinueToNext); }