Esempio n. 1
0
        /// <summary>
        /// Worker to monitor think gear data
        /// </summary>
        private void ThinkGearWorker(object sender, DoWorkEventArgs e)
        {
            // stopwatch for timing
            Stopwatch sw = new Stopwatch();

            sw.Start();

            // main loop, until worker is cancelled
            while (true)
            {
                // check if we should cancel
                if (_Worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }

                // Read all currently available Packets, one at a time
                int packetsRead = ThinkGear.TG_ReadPackets(connectionId, 1);
                if (packetsRead == 1)
                {
                    double _etime = (double)sw.ElapsedMilliseconds / 1000;  // elapsed time since start in seconds

                    ReadPacket(connectionId, ThinkGear.DATA_ATTENTION, _etime, "atn");
                    ReadPacket(connectionId, ThinkGear.DATA_MEDITATION, _etime, "med");
                    ReadPacket(connectionId, ThinkGear.DATA_POOR_SIGNAL, _etime, "sig");
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Check if packet that was read contains a certain data type, and prints its value
        /// </summary>
        /// <param name="connectionId">ThinkGear connectionId</param>
        /// <param name="DATA_TYPE">ThinkGear.DATA_* code</param>
        /// <param name="etime">ellapsed time in seconds</param>
        /// <param name="label">label for list box output</param>
        private void ReadPacket(int connectionId, int DATA_TYPE, double etime, string label)
        {
            // format string for print out
            string fmt1 = "{0,10:f3}: {1,5:s}: {2,6:g} 0x{2,4:X4}";

            if (ThinkGear.TG_GetValueStatus(connectionId, DATA_TYPE) != 0)
            {
                float  res  = ThinkGear.TG_GetValue(connectionId, DATA_TYPE);
                string sout = String.Format(fmt1, etime, label, (short)res);
                lstBoxLog.Invoke((Action <string>)AddItem, sout);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Start/Stop button event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStart_Click(object sender, EventArgs e)
        {
            // Start collecting data
            if (btnStart.Text.StartsWith("Start"))
            {
                bool StartSuccess = true;

                // update COM port
                Properties.Settings.Default.userCOMPort = cmboCOM.SelectedIndex; // remember user's selection
                Properties.Settings.Default.Save();
                portName = @"\\.\" + (string)cmboCOM.SelectedItem;

                // Update text
                btnStart.Enabled = false;
                lstBoxLog.Items.Add("Starting data collection on ThinkGear DLL version: " +
                                    ThinkGear.TG_GetDriverVersion().ToString());

                // Request connection ID
                connectionId = ThinkGear.TG_GetNewConnectionId();
                if (connectionId < 0)
                {
                    lstBoxLog.Items.Add("ERROR: TG_GetNewConnectionId() returned "
                                        + connectionId.ToString());
                    StartSuccess = false;
                }

                // start Stream/Data Loggers
                if (!_Log(connectionId, "data_log.txt", ThinkGear.TG_SetDataLog) ||
                    !_Log(connectionId, "stream_log.txt", ThinkGear.TG_SetStreamLog))
                {
                    StartSuccess = false;
                }

                // Do connection
                int errCode = ThinkGear.TG_Connect(connectionId,
                                                   portName,
                                                   ThinkGear.BAUD_57600,
                                                   ThinkGear.STREAM_PACKETS);
                if (errCode != 0)
                {
                    lstBoxLog.Items.Add("ERROR: TG_Connect() returned " +
                                        errCode.ToString());
                    StartSuccess = false;
                }

                // done setting up
                if (StartSuccess)
                {
                    _Worker.RunWorkerAsync(); // start thread
                    btnStart.Text = "Stop Collecting Data";
                }
                btnStart.Enabled = true;
            }

            // stop collecting data
            else if (btnStart.Text.StartsWith("Stop"))
            {
                btnStart.Enabled = false;

                // Stop worker
                _Worker.CancelAsync();

                // Disconnect
                ThinkGear.TG_FreeConnection(connectionId);

                // print out
                btnStart.Text = "Start connection on port " + portName;
                lstBoxLog.Items.Add("done stopping worker");
                btnStart.Enabled = true;
            }
            else
            {
                MessageBox.Show("Error in btnStart_Click");
            }
        }