private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (sender is SerialPort port) { byte[] buffer = new byte[port.BytesToRead]; port.Read(buffer, 0, buffer.Length); var time = _dataAccessFacade.GetSceneInUseAccess().GetLocation(); if (!time.HasValue) { return; } foreach (var bufferData in buffer) { double[] data = _interpretStream.interpretBinaryStream(bufferData); if (!ReferenceEquals(null, data)) { if (data.Length >= 9) { double[] dataToGraph = new double[9]; dataToGraph[0] = data[0]; var eegArgs = new EegFrameArrivedEventArgs() { Time = time.Value, Person = _person, Channels = new List <EegChannel>() }; for (int j = 1; j < 9; j++) { double value = _filter.FiltersSelect((FilterType)(OpenBCISettings.Instance.Filter.Value), (NotchType)(OpenBCISettings.Instance.Notch.Value), data[j], j - 1); dataToGraph[j] = value; eegArgs.Channels.Add(new EegChannel() { Filter = FilterType.None, Notch = (NotchType)OpenBCISettings.Instance.Notch.Value, Position = _positions[j - 1] ?? "", Value = value }); } GraphTab.Enqueue(dataToGraph); OnEegFrameArrived(eegArgs); } if (data.Length == 12 && data[9] != 0 && data[10] != 0 && data[11] != 0) { var accArgs = new AccelerometerFrameArrivedEventArgs() { Place = "Head", // Time = , XAxis = data[9], YAxis = data[10], ZAxis = data[11] }; OnAccelerometerArrived(accArgs); } var actualTime = _dataAccessFacade.GetSceneInUseAccess().GetLocation(); if (actualTime.HasValue) { _filemanage?.WriteFile(actualTime.Value, data); } } } } }
private void OnEegFrameArrived(EegFrameArrivedEventArgs e) { EegFrameArrived?.Invoke(this, e); }
public void DataReceiver(object sender, EegFrameArrivedEventArgs e) { //if samplingHz is 128, then alternates if the signal is processed or no if (EEGEmoProc2ChSettings.Instance.SamplingHz == 256) { _signalGet = true; } else if (EEGEmoProc2ChSettings.Instance.SamplingHz == 128) { _signalGet = !_signalGet; } double[] values = new double[2]; var channelCounter = 0; foreach (var channel in e.Channels) { if (channel.Position.Equals("F3")) { if (EEGEmoProc2ChSettings.Instance.SamplingHz == 256) { values[0] = channel.Value; } else if (_signalGet) { values[0] = (lastF3 + channel.Value) / 2; } else { lastF3 = channel.Value; } channelCounter++; } if (channel.Position.Equals("C4")) { if (EEGEmoProc2ChSettings.Instance.SamplingHz == 256) { values[1] = channel.Value; } else if (_signalGet) { values[1] = (lastC4 + channel.Value) / 2; } else { lastC4 = channel.Value; } channelCounter++; } } if (channelCounter == 2) { _signaList.Add(values); } //if the window ends, sends the signal to process var sceneLocation = e.Time; if (_signaList.Count >= 0 && _lastSecond != (int)sceneLocation.TotalSeconds && (int)sceneLocation.TotalSeconds % 9 == 0) { _lastSecond = (int)sceneLocation.TotalSeconds; try { var tag = LearningModel.Classify(_signaList); Console.WriteLine(tag.ToString()); _dataAccessFacade.GetEventAccess().Add(e.Person, "Emotion", tag.ToString(), e.Time, 1); } catch (Exception ex) { Console.WriteLine("error: " + ex.Message); } _signaList = new List <double[]>(); } }