diff -r 000000000000 -r bd6bb22c6533 kstmApp/src/common_dht_read.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kstmApp/src/common_dht_read.c Fri Aug 14 11:30:43 2015 +0200 @@ -0,0 +1,67 @@ +// Copyright (c) 2014 Adafruit Industries +// Author: Tony DiCola + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#include +#include +#include +#include +#include + +#include "common_dht_read.h" + +void busy_wait_milliseconds(uint32_t millis) { + // Set delay time period. + struct timeval deltatime; + deltatime.tv_sec = millis / 1000; + deltatime.tv_usec = (millis % 1000) * 1000; + struct timeval walltime; + // Get current time and add delay to find end time. + gettimeofday(&walltime, NULL); + struct timeval endtime; + timeradd(&walltime, &deltatime, &endtime); + // Tight loop to waste time (and CPU) until enough time as elapsed. + while (timercmp(&walltime, &endtime, <)) { + gettimeofday(&walltime, NULL); + } +} + +void sleep_milliseconds(uint32_t millis) { + struct timespec sleep; + sleep.tv_sec = millis / 1000; + sleep.tv_nsec = (millis % 1000) * 1000000L; +// while (clock_nanosleep(CLOCK_MONOTONIC, 0, &sleep, &sleep) && errno == EINTR); + while (nanosleep(&sleep, &sleep) && errno == EINTR); +} + +void set_max_priority(void) { + struct sched_param sched; + memset(&sched, 0, sizeof(sched)); + // Use FIFO scheduler with highest priority for the lowest chance of the kernel context switching. + sched.sched_priority = sched_get_priority_max(SCHED_FIFO); + sched_setscheduler(0, SCHED_FIFO, &sched); +} + +void set_default_priority(void) { + struct sched_param sched; + memset(&sched, 0, sizeof(sched)); + // Go back to default scheduler with default 0 priority. + sched.sched_priority = 0; + sched_setscheduler(0, SCHED_OTHER, &sched); +}