1
0
mirror of https://github.com/jonathanhogg/scopething synced 2025-07-14 03:02:09 +01:00

Fix breaks from changes in SerialStream initialisation; default to first matching USB device; return sample times from capture()

This commit is contained in:
Jonathan Hogg
2017-03-25 15:04:21 +00:00
parent 2bdcd23a14
commit 4391007007
2 changed files with 17 additions and 6 deletions

View File

@ -21,16 +21,16 @@ class Scope(vm.VirtualMachine):
@classmethod
async def connect(cls, device=None):
if device is None:
scope = cls(streams.SerialStream())
reader = writer = streams.SerialStream.stream_matching(0x0403, 0x6001)
elif os.path.exists(device):
scope = cls(streams.SerialStream(device=device))
reader = writer = streams.SerialStream(device=device)
elif ':' in device:
host, port = device.split(':', 1)
Log.info("Connecting to remote scope at {}:{}".format(host, port))
reader, writer = await asyncio.open_connection(host, int(port))
scope = cls(reader, writer)
else:
raise ValueError("Don't know what to do with '{}'".format(device))
scope = cls(reader, writer)
await scope.setup()
return scope
@ -166,7 +166,7 @@ class Scope(vm.VirtualMachine):
if code != 2:
break
address = int((await self.read_replies(1))[0], 16) // nsamples_multiplier
traces = {}
traces = {'t': [t*nsamples_multiplier*self.capture_clock_period for t in range(timestamp-nsamples*ticks, timestamp, ticks)]}
for dump_channel, channel in enumerate(sorted(channels)):
async with self.transaction():
await self.set_registers(SampleAddress=(address - nsamples) * nsamples_multiplier % buffer_width,
@ -300,7 +300,7 @@ import numpy as np
async def main():
global s, x, y, data
parser = argparse.ArgumentParser(description="scopething")
parser.add_argument('device', type=str, help="Device to connect to")
parser.add_argument('device', nargs='?', default=None, type=str, help="Device to connect to")
args = parser.parse_args()
s = await Scope.connect(args.device)
x = np.linspace(0, 2*np.pi, s.awg_wavetable_size, endpoint=False)
@ -315,8 +315,11 @@ def capture(*args, **kwargs):
def calibrate(*args, **kwargs):
return asyncio.get_event_loop().run_until_complete(s.calibrate(*args, **kwargs))
def generate(*args, **kwargs):
return asyncio.get_event_loop().run_until_complete(s.start_generator(*args, **kwargs))
if __name__ == '__main__':
import sys
logging.basicConfig(level=logging.DEBUG, stream=sys.stderr)
logging.basicConfig(level=logging.INFO, stream=sys.stderr)
asyncio.get_event_loop().run_until_complete(main())

View File

@ -3,6 +3,7 @@ import asyncio
import logging
import os
import serial
from serial.tools.list_ports import comports
Log = logging.getLogger('streams')
@ -10,9 +11,16 @@ Log = logging.getLogger('streams')
class SerialStream:
@classmethod
def stream_matching(cls, vid, pid, **kwargs):
for port in comports():
if port.vid == vid and port.pid == pid:
return SerialStream(port.device, **kwargs)
def __init__(self, device, loop=None, **kwargs):
self._device = device
self._connection = serial.Serial(self._device, timeout=0, write_timeout=0, **kwargs)
Log.debug("Opened SerialStream on {}".format(device))
self._loop = loop if loop is not None else asyncio.get_event_loop()
self._input_buffer = bytes()
self._output_buffer = bytes()