summaryrefslogtreecommitdiff
path: root/shared-bindings
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-09-21 16:06:17 -0500
committerJeff Epler <jepler@gmail.com>2020-09-21 16:44:26 -0500
commit493679da3b5b80b446e805966103a4d6703ec90c (patch)
treecc34622a7d0144d0f09081640eea9851d30e840b /shared-bindings
parent9e8f1820c8b9be728ae0f9e7c197565ac17cc6a8 (diff)
CAN.listen: block until a message comes in or timeout is reached
Diffstat (limited to 'shared-bindings')
-rw-r--r--shared-bindings/_canio/Listener.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/shared-bindings/_canio/Listener.c b/shared-bindings/_canio/Listener.c
index 84b2aacb9..6186f3bbd 100644
--- a/shared-bindings/_canio/Listener.c
+++ b/shared-bindings/_canio/Listener.c
@@ -100,20 +100,18 @@ STATIC mp_obj_t canio_listener_iter(mp_obj_t self_in) {
STATIC MP_DEFINE_CONST_FUN_OBJ_1(canio_listener_iter_obj, canio_listener_iter);
//| def __next__(self):
-//| """Returns the next waiting message, if one is available
-//|
-//| If the object is deinitialized, raises ValueError.
+//| """Reads a message, after waiting up to self.timeout seconds
//|
-//| If no message is waiting raises StopIteration"""
+//| If no message is received in time, raises StopIteration. Otherwise,
+//| a Message is returned."""
//| ...
//|
STATIC mp_obj_t canio_listener_next(mp_obj_t self_in) {
- canio_listener_obj_t *self = MP_OBJ_TO_PTR(self_in);
- common_hal_canio_listener_check_for_deinit(self);
- if (common_hal_canio_listener_in_waiting(self)) {
- return canio_listener_read(self_in);
+ mp_obj_t result = canio_listener_read(self_in);
+ if (result == mp_const_none) {
+ return MP_OBJ_STOP_ITERATION;
}
- return MP_OBJ_STOP_ITERATION;
+ return result;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(canio_listener_next_obj, canio_listener_next);