import serial, time, subprocess
def _read(obj, samples, electrodes):
data = [[]] * electrodes
done = [False]*electrodes
while (False in done):
#line format is <electrode_number>:<value>
line = obj.readline().rstrip()
if type(line) == bytes:
line = line.decode("ascii")
try:
number, value = [int(field) for field in line.split(":")]
except ValueError:
#discard the line if we don't get two ints
pass
else:
if (not done[number]):
data[number].append(value)
for d in data:
#done when length is bigger or equal to number of samples
done[number] |= (len(d) >= samples)
return data
def read_serial(samples, electrodes):
s = serial.Serial(port="/dev/ttyACM0")
data = _read(s, samples, electrodes)
s.close()
return data
def read_screenlog(samples, electrodes):
subprocess.call(["screen", "-dm", "-L", "/dev/ttyACM0"])
time.sleep(1)
f = open("screenlog.0", "r")
data = _read(f, samples, electrodes)
subprocess.call(["killall", "screen"])
subprocess.call(["rm", "screenlog.0"])
return data