2019-11-20 11:18:38 +00:00
|
|
|
import uasyncio
|
|
|
|
|
|
|
|
# Event class for primitive events that can be waited on, set, and cleared
|
2019-12-02 13:53:29 +00:00
|
|
|
class Event(uasyncio.Primitive):
|
2019-11-20 11:18:38 +00:00
|
|
|
def __init__(self):
|
2019-12-02 13:53:29 +00:00
|
|
|
super().__init__()
|
2019-11-20 11:18:38 +00:00
|
|
|
self.state = 0 # 0=unset; 1=set
|
2019-12-02 13:53:29 +00:00
|
|
|
def set(self): # Event becomes set, schedule any tasks waiting on it
|
|
|
|
self.run_all()
|
2019-11-20 11:18:38 +00:00
|
|
|
self.state = 1
|
|
|
|
def clear(self):
|
|
|
|
self.state = 0
|
|
|
|
def is_set(self):
|
|
|
|
return self.state # CPython compatibility
|
|
|
|
async def wait(self):
|
|
|
|
if self.state == 0:
|
|
|
|
# Event not set, put the calling task on the event's waiting queue
|
2019-12-02 13:53:29 +00:00
|
|
|
self.save_current()
|
2019-11-20 11:18:38 +00:00
|
|
|
yield
|
|
|
|
return True
|
|
|
|
|
|
|
|
uasyncio.Event = Event
|