72 #define TCPIP_MSG_VAR_REF(name) API_VAR_REF(name) 73 #define TCPIP_MSG_VAR_DECLARE(name) API_VAR_DECLARE(struct tcpip_msg, name) 74 #define TCPIP_MSG_VAR_ALLOC(name) API_VAR_ALLOC(struct tcpip_msg, MEMP_TCPIP_MSG_API, name, ERR_MEM) 75 #define TCPIP_MSG_VAR_FREE(name) API_VAR_FREE(MEMP_TCPIP_MSG_API, name) 79 static void *tcpip_init_done_arg;
82 #if LWIP_TCPIP_CORE_LOCKING 84 sys_mutex_t lock_tcpip_core;
89 #define TCPIP_MBOX_FETCH(mbox, msg) sys_timeouts_mbox_fetch(mbox, msg) 92 #define TCPIP_MBOX_FETCH(mbox, msg) sys_mbox_fetch(mbox, msg) 106 tcpip_thread(
void *arg)
111 if (tcpip_init_done != NULL) {
112 tcpip_init_done(tcpip_init_done_arg);
120 TCPIP_MBOX_FETCH(&mbox, (
void **)&msg);
124 LWIP_ASSERT(
"tcpip_thread: invalid message", 0);
128 #if !LWIP_TCPIP_CORE_LOCKING 131 msg->msg.api_msg.function(msg->msg.api_msg.msg);
133 case TCPIP_MSG_API_CALL:
135 msg->msg.api_call.arg->err = msg->msg.api_call.function(msg->msg.api_call.arg);
140 #if !LWIP_TCPIP_CORE_LOCKING_INPUT 141 case TCPIP_MSG_INPKT:
143 msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif);
148 #if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS 149 case TCPIP_MSG_TIMEOUT:
151 sys_timeout(msg->msg.tmo.msecs, msg->msg.tmo.h, msg->msg.tmo.arg);
154 case TCPIP_MSG_UNTIMEOUT:
156 sys_untimeout(msg->msg.tmo.h, msg->msg.tmo.arg);
161 case TCPIP_MSG_CALLBACK:
163 msg->msg.cb.function(msg->msg.cb.ctx);
167 case TCPIP_MSG_CALLBACK_STATIC:
169 msg->msg.cb.function(msg->msg.cb.ctx);
174 LWIP_ASSERT(
"tcpip_thread: invalid message", 0);
190 #if LWIP_TCPIP_CORE_LOCKING_INPUT 194 ret = input_fn(p, inp);
207 msg->type = TCPIP_MSG_INPKT;
209 msg->msg.inp.netif = inp;
210 msg->msg.inp.input_fn = input_fn;
264 msg->type = TCPIP_MSG_CALLBACK;
265 msg->msg.cb.function =
function;
266 msg->msg.cb.ctx = ctx;
278 #if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS 288 tcpip_timeout(u32_t msecs, sys_timeout_handler h,
void *arg)
299 msg->type = TCPIP_MSG_TIMEOUT;
300 msg->msg.tmo.msecs = msecs;
302 msg->msg.tmo.arg = arg;
315 tcpip_untimeout(sys_timeout_handler h,
void *arg)
326 msg->type = TCPIP_MSG_UNTIMEOUT;
328 msg->msg.tmo.arg = arg;
350 #if LWIP_TCPIP_CORE_LOCKING 357 TCPIP_MSG_VAR_DECLARE(msg);
359 LWIP_ASSERT(
"semaphore not initialized",
sys_sem_valid(sem));
362 TCPIP_MSG_VAR_ALLOC(msg);
363 TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API;
364 TCPIP_MSG_VAR_REF(msg).msg.api_msg.function = fn;
365 TCPIP_MSG_VAR_REF(msg).msg.api_msg.msg = apimsg;
368 TCPIP_MSG_VAR_FREE(msg);
386 #if LWIP_TCPIP_CORE_LOCKING 393 TCPIP_MSG_VAR_DECLARE(msg);
395 #if !LWIP_NETCONN_SEM_PER_THREAD 404 TCPIP_MSG_VAR_ALLOC(msg);
405 TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API_CALL;
406 TCPIP_MSG_VAR_REF(msg).msg.api_call.arg = call;
407 TCPIP_MSG_VAR_REF(msg).msg.api_call.function = fn;
408 #if LWIP_NETCONN_SEM_PER_THREAD 409 TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = LWIP_NETCONN_THREAD_SEM_GET();
411 TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = &call->sem;
415 TCPIP_MSG_VAR_FREE(msg);
417 #if !LWIP_NETCONN_SEM_PER_THREAD 433 struct tcpip_callback_msg*
440 msg->type = TCPIP_MSG_CALLBACK_STATIC;
441 msg->msg.cb.function =
function;
442 msg->msg.cb.ctx = ctx;
443 return (
struct tcpip_callback_msg*)msg;
485 tcpip_init_done = initfunc;
486 tcpip_init_done_arg = arg;
488 LWIP_ASSERT(
"failed to create tcpip_thread mbox", 0);
490 #if LWIP_TCPIP_CORE_LOCKING 492 LWIP_ASSERT(
"failed to create lock_tcpip_core", 0);
506 pbuf_free_int(
void *p)
err_t(* netif_input_fn)(struct pbuf *p, struct netif *inp)
void sys_sem_free(sys_sem_t *sem)
void(* tcpip_init_done_fn)(void *arg)
void mem_free(void *rmem)
void(* tcpip_callback_fn)(void *ctx)
err_t mem_free_callback(void *m)
err_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block)
err_t tcpip_trycallback(struct tcpip_callback_msg *msg)
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
err_t tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call_data *call)
err_t pbuf_free_callback(struct pbuf *p)
void memp_free(memp_t type, void *mem)
err_t tcpip_inpkt(struct pbuf *p, struct netif *inp, netif_input_fn input_fn)
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio)
#define NETIF_FLAG_ETHERNET
err_t sys_mbox_new(sys_mbox_t *mbox, int size)
void sys_mbox_post(sys_mbox_t *mbox, void *msg)
err_t tcpip_input(struct pbuf *p, struct netif *inp)
void sys_sem_signal(sys_sem_t *sem)
err_t sys_sem_new(sys_sem_t *sem, u8_t count)
#define LWIP_TCPIP_THREAD_ALIVE()
err_t tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t *sem)
void tcpip_init(tcpip_init_done_fn initfunc, void *arg)
#define LWIP_DEBUGF(debug, message)
#define TCPIP_THREAD_STACKSIZE
#define NETIF_FLAG_ETHARP
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
#define LWIP_UNUSED_ARG(x)
u8_t pbuf_free(struct pbuf *p)
void tcpip_callbackmsg_delete(struct tcpip_callback_msg *msg)
void * memp_malloc(memp_t type)
int sys_sem_valid(sys_sem_t *sem)
#define sys_mbox_valid_val(mbox)
err_t sys_mutex_new(sys_mutex_t *mutex)
struct tcpip_callback_msg * tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx)
#define TCPIP_THREAD_NAME
#define TCPIP_THREAD_PRIO