Beispiel #1
0
        private void ThreadLoop(object arg)
        {
            var portName = (string)arg;

            _serialPort = new SerialPort
            {
                PortName     = portName,
                BaudRate     = 19200,
                Parity       = Parity.None,
                DataBits     = 8,
                StopBits     = StopBits.One,
                Handshake    = Handshake.None,
                ReadTimeout  = 100,
                WriteTimeout = 100
            };
            _serialPort.Open();
            if (!Sync())
            {
                throw new Exception("Unable to sync");
            }
            Console.WriteLine("Synced");

            var newFrame = new InputFrame();

            while (true)
            {
                if (newFrame.Wait <= 0)
                {
                    if (_queuedFrames.TryDequeue(out var queuedFrame))
                    {
                        newFrame = queuedFrame;
                        ApplyFrameToState(newFrame);
                        _callback?.Invoke(GetStateStr());
                        var packet = TranslateState(_state);
                        _serialPort.Write(packet, 0, packet.Length);
                    }
                }
                else
                {
                    newFrame.Wait--;
                }

                var resp = _serialPort.ReadByte();
                if (resp == 0x92)
                {
                    Console.Error.WriteLine("NACK");
                    if (!Sync())
                    {
                        throw new Exception("Unable to sync after NACK");
                    }
                }
                else if (resp != 0x90)
                {
                    // Unknown response
                }
            }
        }
        public void KeepAlive()
        {
            while (Program.botRunning)
            {
                if (newFrame.Wait <= 0)
                {
                    if (_queuedFrames.TryDequeue(out var queuedFrame))
                    {
                        newFrame = queuedFrame;
                        ApplyFrameToState(newFrame);
                        _callback?.Invoke(GetStateStr());
                        var packet = TranslateState(_state);
                        _serialPort.Write(packet, 0, packet.Length);
                    }
                }
                else
                {
                    newFrame.Wait--;
                    Reset();
                }
                try
                {
                    var resp = _serialPort.ReadByte();
                    if (resp == 0x92)
                    {
                        Console.Error.WriteLine("NACK");
                        if (!Sync())
                        {
                            throw new Exception("Unable to sync after NACK");
                        }
                    }
                    else if (resp != 0x90)
                    {
                        // Unknown response
                    }
                }
                catch
                {
                    Program.form.ApplyLog("Connection lost!");
                    Program.botConnected = false;
                    Program.botRunning   = false;
                }
                Thread.Sleep(10);
            }

            _serialPort.Dispose();
            _serialPort.Close();
            Program.form.UpdateStatus("Disconnected!");
            Program.form.UpdateUSBDisplay(false);
        }
 private void UpdateInner()
 {
     ComputeFft();
     OnUpdateCallback?.Invoke();
 }
Beispiel #4
0
 private void UpdateInner()
 {
     UpdatePlots();
     OnUpdateCallback?.Invoke();
 }