Ejemplo n.º 1
0
 private void button1_Click(object sender, EventArgs e)
 {
     try
     {
         if (stopped)
         {
             if (driver == null)
             {
                 driver = new DTControl(1000, new int[] { 0, 1 }, new DTControl.Logger(MessageLog), new DTControl.DoneSignalHandler(SignalsDone));
             }
             driver.AnalogStart();
             button1.Text = "STOP";
             stopped      = false;
         }
         else
         {
             driver.AnalogStop();
             //button1.Text = "Get";
             stopped = true;
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Ejemplo n.º 2
0
        private void Communicate(int aConn, ref NetworkStream ns)
        {
            request  = new BinaryReader(ns);
            response = new BinaryWriter(ns);

            m_hasConnection[aConn] = true;

            try
            {
                while (!m_stopServer && m_hasConnection[aConn])
                {
                    string cmd;
                    string msg = "";

                    while (!ns.DataAvailable)
                    {
                        if (m_stopServer)
                        {
                            return;
                        }
                        Thread.Sleep(100);
                    }

                    cmd = request.ReadString();

                    switch (cmd)
                    {
                    case "START":
                    {
                        Log("Acquisition started");
                        response.Write("+ACK");
                        m_signals = new double[BufferSize * 2];
                        byte[] bufferedSignal = new byte[BufferSize * sizeof(double)];
                        m_device.PutDoutValue(1);
                        signalWriter = new StreamWriter("real_signals.txt");
                        stopped      = false;

                        try
                        {
                            m_device.AnalogStart();
                            //wait for it to start (maybe not necessary)
                            while (m_device.AnalogRunning() == false)
                            {
                            }

                            while (m_device.AnalogRunning() && !stopped)
                            {
                                Thread.Sleep(500);
                            }

                            if (!stopped)
                            {
                                m_hasConnection[aConn] = false;
                            }
                            msg = "+OK  Signals filtered.";
                        }
                        catch (Exception ex)
                        {
                            Log("Signal filtering failed: " + ex.Message);
                        }
                        break;
                    }

                    case "STOP":
                        response.Write("+ACK");
                        m_device.PutDoutValue(3);
                        if (m_device.AnalogRunning())
                        {
                            m_device.AnalogStop();
                        }
                        response.Write("DONE");

                        break;

                    case "CLOSE":
                        msg = "Connection Closed.";
                        m_hasConnection[aConn] = false;
                        break;

                    case "COEF":
                        msg = "+ACK  COEF";
                        response.Write(msg);
                        try
                        {
                            int    length = request.ReadInt32();
                            byte[] buffer = request.ReadBytes(length);
                            BufferToDouble(buffer, m_coefficients);
                        }
                        catch (Exception ex)
                        {
                            msg = "-ERR  Failed to receive coefficients. " + ex.Message;
                            Log(String.Format("({0}) {1}", aConn, msg));
                        }
                        msg = "+ACK  coefficients received.";
                        response.Write(msg);
                        break;

                    case "TEST":
                    {
                        msg = "+ACK TEST command received. Filtering test signal.";
                        response.Write(msg);

                        //read test signals
                        StreamReader  testReader  = new StreamReader(@"..\..\signal.txt");
                        List <double> testSignals = new List <double>();
                        while (testReader.EndOfStream == false)
                        {
                            testSignals.Add(Double.Parse(testReader.ReadLine()));
                        }
                        Log("+OK Signals read successfully.");

                        byte[]   bufferedSignals = new byte[BufferSize * sizeof(double)];
                        double[] filteredSignals;
                        double   average, variance, min, max;
                        int      bufferIndex = 0;

                        // this part is weird, because the test file is 6001 signals, but we want to send 100-length buffers
                        //
                        for (int signalIndex = 0; signalIndex < testSignals.Count; signalIndex += BufferSize) //simulate 100-length buffers
                        {
                            double[] buffer = new double[BufferSize];

                            // copy 100 values unless the buffer size is less than 100 (i.e. the last buffer only has 1 value)
                            testSignals.CopyTo(signalIndex, buffer, 0, ((testSignals.Count - signalIndex) < BufferSize) ? testSignals.Count - signalIndex : BufferSize);
                            if (!ProcessSignals(buffer, out filteredSignals, out average, out variance, out min, out max))
                            {
                                continue;
                            }
                            DoubleToBuffer(filteredSignals, bufferedSignals);
                            response.Write("BUF");
                            response.Write(bufferedSignals.Length);
                            response.Write(bufferedSignals);
                            DoubleToBuffer(buffer, bufferedSignals);
                            response.Write(bufferedSignals.Length);
                            response.Write(bufferedSignals);
                            response.Write(average);
                            response.Write(variance);
                            response.Write(min);
                            response.Write(max);
                            bufferIndex++;
                        }
                        response.Write("DONE");
                        msg = "+OK: Signals filtered.";
                        break;
                    }

                    case "INIT":
                        response.Write("+ACK");
                        if (m_device == null)
                        {
                            double frequency = request.ReadDouble();
                            m_device = new DTControl(frequency, new int[] { 0, 1 }, new DTControl.Logger(Log), new DTControl.DoneSignalHandler(GetBuffer));
                            m_device.PutDoutValue(0);
                            msg = "+OK DT9816 Initialized.";
                        }
                        else
                        {
                            msg = "+OK DT9816 Already initialized.";
                        }
                        break;

                    default:
                        msg = "-ERR: Command not recognized.";
                        response.Write(msg);
                        break;
                    }

                    response.Flush();
                    Log(String.Format("({0}) {1}", aConn, msg));
                }
            }
            catch (Exception ex)
            {
                Log(String.Format("[{0} {1}] -ERR  Connection {2} failed: {3}",
                                  DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString(), aConn, ex.Message));
            }
            finally
            {
                ns.Close();
            }
        }