Hi everybody,
I did some testing with the LwIP stack, and found the resulting LwIP stats inconsistent with
my assumptions. I'm hoping on of you is able to clarify things for me.
Here's the whats bodering me:
I've coded a TCP send callback function that's sends data to a TCP client. Each time a message from the client
is received (sort of ack callback function thus) the application sends some more data to the client, and increases a counter.
This counters is an indication of how many times the functions is executed/called. My assumptions was that when all of the data has been send,
the function counter is approximately the same as the LwIP received stats for TCP. However this isn't the case.
I assumed that when the callback function gets called
(i.e. data is received) that the TCP received stat is increased by 1.
Therefore the func_cnt should be approximately the same als the TCP received stat. What am I missing here?
Thanks for the advice / help.
Below are the function and the resulting screen, the line that is made bold and italic is value of the func_cnt variable after all data is send.
err_t message_acked(void * arg, struct tcp_pcb * tpcb, u16_t len) {
func_cnt++; //increase the number of times the function is called
16_t buff_space = tcp_sndbuf(tpcb); // check the available space in the output buffer
if(buff_space > bytes_left){ //the remaining data fits completely in the output buffer
tcp_write(tpcb, pUSB_RAM, bytes_left, NULL);
}
else{
tcp_write(tpcb, pUSB_RAM, buff_space, NULL);
}
return ERR_OK;
}
Modname: Min: Cur: Max: Cnt:
TCP_TMR: 100 100 649
1500
TMR_ISR: 121 198 211 1501
ARP_TMR: 530 572 609
750
TCP_INI: 9661 9661 0 1
1e_SEND: 6393 6393 0
1
ACK_RCV: 1885 3397 6317 702178
APP_IDL: 18249635 18249672 18249759 1501
xmited:
45878 rexmit: 0 recved: 57012 droped: 0
errors: 0 chkerr: 0 pktfwd: 0 lenerr: 0
memerr: 0 rterrs: 0 proErr: 0 opterr: 0