adc support async capture

master
Ondřej Hruška 7 years ago
parent 3a5ac05d9d
commit 47e1d5b14a
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 10
      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,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)

Loading…
Cancel
Save