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;
        }
示例#2
0
        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);
            }
        }