adc support async capture

master
Ondřej Hruška 7 years ago
parent 3a5ac05d9d
commit 47e1d5b14a
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 24
      units/ADC.py

@ -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

Loading…
Cancel
Save