public Double[] StartSingleReadingWindow(double time, string output_fmt = "OD")
        {
            DaqBoard = new MccDaq.MccBoard(0);

            MccDaq.ErrorInfo ULStat;
            int   FirstPoint, NumChans = HighChan - LowChan + 1, CurIndex, CurCount;
            short Status;

            NumPoints = (int)(time) * Rate * NumChans;
            MemHandle = MccDaq.MccService.WinBufAllocEx(10 * NumPoints);

            Thread.Sleep(100);
            MccDaq.ScanOptions Options = MccDaq.ScanOptions.ConvertData;
            ULStat = DaqBoard.AInScan(LowChan, HighChan, NumPoints, ref Rate,
                                      MccDaq.Range.Bip10Volts, MemHandle, Options);
            DaqBoard.GetStatus(out Status, out CurCount,
                               out CurIndex, MccDaq.FunctionType.AiFunction);
            FirstPoint = CurIndex;

            // recently collected data
            int N = FirstPoint + NumChans;

            ushort[] addata = new ushort[N];
            MccDaq.MccService.WinBufToArray(MemHandle, addata, 0, N);

            List <float> channel_data = new List <float>();

            for (int i = 0; i <= HighChan; ++i)
            {
                //sum = 0;
                channel_data.RemoveRange(0, channel_data.Count);
                for (int j = i; j < N; j += NumChans)
                {
                    //sum += addata[j];
                    channel_data.Add(addata[j]);
                }
                // take median voltage value
                channel_data.Sort();
                ADData[i] = channel_data[(Int32)(channel_data.Count / 2)];
                // convert from int to double precision voltage value
                ADData[i] = (ADData[i] - 32768) / (float)3276.8;
            }

            DaqBoard.StopBackground(MccDaq.FunctionType.AiFunction);
            MccDaq.MccService.WinBufFreeEx(MemHandle);
            if (output_fmt == "OD")
            {
                return(convertADtoOD(ADData));
            }
            else
            {
                return(ADData);
            }
        }
        public void startContinuousRead()
        {
            //  per channel sampling rate ((samples per second) per channel)
            MccDaq.ScanOptions Options = MccDaq.ScanOptions.Background
                                         | MccDaq.ScanOptions.Continuous;

            //  collect data in background continuously
            DaqBoard.AInScan(LowChan, HighChan, NumPoints,
                             ref Rate, MccDaq.Range.Bip10Volts, MemHandle, Options);
            tmrContinuousRead.Start();
        }