Darien Figueroa / Mbed OS Final_Program

Dependencies:   USBDevice

Committer:
darienf
Date:
Sat Apr 10 03:05:42 2021 +0000
Revision:
3:36de8b9e4b1a
ayoooo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
darienf 3:36de8b9e4b1a 1 /*******************************************************************************
darienf 3:36de8b9e4b1a 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All rights Reserved.
darienf 3:36de8b9e4b1a 3 *
darienf 3:36de8b9e4b1a 4 * This software is protected by copyright laws of the United States and
darienf 3:36de8b9e4b1a 5 * of foreign countries. This material may also be protected by patent laws
darienf 3:36de8b9e4b1a 6 * and technology transfer regulations of the United States and of foreign
darienf 3:36de8b9e4b1a 7 * countries. This software is furnished under a license agreement and/or a
darienf 3:36de8b9e4b1a 8 * nondisclosure agreement and may only be used or reproduced in accordance
darienf 3:36de8b9e4b1a 9 * with the terms of those agreements. Dissemination of this information to
darienf 3:36de8b9e4b1a 10 * any party or parties not specified in the license agreement and/or
darienf 3:36de8b9e4b1a 11 * nondisclosure agreement is expressly prohibited.
darienf 3:36de8b9e4b1a 12 *
darienf 3:36de8b9e4b1a 13 * The above copyright notice and this permission notice shall be included
darienf 3:36de8b9e4b1a 14 * in all copies or substantial portions of the Software.
darienf 3:36de8b9e4b1a 15 *
darienf 3:36de8b9e4b1a 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
darienf 3:36de8b9e4b1a 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
darienf 3:36de8b9e4b1a 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
darienf 3:36de8b9e4b1a 19 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
darienf 3:36de8b9e4b1a 20 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
darienf 3:36de8b9e4b1a 21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
darienf 3:36de8b9e4b1a 22 * OTHER DEALINGS IN THE SOFTWARE.
darienf 3:36de8b9e4b1a 23 *
darienf 3:36de8b9e4b1a 24 * Except as contained in this notice, the name of Maxim Integrated
darienf 3:36de8b9e4b1a 25 * Products, Inc. shall not be used except as stated in the Maxim Integrated
darienf 3:36de8b9e4b1a 26 * Products, Inc. Branding Policy.
darienf 3:36de8b9e4b1a 27 *
darienf 3:36de8b9e4b1a 28 * The mere transfer of this software does not imply any licenses
darienf 3:36de8b9e4b1a 29 * of trade secrets, proprietary technology, copyrights, patents,
darienf 3:36de8b9e4b1a 30 * trademarks, maskwork rights, or any other form of intellectual
darienf 3:36de8b9e4b1a 31 * property whatsoever. Maxim Integrated Products, Inc. retains all
darienf 3:36de8b9e4b1a 32 * ownership rights.
darienf 3:36de8b9e4b1a 33 *******************************************************************************
darienf 3:36de8b9e4b1a 34 */
darienf 3:36de8b9e4b1a 35
darienf 3:36de8b9e4b1a 36 using System;
darienf 3:36de8b9e4b1a 37 using System.Collections.Generic;
darienf 3:36de8b9e4b1a 38 using System.Linq;
darienf 3:36de8b9e4b1a 39 using System.Text;
darienf 3:36de8b9e4b1a 40
darienf 3:36de8b9e4b1a 41 using RPCSupport.Streaming;
darienf 3:36de8b9e4b1a 42 using HealthSensorPlatform.Model;
darienf 3:36de8b9e4b1a 43 using HealthSensorPlatform.View;
darienf 3:36de8b9e4b1a 44 using HealthSensorPlatform.CustomControls;
darienf 3:36de8b9e4b1a 45
darienf 3:36de8b9e4b1a 46 namespace HealthSensorPlatform.Presenter
darienf 3:36de8b9e4b1a 47 {
darienf 3:36de8b9e4b1a 48 class DataLogPresenter
darienf 3:36de8b9e4b1a 49 {
darienf 3:36de8b9e4b1a 50 IDataLogModel model;
darienf 3:36de8b9e4b1a 51 DataLoggingView view;
darienf 3:36de8b9e4b1a 52 IRawFileLogView temperatureLog1;
darienf 3:36de8b9e4b1a 53 IRawFileLogView temperatureLog2;
darienf 3:36de8b9e4b1a 54 IRawFileLogView pressureLog;
darienf 3:36de8b9e4b1a 55
darienf 3:36de8b9e4b1a 56 IRawFileLogView accelerometerLog;
darienf 3:36de8b9e4b1a 57 IRawFileLogView opticalLog;
darienf 3:36de8b9e4b1a 58
darienf 3:36de8b9e4b1a 59 IRawFileLogView ecgLog;
darienf 3:36de8b9e4b1a 60 IRawFileLogView bioZLog;
darienf 3:36de8b9e4b1a 61 IRawFileLogView paceLog;
darienf 3:36de8b9e4b1a 62 IRawFileLogView rToRLog;
darienf 3:36de8b9e4b1a 63
darienf 3:36de8b9e4b1a 64 IFormView formView;
darienf 3:36de8b9e4b1a 65
darienf 3:36de8b9e4b1a 66 StatusForm statusForm;
darienf 3:36de8b9e4b1a 67
darienf 3:36de8b9e4b1a 68 EcgView ecgView; // Needed to obtain some state information, should be decoupled later and use from data log model
darienf 3:36de8b9e4b1a 69 OpticalView opticalView;
darienf 3:36de8b9e4b1a 70
darienf 3:36de8b9e4b1a 71 int count = 0;
darienf 3:36de8b9e4b1a 72 int bioZCount = 0;
darienf 3:36de8b9e4b1a 73 int ppgCount = 0;
darienf 3:36de8b9e4b1a 74 int accelCount = 0;
darienf 3:36de8b9e4b1a 75 PaceData paceData;
darienf 3:36de8b9e4b1a 76 RToRCalculator rToRCalculator;
darienf 3:36de8b9e4b1a 77 bool rToRFirst = true;
darienf 3:36de8b9e4b1a 78
darienf 3:36de8b9e4b1a 79 string logFileDirectory = null;
darienf 3:36de8b9e4b1a 80
darienf 3:36de8b9e4b1a 81 View.FileLogView.FileLogHeader fileLogHeader = new View.FileLogView.FileLogHeader();
darienf 3:36de8b9e4b1a 82
darienf 3:36de8b9e4b1a 83 public DataLogPresenter(IFormView formView, EcgView ecgView, OpticalView opticalView, IDataLogModel model, DataLoggingView view,
darienf 3:36de8b9e4b1a 84 IRawFileLogView temperatureLog1, IRawFileLogView temperatureLog2, IRawFileLogView pressureLog,
darienf 3:36de8b9e4b1a 85 IRawFileLogView accelerometerLog, IRawFileLogView opticalLog,
darienf 3:36de8b9e4b1a 86 IRawFileLogView ecgLog, IRawFileLogView bioZLog, IRawFileLogView paceLog, IRawFileLogView rToRLog)
darienf 3:36de8b9e4b1a 87 {
darienf 3:36de8b9e4b1a 88 this.model = model;
darienf 3:36de8b9e4b1a 89 this.view = view;
darienf 3:36de8b9e4b1a 90
darienf 3:36de8b9e4b1a 91 this.formView = formView;
darienf 3:36de8b9e4b1a 92 this.ecgView = ecgView;
darienf 3:36de8b9e4b1a 93 this.opticalView = opticalView;
darienf 3:36de8b9e4b1a 94
darienf 3:36de8b9e4b1a 95 this.temperatureLog1 = temperatureLog1;
darienf 3:36de8b9e4b1a 96 this.temperatureLog2 = temperatureLog2;
darienf 3:36de8b9e4b1a 97 this.pressureLog = pressureLog;
darienf 3:36de8b9e4b1a 98
darienf 3:36de8b9e4b1a 99 this.accelerometerLog = accelerometerLog;
darienf 3:36de8b9e4b1a 100 this.opticalLog = opticalLog;
darienf 3:36de8b9e4b1a 101
darienf 3:36de8b9e4b1a 102 this.ecgLog = ecgLog;
darienf 3:36de8b9e4b1a 103 this.bioZLog = bioZLog;
darienf 3:36de8b9e4b1a 104 this.paceLog = paceLog;
darienf 3:36de8b9e4b1a 105 this.rToRLog = rToRLog;
darienf 3:36de8b9e4b1a 106
darienf 3:36de8b9e4b1a 107 view.LogDownloadStart += new EventHandler<EventArgs>(OnLogDownloadStart);
darienf 3:36de8b9e4b1a 108 view.MissionWrite += new EventHandler<EventArgs>(OnMissionWrite);
darienf 3:36de8b9e4b1a 109 view.MissionRead += new EventHandler<EventArgs>(OnMissionRead);
darienf 3:36de8b9e4b1a 110 view.MissionErase += new EventHandler<EventArgs>(OnMissionErase);
darienf 3:36de8b9e4b1a 111 model.LogData += new EventHandler<PartialArrayIntAvailableEventArgs>(OnLogData);
darienf 3:36de8b9e4b1a 112 }
darienf 3:36de8b9e4b1a 113
darienf 3:36de8b9e4b1a 114 public void ProcessTemperature1(int[] data)
darienf 3:36de8b9e4b1a 115 {
darienf 3:36de8b9e4b1a 116 double[] calcTemp;
darienf 3:36de8b9e4b1a 117
darienf 3:36de8b9e4b1a 118 calcTemp = CalculateTemperature(data);
darienf 3:36de8b9e4b1a 119 temperatureLog1.DisplayTemperature(data, calcTemp);
darienf 3:36de8b9e4b1a 120 }
darienf 3:36de8b9e4b1a 121
darienf 3:36de8b9e4b1a 122 public void ProcessTemperature2(int[] data)
darienf 3:36de8b9e4b1a 123 {
darienf 3:36de8b9e4b1a 124 double[] calcTemp;
darienf 3:36de8b9e4b1a 125
darienf 3:36de8b9e4b1a 126 calcTemp = CalculateTemperature(data);
darienf 3:36de8b9e4b1a 127 temperatureLog2.DisplayTemperature(data, calcTemp);
darienf 3:36de8b9e4b1a 128 }
darienf 3:36de8b9e4b1a 129
darienf 3:36de8b9e4b1a 130 public double[] CalculateTemperature(int[] data)
darienf 3:36de8b9e4b1a 131 {
darienf 3:36de8b9e4b1a 132 double[] calcTemp = new double[data.Length];
darienf 3:36de8b9e4b1a 133 int rawCode;
darienf 3:36de8b9e4b1a 134
darienf 3:36de8b9e4b1a 135 for (int i = 0; i < data.Length; i++ )
darienf 3:36de8b9e4b1a 136 {
darienf 3:36de8b9e4b1a 137 rawCode = data[i];
darienf 3:36de8b9e4b1a 138
darienf 3:36de8b9e4b1a 139 if (rawCode > 0x7fff)
darienf 3:36de8b9e4b1a 140 rawCode -= 0x10000;
darienf 3:36de8b9e4b1a 141
darienf 3:36de8b9e4b1a 142 calcTemp[i] = rawCode / Math.Pow(2, 8);
darienf 3:36de8b9e4b1a 143 }
darienf 3:36de8b9e4b1a 144
darienf 3:36de8b9e4b1a 145 return calcTemp;
darienf 3:36de8b9e4b1a 146 }
darienf 3:36de8b9e4b1a 147
darienf 3:36de8b9e4b1a 148 public void ProcessPressure(int[] data)
darienf 3:36de8b9e4b1a 149 {
darienf 3:36de8b9e4b1a 150 int[] rawTemp = new int[data.Length/2];
darienf 3:36de8b9e4b1a 151 int[] rawPress = new int[data.Length/2];
darienf 3:36de8b9e4b1a 152 double[] calcTemp, calcPress;
darienf 3:36de8b9e4b1a 153
darienf 3:36de8b9e4b1a 154 for (int i = 0, j = 0; i < data.Length; i = i + 2, j++)
darienf 3:36de8b9e4b1a 155 {
darienf 3:36de8b9e4b1a 156 rawTemp[j] = data[i];
darienf 3:36de8b9e4b1a 157 rawPress[j] = data[i + 1];
darienf 3:36de8b9e4b1a 158 }
darienf 3:36de8b9e4b1a 159
darienf 3:36de8b9e4b1a 160 var result = CalculatePressure(rawTemp, rawPress);
darienf 3:36de8b9e4b1a 161 calcTemp = result.Item1;
darienf 3:36de8b9e4b1a 162 calcPress = result.Item2;
darienf 3:36de8b9e4b1a 163
darienf 3:36de8b9e4b1a 164 pressureLog.DisplayPressure(rawTemp, calcTemp, rawPress, calcPress);
darienf 3:36de8b9e4b1a 165 }
darienf 3:36de8b9e4b1a 166
darienf 3:36de8b9e4b1a 167 public Tuple<double[], double[]> CalculatePressure(int[] temperature, int[] pressure)
darienf 3:36de8b9e4b1a 168 {
darienf 3:36de8b9e4b1a 169 double[] calcTemp = new double[temperature.Length];
darienf 3:36de8b9e4b1a 170 double[] calcPress = new double[pressure.Length];
darienf 3:36de8b9e4b1a 171
darienf 3:36de8b9e4b1a 172 for (int i = 0; i < temperature.Length; i++ )
darienf 3:36de8b9e4b1a 173 {
darienf 3:36de8b9e4b1a 174 calcTemp[i] = temperature[i] / 10.0;
darienf 3:36de8b9e4b1a 175 }
darienf 3:36de8b9e4b1a 176
darienf 3:36de8b9e4b1a 177 for (int i = 0; i < pressure.Length; i++ )
darienf 3:36de8b9e4b1a 178 {
darienf 3:36de8b9e4b1a 179 calcPress[i] = pressure[i] / 10;
darienf 3:36de8b9e4b1a 180 }
darienf 3:36de8b9e4b1a 181
darienf 3:36de8b9e4b1a 182 return new Tuple<double[],double[]>(calcTemp, calcPress);
darienf 3:36de8b9e4b1a 183 }
darienf 3:36de8b9e4b1a 184
darienf 3:36de8b9e4b1a 185 private void OnLogDownloadStart(object sender, EventArgs e)
darienf 3:36de8b9e4b1a 186 {
darienf 3:36de8b9e4b1a 187
darienf 3:36de8b9e4b1a 188 if (view.Connected)
darienf 3:36de8b9e4b1a 189 {
darienf 3:36de8b9e4b1a 190 count = 0;
darienf 3:36de8b9e4b1a 191 bioZCount = 0;
darienf 3:36de8b9e4b1a 192 ppgCount = 0;
darienf 3:36de8b9e4b1a 193 accelCount = 0;
darienf 3:36de8b9e4b1a 194
darienf 3:36de8b9e4b1a 195 missionRead();
darienf 3:36de8b9e4b1a 196
darienf 3:36de8b9e4b1a 197 if (model.MissionSettings.Enable)
darienf 3:36de8b9e4b1a 198 {
darienf 3:36de8b9e4b1a 199
darienf 3:36de8b9e4b1a 200 if (selectFile())
darienf 3:36de8b9e4b1a 201 {
darienf 3:36de8b9e4b1a 202 string missionString;
darienf 3:36de8b9e4b1a 203 StringBuilder sb = new StringBuilder();
darienf 3:36de8b9e4b1a 204 foreach (string str in model.MissionString())
darienf 3:36de8b9e4b1a 205 {
darienf 3:36de8b9e4b1a 206 sb.Append("% ");
darienf 3:36de8b9e4b1a 207 sb.Append(str);
darienf 3:36de8b9e4b1a 208 sb.Append(Environment.NewLine);
darienf 3:36de8b9e4b1a 209 }
darienf 3:36de8b9e4b1a 210 missionString = sb.ToString().Trim(Environment.NewLine.ToCharArray());
darienf 3:36de8b9e4b1a 211
darienf 3:36de8b9e4b1a 212
darienf 3:36de8b9e4b1a 213 if (temperatureLog1 != null && temperatureLog1.Enable)
darienf 3:36de8b9e4b1a 214 {
darienf 3:36de8b9e4b1a 215 temperatureLog1.WriteLine(missionString);
darienf 3:36de8b9e4b1a 216 temperatureLog1.WriteLine(fileLogHeader.Temperature1);
darienf 3:36de8b9e4b1a 217 }
darienf 3:36de8b9e4b1a 218
darienf 3:36de8b9e4b1a 219 if (temperatureLog2 != null && temperatureLog2.Enable)
darienf 3:36de8b9e4b1a 220 {
darienf 3:36de8b9e4b1a 221 temperatureLog2.WriteLine(missionString);
darienf 3:36de8b9e4b1a 222 temperatureLog2.WriteLine(fileLogHeader.Temperature2);
darienf 3:36de8b9e4b1a 223 }
darienf 3:36de8b9e4b1a 224
darienf 3:36de8b9e4b1a 225 if (pressureLog != null && pressureLog.Enable)
darienf 3:36de8b9e4b1a 226 {
darienf 3:36de8b9e4b1a 227 pressureLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 228 pressureLog.WriteLine(fileLogHeader.Pressure);
darienf 3:36de8b9e4b1a 229 }
darienf 3:36de8b9e4b1a 230
darienf 3:36de8b9e4b1a 231 if (accelerometerLog != null && accelerometerLog.Enable)
darienf 3:36de8b9e4b1a 232 {
darienf 3:36de8b9e4b1a 233 accelerometerLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 234 accelerometerLog.WriteLine(fileLogHeader.Accelerometer);
darienf 3:36de8b9e4b1a 235 }
darienf 3:36de8b9e4b1a 236
darienf 3:36de8b9e4b1a 237 if (opticalLog != null && opticalLog.Enable)
darienf 3:36de8b9e4b1a 238 {
darienf 3:36de8b9e4b1a 239 opticalLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 240 opticalLog.WriteLine(fileLogHeader.Optical);
darienf 3:36de8b9e4b1a 241 }
darienf 3:36de8b9e4b1a 242
darienf 3:36de8b9e4b1a 243 if (ecgLog != null && ecgLog.Enable)
darienf 3:36de8b9e4b1a 244 {
darienf 3:36de8b9e4b1a 245 ecgLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 246 ecgLog.WriteLine(fileLogHeader.Ecg);
darienf 3:36de8b9e4b1a 247 }
darienf 3:36de8b9e4b1a 248
darienf 3:36de8b9e4b1a 249 if (bioZLog != null && bioZLog.Enable)
darienf 3:36de8b9e4b1a 250 {
darienf 3:36de8b9e4b1a 251 bioZLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 252 bioZLog.WriteLine(fileLogHeader.BioZ);
darienf 3:36de8b9e4b1a 253 }
darienf 3:36de8b9e4b1a 254
darienf 3:36de8b9e4b1a 255 if (rToRLog != null && rToRLog.Enable && ecgLog.Enable)
darienf 3:36de8b9e4b1a 256 {
darienf 3:36de8b9e4b1a 257 rToRLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 258 rToRCalculator = new RToRCalculator(ecgView.MasterClockField, view.EcgArgs.Rate, view.EcgArgs.Dlpf, view.RToRArgs.Wndw);
darienf 3:36de8b9e4b1a 259 rToRLog.WriteLine(fileLogHeader.RToR);
darienf 3:36de8b9e4b1a 260 }
darienf 3:36de8b9e4b1a 261 else if (rToRLog != null && rToRLog.Enable)
darienf 3:36de8b9e4b1a 262 {
darienf 3:36de8b9e4b1a 263 rToRLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 264 rToRCalculator = null;
darienf 3:36de8b9e4b1a 265 rToRLog.WriteLine(fileLogHeader.RToR);
darienf 3:36de8b9e4b1a 266 }
darienf 3:36de8b9e4b1a 267
darienf 3:36de8b9e4b1a 268 if (paceLog != null && paceLog.Enable)
darienf 3:36de8b9e4b1a 269 {
darienf 3:36de8b9e4b1a 270 paceLog.WriteLine(missionString);
darienf 3:36de8b9e4b1a 271 paceLog.WriteLine(fileLogHeader.Pace);
darienf 3:36de8b9e4b1a 272 }
darienf 3:36de8b9e4b1a 273
darienf 3:36de8b9e4b1a 274 statusForm = new StatusForm();
darienf 3:36de8b9e4b1a 275 statusForm.Text = "Flash Download";
darienf 3:36de8b9e4b1a 276 statusForm.Message = "Please wait while your data is saved to your file.";
darienf 3:36de8b9e4b1a 277 statusForm.Show();
darienf 3:36de8b9e4b1a 278
darienf 3:36de8b9e4b1a 279 model.Start();
darienf 3:36de8b9e4b1a 280 }
darienf 3:36de8b9e4b1a 281 }
darienf 3:36de8b9e4b1a 282 }
darienf 3:36de8b9e4b1a 283 }
darienf 3:36de8b9e4b1a 284
darienf 3:36de8b9e4b1a 285 private void LogDownloadStop()
darienf 3:36de8b9e4b1a 286 {
darienf 3:36de8b9e4b1a 287 if (temperatureLog1 != null && temperatureLog1.Enable)
darienf 3:36de8b9e4b1a 288 temperatureLog1.Enable = false;
darienf 3:36de8b9e4b1a 289
darienf 3:36de8b9e4b1a 290 if (temperatureLog2 != null && temperatureLog2.Enable)
darienf 3:36de8b9e4b1a 291 temperatureLog2.Enable = false;
darienf 3:36de8b9e4b1a 292
darienf 3:36de8b9e4b1a 293 if (pressureLog != null && pressureLog.Enable)
darienf 3:36de8b9e4b1a 294 pressureLog.Enable = false;
darienf 3:36de8b9e4b1a 295
darienf 3:36de8b9e4b1a 296 if (accelerometerLog != null && accelerometerLog.Enable)
darienf 3:36de8b9e4b1a 297 accelerometerLog.Enable = false;
darienf 3:36de8b9e4b1a 298
darienf 3:36de8b9e4b1a 299 if (opticalLog != null && opticalLog.Enable)
darienf 3:36de8b9e4b1a 300 opticalLog.Enable = false;
darienf 3:36de8b9e4b1a 301
darienf 3:36de8b9e4b1a 302 if (ecgLog != null && ecgLog.Enable)
darienf 3:36de8b9e4b1a 303 ecgLog.Enable = false;
darienf 3:36de8b9e4b1a 304
darienf 3:36de8b9e4b1a 305 if (bioZLog != null && bioZLog.Enable)
darienf 3:36de8b9e4b1a 306 bioZLog.Enable = false;
darienf 3:36de8b9e4b1a 307
darienf 3:36de8b9e4b1a 308 if (rToRLog != null && rToRLog.Enable)
darienf 3:36de8b9e4b1a 309 rToRLog.Enable = false;
darienf 3:36de8b9e4b1a 310
darienf 3:36de8b9e4b1a 311 if (paceLog != null && paceLog.Enable)
darienf 3:36de8b9e4b1a 312 paceLog.Enable = false;
darienf 3:36de8b9e4b1a 313
darienf 3:36de8b9e4b1a 314 formView.MessageInfo("File save complete");
darienf 3:36de8b9e4b1a 315 statusForm.Hide();
darienf 3:36de8b9e4b1a 316 }
darienf 3:36de8b9e4b1a 317
darienf 3:36de8b9e4b1a 318 private void OnLogData(object sender, PartialArrayIntAvailableEventArgs e)
darienf 3:36de8b9e4b1a 319 {
darienf 3:36de8b9e4b1a 320 switch(e.reportID)
darienf 3:36de8b9e4b1a 321 {
darienf 3:36de8b9e4b1a 322 case PartialArrayIntAvailableEventArgs.PACKET_BMP280_PRESSURE:
darienf 3:36de8b9e4b1a 323 if (pressureLog != null && pressureLog.Enable)
darienf 3:36de8b9e4b1a 324 ProcessPressure(e.array1);
darienf 3:36de8b9e4b1a 325 break;
darienf 3:36de8b9e4b1a 326 case PartialArrayIntAvailableEventArgs.PACKET_MAX31725_TEMP1:
darienf 3:36de8b9e4b1a 327 if (temperatureLog1 != null && temperatureLog1.Enable)
darienf 3:36de8b9e4b1a 328 ProcessTemperature1(e.array1);
darienf 3:36de8b9e4b1a 329 break;
darienf 3:36de8b9e4b1a 330 case PartialArrayIntAvailableEventArgs.PACKET_MAX31725_TEMP2:
darienf 3:36de8b9e4b1a 331 if (temperatureLog2 != null && temperatureLog2.Enable)
darienf 3:36de8b9e4b1a 332 ProcessTemperature2(e.array1);
darienf 3:36de8b9e4b1a 333 break;
darienf 3:36de8b9e4b1a 334
darienf 3:36de8b9e4b1a 335 case PartialArrayIntAvailableEventArgs.PACKET_MAX30001_ECG:
darienf 3:36de8b9e4b1a 336 if (ecgLog != null && ecgLog.Enable)
darienf 3:36de8b9e4b1a 337 ProcessEcg(e.array1);
darienf 3:36de8b9e4b1a 338 break;
darienf 3:36de8b9e4b1a 339 case PartialArrayIntAvailableEventArgs.PACKET_MAX30001_BIOZ:
darienf 3:36de8b9e4b1a 340 if (bioZLog != null && bioZLog.Enable)
darienf 3:36de8b9e4b1a 341 ProcessBioZ(e.array1);
darienf 3:36de8b9e4b1a 342 break;
darienf 3:36de8b9e4b1a 343 case PartialArrayIntAvailableEventArgs.PACKET_MAX30001_PACE:
darienf 3:36de8b9e4b1a 344 if (paceLog != null && paceLog.Enable)
darienf 3:36de8b9e4b1a 345 paceData = new PaceData(e.array1);
darienf 3:36de8b9e4b1a 346 break;
darienf 3:36de8b9e4b1a 347 case PartialArrayIntAvailableEventArgs.PACKET_MAX30001_RTOR:
darienf 3:36de8b9e4b1a 348 if (rToRLog != null && rToRLog.Enable)
darienf 3:36de8b9e4b1a 349 ProcessRToR(e.array1[0]);
darienf 3:36de8b9e4b1a 350 break;
darienf 3:36de8b9e4b1a 351
darienf 3:36de8b9e4b1a 352 case PartialArrayIntAvailableEventArgs.PACKET_LIS2DH:
darienf 3:36de8b9e4b1a 353 case PartialArrayIntAvailableEventArgs.PACKET_LSM6DS3_ACCEL:
darienf 3:36de8b9e4b1a 354 if (accelerometerLog != null && accelerometerLog.Enable)
darienf 3:36de8b9e4b1a 355 ProcessAccelerometer(e.array1, e.array2, e.array3);
darienf 3:36de8b9e4b1a 356 break;
darienf 3:36de8b9e4b1a 357 case PartialArrayIntAvailableEventArgs.PACKET_END_OF_STREAM:
darienf 3:36de8b9e4b1a 358 LogDownloadStop();
darienf 3:36de8b9e4b1a 359 break;
darienf 3:36de8b9e4b1a 360 }
darienf 3:36de8b9e4b1a 361
darienf 3:36de8b9e4b1a 362 if ((e.reportID & 0xF0) == PartialArrayIntAvailableEventArgs.PACKET_MAX30101)
darienf 3:36de8b9e4b1a 363 {
darienf 3:36de8b9e4b1a 364 if (opticalLog != null && opticalLog.Enable)
darienf 3:36de8b9e4b1a 365 ProcessOptical(e.array1, e.array2, e.array3);
darienf 3:36de8b9e4b1a 366
darienf 3:36de8b9e4b1a 367 }
darienf 3:36de8b9e4b1a 368 }
darienf 3:36de8b9e4b1a 369
darienf 3:36de8b9e4b1a 370 private void OnMissionWrite(object sender, EventArgs e)
darienf 3:36de8b9e4b1a 371 {
darienf 3:36de8b9e4b1a 372 if (view.Connected)
darienf 3:36de8b9e4b1a 373 {
darienf 3:36de8b9e4b1a 374 if (view.EnableAccelerometer || view.EnableBioz || view.EnableEcg || view.EnableOpticalHR
darienf 3:36de8b9e4b1a 375 || view.EnableOpticalMulti || view.EnableOpticalSpO2 || view.EnablePace
darienf 3:36de8b9e4b1a 376 || view.EnablePressure || view.EnableRToR || view.EnableTemperature1 || view.EnableTemperature2)
darienf 3:36de8b9e4b1a 377 {
darienf 3:36de8b9e4b1a 378 if (view.ValidateGuiElements())
darienf 3:36de8b9e4b1a 379 {
darienf 3:36de8b9e4b1a 380 statusForm = new StatusForm();
darienf 3:36de8b9e4b1a 381 statusForm.Message = "Please wait while your flash log is cleared and new parameters are written. Do not unplug the USB connection or press start button on the board until write is complete.";
darienf 3:36de8b9e4b1a 382 statusForm.Show();
darienf 3:36de8b9e4b1a 383 formView.MessageInfo("Writing in progress...");
darienf 3:36de8b9e4b1a 384 model.MissionErase();
darienf 3:36de8b9e4b1a 385 model.EraseWrittenSectors();
darienf 3:36de8b9e4b1a 386 model.MissionStartDefinition();
darienf 3:36de8b9e4b1a 387 view.ProcessGuiElements();
darienf 3:36de8b9e4b1a 388 //rpcClient.DataLogging.Test();
darienf 3:36de8b9e4b1a 389 model.MissionWrite();
darienf 3:36de8b9e4b1a 390 statusForm.Hide();
darienf 3:36de8b9e4b1a 391 formView.MessageInfo("Write parameters complete");
darienf 3:36de8b9e4b1a 392 }
darienf 3:36de8b9e4b1a 393 else
darienf 3:36de8b9e4b1a 394 formView.MessageInfo("Incorrect logging parameters");
darienf 3:36de8b9e4b1a 395 }
darienf 3:36de8b9e4b1a 396 else
darienf 3:36de8b9e4b1a 397 {
darienf 3:36de8b9e4b1a 398 formView.MessageInfo("No devices selected");
darienf 3:36de8b9e4b1a 399 }
darienf 3:36de8b9e4b1a 400 }
darienf 3:36de8b9e4b1a 401 }
darienf 3:36de8b9e4b1a 402
darienf 3:36de8b9e4b1a 403 private void OnMissionRead(object sender, EventArgs e)
darienf 3:36de8b9e4b1a 404 {
darienf 3:36de8b9e4b1a 405 if (view.Connected)
darienf 3:36de8b9e4b1a 406 {
darienf 3:36de8b9e4b1a 407 missionRead();
darienf 3:36de8b9e4b1a 408 }
darienf 3:36de8b9e4b1a 409 }
darienf 3:36de8b9e4b1a 410
darienf 3:36de8b9e4b1a 411 private void OnMissionErase(object sender, EventArgs e)
darienf 3:36de8b9e4b1a 412 {
darienf 3:36de8b9e4b1a 413 if (view.Connected)
darienf 3:36de8b9e4b1a 414 {
darienf 3:36de8b9e4b1a 415 model.MissionErase();
darienf 3:36de8b9e4b1a 416
darienf 3:36de8b9e4b1a 417 formView.MessageInfo("Erase parameters complete");
darienf 3:36de8b9e4b1a 418 }
darienf 3:36de8b9e4b1a 419 }
darienf 3:36de8b9e4b1a 420
darienf 3:36de8b9e4b1a 421 private void OnLogFileEnable(object sender, EnableEventArgs e)
darienf 3:36de8b9e4b1a 422 {
darienf 3:36de8b9e4b1a 423 // Not used
darienf 3:36de8b9e4b1a 424 }
darienf 3:36de8b9e4b1a 425
darienf 3:36de8b9e4b1a 426 private bool selectFile()
darienf 3:36de8b9e4b1a 427 {
darienf 3:36de8b9e4b1a 428 bool result = false;
darienf 3:36de8b9e4b1a 429
darienf 3:36de8b9e4b1a 430 Mission settings = model.MissionSettings;
darienf 3:36de8b9e4b1a 431
darienf 3:36de8b9e4b1a 432 if (settings.EnableEcg)
darienf 3:36de8b9e4b1a 433 result |= selectLogFileName(ecgLog, "hsp-log-ecg");
darienf 3:36de8b9e4b1a 434
darienf 3:36de8b9e4b1a 435 if (settings.EnablePace)
darienf 3:36de8b9e4b1a 436 result |= selectLogFileName(paceLog, "hsp-log-pace");
darienf 3:36de8b9e4b1a 437
darienf 3:36de8b9e4b1a 438 if (settings.EnableBioZ)
darienf 3:36de8b9e4b1a 439 result |= selectLogFileName(bioZLog, "hsp-log-bioz");
darienf 3:36de8b9e4b1a 440
darienf 3:36de8b9e4b1a 441 if (settings.EnableRToR)
darienf 3:36de8b9e4b1a 442 result |= selectLogFileName(rToRLog, "hsp-log-rtor");
darienf 3:36de8b9e4b1a 443
darienf 3:36de8b9e4b1a 444 if (settings.EnableOpticalHR || settings.EnableOpticalMulti || settings.EnableOpticalSpO2)
darienf 3:36de8b9e4b1a 445 result |= selectLogFileName(opticalLog, "hsp-log-optical");
darienf 3:36de8b9e4b1a 446
darienf 3:36de8b9e4b1a 447 if (settings.EnableTemperature1)
darienf 3:36de8b9e4b1a 448 result |= selectLogFileName(temperatureLog1, "hsp-log-temperature1");
darienf 3:36de8b9e4b1a 449
darienf 3:36de8b9e4b1a 450 if (settings.EnableTemperature2)
darienf 3:36de8b9e4b1a 451 result |= selectLogFileName(temperatureLog2, "hsp-log-temperature2");
darienf 3:36de8b9e4b1a 452
darienf 3:36de8b9e4b1a 453 if (settings.EnablePressure)
darienf 3:36de8b9e4b1a 454 result |= selectLogFileName(pressureLog, "hsp-log-barometer");
darienf 3:36de8b9e4b1a 455
darienf 3:36de8b9e4b1a 456 if (settings.EnableAccelerometer)
darienf 3:36de8b9e4b1a 457 result |= selectLogFileName(accelerometerLog, "hsp-log-accelerometer");
darienf 3:36de8b9e4b1a 458
darienf 3:36de8b9e4b1a 459 return result;
darienf 3:36de8b9e4b1a 460 }
darienf 3:36de8b9e4b1a 461
darienf 3:36de8b9e4b1a 462 bool selectLogFileName(IRawFileLogView log, string name)
darienf 3:36de8b9e4b1a 463 {
darienf 3:36de8b9e4b1a 464 bool result;
darienf 3:36de8b9e4b1a 465
darienf 3:36de8b9e4b1a 466 if (logFileDirectory != null)
darienf 3:36de8b9e4b1a 467 log.FileDirectory = logFileDirectory;
darienf 3:36de8b9e4b1a 468
darienf 3:36de8b9e4b1a 469 result = log.SelectCSVFile(name);
darienf 3:36de8b9e4b1a 470 log.Enable = result;
darienf 3:36de8b9e4b1a 471
darienf 3:36de8b9e4b1a 472 if (result)
darienf 3:36de8b9e4b1a 473 logFileDirectory = log.FileDirectory;
darienf 3:36de8b9e4b1a 474
darienf 3:36de8b9e4b1a 475 return result;
darienf 3:36de8b9e4b1a 476 }
darienf 3:36de8b9e4b1a 477
darienf 3:36de8b9e4b1a 478 private void missionRead()
darienf 3:36de8b9e4b1a 479 {
darienf 3:36de8b9e4b1a 480 model.MissionRead();
darienf 3:36de8b9e4b1a 481 view.UpdateGuiElements(model.MissionSettings);
darienf 3:36de8b9e4b1a 482 if (model.MissionSettings.Enable)
darienf 3:36de8b9e4b1a 483 formView.MessageInfo("Read complete");
darienf 3:36de8b9e4b1a 484 else
darienf 3:36de8b9e4b1a 485 formView.MessageInfo("No parameters defined");
darienf 3:36de8b9e4b1a 486 }
darienf 3:36de8b9e4b1a 487
darienf 3:36de8b9e4b1a 488 void ProcessBioZ(int[] rawData)
darienf 3:36de8b9e4b1a 489 {
darienf 3:36de8b9e4b1a 490 BioZFifo[] bioZFifo;
darienf 3:36de8b9e4b1a 491 double[] time = new double[rawData.Length];
darienf 3:36de8b9e4b1a 492 double sampleRate = ecgView.SampleRateBioZ;
darienf 3:36de8b9e4b1a 493
darienf 3:36de8b9e4b1a 494 bioZFifo = ConvertBioZ(rawData);
darienf 3:36de8b9e4b1a 495
darienf 3:36de8b9e4b1a 496 for (int i = 0; i < time.Length; i++ )
darienf 3:36de8b9e4b1a 497 {
darienf 3:36de8b9e4b1a 498 time[i] = bioZCount / (double)sampleRate;
darienf 3:36de8b9e4b1a 499 bioZCount++;
darienf 3:36de8b9e4b1a 500 }
darienf 3:36de8b9e4b1a 501
darienf 3:36de8b9e4b1a 502 bioZLog.DisplayBioZ(time, bioZFifo);
darienf 3:36de8b9e4b1a 503 }
darienf 3:36de8b9e4b1a 504
darienf 3:36de8b9e4b1a 505 public BioZFifo[] ConvertBioZ(int[] data)
darienf 3:36de8b9e4b1a 506 {
darienf 3:36de8b9e4b1a 507 BioZFifo[] impedance = new BioZFifo[data.Length];
darienf 3:36de8b9e4b1a 508 //EcgView.ChartInfo chartInfo = BioZInfo();
darienf 3:36de8b9e4b1a 509 EcgView.ChartInfo chartInfo = ecgView.BioZInfo;
darienf 3:36de8b9e4b1a 510
darienf 3:36de8b9e4b1a 511 int dataShift;
darienf 3:36de8b9e4b1a 512
darienf 3:36de8b9e4b1a 513 for (int i = 0; i < data.Length; i++)
darienf 3:36de8b9e4b1a 514 {
darienf 3:36de8b9e4b1a 515 dataShift = data[i] >> chartInfo.Shift;
darienf 3:36de8b9e4b1a 516
darienf 3:36de8b9e4b1a 517 // Two's Complement Conversions
darienf 3:36de8b9e4b1a 518 if (dataShift > chartInfo.Threshold)
darienf 3:36de8b9e4b1a 519 {
darienf 3:36de8b9e4b1a 520 dataShift -= chartInfo.Offset;
darienf 3:36de8b9e4b1a 521 }
darienf 3:36de8b9e4b1a 522
darienf 3:36de8b9e4b1a 523 // 1.9734 = 1/2^19 * 1e-6
darienf 3:36de8b9e4b1a 524 impedance[i].Data = dataShift * 1.9073486328125 /
darienf 3:36de8b9e4b1a 525 (chartInfo.Gain * ((chartInfo.CurrentGenerator == 0) ? 1 : chartInfo.CurrentGenerator));
darienf 3:36de8b9e4b1a 526 impedance[i].Code = data[i];
darienf 3:36de8b9e4b1a 527 impedance[i].BioZData = dataShift;
darienf 3:36de8b9e4b1a 528 impedance[i].BTag = data[i] & 0x07;
darienf 3:36de8b9e4b1a 529 }
darienf 3:36de8b9e4b1a 530
darienf 3:36de8b9e4b1a 531 return impedance;
darienf 3:36de8b9e4b1a 532 }
darienf 3:36de8b9e4b1a 533
darienf 3:36de8b9e4b1a 534 public EcgView.ChartInfo BioZInfo()
darienf 3:36de8b9e4b1a 535 {
darienf 3:36de8b9e4b1a 536 EcgView.ChartInfo info = new EcgView.ChartInfo();
darienf 3:36de8b9e4b1a 537 int[] currentGen = new int[] {1, 8, 16, 32, 48, 64, 80, 96};
darienf 3:36de8b9e4b1a 538 int[] gain = new int[] {20, 40, 80, 160};
darienf 3:36de8b9e4b1a 539
darienf 3:36de8b9e4b1a 540 info.Shift = 4;
darienf 3:36de8b9e4b1a 541 info.Offset = 0x100000;
darienf 3:36de8b9e4b1a 542 info.Threshold = 0x100000;
darienf 3:36de8b9e4b1a 543 info.Gain = gain[model.MissionSettings.BioZArgs[10]];
darienf 3:36de8b9e4b1a 544 info.CurrentGenerator = currentGen[model.MissionSettings.BioZArgs[15]];
darienf 3:36de8b9e4b1a 545
darienf 3:36de8b9e4b1a 546 return info;
darienf 3:36de8b9e4b1a 547 }
darienf 3:36de8b9e4b1a 548
darienf 3:36de8b9e4b1a 549 void ProcessEcg(int[] rawData)
darienf 3:36de8b9e4b1a 550 {
darienf 3:36de8b9e4b1a 551 EcgFifo[] ecgFifo;
darienf 3:36de8b9e4b1a 552 double[] ecgVoltage = new double[rawData.Length];
darienf 3:36de8b9e4b1a 553 double[] timeSecond = new double[rawData.Length];
darienf 3:36de8b9e4b1a 554 double ecgRate = ecgView.SampleRateEcg;
darienf 3:36de8b9e4b1a 555
darienf 3:36de8b9e4b1a 556 ecgFifo = ConvertEcg(rawData);
darienf 3:36de8b9e4b1a 557
darienf 3:36de8b9e4b1a 558 for (int i = 0; i < ecgFifo.Length; i++)
darienf 3:36de8b9e4b1a 559 {
darienf 3:36de8b9e4b1a 560 timeSecond[i] = count / ecgRate;
darienf 3:36de8b9e4b1a 561
darienf 3:36de8b9e4b1a 562 // Look for Pace Events
darienf 3:36de8b9e4b1a 563 if (paceLog.Enable)
darienf 3:36de8b9e4b1a 564 {
darienf 3:36de8b9e4b1a 565 //for (int j = 0; j < ecgFifo.Length; j++)
darienf 3:36de8b9e4b1a 566 //{
darienf 3:36de8b9e4b1a 567 if (ecgFifo[i].PTag != 7)
darienf 3:36de8b9e4b1a 568 {
darienf 3:36de8b9e4b1a 569 PaceData.PaceRegister paceRegister = paceData.PaceGroup(ecgFifo[i].PTag);
darienf 3:36de8b9e4b1a 570 List<double> timeMillsecondPace = new List<double>();
darienf 3:36de8b9e4b1a 571 List<PaceData.PaceEdge> paceEdges = new List<PaceData.PaceEdge>();
darienf 3:36de8b9e4b1a 572
darienf 3:36de8b9e4b1a 573 for (int k = 0; k < 6; k++)
darienf 3:36de8b9e4b1a 574 {
darienf 3:36de8b9e4b1a 575 PaceData.PaceEdge edge = paceRegister.Edge[k];
darienf 3:36de8b9e4b1a 576
darienf 3:36de8b9e4b1a 577 timeMillsecondPace.Add(count / ecgRate + ConvertPace(edge.Data));
darienf 3:36de8b9e4b1a 578 paceEdges.Add(edge);
darienf 3:36de8b9e4b1a 579
darienf 3:36de8b9e4b1a 580 if (edge.Last == true)
darienf 3:36de8b9e4b1a 581 break;
darienf 3:36de8b9e4b1a 582 }
darienf 3:36de8b9e4b1a 583
darienf 3:36de8b9e4b1a 584 paceLog.DisplayPace(timeMillsecondPace.ToArray(), paceEdges.ToArray());
darienf 3:36de8b9e4b1a 585 System.Diagnostics.Debug.Print("ECG PTag = " + ecgFifo[i].PTag);
darienf 3:36de8b9e4b1a 586 }
darienf 3:36de8b9e4b1a 587 //}
darienf 3:36de8b9e4b1a 588 }
darienf 3:36de8b9e4b1a 589
darienf 3:36de8b9e4b1a 590 count++;
darienf 3:36de8b9e4b1a 591 }
darienf 3:36de8b9e4b1a 592
darienf 3:36de8b9e4b1a 593 ecgLog.DisplayEcg(timeSecond, ecgFifo);
darienf 3:36de8b9e4b1a 594
darienf 3:36de8b9e4b1a 595 }
darienf 3:36de8b9e4b1a 596
darienf 3:36de8b9e4b1a 597 public EcgFifo[] ConvertEcg(int[] data)
darienf 3:36de8b9e4b1a 598 {
darienf 3:36de8b9e4b1a 599 EcgFifo[] voltage = new EcgFifo[data.Length];
darienf 3:36de8b9e4b1a 600 //EcgView.ChartInfo chartInfo = EcgInfo();
darienf 3:36de8b9e4b1a 601 EcgView.ChartInfo chartInfo = ecgView.EcgInfo;
darienf 3:36de8b9e4b1a 602
darienf 3:36de8b9e4b1a 603 int dataShift;
darienf 3:36de8b9e4b1a 604
darienf 3:36de8b9e4b1a 605 for (int i = 0; i < data.Length; i++)
darienf 3:36de8b9e4b1a 606 {
darienf 3:36de8b9e4b1a 607 dataShift = data[i] >> chartInfo.Shift;
darienf 3:36de8b9e4b1a 608
darienf 3:36de8b9e4b1a 609 // Two's Complement Conversions
darienf 3:36de8b9e4b1a 610 if (dataShift > chartInfo.Threshold)
darienf 3:36de8b9e4b1a 611 {
darienf 3:36de8b9e4b1a 612 dataShift -= chartInfo.Offset;
darienf 3:36de8b9e4b1a 613 }
darienf 3:36de8b9e4b1a 614
darienf 3:36de8b9e4b1a 615 voltage[i].Data = 1000 * 7.62939453125e-6 * dataShift / chartInfo.Gain;
darienf 3:36de8b9e4b1a 616 voltage[i].EcgData = dataShift;
darienf 3:36de8b9e4b1a 617 voltage[i].Code = data[i];
darienf 3:36de8b9e4b1a 618 voltage[i].PTag = data[i] & 0x07;
darienf 3:36de8b9e4b1a 619 voltage[i].ETag = (data[i] >> 3) & 0x07;
darienf 3:36de8b9e4b1a 620 }
darienf 3:36de8b9e4b1a 621
darienf 3:36de8b9e4b1a 622 return voltage;
darienf 3:36de8b9e4b1a 623 }
darienf 3:36de8b9e4b1a 624
darienf 3:36de8b9e4b1a 625 public EcgView.ChartInfo EcgInfo()
darienf 3:36de8b9e4b1a 626 {
darienf 3:36de8b9e4b1a 627 EcgView.ChartInfo info = new EcgView.ChartInfo();
darienf 3:36de8b9e4b1a 628 int[] gain = new int[] {20, 40, 80, 160};
darienf 3:36de8b9e4b1a 629
darienf 3:36de8b9e4b1a 630 info.Shift = 6;
darienf 3:36de8b9e4b1a 631 info.Threshold = 0x1ffff;
darienf 3:36de8b9e4b1a 632 info.Offset = 0x40000;
darienf 3:36de8b9e4b1a 633
darienf 3:36de8b9e4b1a 634 info.Gain = gain[model.MissionSettings.EcgArgs[10]];
darienf 3:36de8b9e4b1a 635
darienf 3:36de8b9e4b1a 636 return info;
darienf 3:36de8b9e4b1a 637 }
darienf 3:36de8b9e4b1a 638
darienf 3:36de8b9e4b1a 639 public double ConvertRToR(int data)
darienf 3:36de8b9e4b1a 640 {
darienf 3:36de8b9e4b1a 641 return ecgView.TimeResolution * 1000 * data * 512;
darienf 3:36de8b9e4b1a 642 }
darienf 3:36de8b9e4b1a 643
darienf 3:36de8b9e4b1a 644 public double ConvertPace(int data)
darienf 3:36de8b9e4b1a 645 {
darienf 3:36de8b9e4b1a 646 return data * ecgView.TimeResolution;
darienf 3:36de8b9e4b1a 647 }
darienf 3:36de8b9e4b1a 648
darienf 3:36de8b9e4b1a 649 public string PaceRegisterGroupToString(PaceData.PaceRegister paceRegister)
darienf 3:36de8b9e4b1a 650 {
darienf 3:36de8b9e4b1a 651 StringBuilder paceRegisterLogBuilder = new StringBuilder();
darienf 3:36de8b9e4b1a 652 for (int j = 0; j < 6; j++)
darienf 3:36de8b9e4b1a 653 {
darienf 3:36de8b9e4b1a 654 paceRegisterLogBuilder.Append(paceRegister.Edge[j].Data / (2 * ecgView.MasterClockFrequency));
darienf 3:36de8b9e4b1a 655 paceRegisterLogBuilder.Append(", ");
darienf 3:36de8b9e4b1a 656 paceRegisterLogBuilder.Append(paceRegister.Edge[j].Polarity ? 'R' : 'F');
darienf 3:36de8b9e4b1a 657 paceRegisterLogBuilder.Append(", ");
darienf 3:36de8b9e4b1a 658 paceRegisterLogBuilder.Append(paceRegister.Edge[j].Last ? 'Y' : 'N');
darienf 3:36de8b9e4b1a 659 paceRegisterLogBuilder.Append(", ");
darienf 3:36de8b9e4b1a 660 }
darienf 3:36de8b9e4b1a 661
darienf 3:36de8b9e4b1a 662 return paceRegisterLogBuilder.ToString();
darienf 3:36de8b9e4b1a 663 }
darienf 3:36de8b9e4b1a 664
darienf 3:36de8b9e4b1a 665 void ProcessRToR(int data)
darienf 3:36de8b9e4b1a 666 {
darienf 3:36de8b9e4b1a 667 if (rToRCalculator != null)
darienf 3:36de8b9e4b1a 668 {
darienf 3:36de8b9e4b1a 669 if (rToRFirst)
darienf 3:36de8b9e4b1a 670 {
darienf 3:36de8b9e4b1a 671 rToRLog.DisplayRToR(data, rToRCalculator.Corrected(data, true) / 1000);
darienf 3:36de8b9e4b1a 672 rToRFirst = false;
darienf 3:36de8b9e4b1a 673 }
darienf 3:36de8b9e4b1a 674 else
darienf 3:36de8b9e4b1a 675 rToRLog.DisplayRToR(data, rToRCalculator.Corrected(data, false) / 1000);
darienf 3:36de8b9e4b1a 676 }
darienf 3:36de8b9e4b1a 677 else
darienf 3:36de8b9e4b1a 678 {
darienf 3:36de8b9e4b1a 679 rToRLog.DisplayRToR(data, 0);
darienf 3:36de8b9e4b1a 680 }
darienf 3:36de8b9e4b1a 681 }
darienf 3:36de8b9e4b1a 682
darienf 3:36de8b9e4b1a 683 public void ProcessOptical(int[] red, int[] ir, int[] green)
darienf 3:36de8b9e4b1a 684 {
darienf 3:36de8b9e4b1a 685 int sampleRate = opticalView.OpticalSampleRate;
darienf 3:36de8b9e4b1a 686 double[] time = new double[red.Length];
darienf 3:36de8b9e4b1a 687
darienf 3:36de8b9e4b1a 688 for (int i = 0; i < time.Length; i++ )
darienf 3:36de8b9e4b1a 689 {
darienf 3:36de8b9e4b1a 690 time[i] = ppgCount / (double)sampleRate;
darienf 3:36de8b9e4b1a 691 ppgCount++;
darienf 3:36de8b9e4b1a 692 }
darienf 3:36de8b9e4b1a 693
darienf 3:36de8b9e4b1a 694 opticalLog.DisplayPpg(time, new int[][] { red, ir, green });
darienf 3:36de8b9e4b1a 695 }
darienf 3:36de8b9e4b1a 696
darienf 3:36de8b9e4b1a 697 public void ProcessAccelerometer(int[] x, int[] y, int[] z)
darienf 3:36de8b9e4b1a 698 {
darienf 3:36de8b9e4b1a 699 int sampleRate = view.AccelSampleRate;
darienf 3:36de8b9e4b1a 700 double[] time = new double[x.Length];
darienf 3:36de8b9e4b1a 701
darienf 3:36de8b9e4b1a 702 for (int i = 0; i < time.Length; i++)
darienf 3:36de8b9e4b1a 703 {
darienf 3:36de8b9e4b1a 704 time[i] = accelCount / (double)sampleRate;
darienf 3:36de8b9e4b1a 705 accelCount++;
darienf 3:36de8b9e4b1a 706 }
darienf 3:36de8b9e4b1a 707
darienf 3:36de8b9e4b1a 708 accelerometerLog.DisplayXYZ(time, new int[][] { x, y, z });
darienf 3:36de8b9e4b1a 709 }
darienf 3:36de8b9e4b1a 710 }
darienf 3:36de8b9e4b1a 711 }