public void Stop(bool close) { if (_running) { _running = false; _interface.SetDevicesQuiet(); for (int i = 0; i < _devices.Length; i++) { _devices[i].StopScan(); _devices[i].Uninitialize(); } if (close) { _interface.Close(_configuration); } } _dataLength = 0; _state = State.Header; }
void Button3Click(object sender, EventArgs e) { // wykrycie urządzeń i wyświetlenie listy wyboru try { // otwarcie interfejsu _interf.Open(); // wysłanie rozkazu zakończenia skanowania wejść _interf.SetDevicesQuiet(); // odczekanie 100ms System.Threading.Thread.Sleep(100); // wyczyszczenie bufora rs _interf.ClearReceiveBufor(); DeviceReportsReceiver receiver = new DeviceReportsReceiver(); _interf.Receiver = receiver; // wysłanie rozkazu wyłania raportu _interf.DevicesReports(); // odczekanie na raporty System.Threading.Thread.Sleep(100); // odczytanie listy urządzeń receiver.Stop = true; int[] devs = receiver.Devices(); // odfiltrowanie tylko urządzeń z wejściami cyfrowymi List <int> tmp = new List <int>(); for (int i = 0; i < devs.Length; i++) { if (Device.IsDeviceTypeKeys(devs[i] & 0xff)) { tmp.Add(devs[i]); } } devs = tmp.ToArray(); if (devs == null || devs.Length == 0) { MessageBox.Show(this, "Nie wykryto żadnych nowych urządzeń.", "Uwaga", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // usunięcie z menu poprzednich pozycji while (devicesMenu.Items.Count > 2) { devicesMenu.Items.RemoveAt(0); } // utworzenie menu for (int i = 0; i < devs.Length; i++) { int dev = devs[devs.Length - i - 1]; ToolStripItem item = new ToolStripMenuItem(string.Format("ID = {0}, Typ = {1}", (dev >> 8) & 0xff, Device.DeviceTypeToName(dev & 0xff))); item.Tag = dev; item.Click += new EventHandler(item_Click); devicesMenu.Items.Insert(0, item); } // pokazanie menu devicesMenu.Show(button3, new Point(0, 0)); } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { _interf.Close(_configuration); } }