Darien Figueroa / Mbed OS Final_Program

Dependencies:   USBDevice

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DataLogModel.cs Source File

DataLogModel.cs

00001 /*******************************************************************************
00002 * Copyright (C) 2016 Maxim Integrated Products, Inc., All rights Reserved.
00003 * 
00004 * This software is protected by copyright laws of the United States and
00005 * of foreign countries. This material may also be protected by patent laws
00006 * and technology transfer regulations of the United States and of foreign
00007 * countries. This software is furnished under a license agreement and/or a
00008 * nondisclosure agreement and may only be used or reproduced in accordance
00009 * with the terms of those agreements. Dissemination of this information to
00010 * any party or parties not specified in the license agreement and/or
00011 * nondisclosure agreement is expressly prohibited.
00012 *
00013 * The above copyright notice and this permission notice shall be included
00014 * in all copies or substantial portions of the Software.
00015 *
00016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00017 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00018 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00019 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
00020 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
00021 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
00022 * OTHER DEALINGS IN THE SOFTWARE.
00023 *
00024 * Except as contained in this notice, the name of Maxim Integrated
00025 * Products, Inc. shall not be used except as stated in the Maxim Integrated
00026 * Products, Inc. Branding Policy.
00027 *
00028 * The mere transfer of this software does not imply any licenses
00029 * of trade secrets, proprietary technology, copyrights, patents,
00030 * trademarks, maskwork rights, or any other form of intellectual
00031 * property whatsoever. Maxim Integrated Products, Inc. retains all
00032 * ownership rights.
00033 *******************************************************************************
00034 */
00035 
00036 using System;
00037 using System.Collections.Generic;
00038 using System.Linq;
00039 using System.Text;
00040 
00041 using RPCSupport;
00042 using RPCSupport.Streaming;
00043 using RPCSupport.DataLogging;
00044 
00045 namespace HealthSensorPlatform.Model
00046 {
00047     class DataLogModel : IDataLogModel
00048     {
00049         RPCClient rpcClient;
00050         StreamDataLog streamDataLog;
00051         EventHandler<PartialArrayIntAvailableEventArgs> onStreamDataHandler; 
00052 
00053         Mission missionSettings;
00054 
00055         public DataLogModel(RPCClient rpcClient)
00056         {
00057             this.rpcClient = rpcClient;
00058         }
00059 
00060         public Mission MissionSettings 
00061         { 
00062             get
00063             {
00064                 return missionSettings;
00065             }
00066         }
00067 
00068         public event EventHandler<EventArgs> LogStreamDone;
00069         public event EventHandler<PartialArrayIntAvailableEventArgs> LogData;
00070 
00071         public void Start()
00072         {
00073             onStreamDataHandler = new EventHandler<PartialArrayIntAvailableEventArgs>(OnStreamData);
00074             rpcClient.streaming.PartialArrayIntAvailable += onStreamDataHandler;
00075             streamDataLog = new StreamDataLog(rpcClient);
00076 
00077             streamDataLog.Start();
00078         }
00079 
00080         public void EraseWrittenSectors()
00081         {
00082             ((SerialWrapPipeline)rpcClient.Pipeline).ReadTimeout = 180000;
00083             rpcClient.DataLogging.EraseWrittenSectors();
00084             ((SerialWrapPipeline)rpcClient.Pipeline).ReadTimeout = 1000;
00085         }
00086 
00087         public void MissionStartDefinition()
00088         {
00089             rpcClient.DataLogging.MissionStartDefinition();
00090         }
00091 
00092         public void MissionWrite()
00093         {
00094             rpcClient.DataLogging.MissionWrite();
00095         }
00096 
00097         public void MissionErase()
00098         {
00099             rpcClient.DataLogging.EraseMission();
00100         }
00101 
00102         public void MissionRead()
00103         {
00104             rpcClient.DataLogging.MissionRead();
00105 
00106             missionSettings = new Mission();
00107             // pre cmd
00108             missionSettings.PreCommand = rpcClient.DataLogging.PreCommand.cmdString;
00109             // ecg
00110             missionSettings.EnableEcg = rpcClient.DataLogging.MAX30001_Ecg.IsExistsInDeviceMission();
00111             if (missionSettings.EnableEcg)
00112                 missionSettings.EcgArgs = rpcClient.DataLogging.MAX30001_Ecg.ToIntArray();
00113             // pace
00114             missionSettings.EnablePace = rpcClient.DataLogging.MAX30001_Pace.IsExistsInDeviceMission();
00115             if (missionSettings.EnablePace)
00116                 missionSettings.PaceArgs = rpcClient.DataLogging.MAX30001_Pace.ToIntArray();
00117             // bioz
00118             missionSettings.EnableBioZ = rpcClient.DataLogging.MAX30001_Bioz.IsExistsInDeviceMission();
00119             if (missionSettings.EnableBioZ)
00120                 missionSettings.BioZArgs = rpcClient.DataLogging.MAX30001_Bioz.ToIntArray();
00121             // RtoR
00122             missionSettings.EnableRToR = rpcClient.DataLogging.MAX30001_RtoR.IsExistsInDeviceMission();
00123             if (missionSettings.EnableRToR)
00124                 missionSettings.RToRArgs = rpcClient.DataLogging.MAX30001_RtoR.ToIntArray();
00125             // Rbias, FMSTR
00126             //missionSettings.EnableRBias = rpcClient.DataLogging.MAX30001_Rbias.IsExistsInDeviceMission();
00127             missionSettings.EnableRBias = missionSettings.EnableRBias | missionSettings.EnableEcg | missionSettings.EnableBioZ | missionSettings.EnableRToR | missionSettings.EnablePace;
00128             if (missionSettings.EnableRBias)
00129                 missionSettings.RBiasArgs = rpcClient.DataLogging.MAX30001_Rbias_Fmstr.ToIntArray();
00130             // SpO2
00131             missionSettings.EnableOpticalSpO2 = rpcClient.DataLogging.MAX30101_SpO2.IsExistsInDeviceMission();
00132             if (missionSettings.EnableOpticalSpO2)
00133                 missionSettings.SpO2HRModeArgs = rpcClient.DataLogging.MAX30101_SpO2.ToIntArray();
00134             // HR
00135             missionSettings.EnableOpticalHR = rpcClient.DataLogging.MAX30101_HR.IsExistsInDeviceMission();
00136             if (missionSettings.EnableOpticalHR)
00137                 missionSettings.HRModeArgs = rpcClient.DataLogging.MAX30101_HR.ToIntArray();
00138             // Multi
00139             missionSettings.EnableOpticalMulti = rpcClient.DataLogging.MAX30101_Multi.IsExistsInDeviceMission();
00140             if (missionSettings.EnableOpticalMulti)
00141                 missionSettings.MultiModeArgs = rpcClient.DataLogging.MAX30101_Multi.ToIntArray();
00142 
00143             // Temp1
00144             missionSettings.EnableTemperature1 = rpcClient.DataLogging.MAX31725_1.IsExistsInDeviceMission();
00145             if (missionSettings.EnableTemperature1)
00146                 missionSettings.Temperature1Parameters = rpcClient.DataLogging.MAX31725_1.ToIntArray();
00147             // Temp2
00148             missionSettings.EnableTemperature2 = rpcClient.DataLogging.MAX31725_2.IsExistsInDeviceMission();
00149             if (missionSettings.EnableTemperature2)
00150                 missionSettings.Temperature2Parameters = rpcClient.DataLogging.MAX31725_2.ToIntArray();
00151             // Accel
00152             missionSettings.EnableAccelerometer = rpcClient.DataLogging.LIS2DH.IsExistsInDeviceMission();
00153             if (missionSettings.EnableAccelerometer)
00154                 missionSettings.AccelerometerParameters = rpcClient.DataLogging.LIS2DH.ToIntArray();
00155             // Pressure
00156             missionSettings.EnablePressure = rpcClient.DataLogging.BMP280.IsExistsInDeviceMission();
00157             if (missionSettings.EnablePressure)
00158                 missionSettings.PressureParameters = rpcClient.DataLogging.BMP280.ToIntArray();
00159 
00160 
00161             // post cmd
00162             missionSettings.PostCommand = rpcClient.DataLogging.PostCommand.cmdString;
00163 
00164         }
00165 
00166         public string[] MissionString()
00167         {
00168             string[] missionStrings = rpcClient.DataLogging.MissionStrings();
00169 
00170             List<string> stringList = new List<string>(missionStrings);
00171 
00172             if (stringList[0] == "null")
00173                 stringList.RemoveAt(0);
00174 
00175             if (stringList.Count > 0 && stringList[stringList.Count - 1] == "null")
00176             {
00177                 stringList.RemoveAt(stringList.Count - 1);
00178             }
00179 
00180             return stringList.ToArray();
00181         }
00182 
00183         public void OnStreamData(object sender, PartialArrayIntAvailableEventArgs e)
00184         {
00185             if (e.reportID == PartialArrayIntAvailableEventArgs.PACKET_END_OF_STREAM)
00186             {
00187                 if (LogStreamDone != null)
00188                     LogStreamDone(this, e);
00189 
00190                 rpcClient.streaming.PartialArrayIntAvailable -= onStreamDataHandler;
00191 
00192             }
00193 
00194             if (LogData != null)
00195                 LogData(this, e);
00196         }
00197     }
00198 
00199     public class Mission
00200     {
00201         public string PreCommand;
00202         public bool EnableEcg;
00203         public int[] EcgArgs;
00204 
00205         public bool EnablePace;
00206         public int[] PaceArgs;
00207 
00208         public bool EnableBioZ;
00209         public int[] BioZArgs;
00210 
00211         public bool EnableRToR;
00212         public int[] RToRArgs;
00213 
00214         public bool EnableRBias;
00215         public int[] RBiasArgs;
00216 
00217         public bool EnableOpticalSpO2;
00218         public int[] SpO2HRModeArgs;
00219 
00220         public bool EnableOpticalHR;
00221         public int[] HRModeArgs;
00222 
00223         public bool EnableOpticalMulti;
00224         public int[] MultiModeArgs;
00225 
00226         public bool EnableTemperature1;
00227         public int[] Temperature1Parameters;
00228 
00229         public bool EnableTemperature2;
00230         public int[] Temperature2Parameters;
00231 
00232         public bool EnablePressure;
00233         public int[] PressureParameters;
00234 
00235         public bool EnableAccelerometer;
00236         public int[] AccelerometerParameters;
00237 
00238         public string PostCommand;
00239 
00240         public bool Enable
00241         {
00242             get
00243             {
00244                 return EnableEcg | EnablePace | EnableBioZ | EnableRToR | EnableRBias
00245                     | EnableOpticalSpO2 | EnableOpticalHR | EnableOpticalMulti
00246                     | EnableTemperature1 | EnableTemperature2 | EnablePressure | EnableAccelerometer; 
00247             }
00248         }
00249     }
00250 }