private void OnLineReceived(object sender, LineReceivedEventArgs e) { string line = e.Line; Debug.WriteLine(line); lock (m_ValuesBuffer.SyncObject) { string[] stringParts = line.Split('\t'); DateTime timeStamp = DateTime.Now; int valuesCount = stringParts.Length; double[] receivedValues = new double[valuesCount]; for (int i = 0; i < valuesCount; i++) { double receivedValue = double.Parse(stringParts[i], CultureInfo.InvariantCulture); receivedValues[i] = receivedValue * 180.0 / Math.PI; } //receivedValues[1] += 1; //if (m_ValuesBuffer.Count > 1) //{ // // In order to accomplish sample and hold behavior we insert the old values with the new time stamp first // TimeStampedValue<double[]> previousTimeStampedValue = m_ValuesBuffer[m_ValuesBuffer.Count - 1]; // TimeStampedValue<double[]> sampleAndHoldTimeStampedValue = // new TimeStampedValue<double[]>(timeStamp, previousTimeStampedValue.Value); // m_ValuesBuffer.Add(sampleAndHoldTimeStampedValue); //} TimeStampedValue <double[]> timeStampedValue = new TimeStampedValue <double[]>(timeStamp, receivedValues); m_ValuesBuffer.Add(timeStampedValue); } }
// format: ECG0.1|SCL0.5|EMG100 public void ParseValues(TimeStampedValue<string>[] values) { InitLists(); foreach (TimeStampedValue<string> val in values) { long timeStamp = val.TimeStamp; foreach (string datapoint in val.Value.Split('|')) { try { if (datapoint.StartsWith("EMG")) { int emgInt = int.Parse(datapoint.Substring(3)); // should be an integer smaller than 1024, map to 1-5V float float emgFloat = 5.0f * (emgInt / 1024.0f); ProcessNewEMGValue(timeStamp, emgFloat); } else if (datapoint.StartsWith("ECG")) { float ecgFloat = float.Parse(datapoint.Substring(3)); ProcessNewECGValue(timeStamp, ecgFloat); } else if (datapoint.StartsWith("SCL")) { float sclFloat = float.Parse(datapoint.Substring(3)); ProcessNewSCLValue(timeStamp, sclFloat); } else { Debug.LogWarning("EHealthParser: unknown/truncated datapoint: " + datapoint); } } catch (FormatException) { Debug.LogWarning("EHealthParser: unparseable datapoint: " + datapoint); } } } }
//private void OnLineReceived(object sender, LineReceivedEventArgs e) //{ // string line = e.Line; // Debug.WriteLine(line); // lock (m_ValuesBuffer.SyncObject) // { // string[] stringParts = line.Split('\t'); // DateTime timeStamp = ExtractTimeStamp(stringParts[0]); // int valuesCount = stringParts.Length - 1; // double[] receivedValues = new double[valuesCount]; // for (int i = 0; i < valuesCount; i++) // { // double receivedValue = double.Parse(stringParts[i + 1], CultureInfo.InvariantCulture); // receivedValues[i] = receivedValue; // } // receivedValues[1] += 1; // if (m_ValuesBuffer.Count > 1) // { // // In order to accomplish sample and hold behavior we insert the old values with the new time stamp first // TimeStampedValue<double[]> previousTimeStampedValue = m_ValuesBuffer[m_ValuesBuffer.Count - 1]; // TimeStampedValue<double[]> sampleAndHoldTimeStampedValue = // new TimeStampedValue<double[]>(timeStamp, previousTimeStampedValue.Value); // m_ValuesBuffer.Add(sampleAndHoldTimeStampedValue); // } // TimeStampedValue<double[]> timeStampedValue = new TimeStampedValue<double[]>(timeStamp, receivedValues); // m_ValuesBuffer.Add(timeStampedValue); // } //} //private DateTime ExtractTimeStamp(string milliSecsString) //{ // long milliSecs = long.Parse(milliSecsString, CultureInfo.InvariantCulture); // long ticks = milliSecs * s_TicksPerMilliSec + m_StartTime.Ticks; // DateTime timeStamp = new DateTime(ticks); // Debug.WriteLine(timeStamp); // return timeStamp; //} private void OnNewDataReceived(object sender, DataReceivedEventArgs e) { lock (m_ValuesBuffer.SyncObject) { TimeStampedValue <double[]> timeStampedValue = new TimeStampedValue <double[]>(DateTime.Now, e.ReceivedValues); m_ValuesBuffer.Add(timeStampedValue); } }
//private void OnLineReceived(object sender, LineReceivedEventArgs e) //{ // string line = e.Line; // Debug.WriteLine(line); // lock (m_ValuesBuffer.SyncObject) // { // string[] stringParts = line.Split('\t'); // DateTime timeStamp = ExtractTimeStamp(stringParts[0]); // int valuesCount = stringParts.Length - 1; // double[] receivedValues = new double[valuesCount]; // for (int i = 0; i < valuesCount; i++) // { // double receivedValue = double.Parse(stringParts[i + 1], CultureInfo.InvariantCulture); // receivedValues[i] = receivedValue; // } // receivedValues[1] += 1; // if (m_ValuesBuffer.Count > 1) // { // // In order to accomplish sample and hold behavior we insert the old values with the new time stamp first // TimeStampedValue<double[]> previousTimeStampedValue = m_ValuesBuffer[m_ValuesBuffer.Count - 1]; // TimeStampedValue<double[]> sampleAndHoldTimeStampedValue = // new TimeStampedValue<double[]>(timeStamp, previousTimeStampedValue.Value); // m_ValuesBuffer.Add(sampleAndHoldTimeStampedValue); // } // TimeStampedValue<double[]> timeStampedValue = new TimeStampedValue<double[]>(timeStamp, receivedValues); // m_ValuesBuffer.Add(timeStampedValue); // } //} //private DateTime ExtractTimeStamp(string milliSecsString) //{ // long milliSecs = long.Parse(milliSecsString, CultureInfo.InvariantCulture); // long ticks = milliSecs * s_TicksPerMilliSec + m_StartTime.Ticks; // DateTime timeStamp = new DateTime(ticks); // Debug.WriteLine(timeStamp); // return timeStamp; //} private void OnNewDataReceived(object sender, DataReceivedEventArgs e) { lock (m_ValuesBuffer.SyncObject) { TimeStampedValue<double[]> timeStampedValue = new TimeStampedValue<double[]>(DateTime.Now, e.ReceivedValues); m_ValuesBuffer.Add(timeStampedValue); } }
private void OnLineReceived(object sender, LineReceivedEventArgs e) { string line = e.Line; Debug.WriteLine(line); lock (m_ValuesBuffer.SyncObject) { string[] stringParts = line.Split('\t'); DateTime timeStamp = DateTime.Now; int valuesCount = stringParts.Length; double[] receivedValues = new double[valuesCount]; for (int i = 0; i < valuesCount; i++) { double receivedValue = double.Parse(stringParts[i], CultureInfo.InvariantCulture); receivedValues[i] = receivedValue * 180.0 / Math.PI; } //receivedValues[1] += 1; //if (m_ValuesBuffer.Count > 1) //{ // // In order to accomplish sample and hold behavior we insert the old values with the new time stamp first // TimeStampedValue<double[]> previousTimeStampedValue = m_ValuesBuffer[m_ValuesBuffer.Count - 1]; // TimeStampedValue<double[]> sampleAndHoldTimeStampedValue = // new TimeStampedValue<double[]>(timeStamp, previousTimeStampedValue.Value); // m_ValuesBuffer.Add(sampleAndHoldTimeStampedValue); //} TimeStampedValue<double[]> timeStampedValue = new TimeStampedValue<double[]>(timeStamp, receivedValues); m_ValuesBuffer.Add(timeStampedValue); } }
protected internal virtual void OnNewSample(Sample newSample) { m_RawOutput.WriteOutput(newSample); TimeStampedValue<double> heartSignal = new TimeStampedValue<double>(newSample.TimeStamp, newSample.Heart); m_RawHeartSignal.WriteOutput(heartSignal); EventHandler<SampleEventArgs> handler = this.NewSample; if (handler != null) { try { handler(this, new SampleEventArgs(newSample)); } catch (Exception ex) { Debug.WriteLine(ex.ToString()); //s_Log.Fatal("One of the subscribers of the NewSample event threw an exception."); } } }
private void ProcessNewSCRValue(TimeStampedValue<bool> newValue) { NewSCRValues.Add(newValue); }
private void ProcessNewSCLValue(long timeStamp, float sclFloat) { TimeStampedValue<float> tsValue = new TimeStampedValue<float>(timeStamp, sclFloat); this.NewSCLValues.Add(tsValue); // send new value to smoothing/normalizing/peakdetection filter pipeline: sclSmoother.Add(tsValue); }