Skip to content

Commit 28acc93

Browse files
committed
uasyncio: Add minimum esp8266 support
1 parent 2412519 commit 28acc93

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

uasyncio.core/uasyncio/core.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,16 @@ def run_forever(self):
9191
# self.add_reader(ret.obj.fileno(), lambda self, c, f: self.call_soon(c, f), self, cb, ret.obj)
9292
# self.add_reader(ret.obj.fileno(), lambda c, f: self.call_soon(c, f), cb, ret.obj)
9393
# self.add_reader(arg.fileno(), lambda cb: self.call_soon(cb), cb)
94-
self.add_reader(arg.fileno(), cb)
94+
self.add_reader(arg, cb)
9595
continue
9696
elif isinstance(ret, IOWrite):
9797
# self.add_writer(arg.fileno(), lambda cb: self.call_soon(cb), cb)
98-
self.add_writer(arg.fileno(), cb)
98+
self.add_writer(arg, cb)
9999
continue
100100
elif isinstance(ret, IOReadDone):
101-
self.remove_reader(arg.fileno())
101+
self.remove_reader(arg)
102102
elif isinstance(ret, IOWriteDone):
103-
self.remove_writer(arg.fileno())
103+
self.remove_writer(arg)
104104
elif isinstance(ret, StopLoop):
105105
return arg
106106
elif isinstance(ret, type_gen):

uasyncio/uasyncio/__init__.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
import uselect as select
33
import usocket as _socket
44
from uasyncio.core import *
5+
from sys import platform
6+
7+
def sock_fd(sock_ref):
8+
# Compute socket file descriptor replacement for esp8266
9+
# sock_ref is a fd in most systems. esp8266 uses sockets instead
10+
if isinstance(sock_ref, int):
11+
return sock_ref
12+
return sock_ref.fileno() if platform != 'esp8266' else id(sock_ref)
513

614

715
class EpollEventLoop(EventLoop):
@@ -16,33 +24,33 @@ def add_reader(self, fd, cb, *args):
1624
log.debug("add_reader%s", (fd, cb, args))
1725
if args:
1826
self.poller.register(fd, select.POLLIN)
19-
self.objmap[fd] = (cb, args)
27+
self.objmap[sock_fd(fd)] = (cb, args)
2028
else:
2129
self.poller.register(fd, select.POLLIN)
22-
self.objmap[fd] = cb
30+
self.objmap[sock_fd(fd)] = cb
2331

2432
def remove_reader(self, fd):
2533
if __debug__:
2634
log.debug("remove_reader(%s)", fd)
2735
self.poller.unregister(fd)
28-
del self.objmap[fd]
36+
del self.objmap[sock_fd(fd)]
2937

3038
def add_writer(self, fd, cb, *args):
3139
if __debug__:
3240
log.debug("add_writer%s", (fd, cb, args))
3341
if args:
3442
self.poller.register(fd, select.POLLOUT)
35-
self.objmap[fd] = (cb, args)
43+
self.objmap[sock_fd(fd)] = (cb, args)
3644
else:
3745
self.poller.register(fd, select.POLLOUT)
38-
self.objmap[fd] = cb
46+
self.objmap[sock_fd(fd)] = cb
3947

4048
def remove_writer(self, fd):
4149
if __debug__:
4250
log.debug("remove_writer(%s)", fd)
4351
try:
4452
self.poller.unregister(fd)
45-
self.objmap.pop(fd, None)
53+
self.objmap.pop(sock_fd(fd), None)
4654
except OSError as e:
4755
# StreamWriter.awrite() first tries to write to an fd,
4856
# and if that succeeds, yield IOWrite may never be called
@@ -61,7 +69,7 @@ def wait(self, delay):
6169
res = self.poller.poll(delay, 1)
6270
#log.debug("epoll result: %s", res)
6371
for fd, ev in res:
64-
cb = self.objmap[fd]
72+
cb = self.objmap[sock_fd(fd)]
6573
if __debug__:
6674
log.debug("Calling IO callback: %r", cb)
6775
if isinstance(cb, tuple):

0 commit comments

Comments
 (0)