From 17cbeab272feec6ac1d470eb3e07a0c962c0e1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Narajowski?= Date: Thu, 7 Feb 2019 15:41:31 +0100 Subject: [PATCH] porting/linux: Fix ble_npl_time_delay implementation Previous implementation was inaccurate due to use of sleep() function which uses seconds as a time parameter. --- porting/npl/linux/src/os_time.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/porting/npl/linux/src/os_time.c b/porting/npl/linux/src/os_time.c index 6df2e254f..4625159f2 100644 --- a/porting/npl/linux/src/os_time.c +++ b/porting/npl/linux/src/os_time.c @@ -68,5 +68,13 @@ uint32_t ble_npl_time_ticks_to_ms32(ble_npl_time_t ticks) void ble_npl_time_delay(ble_npl_time_t ticks) { - sleep(ble_npl_time_ticks_to_ms32(ticks)/1000); + struct timespec sleep_time; + long ms = ble_npl_time_ticks_to_ms32(ticks); + uint32_t s = ms / 1000; + + ms -= s * 1000; + sleep_time.tv_sec = s; + sleep_time.tv_nsec = ms * 1000000; + + nanosleep(&sleep_time, NULL); }