/* This method is kind of a kludge, and needs to be fixed, * but the idea is to get all the data out of the device * before stopping */ private ArrayList StopReading() { dataChunk = new ArrayList(); rowData = new byte[4]; //This holds the bytes that indicate the number of rows in the sample byte[] responseTest = new byte[3]; bytes = stream.Read(rowData,0,rowData.Length); for(int i = 0; i < 3; i++) { responseTest[i] = rowData[i]; } string responseString = encoding.GetString(responseTest); if(responseString == "OK\n" || responseString == "ER\n") { Debug.Log("Empatica reading stopped"); dataChunk.Add(responseString); return dataChunk; } else { int numRows = System.BitConverter.ToInt32(rowData,0)/2; data = new byte[numRows * sizeof(float) * signalsEnabled]; stream.Read(data,0,data.Length); for(int i = 0; i < numRows; i++) { float[] sv = new float[signalsAvailable]; for(int j = 0; j < signalsEnabled; j++) { sv[j] = System.BitConverter.ToSingle(data,i * signalsEnabled * sizeof(float) + j * sizeof(float)); for(int k = signalsAvailable-signalsEnabled; k < signalsAvailable; k++) { sv[k] = 0; } } EmpaticaSample sample; if(markWaiting) { sample = new EmpaticaSample(DateTime.Now,sv[0],sv[1],sv[2],sv[3],sv[4],sv[5],sv[6],sv[7],sv[8],waitingMark); markWaiting = false; } else { sample = new EmpaticaSample(DateTime.Now,sv[0],sv[1],sv[2],sv[3],sv[4],sv[5],sv[6],sv[7],sv[8],""); } dataChunk.Add(sample); } return dataChunk; } }
private ArrayList ReadData() { rowData = new byte[4]; //This holds the bytes that indicate the number of rows in the sample bytes = stream.Read(rowData,0,rowData.Length); int numRows = System.BitConverter.ToInt32(rowData,0)/2; //The actual number of rows this number is twice as large as it should be for some arcane reason //Debug.Log("Found this numRows: " + numRows.ToString()); dataChunk = new ArrayList(numRows); data = new byte[numRows * sizeof(float) * signalsEnabled]; //Debug.Log("Data length: " + data.Length.ToString()); stream.Read(data,0,data.Length); for(int i = 0; i < numRows; i++) { float[] sv = new float[signalsAvailable]; for(int j = 0; j < signalsEnabled; j++) { sv[j] = System.BitConverter.ToSingle(data,i * signalsEnabled * sizeof(float) + j * sizeof(float)); for(int k = signalsAvailable-signalsEnabled; k < signalsAvailable; k++) { sv[k] = 0; } } EmpaticaSample sample; if(markWaiting) { sample = new EmpaticaSample(DateTime.Now,sv[0],sv[1],sv[2],sv[3],sv[4],sv[5],sv[6],sv[7],sv[8],waitingMark); markWaiting = false; } else { sample = new EmpaticaSample(DateTime.Now,sv[0],sv[1],sv[2],sv[3],sv[4],sv[5],sv[6],sv[7],sv[8],""); } dataChunk.Add(sample); //Debug.Log("i " + i.ToString() + " " + sample.ToString()); } return dataChunk; }