Hello, 1. I am trying to implement Modbus TCP Client, on a custom LPC1778 board, with NO_SYS=1, raw_api, and 'lpc177x_40xx_emac.c' EMAC driver (contained in lpclwip implementation, that is part of LPCOPEN libraries)
2. The example client program sends the data in connected callback. 3. Obviously, I can't implement it this way as the data needs to be sent and received multiple times during the life of the connection. 4. Hence, I plan to send data from outside the lwip callbacks. 5. Following is the 'Connected' callback implementation in the example // ******************************************************************* /* structure to be passed as argument to the tcp callbacks */ struct echoclient { enum echoclient_states state; /* connection status */ struct tcp_pcb *pcb; /* pointer on the current tcp_pcb */ struct pbuf *p_tx; /* pointer on pbuf to be transmitted */ }; static err_t tcp_echoclient_connected(void *arg, struct tcp_pcb *tpcb, err_t err) { struct echoclient *es = NULL; if (err == ERR_OK) { /* allocate structure es to maintain tcp connection informations */ es = (struct echoclient *)mem_malloc(sizeof(struct echoclient)); if (es != NULL) { es->state = ES_CONNECTED; es->pcb = tpcb; sprintf((char*)data, "sending tcp client message %d", (int)message_count++); /* allocate pbuf */ es->p_tx = pbuf_alloc(PBUF_TRANSPORT, strlen((char*)data) , PBUF_POOL); if (es->p_tx) { /* copy data to pbuf */ pbuf_take(es->p_tx, (char*)data, strlen((char*)data)); /* pass newly allocated es structure as argument to tpcb */ tcp_arg(tpcb, es); /* initialize LwIP tcp_recv callback function */ tcp_recv(tpcb, tcp_echoclient_recv); /* initialize LwIP tcp_sent callback function */ tcp_sent(tpcb, tcp_echoclient_sent); /* initialize LwIP tcp_poll callback function */ tcp_poll(tpcb, tcp_echoclient_poll, 1); /* send data */ tcp_echoclient_send(tpcb,es); return ERR_OK; } } else { /* close connection */ tcp_echoclient_connection_close(tpcb, es); /* return memory allocation error */ return ERR_MEM; } } else { /* close connection */ tcp_echoclient_connection_close(tpcb, es); } return err; } // ******************************************************************* 6. My doubts are as follows, 6.1 Is 'es' the pointer to echoclient structure (initialized thro' malloc) and passed to lwip as 'arg' in it's callbacks AND the member 'tpcb' (struct tcp_pcb *tpcb) passed by lwip, ARE INVARIANT during the life of the connection 6.2 If that is so (which should be), I can save this in a global variable in the connected callback and use it from other segments of the program. 6.3 This should serve my purpose, Thank you very much. - Vijay Vaidya
_______________________________________________ lwip-users mailing list lwip-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/lwip-users