| /* |
| * |
| * Copyright 2017 NXP |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * |
| * @par Description |
| * This file implements implements platform independent sleep functionality |
| * @par History |
| * |
| *****************************************************************************/ |
| |
| #include <stdint.h> |
| #if defined(__gnu_linux__) || defined(__clang__) |
| #include <unistd.h> |
| #endif |
| #include <time.h> |
| #include "sm_timer.h" |
| |
| /* initializes the system tick counter |
| * return 0 on succes, 1 on failure */ |
| uint32_t sm_initSleep() |
| { |
| return 0; |
| } |
| |
| /** |
| * Implement a blocking (for the calling thread) wait for a number of milliseconds. |
| */ |
| void sm_sleep(uint32_t msec) |
| { |
| #if defined(__gnu_linux__) || defined __clang__ |
| useconds_t microsec = msec*1000; |
| usleep(microsec); |
| #else |
| clock_t goal = msec + clock(); |
| while (goal > clock()); |
| #endif |
| } |
| |
| /** |
| * Implement a blocking (for the calling thread) wait for a number of microseconds |
| */ |
| void sm_usleep(uint32_t microsec) |
| { |
| #if defined(__gnu_linux__) || defined __clang__ |
| usleep(microsec); |
| #elif defined(_WIN32) |
| #pragma message ( "No sm_usleep implemented" ) |
| #elif defined(__OpenBSD__) |
| #warning "No sm_usleep implemented" |
| #else |
| //#warning "No sm_usleep implemented" |
| #endif |
| } |