aboutsummaryrefslogtreecommitdiff
path: root/firmwares/wifishield/wifiHD/src/ard_utils.c
diff options
context:
space:
mode:
authorCristian Maglie <c.maglie@bug.st>2013-03-20 11:35:55 +0100
committerCristian Maglie <c.maglie@bug.st>2013-03-20 11:35:55 +0100
commitc2de020c3d19abe01a8e903926eede69106fa9d5 (patch)
tree26b2d5748bf095bbb2da0f6acbacf163b728ae61 /firmwares/wifishield/wifiHD/src/ard_utils.c
parent84d842a16f05dc2de368d5205bd63fab2d5987e9 (diff)
parentf0ba738a71ec8dafe4705ddd02c07a2eb880655c (diff)
Merge remote-tracking branch 'mlafauci/wifishield-bugfix' into HEAD
Diffstat (limited to 'firmwares/wifishield/wifiHD/src/ard_utils.c')
-rw-r--r--firmwares/wifishield/wifiHD/src/ard_utils.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/firmwares/wifishield/wifiHD/src/ard_utils.c b/firmwares/wifishield/wifiHD/src/ard_utils.c
index 39c19dd..c2937d8 100644
--- a/firmwares/wifishield/wifiHD/src/ard_utils.c
+++ b/firmwares/wifishield/wifiHD/src/ard_utils.c
@@ -78,6 +78,8 @@ uint16_t calcMergeLen(uint8_t sock)
if (pBufStore[index][sock].data != NULL)
{
len += pBufStore[index][sock].len;
+ len -= pBufStore[index][sock].idx;
+ INFO_UTIL_VER(" [%d]: len:%d idx:%d tot:%d\n", sock, pBufStore[index][sock].len, pBufStore[index][sock].idx, len);
}
++index;
if (index == MAX_PBUF_STORED)
@@ -179,7 +181,8 @@ void dumpPbuf(uint8_t sock)
do {
if (pBufStore[index][sock].data != NULL)
{
- printk("Buf: %p Len:%d\n", pBufStore[index][sock].data, pBufStore[index][sock].len);
+ printk("%d] pcb:%p Buf: %p Len:%d\n", pBufStore[index][sock].idx, pBufStore[index][sock].pcb,
+ pBufStore[index][sock].data, pBufStore[index][sock].len);
}
++index;
if (index == MAX_PBUF_STORED)
@@ -245,7 +248,7 @@ void ack_recved(void* pcb, int len);
void ackAndFreeData(void* pcb, int len, uint8_t sock, uint8_t* data)
{
- INFO_UTIL("Ack pcb:%p len:%d sock:%d data:%p\n", pcb, len, sock, data);
+ INFO_TCP("Ack pcb:%p len:%d sock:%d data:%p\n", pcb, len, sock, data);
if (!IS_UDP_SOCK(sock))
ack_recved(pcb, len);
if (data != NULL)
@@ -276,7 +279,7 @@ bool isAvailTcpDataByte(uint8_t sock)
uint16_t getAvailTcpDataByte(uint8_t sock)
{
uint16_t len = calcMergeLen(sock);
- INFO_UTIL("Availabled data: %d\n", len);
+ INFO_UTIL_VER("Availabled data: %d\n", len);
return len;
}
@@ -296,6 +299,8 @@ bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek)
else
*payload = buf[p->idx++];
INFO_UTIL_VER("get:%d %p %d\n",p->idx, p->data, *payload);
+ if (p->idx == p->len)
+ ackAndFreeData(p->pcb, p->len, sock, p->data);
return true;
}else{
ackAndFreeData(p->pcb, p->len, sock, p->data);