mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-05 22:29:49 +00:00
Cleanup and simplify tcpip_api_call() implementation a bit
This commit is contained in:
parent
a1fc91afa8
commit
7e7f2f31ff
@ -105,12 +105,8 @@ tcpip_thread(void *arg)
|
|||||||
break;
|
break;
|
||||||
case TCPIP_MSG_API_CALL:
|
case TCPIP_MSG_API_CALL:
|
||||||
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API CALL message %p\n", (void *)msg));
|
LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API CALL message %p\n", (void *)msg));
|
||||||
msg->msg.api_call->err = msg->msg.api_call->function(msg->msg.api_call);
|
msg->msg.api_call.arg->err = msg->msg.api_call.function(msg->msg.api_call.arg);
|
||||||
#if LWIP_NETCONN_SEM_PER_THREAD
|
sys_sem_signal(msg->msg.api_call.sem);
|
||||||
sys_sem_signal(msg->msg.api_call->sem);
|
|
||||||
#else /* LWIP_NETCONN_SEM_PER_THREAD */
|
|
||||||
sys_sem_signal(&msg->msg.api_call->sem);
|
|
||||||
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
|
|
||||||
break;
|
break;
|
||||||
#endif /* !LWIP_TCPIP_CORE_LOCKING */
|
#endif /* !LWIP_TCPIP_CORE_LOCKING */
|
||||||
|
|
||||||
@ -376,9 +372,7 @@ tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call *call)
|
|||||||
TCPIP_MSG_VAR_DECLARE(msg);
|
TCPIP_MSG_VAR_DECLARE(msg);
|
||||||
err_t err;
|
err_t err;
|
||||||
|
|
||||||
#if LWIP_NETCONN_SEM_PER_THREAD
|
#if !LWIP_NETCONN_SEM_PER_THREAD
|
||||||
call->sem = LWIP_NETCONN_THREAD_SEM_GET();
|
|
||||||
#else /* LWIP_NETCONN_SEM_PER_THREAD */
|
|
||||||
err = sys_sem_new(&call->sem, 0);
|
err = sys_sem_new(&call->sem, 0);
|
||||||
if (err != ERR_OK) {
|
if (err != ERR_OK) {
|
||||||
return err;
|
return err;
|
||||||
@ -387,16 +381,21 @@ tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call *call)
|
|||||||
|
|
||||||
TCPIP_MSG_VAR_ALLOC(msg);
|
TCPIP_MSG_VAR_ALLOC(msg);
|
||||||
TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API_CALL;
|
TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API_CALL;
|
||||||
TCPIP_MSG_VAR_REF(msg).msg.api_call = call;
|
TCPIP_MSG_VAR_REF(msg).msg.api_call.arg = call;
|
||||||
TCPIP_MSG_VAR_REF(msg).msg.api_call->function = fn;
|
TCPIP_MSG_VAR_REF(msg).msg.api_call.function = fn;
|
||||||
sys_mbox_post(&mbox, &TCPIP_MSG_VAR_REF(msg));
|
|
||||||
#if LWIP_NETCONN_SEM_PER_THREAD
|
#if LWIP_NETCONN_SEM_PER_THREAD
|
||||||
sys_arch_sem_wait(call->sem, 0);
|
TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = LWIP_NETCONN_THREAD_SEM_GET();
|
||||||
#else /* LWIP_NETCONN_SEM_PER_THREAD */
|
#else /* LWIP_NETCONN_SEM_PER_THREAD */
|
||||||
sys_arch_sem_wait(&call->sem, 0);
|
TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = &call->sem;
|
||||||
|
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
|
||||||
|
sys_mbox_post(&mbox, &TCPIP_MSG_VAR_REF(msg));
|
||||||
|
sys_arch_sem_wait(TCPIP_MSG_VAR_REF(msg).msg.api_call.sem, 0);
|
||||||
|
TCPIP_MSG_VAR_FREE(msg);
|
||||||
|
|
||||||
|
#if !LWIP_NETCONN_SEM_PER_THREAD
|
||||||
sys_sem_free(&call->sem);
|
sys_sem_free(&call->sem);
|
||||||
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
|
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
|
||||||
TCPIP_MSG_VAR_FREE(msg);
|
|
||||||
return call->err;
|
return call->err;
|
||||||
}
|
}
|
||||||
return ERR_VAL;
|
return ERR_VAL;
|
||||||
|
@ -97,20 +97,18 @@ extern sys_mutex_t lock_tcpip_core;
|
|||||||
|
|
||||||
err_t tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem);
|
err_t tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem);
|
||||||
|
|
||||||
struct tcpip_api_call;
|
|
||||||
typedef err_t (*tcpip_api_call_fn)(struct tcpip_api_call* call);
|
|
||||||
struct tcpip_api_call
|
struct tcpip_api_call
|
||||||
{
|
{
|
||||||
tcpip_api_call_fn function;
|
|
||||||
#if !LWIP_TCPIP_CORE_LOCKING
|
#if !LWIP_TCPIP_CORE_LOCKING
|
||||||
#if LWIP_NETCONN_SEM_PER_THREAD
|
err_t err;
|
||||||
sys_sem_t *sem;
|
#if !LWIP_NETCONN_SEM_PER_THREAD
|
||||||
#else /* LWIP_NETCONN_SEM_PER_THREAD */
|
|
||||||
sys_sem_t sem;
|
sys_sem_t sem;
|
||||||
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
|
#endif /* LWIP_NETCONN_SEM_PER_THREAD */
|
||||||
err_t err;
|
#else /* !LWIP_TCPIP_CORE_LOCKING */
|
||||||
|
u8_t dummy; /* avoid empty struct :-( */
|
||||||
#endif /* !LWIP_TCPIP_CORE_LOCKING */
|
#endif /* !LWIP_TCPIP_CORE_LOCKING */
|
||||||
};
|
};
|
||||||
|
typedef err_t (*tcpip_api_call_fn)(struct tcpip_api_call* call);
|
||||||
err_t tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call *call);
|
err_t tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call *call);
|
||||||
|
|
||||||
enum tcpip_msg_type {
|
enum tcpip_msg_type {
|
||||||
@ -132,7 +130,11 @@ struct tcpip_msg {
|
|||||||
tcpip_callback_fn function;
|
tcpip_callback_fn function;
|
||||||
void* msg;
|
void* msg;
|
||||||
} api_msg;
|
} api_msg;
|
||||||
struct tcpip_api_call *api_call;
|
struct {
|
||||||
|
tcpip_api_call_fn function;
|
||||||
|
struct tcpip_api_call *arg;
|
||||||
|
sys_sem_t *sem;
|
||||||
|
} api_call;
|
||||||
struct {
|
struct {
|
||||||
struct pbuf *p;
|
struct pbuf *p;
|
||||||
struct netif *netif;
|
struct netif *netif;
|
||||||
|
Loading…
Reference in New Issue
Block a user