diff options
Diffstat (limited to 'nuttx/net/send.c')
-rw-r--r-- | nuttx/net/send.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/nuttx/net/send.c b/nuttx/net/send.c index dc5dbc75b..07a3a0a72 100644 --- a/nuttx/net/send.c +++ b/nuttx/net/send.c @@ -42,8 +42,11 @@ #include <sys/types.h> #include <sys/socket.h> + #include <string.h> #include <errno.h> +#include <debug.h> + #include <arch/irq.h> #include "net-internal.h" @@ -101,11 +104,13 @@ static void send_interrupt(struct uip_driver_s *dev, void *private) struct send_s *pstate = (struct send_s *)private; struct uip_conn *conn; + vdbg("Interrupt uip_flags: %02x state: %d\n", uip_flags, pstate->snd_state); + /* If the data has not been sent OR if it needs to be retransmitted, * then send it now. */ - if (pstate->snd_state != STATE_DATA_SENT || uip_rexmit()) + if (pstate->snd_state != STATE_DATA_SENT || uip_rexmit_event()) { if (pstate->snd_buflen > uip_mss()) { @@ -117,11 +122,12 @@ static void send_interrupt(struct uip_driver_s *dev, void *private) } pstate->snd_state = STATE_DATA_SENT; + vdbg("state: STATE_DATA_SENT(%d)\n", STATE_DATA_SENT); } /* Check if all data has been sent and acknowledged */ - else if (pstate->snd_state == STATE_DATA_SENT && uip_acked()) + else if (pstate->snd_state == STATE_DATA_SENT && uip_ack_event()) { /* Yes.. the data has been sent AND acknowledge */ @@ -136,9 +142,12 @@ static void send_interrupt(struct uip_driver_s *dev, void *private) /* Send again on the next poll */ pstate->snd_state = STATE_POLLWAIT; + vdbg("state: STATE_POLLWAIT(%d)\n", STATE_POLLWAIT); } else { + vdbg("state: Data sent\n"); + /* All data has been sent */ pstate->snd_sent += pstate->snd_buflen; @@ -163,6 +172,8 @@ static void send_interrupt(struct uip_driver_s *dev, void *private) else if ((uip_flags & (UIP_CLOSE|UIP_ABORT|UIP_TIMEDOUT)) != 0) { + vdbg("state: TCP failure\n"); + /* Stop further callbacks */ conn = (struct uip_conn *)pstate->snd_sock->s_conn; @@ -305,12 +316,14 @@ ssize_t send(int sockfd, const void *buf, size_t len, int flags) * automatically re-enabled when the task restarts. */ + vdbg("Sending %d bytes...\n", len); ret = sem_wait(&state. snd_sem); /* Make sure that no further interrupts are processed */ conn->data_private = NULL; conn->data_event = NULL; + vdbg("Sent\n"); } sem_destroy(&state. snd_sem); |