aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Mussared2020-11-03 23:21:18 +1100
committerDamien George2020-11-13 17:19:05 +1100
commit4559bcb4679e04e0a5e24030675676ff6a9803f2 (patch)
treeb4fa29d87af4487967e8f0c0aa56f224044c38ed
parentde60aa7d6bef3dc25559ae88e36bd05283e927e5 (diff)
unix: Make mp_hal_delay_ms run MICROPY_EVENT_POLL_HOOK.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
-rw-r--r--ports/unix/mphalport.h5
-rw-r--r--ports/unix/unix_mphal.c14
-rw-r--r--ports/windows/windows_mphal.c6
3 files changed, 20 insertions, 5 deletions
diff --git a/ports/unix/mphalport.h b/ports/unix/mphalport.h
index 95ad63221..89d23ca5d 100644
--- a/ports/unix/mphalport.h
+++ b/ports/unix/mphalport.h
@@ -64,11 +64,6 @@ static inline int mp_hal_readline(vstr_t *vstr, const char *p) {
#endif
-// TODO: POSIX et al. define usleep() as guaranteedly capable only of 1s sleep:
-// "The useconds argument shall be less than one million."
-static inline void mp_hal_delay_ms(mp_uint_t ms) {
- usleep((ms) * 1000);
-}
static inline void mp_hal_delay_us(mp_uint_t us) {
usleep(us);
}
diff --git a/ports/unix/unix_mphal.c b/ports/unix/unix_mphal.c
index 3fe2fa9fe..28a4ca2c4 100644
--- a/ports/unix/unix_mphal.c
+++ b/ports/unix/unix_mphal.c
@@ -220,3 +220,17 @@ uint64_t mp_hal_time_ns(void) {
gettimeofday(&tv, NULL);
return (uint64_t)tv.tv_sec * 1000000000ULL + (uint64_t)tv.tv_usec * 1000ULL;
}
+
+void mp_hal_delay_ms(mp_uint_t ms) {
+ #ifdef MICROPY_EVENT_POLL_HOOK
+ mp_uint_t start = mp_hal_ticks_ms();
+ while (mp_hal_ticks_ms() - start < ms) {
+ // MICROPY_EVENT_POLL_HOOK does mp_hal_delay_us(500) (i.e. usleep(500)).
+ MICROPY_EVENT_POLL_HOOK
+ }
+ #else
+ // TODO: POSIX et al. define usleep() as guaranteedly capable only of 1s sleep:
+ // "The useconds argument shall be less than one million."
+ usleep(ms * 1000);
+ #endif
+}
diff --git a/ports/windows/windows_mphal.c b/ports/windows/windows_mphal.c
index b442b5914..49daa0542 100644
--- a/ports/windows/windows_mphal.c
+++ b/ports/windows/windows_mphal.c
@@ -261,3 +261,9 @@ uint64_t mp_hal_time_ns(void) {
gettimeofday(&tv, NULL);
return (uint64_t)tv.tv_sec * 1000000000ULL + (uint64_t)tv.tv_usec * 1000ULL;
}
+
+// TODO: POSIX et al. define usleep() as guaranteedly capable only of 1s sleep:
+// "The useconds argument shall be less than one million."
+void mp_hal_delay_ms(mp_uint_t ms) {
+ usleep((ms) * 1000);
+}