diff --git a/binary/wifiHD.elf b/binary/wifiHD.elf index 8cbf7adf3..4c2330577 100644 Binary files a/binary/wifiHD.elf and b/binary/wifiHD.elf differ diff --git a/wifiHD/Release/wifiHD.elf b/wifiHD/Release/wifiHD.elf index 8cbf7adf3..4c2330577 100644 Binary files a/wifiHD/Release/wifiHD.elf and b/wifiHD/Release/wifiHD.elf differ diff --git a/wifiHD/src/ard_spi.c b/wifiHD/src/ard_spi.c index a2c2b6596..5814ccdb5 100644 --- a/wifiHD/src/ard_spi.c +++ b/wifiHD/src/ard_spi.c @@ -89,7 +89,7 @@ bool end_write = false; //TODO only for debug // Signal indicating a new command is coming from SPI interface static volatile Bool startRecvCmdSignal = FALSE; -#define MAX_CMD_NUM 25 +#define MAX_CMD_NUM 30 typedef struct sCmd_spi_list{ cmd_spi_cb_t cb; char cmd_id; @@ -361,8 +361,27 @@ void dump(char* _buf, uint16_t _count) { #endif } +#ifdef _APP_DEBUG_ +#define DUMP_SPI_DATA(BUF, COUNT) do { \ + if (verboseDebug & INFO_SPI_FLAG) { \ + int i = 0; \ + for (; i < COUNT; ++i) \ + { \ + printk("0x%x ", BUF[i]); \ + if (i % 20 == 0) \ + printk("\n"); \ + } \ + printk("\n"); \ + } \ +}while(0); +#else +#define DUMP_SPI_DATA(BUF, COUNT) do {}while(0); +#endif + + #ifdef _APP_DEBUG_ #define DUMP_SPI_CMD(BUF) do { \ + if (verboseDebug & INFO_SPI_FLAG) { \ int i = 0; \ for (; i < CMD_MAX_LEN; ++i) \ { \ @@ -371,6 +390,7 @@ void dump(char* _buf, uint16_t _count) { break; \ } \ printk("\n"); \ + } \ }while(0); #else #define DUMP_SPI_CMD(BUF) do {}while(0); @@ -944,7 +964,13 @@ cmd_spi_state_t get_client_state_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint8_t _state = CLOSED; if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]tpcb); do { - err = tcp_write(ttcp->tpcb, ttcp->payload, len, 0); + err = tcp_write(ttcp->tpcb, ttcp->payload, len, TCP_WRITE_FLAG_COPY); if (err == ERR_MEM) len /= 2; } while (err == ERR_MEM && len > 1); if (err == ERR_OK){ tcp_output(ttcp->tpcb); + INFO_TCP("tcp_output: left=%d new left:%d\n", + ttcp->left, ttcp->left-len); ttcp->left -= len; } else @@ -209,14 +211,12 @@ tcp_sent_cb(void *arg, struct tcp_pcb *pcb, u16_t len) 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); + INFO_TCP("TTCP [%p]: connect %d %d\n", ttcp, err, ttcp->tpcb->state); + + _connected = true; ttcp->start_time = timer_get_ms(); -#if 0 - tcp_sent(tpcb, tcp_sent_cb); - tcp_send_data(ttcp); -#endif return ERR_OK; } @@ -251,9 +251,10 @@ static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p, /* for print_stats() */ ttcp->recved += p->tot_len; - if (ttcp->verbose) { + if ((ttcp->verbose)||(verboseDebug & INFO_TCP_FLAG)) { INFO_TCP("Recv:%d\n",p->tot_len); - DUMP(p->payload, p->tot_len); + //INFO_TCP("%s\n",(char*)p->payload); + DUMP_TCP(p->payload, p->tot_len); ttcp->print_cnt++; } @@ -312,6 +313,7 @@ static int atcp_start(struct ttcp* ttcp) { if (ttcp->mode == TTCP_MODE_TRANSMIT) { tcp_err(ttcp->tpcb, atcp_conn_err_cb); tcp_recv(ttcp->tpcb, atcp_recv_cb); + _connected = false; if (tcp_connect(ttcp->tpcb, &ttcp->addr, ttcp->port, tcp_connect_cb) != ERR_OK) { WARN("TTCP [%p]: tcp connect failed\n", ttcp); @@ -569,6 +571,15 @@ uint8_t getStateTcp(void* p, bool client) { return CLOSED; } +uint8_t getModeTcp(void* p) { + struct ttcp* _ttcp = (struct ttcp*) p; + + if (_ttcp != NULL) + return _ttcp->mode; + return 0; +} + + uint8_t isDataSent(void* p) { static int isDataSentCount = 0; struct ttcp* _ttcp = (struct ttcp*) p; @@ -601,15 +612,16 @@ static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len) { if (_ttcp->buff_sent == 1) WARN("Previous packet already\n"); _ttcp->buff_sent = 1; + INFO_TCP("Packet sent len:%d dur:%d\n", len, timer_get_ms() - startTime); //INFO_TCP("%s: duration: %d\n", __FUNCTION__, timer_get_ms() - startTime); return ERR_OK; } int sendTcpData(void* p, uint8_t* buf, uint16_t len) { - //INFO_TCP("buf:%p len:%d\n", buf, len); - //DUMP(buf,len); + INFO_TCP("buf:%p len:%d\n", buf, len); + DUMP_TCP(buf,len); - //startTime = timer_get_ms(); + startTime = timer_get_ms(); struct ttcp* _ttcp = (struct ttcp*) p; if ((_ttcp != NULL) && (_ttcp->tpcb != NULL) && (buf != NULL) && (len != 0) && (_ttcp->payload != NULL)) { @@ -620,6 +632,8 @@ int sendTcpData(void* p, uint8_t* buf, uint16_t len) { _ttcp->buff_sent = 0; //pbuf_take(buf, len, _ttcp->); memcpy(_ttcp->payload, buf, len); + _ttcp->payload[len]='\0'; + INFO_TCP("%s\n", _ttcp->payload); _ttcp->left = len; tcp_sent(_ttcp->tpcb, tcp_data_sent); tcp_send_data(_ttcp); diff --git a/wifiHD/src/ard_tcp.h b/wifiHD/src/ard_tcp.h index b948648bb..287a758c6 100644 --- a/wifiHD/src/ard_tcp.h +++ b/wifiHD/src/ard_tcp.h @@ -49,6 +49,7 @@ typedef struct ttcp { struct udp_pcb* upcb; }ttcp_t; +bool _connected; 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); @@ -57,6 +58,8 @@ void ard_tcp_stop(void* ttcp); uint8_t getStateTcp(void* p, bool client ); +uint8_t getModeTcp(void* p); + int sendTcpData(void* p, uint8_t* buf, uint16_t len); uint8_t isDataSent(void* p ); diff --git a/wifiHD/src/ard_utils.c b/wifiHD/src/ard_utils.c index 1b2e26054..7008257e5 100644 --- a/wifiHD/src/ard_utils.c +++ b/wifiHD/src/ard_utils.c @@ -21,6 +21,11 @@ unsigned char tailBuf = 0; #define IS_BUF_AVAIL() (tailBuf!=headBuf) #define IS_BUF_EMPTY() ((tailBuf == 0) && (headBuf == 0)) +void init_pBuf() +{ + memset(pBufStore, 0, sizeof(pBufStore)); +} + void insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb) { if (q == NULL) diff --git a/wifiHD/src/ard_utils.h b/wifiHD/src/ard_utils.h index a081cc6ad..8f4e8aeea 100644 --- a/wifiHD/src/ard_utils.h +++ b/wifiHD/src/ard_utils.h @@ -216,6 +216,8 @@ typedef struct sData struct pbuf; +void init_pBuf(); + void insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb); tData* get_pBuf(uint8_t sock); diff --git a/wifiHD/src/cmd_wl.c b/wifiHD/src/cmd_wl.c index aff74d4db..d3fc0f6a8 100644 --- a/wifiHD/src/cmd_wl.c +++ b/wifiHD/src/cmd_wl.c @@ -40,6 +40,21 @@ extern void showTTCPstatus(); +#define ENABLE_DEBUG_LEVEL 1 +#define VERBOSE_DEBUG_LEVEL 2 + +#define CHECK_ENA_DEBUG(LEVEL, FLAG) \ + do{ \ + if (LEVEL >= ENABLE_DEBUG_LEVEL) enableDebug |= FLAG; \ + else enableDebug &= ~FLAG; \ + }while(0); + +#define CHECK_VERB_DEBUG(LEVEL, FLAG) \ + do{ \ + if (LEVEL >= VERBOSE_DEBUG_LEVEL) verboseDebug |= FLAG; \ + else verboseDebug &= ~FLAG; \ + }while(0); + /** * */ @@ -357,15 +372,17 @@ cmd_debug(int argc, char* argv[], void* ctx) int level; const char *usage = "usage: debug
\n\t"\ "section: init, cm, spi, tcp , util, warn\n\t" - "level : 0 (off), 1 (on)\n\t" + "level : 0 (off), 1 (on), 2 (verbose)\n\t" "or: debug print/on/off\n"; if (argc == 2 && strcmp(argv[1], "off") == 0) { printk("Debug OFF\n"); enableDebug = 0; + verboseDebug = 0; return CMD_DONE; }else if (argc == 2 && strcmp(argv[1], "print") == 0) { printk("Debug enabled: 0x%x\n", enableDebug); + printk("Verbose enabled: 0x%x\n", verboseDebug); return CMD_DONE; }else if (argc == 2 && strcmp(argv[1], "on") == 0) { printk("Debug ON\n"); @@ -378,23 +395,23 @@ cmd_debug(int argc, char* argv[], void* ctx) } level = atoi(argv[2]); if (argc == 3 && strcmp(argv[1], "init") == 0) { - if (level) enableDebug |= INFO_INIT_FLAG; - else enableDebug &= ~INFO_INIT_FLAG; + CHECK_ENA_DEBUG(level, INFO_INIT_FLAG); + CHECK_VERB_DEBUG(level, INFO_INIT_FLAG); }else if (argc == 3 && strcmp(argv[1], "spi") == 0) { - if (level) enableDebug |= INFO_SPI_FLAG; - else enableDebug &= ~INFO_SPI_FLAG; + CHECK_ENA_DEBUG(level, INFO_SPI_FLAG); + CHECK_VERB_DEBUG(level, INFO_SPI_FLAG); }else if (argc == 3 && strcmp(argv[1], "tcp") == 0) { - if (level) enableDebug |= INFO_TCP_FLAG; - else enableDebug &= ~INFO_TCP_FLAG; + CHECK_ENA_DEBUG(level, INFO_TCP_FLAG); + CHECK_VERB_DEBUG(level, INFO_TCP_FLAG); }else if (argc == 3 && strcmp(argv[1], "cm") == 0) { - if (level) enableDebug |= INFO_CM_FLAG; - else enableDebug &= ~INFO_CM_FLAG; + CHECK_ENA_DEBUG(level, INFO_CM_FLAG); + CHECK_VERB_DEBUG(level, INFO_CM_FLAG); }else if (argc == 3 && strcmp(argv[1], "util") == 0) { - if (level) enableDebug |= INFO_UTIL_FLAG; - else enableDebug &= ~INFO_UTIL_FLAG; + CHECK_ENA_DEBUG(level, INFO_UTIL_FLAG); + CHECK_VERB_DEBUG(level, INFO_UTIL_FLAG); }else if (argc == 3 && strcmp(argv[1], "warn") == 0) { - if (level) enableDebug |= INFO_WARN_FLAG; - else enableDebug &= ~INFO_WARN_FLAG; + CHECK_ENA_DEBUG(level, INFO_WARN_FLAG); + CHECK_VERB_DEBUG(level, INFO_WARN_FLAG); } return CMD_DONE; } diff --git a/wifiHD/src/debug.h b/wifiHD/src/debug.h index 49d552d69..59e6efdb4 100644 --- a/wifiHD/src/debug.h +++ b/wifiHD/src/debug.h @@ -25,6 +25,8 @@ extern uint16_t enableDebug; +extern uint16_t verboseDebug; + #define INFO_INIT(msg, args...) do { \ if (enableDebug & INFO_INIT_FLAG) printk("I-[%s] " msg , __func__ , ##args ); \ } while (0) @@ -70,3 +72,10 @@ extern void dump(char* _buf, uint16_t _count); #define DUMP(BUF, COUNT) do {} while (0) #endif #endif + +#define DUMP_TCP(BUF, COUNT) do { \ + if (verboseDebug & INFO_TCP_FLAG) { \ + printk("[%s]\n", __func__); \ + dump((char*)BUF, COUNT); \ + }} while (0) + diff --git a/wifiHD/src/main.c b/wifiHD/src/main.c index 0b1a95b47..3e4547dc4 100644 --- a/wifiHD/src/main.c +++ b/wifiHD/src/main.c @@ -88,6 +88,7 @@ static bool initSpiComplete = false; // variable used as enable flag for debug prints uint16_t enableDebug = 0; +uint16_t verboseDebug = 0; /** * diff --git a/wifiHD/src/startup.c b/wifiHD/src/startup.c index 48e37f04e..5e18edcf2 100644 --- a/wifiHD/src/startup.c +++ b/wifiHD/src/startup.c @@ -66,11 +66,12 @@ static void init_interrupts(void) void startup_init(void) { + INIT_SIGNAL_FOR_SPI(); + BUSY_FOR_SPI(); + init_exceptions(); init_hmatrix(); init_sys_clocks(); init_interrupts(); init_dbg_rs232(FPBA_HZ); - INIT_SIGNAL_FOR_SPI(); - BUSY_FOR_SPI(); }