lwip operating system abstraction layer implementation based on CMSIS-RTOS
Dependents: LwIPNetworking NetServicesMin EthernetInterface EthernetInterface_RSF ... more
Revision 8:742ae4a0ca3f, committed 2013-03-01
- Comitter:
- emilmont
- Date:
- Fri Mar 01 15:31:22 2013 +0000
- Parent:
- 7:b409691fb352
- Child:
- 9:d7ad3f3ee934
- Commit message:
- editor whitespaces
Changed in this revision
--- a/arch/cc.h Fri Jul 27 10:17:19 2012 +0000 +++ b/arch/cc.h Fri Mar 01 15:31:22 2013 +0000 @@ -1,107 +1,107 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __CC_H__ -#define __CC_H__ - -#include <stdint.h> - -/* Types based on stdint.h */ -typedef uint8_t u8_t; -typedef int8_t s8_t; -typedef uint16_t u16_t; -typedef int16_t s16_t; -typedef uint32_t u32_t; -typedef int32_t s32_t; -typedef uintptr_t mem_ptr_t; - -/* Define (sn)printf formatters for these lwIP types */ -#define U16_F "hu" -#define S16_F "hd" -#define X16_F "hx" -#define U32_F "lu" -#define S32_F "ld" -#define X32_F "lx" -#define SZT_F "uz" - -/* ARM/LPC17xx is little endian only */ -#define BYTE_ORDER LITTLE_ENDIAN - -/* Use LWIP error codes */ -#define LWIP_PROVIDE_ERRNO - -#if defined(__arm__) && defined(__ARMCC_VERSION) - /* Keil uVision4 tools */ - #define PACK_STRUCT_BEGIN __packed - #define PACK_STRUCT_STRUCT - #define PACK_STRUCT_END - #define PACK_STRUCT_FIELD(fld) fld - #define ALIGNED(n) __align(n) -#elif defined (__IAR_SYSTEMS_ICC__) - /* IAR Embedded Workbench tools */ - #define PACK_STRUCT_BEGIN __packed - #define PACK_STRUCT_STRUCT - #define PACK_STRUCT_END - #define PACK_STRUCT_FIELD(fld) fld -// #define PACK_STRUCT_USE_INCLUDES - #error NEEDS ALIGNED // FIXME TBD -#else - /* GCC tools (CodeSourcery) */ - #define PACK_STRUCT_BEGIN - #define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) - #define PACK_STRUCT_END - #define PACK_STRUCT_FIELD(fld) fld - #define ALIGNED(n) __attribute__((aligned (n))) - #define ALIGNED(n) __align(n) -#endif - -/* Used with IP headers only */ -#define LWIP_CHKSUM_ALGORITHM 1 - -#ifdef LWIP_DEBUG - -#include "stdio.h" - -void assert_printf(char *msg, int line, char *file); - -/* Plaform specific diagnostic output */ -#define LWIP_PLATFORM_DIAG(vars) printf vars -#define LWIP_PLATFORM_ASSERT(flag) { assert_printf((flag), __LINE__, __FILE__); } -#else -#define LWIP_PLATFORM_DIAG(msg) { ; } -#define LWIP_PLATFORM_ASSERT(flag) { ; } -#endif - -#include "cmsis.h" -#define LWIP_PLATFORM_HTONS(x) __REV16(x) -#define LWIP_PLATFORM_HTONL(x) __REV(x) - -#endif /* __CC_H__ */ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels <adam@sics.se> + * + */ +#ifndef __CC_H__ +#define __CC_H__ + +#include <stdint.h> + +/* Types based on stdint.h */ +typedef uint8_t u8_t; +typedef int8_t s8_t; +typedef uint16_t u16_t; +typedef int16_t s16_t; +typedef uint32_t u32_t; +typedef int32_t s32_t; +typedef uintptr_t mem_ptr_t; + +/* Define (sn)printf formatters for these lwIP types */ +#define U16_F "hu" +#define S16_F "hd" +#define X16_F "hx" +#define U32_F "lu" +#define S32_F "ld" +#define X32_F "lx" +#define SZT_F "uz" + +/* ARM/LPC17xx is little endian only */ +#define BYTE_ORDER LITTLE_ENDIAN + +/* Use LWIP error codes */ +#define LWIP_PROVIDE_ERRNO + +#if defined(__arm__) && defined(__ARMCC_VERSION) + /* Keil uVision4 tools */ + #define PACK_STRUCT_BEGIN __packed + #define PACK_STRUCT_STRUCT + #define PACK_STRUCT_END + #define PACK_STRUCT_FIELD(fld) fld + #define ALIGNED(n) __align(n) +#elif defined (__IAR_SYSTEMS_ICC__) + /* IAR Embedded Workbench tools */ + #define PACK_STRUCT_BEGIN __packed + #define PACK_STRUCT_STRUCT + #define PACK_STRUCT_END + #define PACK_STRUCT_FIELD(fld) fld +// #define PACK_STRUCT_USE_INCLUDES + #error NEEDS ALIGNED // FIXME TBD +#else + /* GCC tools (CodeSourcery) */ + #define PACK_STRUCT_BEGIN + #define PACK_STRUCT_STRUCT __attribute__ ((__packed__)) + #define PACK_STRUCT_END + #define PACK_STRUCT_FIELD(fld) fld + #define ALIGNED(n) __attribute__((aligned (n))) + #define ALIGNED(n) __align(n) +#endif + +/* Used with IP headers only */ +#define LWIP_CHKSUM_ALGORITHM 1 + +#ifdef LWIP_DEBUG + +#include "stdio.h" + +void assert_printf(char *msg, int line, char *file); + +/* Plaform specific diagnostic output */ +#define LWIP_PLATFORM_DIAG(vars) printf vars +#define LWIP_PLATFORM_ASSERT(flag) { assert_printf((flag), __LINE__, __FILE__); } +#else +#define LWIP_PLATFORM_DIAG(msg) { ; } +#define LWIP_PLATFORM_ASSERT(flag) { ; } +#endif + +#include "cmsis.h" +#define LWIP_PLATFORM_HTONS(x) __REV16(x) +#define LWIP_PLATFORM_HTONL(x) __REV(x) + +#endif /* __CC_H__ */
--- a/arch/perf.h Fri Jul 27 10:17:19 2012 +0000 +++ b/arch/perf.h Fri Mar 01 15:31:22 2013 +0000 @@ -1,38 +1,38 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __PERF_H__ -#define __PERF_H__ - -#define PERF_START /* null definition */ -#define PERF_STOP(x) /* null definition */ - -#endif /* __PERF_H__ */ +/* + * Copyright (c) 2001-2003 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels <adam@sics.se> + * + */ +#ifndef __PERF_H__ +#define __PERF_H__ + +#define PERF_START /* null definition */ +#define PERF_STOP(x) /* null definition */ + +#endif /* __PERF_H__ */
--- a/arch/sys_arch.h Fri Jul 27 10:17:19 2012 +0000 +++ b/arch/sys_arch.h Fri Mar 01 15:31:22 2013 +0000 @@ -1,120 +1,120 @@ -/* Copyright (C) 2012 mbed.org, 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 __ARCH_SYS_ARCH_H__ -#define __ARCH_SYS_ARCH_H__ - -#include "lwip/opt.h" - -#if NO_SYS == 0 -#include "cmsis_os.h" - -// === SEMAPHORE === -typedef struct { - osSemaphoreId id; - osSemaphoreDef_t def; -#ifdef CMSIS_OS_RTX - uint32_t data[2]; -#endif -} sys_sem_t; - -#define sys_sem_valid(x) (((*x).id == NULL) ? 0 : 1) -#define sys_sem_set_invalid(x) ( (*x).id = NULL) - -// === MUTEX === -typedef struct { - osMutexId id; - osMutexDef_t def; -#ifdef CMSIS_OS_RTX - int32_t data[3]; -#endif -} sys_mutex_t; - -// === MAIL BOX === -#define MB_SIZE 8 - -typedef struct { - osMessageQId id; - osMessageQDef_t def; -#ifdef CMSIS_OS_RTX - uint32_t queue[MB_SIZE]; -#endif -} sys_mbox_t; - -#define SYS_MBOX_NULL ((uint32_t) NULL) -#define sys_mbox_valid(x) (((*x).id == NULL) ? 0 : 1 ) -#define sys_mbox_set_invalid(x) ( (*x).id = NULL ) - -#if ((DEFAULT_RAW_RECVMBOX_SIZE) > (MB_SIZE)) || \ - ((DEFAULT_UDP_RECVMBOX_SIZE) > (MB_SIZE)) || \ - ((DEFAULT_TCP_RECVMBOX_SIZE) > (MB_SIZE)) || \ - ((DEFAULT_ACCEPTMBOX_SIZE) > (MB_SIZE)) || \ - ((TCPIP_MBOX_SIZE) > (MB_SIZE)) -# error Mailbox size not supported -#endif - -// === THREAD === -typedef struct { - osThreadId id; - osThreadDef_t def; -} sys_thread_data_t; -typedef sys_thread_data_t* sys_thread_t; - -#define SYS_THREAD_POOL_N 6 -#define SYS_DEFAULT_THREAD_STACK_DEPTH DEFAULT_STACK_SIZE - -// === PROTECTION === -typedef int sys_prot_t; - -#else -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief Init systick to 1ms rate - * - * This init the systick to 1ms rate. This function is only used in standalone - * systems. - */ -void SysTick_Init(void); - - -/** \brief Get the current systick time in milliSeconds - * - * Returns the current systick time in milliSeconds. This function is only - * used in standalone systems. - * - * /returns current systick time in milliSeconds - */ -uint32_t SysTick_GetMS(void); - -/** \brief Delay for the specified number of milliSeconds - * - * For standalone systems. This function will block for the specified - * number of milliSconds. For RTOS based systems, this function will delay - * the task by the specified number of milliSeconds. - * - * \param[in] ms Time in milliSeconds to delay - */ -void osDelay(uint32_t ms); - -#ifdef __cplusplus -} -#endif -#endif - -#endif /* __ARCH_SYS_ARCH_H__ */ +/* Copyright (C) 2012 mbed.org, 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 __ARCH_SYS_ARCH_H__ +#define __ARCH_SYS_ARCH_H__ + +#include "lwip/opt.h" + +#if NO_SYS == 0 +#include "cmsis_os.h" + +// === SEMAPHORE === +typedef struct { + osSemaphoreId id; + osSemaphoreDef_t def; +#ifdef CMSIS_OS_RTX + uint32_t data[2]; +#endif +} sys_sem_t; + +#define sys_sem_valid(x) (((*x).id == NULL) ? 0 : 1) +#define sys_sem_set_invalid(x) ( (*x).id = NULL) + +// === MUTEX === +typedef struct { + osMutexId id; + osMutexDef_t def; +#ifdef CMSIS_OS_RTX + int32_t data[3]; +#endif +} sys_mutex_t; + +// === MAIL BOX === +#define MB_SIZE 8 + +typedef struct { + osMessageQId id; + osMessageQDef_t def; +#ifdef CMSIS_OS_RTX + uint32_t queue[MB_SIZE]; +#endif +} sys_mbox_t; + +#define SYS_MBOX_NULL ((uint32_t) NULL) +#define sys_mbox_valid(x) (((*x).id == NULL) ? 0 : 1 ) +#define sys_mbox_set_invalid(x) ( (*x).id = NULL ) + +#if ((DEFAULT_RAW_RECVMBOX_SIZE) > (MB_SIZE)) || \ + ((DEFAULT_UDP_RECVMBOX_SIZE) > (MB_SIZE)) || \ + ((DEFAULT_TCP_RECVMBOX_SIZE) > (MB_SIZE)) || \ + ((DEFAULT_ACCEPTMBOX_SIZE) > (MB_SIZE)) || \ + ((TCPIP_MBOX_SIZE) > (MB_SIZE)) +# error Mailbox size not supported +#endif + +// === THREAD === +typedef struct { + osThreadId id; + osThreadDef_t def; +} sys_thread_data_t; +typedef sys_thread_data_t* sys_thread_t; + +#define SYS_THREAD_POOL_N 6 +#define SYS_DEFAULT_THREAD_STACK_DEPTH DEFAULT_STACK_SIZE + +// === PROTECTION === +typedef int sys_prot_t; + +#else +#ifdef __cplusplus +extern "C" { +#endif + +/** \brief Init systick to 1ms rate + * + * This init the systick to 1ms rate. This function is only used in standalone + * systems. + */ +void SysTick_Init(void); + + +/** \brief Get the current systick time in milliSeconds + * + * Returns the current systick time in milliSeconds. This function is only + * used in standalone systems. + * + * /returns current systick time in milliSeconds + */ +uint32_t SysTick_GetMS(void); + +/** \brief Delay for the specified number of milliSeconds + * + * For standalone systems. This function will block for the specified + * number of milliSconds. For RTOS based systems, this function will delay + * the task by the specified number of milliSeconds. + * + * \param[in] ms Time in milliSeconds to delay + */ +void osDelay(uint32_t ms); + +#ifdef __cplusplus +} +#endif +#endif + +#endif /* __ARCH_SYS_ARCH_H__ */