/** * Copyright (c) 2011-2018 Bill Greiman * This file is part of the SdFat library for SD memory cards. * * MIT License * * 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. */ #ifndef SysCall_h #define SysCall_h /** * \file * \brief SysCall class */ #if defined(ARDUINO) #include #include #elif defined(PLATFORM_ID) // Only defined if a Particle device #include "application.h" #else // defined(ARDUINO) #error "Unknown system" #endif // defined(ARDUINO) //------------------------------------------------------------------------------ #ifdef ESP8266 // undefine F macro if ESP8266. #undef F #endif // ESP8266 //------------------------------------------------------------------------------ #ifndef F /** Define macro for strings stored in flash. */ #define F(str) (str) #endif // F //------------------------------------------------------------------------------ /** \return the time in milliseconds. */ inline uint16_t curTimeMS() { return millis(); } //------------------------------------------------------------------------------ /** * \class SysCall * \brief SysCall - Class to wrap system calls. */ class SysCall { public: /** Halt execution of this thread. */ static void halt() { while (1) { yield(); } } /** Yield to other threads. */ static void yield(); }; #if defined(ESP8266) inline void SysCall::yield() { // Avoid ESP8266 bug delay(0); } #elif defined(ARDUINO) inline void SysCall::yield() { // Use the external Arduino yield() function. ::yield(); } #elif defined(PLATFORM_ID) // Only defined if a Particle device inline void SysCall::yield() { Particle.process(); } #else // ESP8266 inline void SysCall::yield() {} #endif // ESP8266 #endif // SysCall_h