summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
author[email protected] <[email protected]>2011-05-29 11:40:17 +0000
committer[email protected] <[email protected]>2011-05-29 11:40:17 +0000
commit111d02568c3f7808bb17dfd2b3e94a6ffc79950d (patch)
tree30e6c086e946ffb806594b30ec0dc1a140343961 /components
parent2f32cd9d728291b0f5bfffd96e5ba3ad2fb97280 (diff)
Add sys_mutex implementation.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1439 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components')
-rw-r--r--components/net/lwip-1.4.0/src/arch/include/arch/sys_arch.h2
-rw-r--r--components/net/lwip-1.4.0/src/arch/sys_arch.c109
-rw-r--r--components/net/lwip-1.4.0/src/lwipopts.h2
3 files changed, 105 insertions, 8 deletions
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 6e29f02295..ad2e03b36c 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 67b18b500e..98e54ccefd 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 87239449c4..bea23d3a9e 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__ */