Jul 16, 2021
12:12 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Jul 16, 2021
12:12 AM
Hello,
I have implemented a TCP connection between a XMC4800 and a server. The XMC is my client. I can see in Wireshark, that the Controller receives packages because an Ack-Flag is sent afterwards to the server. Sending TCP Packages works fine, but I need to save the response from the server in a buffer, in order to work with the data.
Unfortunately, I co not want to unable the poll opportunity because in my further project, I need to work with an ethercat bus. Does anybody have an idea, why my code doesn't work?
Thanks for your help 🙂
Maxi
I have implemented a TCP connection between a XMC4800 and a server. The XMC is my client. I can see in Wireshark, that the Controller receives packages because an Ack-Flag is sent afterwards to the server. Sending TCP Packages works fine, but I need to save the response from the server in a buffer, in order to work with the data.
Unfortunately, I co not want to unable the poll opportunity because in my further project, I need to work with an ethercat bus. Does anybody have an idea, why my code doesn't work?
void recv_data()
{
tcp_recv(pcb_recv, client_recv); //ocb_recv is an empty pcb
}
err_t client_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
tcp_recved(pcb_recv, p->tot_len);
memcpy(recv_buffer, p->payload, p->tot_len);
pbuf_free(p);;
return ERR_OK;
}
/* @brief main() */
int main(void)
{
DAVE_STATUS_t status;
uint32_t timer_systimer_lwip, timer_systimer_counter;
uint8_t counter_old=0;
int buff_length = strlen(recv_buffer);
bool send = false;
status = DAVE_Init(); /* Initialization of DAVE APPs */
if(status != DAVE_STATUS_SUCCESS)
{
/* Placeholder for error handler code.
* The while loop below can be replaced with an user error handler. */
XMC_DEBUG("DAVE APPs initialization failed\n");
while(1U)
{
}
}
/* Initialize and start lwip system timer */
timer_systimer_lwip = SYSTIMER_CreateTimer(100000,
SYSTIMER_MODE_PERIODIC ,
tim_sys_check_timeouts_wrap,0);
SYSTIMER_StartTimer(timer_systimer_lwip);
/* Initialize and start client state counter timer */
timer_systimer_counter = SYSTIMER_CreateTimer (5000000,
SYSTIMER_MODE_PERIODIC ,
tim_counter_increment,0);
SYSTIMER_StartTimer(timer_systimer_counter);
while(1)
{
/* Check if client state counter was incremented */
if (counter!=counter_old)
{
/* Connection already/still active? */
if ((connection_ready==0)&&(pcb_valid==0))
{
client_init();
}
else
{
if(send==false)
{
send_data(data1);
send = true;
}
else
{
recv_data();
send = false;
}
}
counter_old=counter;
}
}
Thanks for your help 🙂
Maxi
2 Replies
Aug 23, 2021
12:50 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 23, 2021
12:50 PM
Hi Maxi,
Could you share your project here so that we can analyze the project better?
Regards,
Nikhil
Could you share your project here so that we can analyze the project better?
Regards,
Nikhil
Oct 27, 2021
03:06 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Oct 27, 2021
03:06 AM
Hi Maxi,
The thread was locked due to inactivity for a long time, you can continue the discussion on the topic by opening a new thread with reference to the locked one. The continuous discussion in an inactive thread may mostly be unattended by community users.
Thanks and Regards,
Nikhil