/* Typedefs for the various port-specific types. */
#if !NO_SYS
-typedef xQueueHandle sys_mbox_t;
-typedef xSemaphoreHandle sys_sem_t;
-typedef xTaskHandle sys_thread_t;
+typedef xQueueHandle sys_mbox_t; /* *xQUEUE */
+typedef xSemaphoreHandle sys_sem_t; /* *xQUEUE */
+typedef xTaskHandle sys_thread_t; /* *void */
#if !LWIP_COMPAT_MUTEX
-typedef xSemaphoreHandle sys_mutex_t;
+typedef xSemaphoreHandle sys_mutex_t; /* *xQUEUE */
/* For mutexes you can just set option in opt.h/lwipopts.h LWIP_COMPAT_MUTEX,
* which is using defined semaphores. This is basicaly doing the same thing. */
#define sys_mutex_valid(mutex) sys_sem_valid(mutex)
#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex)
+#endif /* LWIP_COMPAT_MUTEX */
-#define sys_sem_valid(sem) (*sem != SYS_SEM_NULL)
+#define sys_sem_valid(sem) ((*sem != SYS_SEM_NULL) ? 1 : 0)
#define sys_sem_set_invalid(sem) (*sem = SYS_SEM_NULL)
-#define sys_mbox_valid(mbox) (*mbox != SYS_MBOX_NULL)
+#define sys_mbox_valid(mbox) ((*mbox != SYS_MBOX_NULL) ? 1 : 0)
#define sys_mbox_set_invalid(mbox) (*mbox = SYS_MBOX_NULL)
-#endif
#define SEMPHR_MAX_CNT 1
#define MBOX_PTR_TYPE void *
#endif /* !NO_SYS */
-/* TODO: try with SYS_ARCH_PROTECT defined and without it */
-/* DETAILS in sys.h */
-/* #define SYS_ARCH_PROTECT */
-#ifndef SYS_ARCH_PROTECT
+#ifdef SYS_TEST_PROT_SEM
+
+#define SYS_ARCH_DECL_PROTECT(lev) xSemaphoreHandle lev; lev = xSemaphoreCreateCounting(5,0)
+
+#define SYS_ARCH_PROTECT(lev) sys_sem_wait(&lev)
+
+#define SYS_ARCH_UNPROTECT(lev) sys_sem_signal(&lev)
+
+#endif
+
+/* when used SYS_ARCH_PROTECT from sys.h, then it might cause instability of the system */
+#ifdef SYS_ARCH_PROTECT
#if SYS_LIGHTWEIGHT_PROT
#define SYS_ARCH_PROTECT(lev) portENTER_CRITICAL() /* consider putting here taskENTER_CRITICAL() ... freeRTOS */
#define SYS_ARCH_UNPROTECT(lev) portEXIT_CRITICAL() /* consider putting here taskEXIT_CRITICAL() ... freeRTOS */
-sys_prot_t sys_arch_protect(void);
-void sys_arch_unprotect(sys_prot_t pval);
+//sys_prot_t sys_arch_protect(void);
+//void sys_arch_unprotect(sys_prot_t pval);
-#else
+#else /* SYS_LIGHTWEIGHT_PROT */
#define SYS_ARCH_DECL_PROTECT(lev)
#define SYS_ARCH_PROTECT(lev)
#endif /* SYS_ARCH_PROTECT */
-
#endif /* __ARCH_SYS_ARCH_H__ */