diff --git a/wifiHD/.project b/wifiHD/.project
index 74f16db04..a13ff4f9d 100644
--- a/wifiHD/.project
+++ b/wifiHD/.project
@@ -78,10 +78,15 @@
2
framework:/com.atmel.avr32.sf.uc3
+
+ arduino
+ 2
+ /media/WindowsNTFS/Projects/Arduino/Arduino-git
+
include
2
- C:/usr/avr32/include
+ /home/dlafauci/C::/usr/avr32/include
diff --git a/wifiHD/Release/wifiHD.elf b/wifiHD/Release/wifiHD.elf
new file mode 100644
index 000000000..06dcf11ee
Binary files /dev/null and b/wifiHD/Release/wifiHD.elf differ
diff --git a/wifiHD/src/ard_tcp.c b/wifiHD/src/ard_tcp.c
index 47dfbb7e6..f723ec562 100644
--- a/wifiHD/src/ard_tcp.c
+++ b/wifiHD/src/ard_tcp.c
@@ -30,113 +30,100 @@
#define TTCP_MODE_TRANSMIT 0
#define TTCP_MODE_RECEIVE 1
-
-
struct ttcp {
- /* options */
- struct ip_addr addr; /* host */
- uint16_t port; /* -p */
- uint16_t nbuf; /* -n */
- int mode; /* -t */
- int verbose; /* -v */
- int udp; /* -u */
- uint8_t sock;
- uint8_t buff_sent;
+ /* options */
+ struct ip_addr addr; /* host */
+ uint16_t port; /* -p */
+ uint16_t nbuf; /* -n */
+ int mode; /* -t */
+ int verbose; /* -v */
+ int udp; /* -u */
+ uint8_t sock;
+ uint8_t buff_sent;
- /* common */
- uint16_t print_cnt;
- uint32_t start_time;
- uint32_t left;
- uint32_t recved;
- ard_tcp_done_cb_t* done_cb;
- void* opaque;
- uint32_t buflen; /* -l */
- uint32_t tid;
+ /* common */
+ uint16_t print_cnt;
+ uint32_t start_time;
+ uint32_t left;
+ uint32_t recved;
+ ard_tcp_done_cb_t* done_cb;
+ void* opaque;
+ uint32_t buflen; /* -l */
+ uint32_t tid;
- /* TCP specific */
- struct tcp_pcb* tpcb;
- struct tcp_pcb* lpcb;
- char* payload;
+ /* TCP specific */
+ struct tcp_pcb* tpcb;
+ struct tcp_pcb* lpcb;
+ char* payload;
- /* UDP specific */
- int udp_started;
+ /* UDP specific */
+ int udp_started;
uint16_t udp_end_marker_left;
- struct udp_pcb* upcb;
+ struct udp_pcb* upcb;
};
unsigned int startTime = 0;
-
/**
* Calculate bitrate based on number of bytes transmitted and elapsed time
*/
-static void
-ard_tcp_print_stats(struct ttcp *ttcp)
-{
- uint32_t ms = timer_get_ms() - ttcp->start_time;
- uint32_t bytes = ttcp->mode == TTCP_MODE_TRANSMIT ?
- ttcp->nbuf * ttcp->buflen : ttcp->recved;
+static void ard_tcp_print_stats(struct ttcp *ttcp) {
+ uint32_t ms = timer_get_ms() - ttcp->start_time;
+ uint32_t bytes = ttcp->mode == TTCP_MODE_TRANSMIT ? ttcp->nbuf
+ * ttcp->buflen : ttcp->recved;
- if (ttcp->verbose)
- printk("\n");
-
- printk("TTCP [%p]: %d bytes processed, %d.%d KB/s (%s/%s)\n",
- ttcp, bytes, bytes / ms, bytes % ms, ttcp->udp ? "udp" : "tcp",
- ttcp->mode == TTCP_MODE_TRANSMIT ? "tx" : "rx");
+ if (ttcp->verbose)
+ printk("\n");
+
+ printk("TTCP [%p]: %d bytes processed, %d.%d KB/s (%s/%s)\n", ttcp, bytes,
+ bytes / ms, bytes % ms, ttcp->udp ? "udp" : "tcp", ttcp->mode
+ == TTCP_MODE_TRANSMIT ? "tx" : "rx");
}
-
/**
* Clean up and free the ttcp structure
*/
-static void
-ard_tcp_destroy(struct ttcp* ttcp)
-{
+static void ard_tcp_destroy(struct ttcp* ttcp) {
err_t err = ERR_OK;
- if (ttcp->tpcb) {
- tcp_arg(ttcp->tpcb, NULL);
- tcp_sent(ttcp->tpcb, NULL);
- tcp_recv(ttcp->tpcb, NULL);
- tcp_err(ttcp->tpcb, NULL);
- err = tcp_close(ttcp->tpcb);
- printk("Closing tpcb: state:0x%x err:%d\n",
- ttcp->tpcb->state, err);
- }
+ if (ttcp->tpcb) {
+ tcp_arg(ttcp->tpcb, NULL);
+ tcp_sent(ttcp->tpcb, NULL);
+ tcp_recv(ttcp->tpcb, NULL);
+ tcp_err(ttcp->tpcb, NULL);
+ err = tcp_close(ttcp->tpcb);
+ printk("Closing tpcb: state:0x%x err:%d\n", ttcp->tpcb->state, err);
+ }
- if (ttcp->lpcb) {
- tcp_arg(ttcp->lpcb, NULL);
- tcp_accept(ttcp->lpcb, NULL);
- tcp_close(ttcp->lpcb);
- printk("Closing lpcb: state:0x%x err:%d\n",
- ttcp->lpcb->state, err);
- }
+ if (ttcp->lpcb) {
+ tcp_arg(ttcp->lpcb, NULL);
+ tcp_accept(ttcp->lpcb, NULL);
+ tcp_close(ttcp->lpcb);
+ printk("Closing lpcb: state:0x%x err:%d\n", ttcp->lpcb->state, err);
+ }
- if (ttcp->upcb) {
- udp_disconnect(ttcp->upcb);
- udp_remove(ttcp->upcb);
- }
+ if (ttcp->upcb) {
+ udp_disconnect(ttcp->upcb);
+ udp_remove(ttcp->upcb);
+ }
- if (ttcp->payload)
- free(ttcp->payload);
-
- free(ttcp);
+ if (ttcp->payload)
+ free(ttcp->payload);
+
+ free(ttcp);
}
-
/**
* Invoked when transfer is done or aborted (non-zero result).
*/
-static void
-ard_tcp_done(struct ttcp* ttcp, int result)
-{
- if (result == 0)
- ard_tcp_print_stats(ttcp);
+static void ard_tcp_done(struct ttcp* ttcp, int result) {
+ if (result == 0)
+ ard_tcp_print_stats(ttcp);
- if (ttcp->done_cb)
- ttcp->done_cb(ttcp->opaque, result);
+ if (ttcp->done_cb)
+ ttcp->done_cb(ttcp->opaque, result);
- ard_tcp_destroy(ttcp);
+ ard_tcp_destroy(ttcp);
}
static void
@@ -148,69 +135,63 @@ tcp_timeout_cb(void *ctx);
* Called upon connect and when there's space available in the TCP send window
*
*/
-static void
-tcp_send_data(struct ttcp *ttcp)
-{
- err_t err;
- uint32_t len;
-
- len = ttcp->left;
+static void tcp_send_data(struct ttcp *ttcp) {
+ err_t err;
+ uint32_t len;
- /* don't send more than we have in the payload */
- if (len > ttcp->buflen)
- len = ttcp->buflen;
+ len = ttcp->left;
- /* We cannot send more data than space available in the send
- buffer. */
- if (len > tcp_sndbuf(ttcp->tpcb))
- len = tcp_sndbuf(ttcp->tpcb);
+ /* don't send more than we have in the payload */
+ if (len > ttcp->buflen)
+ len = ttcp->buflen;
- do {
- err = tcp_write(ttcp->tpcb, ttcp->payload, len, 0);
- if (err == ERR_MEM)
- len /= 2;
- } while (err == ERR_MEM && len > 1);
+ /* We cannot send more data than space available in the send
+ buffer. */
+ if (len > tcp_sndbuf(ttcp->tpcb))
+ len = tcp_sndbuf(ttcp->tpcb);
- tcp_output(ttcp->tpcb);
- if (err == ERR_OK)
- ttcp->left -= len;
- else
- printk("TTCP [%p]: tcp_write failed\n", ttcp);
-//
-// ttcp->tid = timer_sched_timeout_cb(0, TIMEOUT_ONESHOT,
-// tcp_timeout_cb, ttcp);
+ do {
+ err = tcp_write(ttcp->tpcb, ttcp->payload, len, 0);
+ if (err == ERR_MEM)
+ len /= 2;
+ } while (err == ERR_MEM && len > 1);
+
+ tcp_output(ttcp->tpcb);
+ if (err == ERR_OK)
+ ttcp->left -= len;
+ else
+ printk("TTCP [%p]: tcp_write failed\n", ttcp);
+ //
+ // ttcp->tid = timer_sched_timeout_cb(0, TIMEOUT_ONESHOT,
+ // tcp_timeout_cb, ttcp);
}
-
/**
* Only used in TCP mode.
* Scheduled by tcp_send_data(). tcp_sent() is not used for performance reasons.
*/
-static void
-tcp_timeout_cb(void *ctx)
-{
- struct ttcp *ttcp = ctx;
+static void tcp_timeout_cb(void *ctx) {
+ struct ttcp *ttcp = ctx;
- if (ttcp->left > 0) {
- tcp_send_data(ttcp);
- if (ttcp->verbose) {
- printk(".");
- if (ttcp->print_cnt % 80 == 0)
- printk("\n");
- ttcp->print_cnt++;
- }
- return;
- }
+ if (ttcp->left > 0) {
+ tcp_send_data(ttcp);
+ if (ttcp->verbose) {
+ printk(".");
+ if (ttcp->print_cnt % 80 == 0)
+ printk("\n");
+ ttcp->print_cnt++;
+ }
+ return;
+ }
- /* all sent - empty queue */
- if (ttcp->tpcb->snd_queuelen)
- ttcp->tid = timer_sched_timeout_cb(0, TIMEOUT_ONESHOT,
- tcp_timeout_cb, ttcp);
- else
- ard_tcp_done(ttcp, 0);
+ /* all sent - empty queue */
+ if (ttcp->tpcb->snd_queuelen)
+ ttcp->tid = timer_sched_timeout_cb(0, TIMEOUT_ONESHOT, tcp_timeout_cb,
+ ttcp);
+ else
+ ard_tcp_done(ttcp, 0);
}
-
#if 0
/**
* Only used in TCP mode.
@@ -219,171 +200,159 @@ tcp_timeout_cb(void *ctx)
static err_t
tcp_sent_cb(void *arg, struct tcp_pcb *pcb, u16_t len)
{
- struct ttcp *ttcp = arg;
+ struct ttcp *ttcp = arg;
- if (ttcp->left > 0) {
- tcp_send_data(ttcp);
- if (ttcp->verbose) {
- printk(".");
- if (ttcp->print_cnt % 80 == 0)
- printk("\n");
- ttcp->print_cnt++;
- }
+ if (ttcp->left > 0) {
+ tcp_send_data(ttcp);
+ if (ttcp->verbose) {
+ printk(".");
+ if (ttcp->print_cnt % 80 == 0)
+ printk("\n");
+ ttcp->print_cnt++;
+ }
- } else if (pcb->snd_queuelen == 0) {
- ard_tcp_done(ttcp, 0);
- }
-
- return ERR_OK;
+ } else if (pcb->snd_queuelen == 0) {
+ ard_tcp_done(ttcp, 0);
+ }
+
+ return ERR_OK;
}
#endif
/**
* Only used in TCP mode.
*/
-static err_t
-tcp_connect_cb(void *arg, struct tcp_pcb *tpcb, err_t err)
-{
- struct ttcp* ttcp = arg;
+static err_t tcp_connect_cb(void *arg, struct tcp_pcb *tpcb, err_t err) {
+ struct ttcp* ttcp = arg;
- printk("TTCP [%p]: connect\n", ttcp);
+ printk("TTCP [%p]: connect\n", ttcp);
- ttcp->start_time = timer_get_ms();
+ ttcp->start_time = timer_get_ms();
#if 0
- tcp_sent(tpcb, tcp_sent_cb);
+ tcp_sent(tpcb, tcp_sent_cb);
- tcp_send_data(ttcp);
+ tcp_send_data(ttcp);
#endif
- return ERR_OK;
+ return ERR_OK;
}
-
/**
* Only used in TCP mode.
- */
-static void
-atcp_conn_err_cb(void *arg, err_t err)
-{
- struct ttcp* ttcp = arg;
+ */
+static void atcp_conn_err_cb(void *arg, err_t err) {
+ struct ttcp* ttcp = arg;
- printk("TTCP [%p]: connection error:0x%x\n", ttcp,err);
-
- ttcp->tpcb = NULL; /* free'd by lwip upon return */
- ard_tcp_done(ttcp, err);
+ printk("TTCP [%p]: connection error:0x%x\n", ttcp, err);
+
+ ttcp->tpcb = NULL; /* free'd by lwip upon return */
+ ard_tcp_done(ttcp, err);
}
-
/**
* Only used in TCP mode.
*/
-static err_t
-atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
-{
- struct ttcp* ttcp = arg;
- /* p will be NULL when remote end is done */
- if (p == NULL) {
- ard_tcp_print_stats(ttcp);
- ard_tcp_done(ttcp, 0);
- return ERR_OK;
- }
- DATA_LED_ON();
- /* for print_stats() */
- ttcp->recved += p->tot_len;
+static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
+ err_t err) {
+ struct ttcp* ttcp = arg;
+ /* p will be NULL when remote end is done */
+ if (p == NULL) {
+ ard_tcp_print_stats(ttcp);
+ ard_tcp_done(ttcp, 0);
+ return ERR_OK;
+ }
+ DATA_LED_ON();
+ /* for print_stats() */
+ ttcp->recved += p->tot_len;
- if (ttcp->verbose) {
- INFO("Recv:%d\n",p->tot_len);
- DUMP(p->payload, p->tot_len);
- ttcp->print_cnt++;
- }
+ if (ttcp->verbose) {
+ INFO("Recv:%d\n",p->tot_len);
+ DUMP(p->payload, p->tot_len);
+ ttcp->print_cnt++;
+ }
- insert_pBuf(p, ttcp->sock, (void*)pcb);
- pbuf_free(p);
- tcp_recved(pcb, p->tot_len);
- DATA_LED_OFF();
- return ERR_OK;
+ insert_pBuf(p, ttcp->sock, (void*) pcb);
+ pbuf_free(p);
+ tcp_recved(pcb, p->tot_len);
+ DATA_LED_OFF();
+ return ERR_OK;
}
-void ack_recved(void* pcb, int len)
-{
+void ack_recved(void* pcb, int len) {
// Comment the call because it is activated on atcp_recv_cb
//tcp_recved(pcb, len);
}
-static err_t
-atcp_poll(void *arg, struct tcp_pcb *pcb)
-{
- return ERR_OK;
+static err_t atcp_poll(void *arg, struct tcp_pcb *pcb) {
+ return ERR_OK;
}
-
/**
* Only used in TCP mode.
*/
-static err_t
-atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err)
-{
- struct ttcp* ttcp = arg;
+static err_t atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) {
+ struct ttcp* ttcp = arg;
- ttcp->tpcb = newpcb;
- tcp_recv(ttcp->tpcb, atcp_recv_cb);
- tcp_err(ttcp->tpcb, atcp_conn_err_cb);
- tcp_poll(ttcp->tpcb, atcp_poll, 4);
-
- printk("ARD TCP [%p]: accept new [%p]\n", ttcp, newpcb);
- INFO("local:%d remote:%d state:%d\n", newpcb->local_port, newpcb->remote_port, newpcb->state);
- ttcp->start_time = timer_get_ms();
- return ERR_OK;
+ ttcp->tpcb = newpcb;
+ tcp_recv(ttcp->tpcb, atcp_recv_cb);
+ tcp_err(ttcp->tpcb, atcp_conn_err_cb);
+ tcp_poll(ttcp->tpcb, atcp_poll, 4);
+
+ printk("ARD TCP [%p]: accept new [%p]\n", ttcp, newpcb);
+ INFO("local:%d remote:%d state:%d\n", newpcb->local_port, newpcb->remote_port, newpcb->state);
+ ttcp->start_time = timer_get_ms();
+ return ERR_OK;
}
-
-
-
/**
* Start TCP transfer.
*/
-static int
-atcp_start(struct ttcp* ttcp)
-{
- ttcp->tpcb = tcp_new();
- if (ttcp->tpcb == NULL) {
- printk("TTCP [%p]: could not allocate pcb\n", ttcp);
- return -1;
- }
+static int atcp_start(struct ttcp* ttcp) {
+ err_t err = ERR_OK;
+ ttcp->tpcb = tcp_new();
+ if (ttcp->tpcb == NULL) {
+ printk("TTCP [%p]: could not allocate pcb\n", ttcp);
+ return -1;
+ }
- ttcp->payload = malloc(ttcp->buflen);
- if (ttcp->payload == NULL) {
- printk("TTCP [%p]: could not allocate payload\n", ttcp);
- return -1;
- }
-
- tcp_arg(ttcp->tpcb, ttcp);
+ ttcp->payload = malloc(ttcp->buflen);
+ if (ttcp->payload == NULL) {
+ printk("TTCP [%p]: could not allocate payload\n", ttcp);
+ return -1;
+ }
- if (ttcp->mode == TTCP_MODE_TRANSMIT) {
- tcp_err(ttcp->tpcb, atcp_conn_err_cb);
- tcp_recv(ttcp->tpcb, atcp_recv_cb);
- if (tcp_connect(ttcp->tpcb, &ttcp->addr, ttcp->port,
- tcp_connect_cb) != ERR_OK) {
- printk("TTCP [%p]: tcp connect failed\n", ttcp);
- return -1;
- }
+ tcp_arg(ttcp->tpcb, ttcp);
- } else {
- tcp_bind(ttcp->tpcb, IP_ADDR_ANY, ttcp->port);
- ttcp->lpcb = tcp_listen(ttcp->tpcb);
- if (ttcp->lpcb == NULL) {
- printk("TTCP [%p]: listen failed\n", ttcp);
- return -1;
- }
- printk("ttcp:%p lpcb:%p pcb:%p\n", ttcp, ttcp->lpcb, ttcp->tpcb);
- printk("local:%d remote:%d state:%d\n", ttcp->lpcb->local_port,
- ttcp->lpcb->remote_port, ttcp->lpcb->state);
- tcp_accept(ttcp->lpcb, atcp_accept_cb);
- }
-
- return 0;
+ if (ttcp->mode == TTCP_MODE_TRANSMIT) {
+ tcp_err(ttcp->tpcb, atcp_conn_err_cb);
+ tcp_recv(ttcp->tpcb, atcp_recv_cb);
+ if (tcp_connect(ttcp->tpcb, &ttcp->addr, ttcp->port, tcp_connect_cb)
+ != ERR_OK) {
+ printk("TTCP [%p]: tcp connect failed\n", ttcp);
+ atcp_conn_err_cb(ttcp, err);
+ return -1;
+ }
+
+ } else {
+ err = tcp_bind(ttcp->tpcb, IP_ADDR_ANY, ttcp->port);
+ if (err != ERR_OK){
+ printk("TTCP [%p]: bind failed err=%d\n", ttcp, err);
+ return -1;
+ }
+
+ ttcp->lpcb = tcp_listen(ttcp->tpcb);
+ if (ttcp->lpcb == NULL) {
+ printk("TTCP [%p]: listen failed\n", ttcp);
+ return -1;
+ }
+ printk("ttcp:%p lpcb:%p pcb:%p\n", ttcp, ttcp->lpcb, ttcp->tpcb);
+ printk("local:%d remote:%d state:%d\n", ttcp->lpcb->local_port,
+ ttcp->lpcb->remote_port, ttcp->lpcb->state);
+ tcp_accept(ttcp->lpcb, atcp_accept_cb);
+ }
+
+ return 0;
}
-
static void
udp_send_data(struct ttcp* ttcp);
@@ -391,30 +360,26 @@ udp_send_data(struct ttcp* ttcp);
* Only used in UDP mode. Scheduled after data has been sent in udp_send_data()
* if we have more data to send.
*/
-static void udp_timeout_cb(void *ctx)
-{
- struct ttcp* ttcp = ctx;
- udp_send_data(ttcp);
+static void udp_timeout_cb(void *ctx) {
+ struct ttcp* ttcp = ctx;
+ udp_send_data(ttcp);
}
+static int udp_send_bytes(struct ttcp* ttcp, uint32_t len) {
+ struct pbuf* p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM);
+ if (p == NULL) {
+ printk("TTCP [%p]: could not allocate pbuf\n", ttcp);
+ return -1;
+ }
-static int
-udp_send_bytes(struct ttcp* ttcp, uint32_t len)
-{
- struct pbuf* p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM);
- if (p == NULL) {
- printk("TTCP [%p]: could not allocate pbuf\n", ttcp);
- return -1;
- }
+ if (udp_send(ttcp->upcb, p) != ERR_OK) {
+ printk("TTCP [%p]: udp_send() failed\n", ttcp);
+ pbuf_free(p);
+ return -1;
+ }
- if (udp_send(ttcp->upcb, p) != ERR_OK) {
- printk("TTCP [%p]: udp_send() failed\n", ttcp);
- pbuf_free(p);
- return -1;
- }
-
- pbuf_free(p);
- return 0;
+ pbuf_free(p);
+ return 0;
}
/**
@@ -422,259 +387,230 @@ udp_send_bytes(struct ttcp* ttcp, uint32_t len)
* ttcp data has been sent, a number of end markers will be sent. After
* end marker transmission, this function will complete the ttcp process.
*/
-static void
-udp_send_data(struct ttcp* ttcp)
-{
- /* send start marker first time */
- if (!ttcp->udp_started) {
- if (udp_send_bytes(ttcp, 4) == 0) {
- ttcp->udp_started = 1;
- ttcp->start_time = timer_get_ms();
- }
- }
+static void udp_send_data(struct ttcp* ttcp) {
+ /* send start marker first time */
+ if (!ttcp->udp_started) {
+ if (udp_send_bytes(ttcp, 4) == 0) {
+ ttcp->udp_started = 1;
+ ttcp->start_time = timer_get_ms();
+ }
+ }
- /* normal case */
- else if (ttcp->left) {
- /* send data */
- if (udp_send_bytes(ttcp, ttcp->buflen) == 0)
- ttcp->left -= ttcp->buflen;
- }
+ /* normal case */
+ else if (ttcp->left) {
+ /* send data */
+ if (udp_send_bytes(ttcp, ttcp->buflen) == 0)
+ ttcp->left -= ttcp->buflen;
+ }
- /* end marker? */
- else if (ttcp->left == 0 && ttcp->udp_end_marker_left) {
- if (udp_send_bytes(ttcp, 4) == 0)
- ttcp->udp_end_marker_left--;
- }
+ /* end marker? */
+ else if (ttcp->left == 0 && ttcp->udp_end_marker_left) {
+ if (udp_send_bytes(ttcp, 4) == 0)
+ ttcp->udp_end_marker_left--;
+ }
- /* all end markers sent */
- else if (ttcp->left == 0) {
- ard_tcp_done(ttcp, 0);
- return;
- }
+ /* all end markers sent */
+ else if (ttcp->left == 0) {
+ ard_tcp_done(ttcp, 0);
+ return;
+ }
- ttcp->tid = timer_sched_timeout_cb(0, TIMEOUT_ONESHOT,
- udp_timeout_cb, ttcp);
+ ttcp->tid
+ = timer_sched_timeout_cb(0, TIMEOUT_ONESHOT, udp_timeout_cb, ttcp);
}
-
/**
* Only used in UDP mode. Will finalize the ttcp process when an end marker
* is seen.
*/
-static void
-udp_recv_cb(void *arg, struct udp_pcb *upcb, struct pbuf *p,
- struct ip_addr *addr, u16_t port)
-{
- struct ttcp* ttcp = arg;
+static void udp_recv_cb(void *arg, struct udp_pcb *upcb, struct pbuf *p,
+ struct ip_addr *addr, u16_t port) {
+ struct ttcp* ttcp = arg;
- /* got start marker? we might lose this so if we get it just reset
+ /* got start marker? we might lose this so if we get it just reset
* the timer
*/
- if (!ttcp->udp_started && p->tot_len <= 4) {
- ttcp->start_time = timer_get_ms();
+ if (!ttcp->udp_started && p->tot_len <= 4) {
+ ttcp->start_time = timer_get_ms();
ttcp->udp_started = 1;
goto out;
}
- /* after receiving at least 1 byte, check end marker
+ /* after receiving at least 1 byte, check end marker
* don't check udp_started since we might have lost the start marker
*/
- if (ttcp->recved && p->tot_len <= 4) {
- ard_tcp_done(ttcp, 0);
- goto out;
- }
+ if (ttcp->recved && p->tot_len <= 4) {
+ ard_tcp_done(ttcp, 0);
+ goto out;
+ }
- /* for print_stats() */
- ttcp->recved += p->tot_len;
- if (ttcp->verbose) {
- printk(".");
- if (ttcp->print_cnt % 80 == 0)
- printk("\n");
- ttcp->print_cnt++;
- }
+ /* for print_stats() */
+ ttcp->recved += p->tot_len;
+ if (ttcp->verbose) {
+ printk(".");
+ if (ttcp->print_cnt % 80 == 0)
+ printk("\n");
+ ttcp->print_cnt++;
+ }
-out:
- pbuf_free(p);
+ out: pbuf_free(p);
}
-
/**
* Start UDP transfer.
*/
-static int
-udp_start(struct ttcp* ttcp)
-{
+static int udp_start(struct ttcp* ttcp) {
ttcp->udp_end_marker_left = 5;
- ttcp->upcb = udp_new();
- if (ttcp->upcb == NULL) {
- printk("TTCP [%p]: could not allocate pcb\n", ttcp);
- return -1;
- }
+ ttcp->upcb = udp_new();
+ if (ttcp->upcb == NULL) {
+ printk("TTCP [%p]: could not allocate pcb\n", ttcp);
+ return -1;
+ }
- if (ttcp->mode == TTCP_MODE_TRANSMIT) {
- if (udp_connect(ttcp->upcb, &ttcp->addr, ttcp->port) !=
- ERR_OK) {
- printk("TTCP [%p]: udp connect failed\n", ttcp);
- return -1;
- }
- udp_send_data(ttcp);
- } else {
- udp_recv(ttcp->upcb, udp_recv_cb, ttcp);
- }
+ if (ttcp->mode == TTCP_MODE_TRANSMIT) {
+ if (udp_connect(ttcp->upcb, &ttcp->addr, ttcp->port) != ERR_OK) {
+ printk("TTCP [%p]: udp connect failed\n", ttcp);
+ return -1;
+ }
+ udp_send_data(ttcp);
+ } else {
+ udp_recv(ttcp->upcb, udp_recv_cb, ttcp);
+ }
- return 0;
+ return 0;
}
-
/**
* Start a new ttcp transfer. It should be possible to call this function
* multiple times in order to get multiple ttcp streams. done_cb() will be
* invoked upon completion.
*
*/
-int
-ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque,
- ard_tcp_done_cb_t *done_cb,
- int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose, uint8_t sock, void** _ttcp)
-{
- struct ttcp* ttcp;
- int status;
-
- if (mode != TTCP_MODE_TRANSMIT && mode != TTCP_MODE_RECEIVE) {
- printk("TTCP [-]: invalid mode\n");
- return -1;
- }
+int ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque,
+ ard_tcp_done_cb_t *done_cb, int mode, uint16_t nbuf, uint16_t buflen,
+ int udp, int verbose, uint8_t sock, void** _ttcp) {
+ struct ttcp* ttcp;
+ int status;
- if (nbuf == 0) {
- printk("TTCP [-]: invalid nbuf\n");
- return -1;
- }
-
- if (buflen == 0) {
- printk("TTCP [-]: invalid buflen\n");
- return -1;
- }
+ if (mode != TTCP_MODE_TRANSMIT && mode != TTCP_MODE_RECEIVE) {
+ printk("TTCP [-]: invalid mode\n");
+ return -1;
+ }
- ttcp = calloc(1, sizeof(struct ttcp));
- if (ttcp == NULL) {
- printk("TTCP [-]: could not allocate memory for ttcp\n");
- return -1;
- }
+ if (nbuf == 0) {
+ printk("TTCP [-]: invalid nbuf\n");
+ return -1;
+ }
- ttcp->addr = addr;
- ttcp->port = port;
- ttcp->nbuf = nbuf;
- ttcp->mode = mode;
- ttcp->left = nbuf * buflen;
- ttcp->done_cb = done_cb;
- ttcp->opaque = opaque;
- ttcp->udp = udp;
- ttcp->verbose = verbose;
- ttcp->buflen = buflen;
-
- if (ttcp->udp)
- status = udp_start(ttcp);
- else
- status = atcp_start(ttcp);
+ if (buflen == 0) {
+ printk("TTCP [-]: invalid buflen\n");
+ return -1;
+ }
- if (status)
- {
- WARN("Start server FAILED!");
- goto fail;
- }
- printk("TTCP [%p-%p]: nbuf=%d, buflen=%d, port=%d (%s/%s)\n",
- ttcp, ttcp->tpcb, ttcp->nbuf, ttcp->buflen, ttcp->port,
- ttcp->udp ? "udp" : "tcp",
- ttcp->mode == TTCP_MODE_TRANSMIT ? "tx" : "rx");
+ ttcp = calloc(1, sizeof(struct ttcp));
+ if (ttcp == NULL) {
+ printk("TTCP [-]: could not allocate memory for ttcp\n");
+ return -1;
+ }
- *_ttcp = (void*)ttcp;
- ttcp->sock = sock;
- ttcp->buff_sent = 1;
+ ttcp->addr = addr;
+ ttcp->port = port;
+ ttcp->nbuf = nbuf;
+ ttcp->mode = mode;
+ ttcp->left = nbuf * buflen;
+ ttcp->done_cb = done_cb;
+ ttcp->opaque = opaque;
+ ttcp->udp = udp;
+ ttcp->verbose = verbose;
+ ttcp->buflen = buflen;
- return 0;
+ if (ttcp->udp)
+ status = udp_start(ttcp);
+ else
+ status = atcp_start(ttcp);
-fail:
- ard_tcp_destroy(ttcp);
- return -1;
+ if (status) {
+ WARN("Start server FAILED!");
+ goto fail;
+ }
+ printk("TTCP [%p-%p]: nbuf=%d, buflen=%d, port=%d (%s/%s)\n", ttcp,
+ ttcp->tpcb, ttcp->nbuf, ttcp->buflen, ttcp->port, ttcp->udp ? "udp"
+ : "tcp", ttcp->mode == TTCP_MODE_TRANSMIT ? "tx" : "rx");
+
+ *_ttcp = (void*) ttcp;
+ ttcp->sock = sock;
+ ttcp->buff_sent = 1;
+
+ return 0;
+
+ fail: ard_tcp_destroy(ttcp);
+ return -1;
}
-static void
-close_conn(struct ttcp *_ttcp)
-{
+static void close_conn(struct ttcp *_ttcp) {
ard_tcp_done(_ttcp, 0);
}
-
-void ard_tcp_stop(void* ttcp)
-{
- struct ttcp* _ttcp = (struct ttcp*)ttcp;
+void ard_tcp_stop(void* ttcp) {
+ struct ttcp* _ttcp = (struct ttcp*) ttcp;
printk("Stop client %p-%p-%p\n", _ttcp, _ttcp->tpcb, _ttcp->lpcb);
close_conn(_ttcp);
- asm("nop");
+ //asm("nop");
}
-uint8_t getStateTcp(void* p, bool client)
-{
- struct ttcp* _ttcp = (struct ttcp*)p;
+uint8_t getStateTcp(void* p, bool client) {
+ struct ttcp* _ttcp = (struct ttcp*) p;
- if ((_ttcp != NULL)&&(_ttcp->tpcb != NULL))
- {
-// INFO("ttcp:%p tpcb:%p state:%d lpcb:%p state:%d\n",
-// p, _ttcp->tpcb, _ttcp->tpcb->state,
-// _ttcp->lpcb, _ttcp->lpcb->state);
+ if ((_ttcp != NULL) && (_ttcp->tpcb != NULL)) {
+ // INFO("ttcp:%p tpcb:%p state:%d lpcb:%p state:%d\n",
+ // p, _ttcp->tpcb, _ttcp->tpcb->state,
+ // _ttcp->lpcb, _ttcp->lpcb->state);
if (client)
- return _ttcp->tpcb->state;
+ return _ttcp->tpcb->state;
else
return _ttcp->lpcb->state;
- }else{
+ } else {
WARN("TCP not initialized ttcp:%p tpcb:%p lpcb:%p\n",
_ttcp, ((_ttcp)?_ttcp->tpcb:0), ((_ttcp)?_ttcp->lpcb:0));
}
return CLOSED;
}
-uint8_t isDataSent(void* p )
-{
- struct ttcp* _ttcp = (struct ttcp*)p;
- if ((_ttcp != NULL)&&(_ttcp->tpcb != NULL))
- {
+uint8_t isDataSent(void* p) {
+ struct ttcp* _ttcp = (struct ttcp*) p;
+ if ((_ttcp != NULL) && (_ttcp->tpcb != NULL)) {
//INFO("ttcp:%p tpcb:%p sent:%d\n",p, _ttcp->tpcb, _ttcp->buff_sent);
return _ttcp->buff_sent;
- }else{
+ } else {
WARN("TCP null!\n");
}
return -1;
}
+static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len) {
+ struct ttcp *_ttcp;
-static err_t
-tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
-{
- struct ttcp *_ttcp;
+ LWIP_UNUSED_ARG(len);
- LWIP_UNUSED_ARG(len);
+ _ttcp = arg;
- _ttcp = arg;
-
- if (_ttcp->left > 0) {
- //send_data(pcb, hs);
- INFO("data left: %d", _ttcp->left );
- }
- _ttcp->buff_sent = 1;
- //INFO("%s: duration: %d\n", __FUNCTION__, timer_get_ms() - startTime);
- return ERR_OK;
+ if (_ttcp->left > 0) {
+ //send_data(pcb, hs);
+ INFO("data left: %d", _ttcp->left );
+ }
+ _ttcp->buff_sent = 1;
+ //INFO("%s: duration: %d\n", __FUNCTION__, timer_get_ms() - startTime);
+ return ERR_OK;
}
-int sendTcpData(void* p, uint8_t* buf, uint16_t len)
-{
+int sendTcpData(void* p, uint8_t* buf, uint16_t len) {
//INFO("buf:%p len:%d\n", buf, len);
//DUMP(buf,len);
startTime = timer_get_ms();
- struct ttcp* _ttcp = (struct ttcp*)p;
- if ((_ttcp != NULL)&&(_ttcp->tpcb != NULL)&&(buf!=NULL)&&(len!=0))
- {
+ struct ttcp* _ttcp = (struct ttcp*) p;
+ if ((_ttcp != NULL) && (_ttcp->tpcb != NULL) && (buf != NULL) && (len != 0)) {
_ttcp->buff_sent = 0;
//pbuf_take(buf, len, _ttcp->);
memcpy(_ttcp->payload, buf, len);
@@ -687,7 +623,9 @@ int sendTcpData(void* p, uint8_t* buf, uint16_t len)
return WL_FAILURE;
}
-char usage[] = "Usage: ttcp -t/-r [-options] host\n\
+char
+ usage[] =
+ "Usage: ttcp -t/-r [-options] host\n\
-l length of bufs written to network (default 1024)\n\
-n number of bufs written to network (default 1024)\n\
-p port number to send to (default 2000)\n\
@@ -697,67 +635,64 @@ char usage[] = "Usage: ttcp -t/-r [-options] host\n\
/**
*
*/
-cmd_state_t
-cmd_ttcp(int argc, char* argv[], void* ctx)
-{
+cmd_state_t cmd_ttcp(int argc, char* argv[], void* ctx) {
- int c;
- int mode = TTCP_MODE_TRANSMIT;
- int verbose = 0;
- uint16_t buflen = 1024;
- uint16_t nbuf = 1024;
- uint16_t port = 2000;
- int udp = 0;
- struct ip_addr addr = { 0 };
+ int c;
+ int mode = TTCP_MODE_TRANSMIT;
+ int verbose = 0;
+ uint16_t buflen = 1024;
+ uint16_t nbuf = 1024;
+ uint16_t port = 2000;
+ int udp = 0;
+ struct ip_addr addr = { 0 };
- optind = 1;
- while ((c = getopt(argc, argv, "utrl:n:p:v")) != -1) {
- switch (c) {
- case 't':
- mode = TTCP_MODE_TRANSMIT;
- break;
- case 'r':
- mode = TTCP_MODE_RECEIVE;
- break;
- case 'l':
- buflen = atoi(optarg);
- break;
- case 'v':
- verbose = 1;
- break;
- case 'n':
- nbuf = atoi(optarg);
- break;
- case 'u':
- udp = 1;
- break;
- case 'p':
- port = atoi(optarg);
- break;
- }
- }
+ optind = 1;
+ while ((c = getopt(argc, argv, "utrl:n:p:v")) != -1) {
+ switch (c) {
+ case 't':
+ mode = TTCP_MODE_TRANSMIT;
+ break;
+ case 'r':
+ mode = TTCP_MODE_RECEIVE;
+ break;
+ case 'l':
+ buflen = atoi(optarg);
+ break;
+ case 'v':
+ verbose = 1;
+ break;
+ case 'n':
+ nbuf = atoi(optarg);
+ break;
+ case 'u':
+ udp = 1;
+ break;
+ case 'p':
+ port = atoi(optarg);
+ break;
+ }
+ }
- if (mode == TTCP_MODE_TRANSMIT) {
- if (optind >= argc) {
- printk("%s", usage);
- return CMD_DONE;
- }
+ if (mode == TTCP_MODE_TRANSMIT) {
+ if (optind >= argc) {
+ printk("%s", usage);
+ return CMD_DONE;
+ }
- addr = str2ip(argv[optind]);
- if (!addr.addr) {
- printk("%s", usage);
- return CMD_DONE;
- }
- }
- void* _ttcp = NULL;
- if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp,
- verbose,0,&_ttcp))
- return CMD_DONE;
+ addr = str2ip(argv[optind]);
+ if (!addr.addr) {
+ printk("%s", usage);
+ return CMD_DONE;
+ }
+ }
+ void* _ttcp = NULL;
+ if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose,
+ 0, &_ttcp))
+ return CMD_DONE;
- return CMD_DONE;
+ return CMD_DONE;
}
-
#if 0
#include "lwip/sockets.h"
@@ -765,13 +700,13 @@ void testlwip()
{
int Sock;
fd_set fdsetR;
- FD_ZERO(&fdsetR);
- FD_SET(Sock, &fdsetR);
- fd_set fdsetE = fdsetR;
+ FD_ZERO(&fdsetR);
+ FD_SET(Sock, &fdsetR);
+ fd_set fdsetE = fdsetR;
- int rc;
- const int cMillies = 10000;
- struct timeval timeout;
+ int rc;
+ const int cMillies = 10000;
+ struct timeval timeout;
timeout.tv_sec = cMillies / 1000;
timeout.tv_usec = (cMillies % 1000) * 1000;
//rc = lwip_select(Sock + 1, &fdsetR, NULL, &fdsetE, &timeout);
diff --git a/wifiHD/src/ard_utils.h b/wifiHD/src/ard_utils.h
index 8430e16a3..54cf77bc7 100644
--- a/wifiHD/src/ard_utils.h
+++ b/wifiHD/src/ard_utils.h
@@ -9,7 +9,7 @@
#define ARD_UTILS_H_
#include "gpio.h"
-#include "arduino/arduino.h"
+#include "ARDUINO/arduino.h"
#define INIT_SIGNAL_FOR_SPI() gpio_enable_pin_pull_up(ARDUINO_HANDSHAKE_PIN)
#define BUSY_FOR_SPI() gpio_set_gpio_pin(ARDUINO_HANDSHAKE_PIN)
#define AVAIL_FOR_SPI() gpio_clr_gpio_pin(ARDUINO_HANDSHAKE_PIN)
diff --git a/wifiHD/src/lwipopts.h b/wifiHD/src/lwipopts.h
index 5e5243de2..8a36d04f9 100644
--- a/wifiHD/src/lwipopts.h
+++ b/wifiHD/src/lwipopts.h
@@ -423,8 +423,8 @@
#undef DHCP_DOES_ARP_CHECK
-#if 1
-#define LWIP_DEBUG 1
+#if 0
+#define LWIP_DEBUG 0
//#define NETIF_DEBUG LWIP_DBG_ON
//#define DHCP_DEBUG LWIP_DBG_ON
//#define ICMP_DEBUG LWIP_DBG_ON