diff --git a/ptb/shutter_protocol.py b/ptb/shutter_protocol.py index 8023b56..4fcb9ad 100644 --- a/ptb/shutter_protocol.py +++ b/ptb/shutter_protocol.py @@ -12,16 +12,15 @@ def do(self, cmd): logger.debug("do %s", cmd) self._writeline(cmd) - async def ask(self, cmd): + async def ask(self, cmd, n=None): self.do(cmd) - ret = await self._readline() + if n is None: + ret = await self._readline() + else: + ret = await self._read(n) logger.debug("ret %s", ret) return ret - async def read(self, n): - ret = await self._read(n) - return ret.decode() - async def version(self): """Return the hardware/firmware version. @@ -36,8 +35,7 @@ async def status(self): Returns: list(float): Temperatures on all channels """ - ret = (await self.ask(b"e")).strip() - assert len(ret) == 3 + ret = (await self.ask(b"e", 3)).strip() return tuple(bool(int(_)) for _ in ret) def clear(self): diff --git a/ptb/shutter_tcp.py b/ptb/shutter_tcp.py index ca9d75e..be5e287 100644 --- a/ptb/shutter_tcp.py +++ b/ptb/shutter_tcp.py @@ -4,7 +4,7 @@ class ShutterTCP(ShutterProtocol): - eol_write = b"\r" + eol_write = b"\r\n" eol_read = b"\r" def __init__(self, reader, writer): @@ -29,8 +29,9 @@ def _writeline(self, cmd): self._writer.write(cmd + self.eol_write) async def _readline(self): - r = await self._reader.readline() - assert r.endswith(self.eol_read) + r = b"" + while not r.endswith(self.eol_read): + r += await self._reader.read(1) return r[:-len(self.eol_read)] async def _read(self, n): diff --git a/test_shutter.py b/test_shutter.py index 83c87b2..87adcc8 100644 --- a/test_shutter.py +++ b/test_shutter.py @@ -8,16 +8,17 @@ async def test(dev): print(dev) - print(await dev.version()) print(await dev.status()) - print(await dev.passthrough(1, b"W")) + print(await dev.version()) + for i in b"TWXYZ": + print(i, await dev.passthrough(1, i)) def main(): - logging.basicConfig(level=logging.INFO) + logging.basicConfig(level=logging.DEBUG) loop = asyncio.get_event_loop() loop.set_debug(False) async def run(): - with await Synth.connect("buemi") as dev: + with await Shutter.connect("buemi") as dev: await test(dev) loop.run_until_complete(run())