diff --git a/components/net/lwip-1.4.0/src/arch/include/arch/sys_arch.h b/components/net/lwip-1.4.0/src/arch/include/arch/sys_arch.h index 6e29f022956b7f090802fee21b75d8a4855bbe99..ad2e03b36c70d09c339e0c350aa3d3afbf010e80 100644 --- a/components/net/lwip-1.4.0/src/arch/include/arch/sys_arch.h +++ b/components/net/lwip-1.4.0/src/arch/include/arch/sys_arch.h @@ -49,8 +49,10 @@ typedef u32_t sys_prot_t; #define SYS_LWIP_TIMER_NAME "timer" #define SYS_LWIP_MBOX_NAME "mbox" #define SYS_LWIP_SEM_NAME "sem" +#define SYS_LWIP_MUTEX_NAME "mu" typedef rt_sem_t sys_sem_t; +typedef rt_mutex_t sys_mutex_t; typedef rt_mailbox_t sys_mbox_t; typedef rt_thread_t sys_thread_t; diff --git a/components/net/lwip-1.4.0/src/arch/sys_arch.c b/components/net/lwip-1.4.0/src/arch/sys_arch.c index 67b18b500ef2e3c6adf1ab3d0cc319451792914c..98e54ccefdd7dbc0cc91ccdde0f3375d3a541197 100644 --- a/components/net/lwip-1.4.0/src/arch/sys_arch.c +++ b/components/net/lwip-1.4.0/src/arch/sys_arch.c @@ -130,9 +130,6 @@ u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) /** Check if a sempahore is valid/allocated: return 1 for valid, 0 for invalid */ int sys_sem_valid(sys_sem_t *sem) { - //////////////////// - // to be implemented. - //////////////////// return (int)(*sem); } #endif @@ -140,15 +137,115 @@ int sys_sem_valid(sys_sem_t *sem) /** Set a semaphore invalid so that sys_sem_valid returns 0 */ void sys_sem_set_invalid(sys_sem_t *sem) { - //////////////////// - // to be implemented. - //////////////////// *sem = RT_NULL; } #endif +/* ====================== Mutex ====================== */ + +/** Create a new mutex + * @param mutex pointer to the mutex to create + * @return a new mutex */ +err_t sys_mutex_new(sys_mutex_t *mutex) +{ + static unsigned short counter = 0; + char tname[RT_NAME_MAX]; + sys_mutex_t tmpmutex; + + rt_snprintf(tname, RT_NAME_MAX, "%s%d", SYS_LWIP_MUTEX_NAME, counter); + +#if SYS_DEBUG + { + struct rt_thread *thread; + + thread = rt_thread_self(); + LWIP_DEBUGF(SYS_DEBUG, ("%s, Create mutex: %s \n",thread->name, tname)); + } +#endif + + counter++; + + tmpmutex = rt_mutex_create(tname, RT_IPC_FLAG_FIFO); + if( tmpmutex == RT_NULL ) + return ERR_MEM; + else + { + *mutex = tmpmutex; + return ERR_OK; + } +} + +/** Lock a mutex + * @param mutex the mutex to lock */ +void sys_mutex_lock(sys_mutex_t *mutex) +{ + +#if SYS_DEBUG + { + struct rt_thread *thread; + thread = rt_thread_self(); + + LWIP_DEBUGF(SYS_DEBUG, ("%s, Wait mutex: %s , %d\n",thread->name, + (*mutex)->parent.parent.name, (*mutex)->value)); + } +#endif + + rt_mutex_take(*mutex, RT_WAITING_FOREVER); + + return; +} + + +/** Unlock a mutex + * @param mutex the mutex to unlock */ +void sys_mutex_unlock(sys_mutex_t *mutex) +{ +#if SYS_DEBUG + { + struct rt_thread *thread; + thread = rt_thread_self(); + + LWIP_DEBUGF(SYS_DEBUG, ("%s, Release signal: %s , %d\n",thread->name, + (*mutex)->parent.parent.name, (*mutex)->value)); + } +#endif + + rt_mutex_release(*mutex); +} + +/** Delete a semaphore + * @param mutex the mutex to delete */ +void sys_mutex_free(sys_mutex_t *mutex) +{ +#if SYS_DEBUG + { + struct rt_thread *thread; + thread = rt_thread_self(); + + LWIP_DEBUGF(SYS_DEBUG, ("%s, Delete sem: %s \n",thread->name, + (*mutex)->parent.parent.name)); + } +#endif + rt_mutex_delete(*mutex); +} + +#ifndef sys_mutex_valid +/** Check if a mutex is valid/allocated: return 1 for valid, 0 for invalid */ +int sys_mutex_valid(sys_mutex_t *mutex) +{ + return (int)(*mutex); +} +#endif + +#ifndef sys_mutex_set_invalid +/** Set a mutex invalid so that sys_mutex_valid returns 0 */ +void sys_mutex_set_invalid(sys_mutex_t *mutex) +{ + *mutex = RT_NULL; +} +#endif /* ====================== Mailbox ====================== */ diff --git a/components/net/lwip-1.4.0/src/lwipopts.h b/components/net/lwip-1.4.0/src/lwipopts.h index 87239449c42ad1bb73d8f008991bdc8800b467bb..bea23d3a9e14d672aa3ad7b053923435c7715462 100644 --- a/components/net/lwip-1.4.0/src/lwipopts.h +++ b/components/net/lwip-1.4.0/src/lwipopts.h @@ -325,7 +325,5 @@ /* no read/write/close for socket */ #define LWIP_POSIX_SOCKETS_IO_NAMES 0 -/* this should be removed */ -#define LWIP_COMPAT_MUTEX 1 #endif /* __LWIPOPTS_H__ */