1 /** 2 * @file 3 * lwIP Operating System abstraction 4 * 5 */ 6 7 /* 8 * Copyright (c) 2001-2004 Swedish Institute of Computer Science. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without modification, 12 * are permitted provided that the following conditions are met: 13 * 14 * 1. Redistributions of source code must retain the above copyright notice, 15 * this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright notice, 17 * this list of conditions and the following disclaimer in the documentation 18 * and/or other materials provided with the distribution. 19 * 3. The name of the author may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 23 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 24 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 25 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 26 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 27 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 30 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 31 * OF SUCH DAMAGE. 32 * 33 * This file is part of the lwIP TCP/IP stack. 34 * 35 * Author: Adam Dunkels <adam@sics.se> 36 * 37 */ 38 39 /** 40 * @defgroup sys_layer Porting (system abstraction layer) 41 * @ingroup lwip 42 * @verbinclude "sys_arch.txt" 43 * 44 * @defgroup sys_os OS abstraction layer 45 * @ingroup sys_layer 46 * No need to implement functions in this section in NO_SYS mode. 47 * 48 * @defgroup sys_sem Semaphores 49 * @ingroup sys_os 50 * 51 * @defgroup sys_mutex Mutexes 52 * @ingroup sys_os 53 * Mutexes are recommended to correctly handle priority inversion, 54 * especially if you use LWIP_CORE_LOCKING . 55 * 56 * @defgroup sys_mbox Mailboxes 57 * @ingroup sys_os 58 * 59 * @defgroup sys_time Time 60 * @ingroup sys_layer 61 * 62 * @defgroup sys_prot Critical sections 63 * @ingroup sys_layer 64 * Used to protect short regions of code against concurrent access. 65 * - Your system is a bare-metal system (probably with an RTOS) 66 * and interrupts are under your control: 67 * Implement this as LockInterrupts() / UnlockInterrupts() 68 * - Your system uses an RTOS with deferred interrupt handling from a 69 * worker thread: Implement as a global mutex or lock/unlock scheduler 70 * - Your system uses a high-level OS with e.g. POSIX signals: 71 * Implement as a global mutex 72 * 73 * @defgroup sys_misc Misc 74 * @ingroup sys_os 75 */ 76 77 #include "lwip/opt.h" 78 79 #include "lwip/sys.h" 80 81 /* Most of the functions defined in sys.h must be implemented in the 82 * architecture-dependent file sys_arch.c */ 83 84 #if !NO_SYS 85 86 #ifndef sys_msleep 87 /** 88 * Sleep for some ms. Timeouts are NOT processed while sleeping. 89 * 90 * @param ms number of milliseconds to sleep 91 */ 92 void 93 sys_msleep(u32_t ms) 94 { 95 if (ms > 0) { 96 sys_sem_t delaysem; 97 err_t err = sys_sem_new(&delaysem, 0); 98 if (err == ERR_OK) { 99 sys_arch_sem_wait(&delaysem, ms); 100 sys_sem_free(&delaysem); 101 } 102 } 103 } 104 #endif /* sys_msleep */ 105 106 #endif /* !NO_SYS */ 107