/* 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;
    }