/// <summary> /// Writes a current biometricCluster to file. /// </summary> /// <param name="bc"></param> public void writeLogToFile(biometricCluster bc) { String lineToWrite = ""; //Console.WriteLine("write to file"); using (StreamWriter output = new StreamWriter((filePath), true)) { Int32 unixTimestamp = (Int32)(bc.currentTime.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; int rawGSRIndex = bc.receivedCluster.GetIndex("GSR", "RAW"); int calGSRIndex = bc.receivedCluster.GetIndex("GSR", "CAL"); int adcRawIndex = bc.receivedCluster.GetIndex("Internal ADC A13", "RAW"); int adcCalIndex = bc.receivedCluster.GetIndex("Internal ADC A13", "CAL"); //Console.WriteLine("making string"); lineToWrite = String.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", unixTimestamp, bc.currentTime.Hour, bc.currentTime.Minute, bc.currentTime.Second, bc.currentTime.Millisecond, bc.receivedCluster.GetData()[adcRawIndex], bc.receivedCluster.GetData()[adcCalIndex], bc.receivedCluster.GetData()[rawGSRIndex], bc.receivedCluster.GetData()[calGSRIndex]); //Console.WriteLine("actually writing to file"); output.WriteLine(lineToWrite); //Console.WriteLine("done"); } }
/// <summary> /// Blanket event handler for packets. Covers a number of events from Shimmer device. /// Includes code for marking connection status, notifications, and data packets. /// TODO: rework code to make cleaner. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void HandleEvent(object sender, EventArgs args) { CustomEventArgs eventArgs = (CustomEventArgs)args; int indicator = eventArgs.getIndicator(); switch (indicator) { case (int)Shimmer.ShimmerIdentifier.MSG_IDENTIFIER_STATE_CHANGE: //System.Diagnostics.Debug.Write(((Shimmer)sender).GetDeviceName() + " State = " + ((Shimmer)sender).GetStateString() + System.Environment.NewLine); int state = (int)eventArgs.getObject(); if (state == (int)Shimmer.SHIMMER_STATE_CONNECTED) { //labelConnectionState.Text = "Connected"; ChangeStatusLabel("Connected to " + ShimmerDevice.GetComPort() + ". Firmware Version: " + ShimmerDevice.GetFirmwareVersionFullName()); //ChangeStatusLabel("Connected"); //firstTimeTimer = new System.Windows.Forms.Timer(); //firstTimeTimer.Tick += new EventHandler(firstTimeCycleConnect); //firstTimeTimer.Interval = (int)(5000); //firstTimeTimer.Start(); } else if (state == (int)Shimmer.SHIMMER_STATE_CONNECTING) { //labelConnectionState.Text = "Connecting"; ChangeStatusLabel("Connecting"); } else if (state == (int)Shimmer.SHIMMER_STATE_NONE) { //labelConnectionState.Text = "Disconnected"; ChangeStatusLabel("Disconnected"); } else if (state == (int)Shimmer.SHIMMER_STATE_STREAMING) { //labelConnectionState.Text = "Streaming"; ChangeStatusLabel("Streaming"); if (firstTime) { } } break; case (int)Shimmer.ShimmerIdentifier.MSG_IDENTIFIER_DATA_PACKET: // this is essential to ensure the object is not a reference DateTime timestamp = DateTime.Now; ObjectCluster objectCluster = new ObjectCluster((ObjectCluster)eventArgs.getObject()); List <String> names = objectCluster.GetNames(); List <String> formats = objectCluster.GetFormats(); List <String> units = objectCluster.GetUnits(); List <Double> data = objectCluster.GetData(); //add element to list of biometricClusters biometricCluster bc = new biometricCluster(); bc.currentTime = timestamp; bc.receivedCluster = objectCluster; storedClusterData.Add(bc); //print log to file writeLogToFile(bc); Console.WriteLine("Current Timestamp: " + timestamp); int gsrRawIndex = objectCluster.GetIndex("GSR", "RAW"); int gsrCalIndex = objectCluster.GetIndex("GSR", "CAL"); int adcRawIndex = objectCluster.GetIndex("Internal ADC A13", "RAW"); int adcCalIndex = objectCluster.GetIndex("Internal ADC A13", "CAL"); for (int i = 0; i < names.Count; i++) { //Console.WriteLine(names[i]); } //Console.WriteLine("Current Raw GSR Readings: " + data[gsrRawIndex]); //Console.WriteLine("Current Calculated GSR Readings: " + data[gsrCalIndex]); //Console.WriteLine("Current Raw PPG Readings: " + data[adcRawIndex]); //Console.WriteLine("Current Calculated PPG Readings: " + data[adcCalIndex]); //Console.WriteLine(); break; case (int)Shimmer.ShimmerIdentifier.MSG_IDENTIFIER_NOTIFICATION_MESSAGE: //rework this as function? string message = (string)eventArgs.getObject(); System.Diagnostics.Debug.Write(((Shimmer)sender).GetDeviceName() + message + System.Environment.NewLine); //Message BOX int minorIdentifier = eventArgs.getMinorIndication(); if (minorIdentifier == (int)ShimmerSDBT.ShimmerSDBTMinorIdentifier.MSG_WARNING) { MessageBox.Show(message, ConnectionTest.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (minorIdentifier == (int)ShimmerSDBT.ShimmerSDBTMinorIdentifier.MSG_EXTRA_REMOVABLE_DEVICES_DETECTED) { MessageBox.Show(message, "Message"); FolderBrowserDialog fbd = new FolderBrowserDialog(); DialogResult result = fbd.ShowDialog(); ShimmerDevice.SetDrivePath(fbd.SelectedPath); } else if (minorIdentifier == (int)ShimmerSDBT.ShimmerSDBTMinorIdentifier.MSG_ERROR) { MessageBox.Show(message, ConnectionTest.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (message.Equals("Connection lost")) { MessageBox.Show("Connection with device lost while streaming", ConnectionTest.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { ChangeStatusLabel(message); } break; default: break; } }