adc support async capture

This commit is contained in:
2018-06-22 22:08:04 +02:00
parent 3a5ac05d9d
commit 47e1d5b14a
+7 -3
View File
@@ -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,12 +400,16 @@ 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)
if not async:
# wait with a timeout # wait with a timeout
self.client.transport.poll(timeout, lambda: self._bcap_done == True) self.client.transport.poll(timeout, lambda: self._bcap_done == True)