diff --git a/amodem/framing.py b/amodem/framing.py index d66ad21..1b1027c 100644 --- a/amodem/framing.py +++ b/amodem/framing.py @@ -115,8 +115,7 @@ def _to_bytes(bits): yield [converter.to_byte[chunk]] -@chain_wrapper -def decode(bits, framer=None): +def decode_frames(bits, framer=None): framer = framer or Framer() for frame in framer.decode(_to_bytes(bits)): - yield frame + yield bytes(frame) diff --git a/amodem/recv.py b/amodem/recv.py index 8b4648c..a6ae5a1 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -163,11 +163,9 @@ class Receiver(object): bitstream = self._demodulate(sampler, symbols) bitstream = itertools.chain.from_iterable(bitstream) - data = framing.decode(bitstream) - chunks = common.iterate(data, size=16, truncate=False, func=bytearray) - for chunk in chunks: - output.write(bytes(chunk)) - self.output_size += len(chunk) + for frame in framing.decode_frames(bitstream): + output.write(frame) + self.output_size += len(frame) def report(self): if self.stats: diff --git a/tests/test_framing.py b/tests/test_framing.py index 2de6f9f..103f67b 100644 --- a/tests/test_framing.py +++ b/tests/test_framing.py @@ -31,22 +31,22 @@ def test_framer(data): def test_main(data): encoded = framing.encode(data) - decoded = framing.decode(encoded) - assert bytearray(decoded) == data + decoded = framing.decode_frames(encoded) + assert concat(decoded) == data def test_fail(): encoded = list(framing.encode('')) encoded[-1] = not encoded[-1] with pytest.raises(ValueError): - list(framing.decode(encoded)) + concat(framing.decode_frames(encoded)) def test_missing(): f = framing.Framer() with pytest.raises(ValueError): - list(f.decode(b'')) + concat(f.decode(b'')) with pytest.raises(ValueError): - list(f.decode(b'\x01')) + concat(f.decode(b'\x01')) with pytest.raises(ValueError): - list(f.decode(b'\xff')) + concat(f.decode(b'\xff'))