#!/usr/bin/env python3
"""
A script that streams N samples using streamtonowhered.
"""
import acq400_hapi
import argparse
import time
import datetime
import threading
import os
[docs]def update_states(uuts, states):
for index, uut in enumerate(uuts):
states[index] = (uut.s0.CONTINUOUS_STATE)
return states
ST_ARM = 1
ST_RUN = 2
[docs]def wait_arm_or_run(uuts, states):
wait_trigger = True
while not all(elem == 'CONTINUOUS:STATE ARM' for elem in states):
states = update_states(uuts, states)
if all(elem == 'CONTINUOUS:STATE RUN' for elem in states):
wait_trigger = False
break
if wait_trigger:
return ST_ARM
else:
return ST_RUN
[docs]def mt_action(uuts, fun, arg):
threads = []
for uut in uuts:
t = threading.Thread(target=fun, args=(uut, arg))
threads.append(t)
t.start()
for t in threads:
t.join()
[docs]def init_action(uut, args):
uut.s0.streamtonowhered = 'stop'
if args.shot:
uut.s1.shot = args.shot
uut.s1.SIG_sample_count_RESET = '1'
uut.s1.SIG_sample_count_RESET = '0'
[docs]def stream_start(uut, args):
uut.s0.streamtonowhered = 'start'
[docs]def stream_stop(uut, args):
uut.s0.streamtonowhered = 'stop'
[docs]def main(args):
uuts = [ acq400_hapi.Acq400(u) for u in args.uuts ]
mt_action(uuts, init_action, args)
states = [ u.s0.CONTINUOUS_STATE for u in uuts ]
print("Arming systems now - please wait. Do not trigger yet.")
mt_action(reversed(uuts[1:]), stream_start, args)
st = wait_arm_or_run(uuts[1:], states[1:])
if st==ST_ARM:
pass
else:
print("Didn't see wait for trigger, maybe not start at zero")
uuts[0].s0.streamtonowhered = 'start'
st = wait_arm_or_run(uuts, states)
if st==ST_ARM:
uuts[0].enable_trigger()
print("All UUTs are armed and ready for trigger.")
else:
pass
# Included as a comment below is an example of how this
# script was tested. If the user wishes to automate
# a test that involves this script then a signal generator
# may be triggered like so:
# os.system("echo 'TRIG' | nc 10.12.196.174 5025")
# acq400_hapi.Agilent33210A("10.12.196.174").trigger()
while not all(elem == 'CONTINUOUS:STATE RUN' for elem in states):
states = update_states(uuts, states)
continue
streamed_samples = 0
npoll = 0
time.sleep(1)
while streamed_samples <= args.samples or npoll < 2:
print("Streamed {} of {} samples".format(streamed_samples, args.samples))
streamed_samples = int(uuts[0].s1.sample_count)
time.sleep(1)
npoll += 1
print("\nStream finished.")
mt_action(uuts, stream_stop, args)
[docs]def get_parser():
parser = argparse.ArgumentParser(description='Start stream to nowhere for x samples')
parser.add_argument('--shot', default=None, type=int, help="set shot number")
parser.add_argument('--samples', default=100000, type=int,
help='The number of samples to stream. Not exact.')
parser.add_argument('uuts', nargs='+', help="uuts")
return parser
if __name__ == '__main__':
main(get_parser().parse_args())