diff options
author | Andrew Leech <andrew.leech@planetinnovation.com.au> | 2022-09-26 11:02:31 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2024-09-19 18:00:44 +1000 |
commit | 7e14680a83525bf0822ef9cab899a5625496d662 (patch) | |
tree | e5176548c07d8973956b48e1f3a462c36ed1e532 /tests/micropython/ringio_async.py | |
parent | 6c73573b34c3fbd3d4da8d56767db03a8e5dd540 (diff) |
py/objringio: Add micropython.RingIO() interface for general use.
This commit adds a new `RingIO` type which exposes the internal ring-buffer
code for general use in Python programs. It has the stream interface
making it similar to `StringIO` and `BytesIO`, except `RingIO` has a fixed
buffer size and is automatically safe when reads and writes are in
different threads or an IRQ.
This new type is enabled at the "extra features" ROM level.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
Diffstat (limited to 'tests/micropython/ringio_async.py')
-rw-r--r-- | tests/micropython/ringio_async.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/micropython/ringio_async.py b/tests/micropython/ringio_async.py new file mode 100644 index 000000000..2a4befc35 --- /dev/null +++ b/tests/micropython/ringio_async.py @@ -0,0 +1,36 @@ +# Check that micropython.RingIO works correctly with asyncio.Stream. + +import micropython + +try: + import asyncio + + asyncio.StreamWriter + micropython.RingIO +except (AttributeError, ImportError): + print("SKIP") + raise SystemExit + +rb = micropython.RingIO(16) +rba = asyncio.StreamWriter(rb) + +data = b"ABC123" * 20 +print("w", len(data)) + + +async def data_writer(): + global data + rba.write(data) + await rba.drain() + + +async def main(): + task = asyncio.create_task(data_writer()) + await asyncio.sleep_ms(10) + read = await rba.readexactly(len(data)) + print(read) + print("r", len(read)) + print(read == data) + + +asyncio.run(main()) |