summaryrefslogtreecommitdiff
path: root/tests/micropython/ringio_async.py
diff options
context:
space:
mode:
authorAndrew Leech <andrew.leech@planetinnovation.com.au>2022-09-26 11:02:31 +1000
committerDamien George <damien@micropython.org>2024-09-19 18:00:44 +1000
commit7e14680a83525bf0822ef9cab899a5625496d662 (patch)
treee5176548c07d8973956b48e1f3a462c36ed1e532 /tests/micropython/ringio_async.py
parent6c73573b34c3fbd3d4da8d56767db03a8e5dd540 (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.py36
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())