From 815838eab709b7bf5951685ba541953aa1cedb53 Mon Sep 17 00:00:00 2001
From: wendtalexander <wendtalexander@protonmail.com>
Date: Wed, 2 Oct 2024 08:09:45 +0200
Subject: [PATCH] [dataio] adding class for buffer

---
 pyrelacs/dataio/buffer.py | 68 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 67 insertions(+), 1 deletion(-)

diff --git a/pyrelacs/dataio/buffer.py b/pyrelacs/dataio/buffer.py
index 157105e..fc7e3f5 100644
--- a/pyrelacs/dataio/buffer.py
+++ b/pyrelacs/dataio/buffer.py
@@ -1,8 +1,17 @@
+import time
+import faulthandler
 from collections import deque
 
+from pyqtgraph import transformToArray
+import uldaq
+import numpy as np
+from IPython import embed
+import matplotlib.pyplot as plt
+
 from pyrelacs.util.logging import config_logging
 
 log = config_logging()
+faulthandler.enable()
 
 
 class DataBuffer:
@@ -10,6 +19,63 @@ class DataBuffer:
         self.channels = channels
         self.samples = samples
 
-    def create_buffer(self):
+    def read_analog_continously(
+        self,
+        device: uldaq.DaqDevice,
+        samplerate: float = 40_000.0,
+    ):
+        data_array = []
+
         max_len_buffer = self.channels * self.samples
         self.buffer = deque(maxlen=max_len_buffer)
+
+        samples_per_channel = 40_000
+        self.device = device
+        self.ai_device = self.device.get_ai_device()
+
+        data_analog_input = uldaq.create_float_buffer(
+            self.channels, samples_per_channel
+        )
+
+        er = self.ai_device.a_in_scan(
+            0,
+            1,
+            uldaq.AiInputMode.SINGLE_ENDED,
+            uldaq.Range.BIP10VOLTS,
+            samples_per_channel,
+            samplerate,
+            uldaq.ScanOption.CONTINUOUS,
+            uldaq.AInScanFlag.DEFAULT,
+            data=data_analog_input,
+        )
+
+        daq_status = uldaq.ScanStatus.IDLE
+        while daq_status == uldaq.ScanStatus.IDLE:
+            daq_status = self.ai_device.get_scan_status()[0]
+            prev_count = 0
+            prev_index = 0
+            while daq_status != uldaq.ScanStatus.IDLE:
+                daq_status, transfer_status = self.ai_device.get_scan_status()
+
+                # The index into the data buffer immediately following the last sample transferred.
+                curren_index = transfer_status.current_index
+                # total samples since start of the scan
+                total_samples = transfer_status.current_total_count
+                # The number of samples per channel transferred since the scan started
+                channel_samples = transfer_status.current_scan_count
+
+                self.ai_device.scan_stop()
+
+
+if __name__ == "__main__":
+    devices = uldaq.get_daq_device_inventory(uldaq.InterfaceType.USB)
+    log.debug(f"Found daq devices {len(devices)}, connecting to the first one")
+    try:
+        daq_device = uldaq.DaqDevice(devices[0])
+    except uldaq.ul_exception.ULException as e:
+        log.error("Did not found daq devices, please connect one")
+        raise e
+    daq_device.connect()
+
+    buf = DataBuffer(channels=2, samples=100_000)
+    buf.read_analog_continously(daq_device)