/* ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /** * @file osal.c * @brief OSAL module code. * * @addtogroup OSAL * @{ */ #include "osal.h" #include "osal_vt.h" /*===========================================================================*/ /* Module local definitions. */ /*===========================================================================*/ /*===========================================================================*/ /* Module exported variables. */ /*===========================================================================*/ /** * @brief Pointer to a halt error message. * @note The message is meant to be retrieved by the debugger after the * system halt caused by an unexpected error. */ const char *osal_halt_msg; /*===========================================================================*/ /* Module local types. */ /*===========================================================================*/ /*===========================================================================*/ /* Module local variables. */ /*===========================================================================*/ /*===========================================================================*/ /* Module local functions. */ /*===========================================================================*/ static void callback_timeout(void *p) { osalSysLockFromISR(); osalThreadResumeI((thread_reference_t *)p, MSG_TIMEOUT); osalSysUnlockFromISR(); } /*===========================================================================*/ /* Module exported functions. */ /*===========================================================================*/ /** * @brief System halt with error message. * * @param[in] reason the halt message pointer * * @api */ #if !defined(__DOXYGEN__) __attribute__((weak, noreturn)) #endif void osalSysHalt(const char *reason) { osalSysDisable(); osal_halt_msg = reason; while (true) { } } /** * @brief Polled delay. * @note The real delay is always few cycles in excess of the specified * value. * * @param[in] cycles number of cycles * * @xclass */ void osalSysPolledDelayX(rtcnt_t cycles) { (void)cycles; } /** * @brief Current system time. * @details Returns the number of system ticks since the @p osalInit() * invocation. * @note The counter can reach its maximum and then restart from zero. * @note This function can be called from any context but its atomicity * is not guaranteed on architectures whose word size is less than * @p systime_t size. * * @return The system time in ticks. * * @xclass */ systime_t osalOsGetSystemTimeX(void) { return 0; } /** * @brief Suspends the invoking thread for the specified time. * * @param[in] time the delay in system ticks, the special values are * handled as follow: * - @a TIME_INFINITE is allowed but interpreted as a * normal time specification. * - @a TIME_IMMEDIATE this value is not allowed. * . * * @sclass */ void osalThreadSleepS(sysinterval_t time) { } /** * @brief Suspends the invoking thread for the specified time. * * @param[in] time the delay in system ticks, the special values are * handled as follow: * - @a TIME_INFINITE is allowed but interpreted as a * normal time specification. * - @a TIME_IMMEDIATE this value is not allowed. * . * * @api */ void osalThreadSleep(sysinterval_t time) { } /** @} */