public void Reading(HeartRateReading reading) { if (!HasFileWriter) { return; } string data = null; var bpm = reading.BeatsPerMinute; var status = reading.BeatsPerMinute; var rrvalue = reading.RRIntervals == null ? "" : string.Join(",", reading.RRIntervals); var dateString = DateTimeFormatter.Format( _settings.LogDateFormat, DateTime.Now, DateTimeFormatter.DefaultColumn); switch ((_settings.LogFormat ?? "").ToLower()) { case "csv": data = $"{dateString},{bpm},{status},{reading.EnergyExpended},{rrvalue}"; break; } if (data != null) { WriteLine(data); } }
private void Service_HeartRateUpdated(HeartRateReading reading) { try { // _leaktest is not set to true in program execution, just manually for testing #pragma warning disable 162 if (_leaktest) { for (var i = 0; i < 4000; ++i) { Service_HeartRateUpdatedCore(reading); } return; } #pragma warning restore 162 Service_HeartRateUpdatedCore(reading); } catch (Exception ex) { Debug.WriteLine($"Exception in Service_HeartRateUpdated {ex}"); Debugger.Break(); } }
private void _service_HeartRateUpdated(HeartRateReading reading) { lock (_sync) { _lastUpdateTimer.Restart(); } }
public void Reading(HeartRateReading reading) { if (!HasFileWriter) { return; } Write(reading.BeatsPerMinute.ToString()); }
internal static HeartRateReading?ReadBuffer(byte[] buffer, int length) { if (length == 0) { return(null); } var ms = new MemoryStream(buffer, 0, length); var flags = (HeartRateFlags)ms.ReadByte(); var isshort = flags.HasFlag(HeartRateFlags.IsShort); var contactSensor = (ContactSensorStatus)(((int)flags >> 1) & 3); var hasEnergyExpended = flags.HasFlag(HeartRateFlags.HasEnergyExpended); var hasRRInterval = flags.HasFlag(HeartRateFlags.HasRRInterval); var minLength = isshort ? 3 : 2; if (buffer.Length < minLength) { return(null); } var reading = new HeartRateReading { Flags = flags, Status = contactSensor, BeatsPerMinute = isshort ? ms.ReadUInt16() : ms.ReadByte() }; if (hasEnergyExpended) { reading.EnergyExpended = ms.ReadUInt16(); } if (hasRRInterval) { var rrvalueCount = (buffer.Length - ms.Position) / sizeof(ushort); var rrvalues = new int[rrvalueCount]; for (var i = 0; i < rrvalueCount; ++i) { rrvalues[i] = ms.ReadUInt16(); } reading.RRIntervals = rrvalues; } return(reading); }
public void Reading(HeartRateReading reading) { if (!HasFileWriter) { return; } if (reading.RRIntervals == null) { return; } if (reading.RRIntervals.Length == 0) { return; } WriteLine(string.Join("\r\n", AsMS(reading.RRIntervals))); }
private void Service_HeartRateUpdated(HeartRateReading reading) { try { if (_leaktest) { for (var i = 0; i < 4000; ++i) { Service_HeartRateUpdatedCore(reading); } return; } Service_HeartRateUpdatedCore(reading); } catch (Exception ex) { Debug.WriteLine($"Exception in Service_HeartRateUpdated {ex}"); Debugger.Break(); } }
private void Service_HeartRateUpdatedCore(HeartRateReading reading) { _log?.Reading(reading); _ibi?.Reading(reading); _hrfile?.Reading(reading); var bpm = reading.BeatsPerMinute; var RR = reading.RRIntervals; var status = reading.Status; NeosVR.SendData(bpm, status); var isDisconnected = bpm == 0 || status == ContactSensorStatus.NoContact; var iconText = bpm.ToString(); var warnLevel = _settings.WarnLevel; var alertLevel = _settings.AlertLevel; // <= 0 implies disabled. var isWarn = warnLevel > 0 && bpm >= warnLevel; var isAlert = alertLevel > 0 && bpm >= alertLevel; lock (_updateSync) { if (isDisconnected) { uxBpmNotifyIcon.Text = $"Disconnected {status} ({bpm})"; if (!_disconnectedTimeout.IsRunning) { _disconnectedTimeout.Start(); } if (_disconnectedTimeout.Elapsed > _settings.DisconnectedTimeout) { // Originally this used " ⃠" (U+20E0, "Prohibition Symbol") // but MeasureString was only returning ~half of the // width. iconText = "X"; } } else { uxBpmNotifyIcon.Text = null; _disconnectedTimeout.Stop(); } _iconGraphics.Clear(Color.Transparent); var sizingMeasurement = _iconGraphics .MeasureString(iconText, _measurementFont); var color = isWarn ? _settings.WarnColor : _settings.Color; using (var brush = new SolidBrush(color)) using (var font = new Font(_settings.FontName, _iconHeight * (_iconWidth / sizingMeasurement.Width), GraphicsUnit.Pixel)) { _iconGraphics.DrawString( iconText, font, brush, new RectangleF(0, 0, _iconWidth, _iconHeight), _iconStringFormat); } _iconText = iconText; var iconHandle = _iconBitmap.GetHicon(); using (var icon = Icon.FromHandle(iconHandle)) { uxBpmNotifyIcon.Icon = icon; if (isAlert && (!_alertTimeout.IsRunning || _alertTimeout.Elapsed >= _settings.AlertTimeout)) { _alertTimeout.Restart(); var alertText = $"BPMs @ {bpm}"; uxBpmNotifyIcon.ShowBalloonTip( (int)_settings.AlertTimeout.TotalMilliseconds, alertText, alertText, ToolTipIcon.Warning); } } if (_oldIconHandle != IntPtr.Zero) { DestroyIcon(_oldIconHandle); } _oldIconHandle = iconHandle; } Invoke(new Action(() => { lock (_updateSync) { uxBpmLabel.Text = _iconText; uxBpmLabel.ForeColor = isWarn ? _settings.UIWarnColor : _settings.UIColor; UpdateUICore(); Invalidate(); } })); }