adc support async capture
This commit is contained in:
+14
-10
@@ -361,7 +361,7 @@ class ADC(gex.Unit):
|
|||||||
def capture_in_progress(self):
|
def capture_in_progress(self):
|
||||||
return self._stream_running or self._trig_buf is not None
|
return self._stream_running or self._trig_buf is not None
|
||||||
|
|
||||||
def capture(self, count, timeout=None):
|
def capture(self, count, timeout=None, async=False, lst=None):
|
||||||
"""
|
"""
|
||||||
Start a block capture.
|
Start a block capture.
|
||||||
This is similar to a forced trigger, but has custom size and doesn't include any pre-trigger.
|
This is similar to a forced trigger, but has custom size and doesn't include any pre-trigger.
|
||||||
@@ -384,7 +384,7 @@ class ADC(gex.Unit):
|
|||||||
self._bcap_done = False
|
self._bcap_done = False
|
||||||
self._stream_running = True # we use this flag to block any concurrent access
|
self._stream_running = True # we use this flag to block any concurrent access
|
||||||
|
|
||||||
def lst(frame):
|
def _lst(frame):
|
||||||
pp = gex.PayloadParser(frame.data)
|
pp = gex.PayloadParser(frame.data)
|
||||||
|
|
||||||
if frame.type == EVT_CAPT_MORE or len(frame.data) != 0:
|
if frame.type == EVT_CAPT_MORE or len(frame.data) != 0:
|
||||||
@@ -400,22 +400,26 @@ class ADC(gex.Unit):
|
|||||||
|
|
||||||
if frame.type == EVT_CAPT_DONE:
|
if frame.type == EVT_CAPT_DONE:
|
||||||
self._bcap_done = True
|
self._bcap_done = True
|
||||||
|
if async:
|
||||||
|
lst(self._parse_buffer(buffer))
|
||||||
|
self._stream_running = False
|
||||||
return TF.CLOSE
|
return TF.CLOSE
|
||||||
|
|
||||||
return TF.STAY
|
return TF.STAY
|
||||||
|
|
||||||
self._query_async(cmd=CMD_BLOCK_CAPTURE, pld=pb.close(), callback=lst)
|
self._query_async(cmd=CMD_BLOCK_CAPTURE, pld=pb.close(), callback=_lst)
|
||||||
|
|
||||||
# wait with a timeout
|
if not async:
|
||||||
self.client.transport.poll(timeout, lambda: self._bcap_done == True)
|
# wait with a timeout
|
||||||
|
self.client.transport.poll(timeout, lambda: self._bcap_done == True)
|
||||||
|
|
||||||
self._stream_running = False
|
self._stream_running = False
|
||||||
|
|
||||||
if not self._bcap_done:
|
if not self._bcap_done:
|
||||||
self.abort()
|
self.abort()
|
||||||
raise Exception("Capture not completed within timeout")
|
raise Exception("Capture not completed within timeout")
|
||||||
|
|
||||||
return self._parse_buffer(buffer)
|
return self._parse_buffer(buffer)
|
||||||
|
|
||||||
def on_stream(self, lst):
|
def on_stream(self, lst):
|
||||||
self._stream_listener = lst
|
self._stream_listener = lst
|
||||||
|
|||||||
Reference in New Issue
Block a user