I Need connect to a host using UDP Sockets, but i have to send a packet with a struct format.
Somebody have any Idea... ? (sorry for my english)
Code:
/* Packet structure */
struct packet {
uint32_t seq;
uint8_t data[IO_BUF_MAX];
};
Code:
int udp_to_ssc_task(struct udp_pcb * udp, uthread_id_t id)
{
struct packet pkt;
struct fox_system * sys = &fox_sys;
int next_seq, recv_err, pkt_size;
int n;
printf(" - %s: started.\n", __FUNCTION__);
pkt_size = sizeof(pkt.seq)+sys->out_data_size;
for (;;) {
/* stay here while a connection is not established */
while (!connected) {
uthread_sleep(10);
}
/* reset counters */
next_seq = 1;
recv_err = 0;
while (connected) {
/* receive data from udp conn */
if ((n = udp_recv(udp, &pkt, pkt_size, NULL)) < 0) {
/* rcv failed */
fprintf(stderr, "%s: udp_recv() fail!\n", __FUNCTION__);
break;
}
// adicionado por sérgio m.
putchar('r');
/* signal to monitor task that connection still established */
uthread_mutex_lock(mutex1);
uthread_cond_signal(rcving);
uthread_mutex_unlock(mutex1);
/* verify packet sequence field */
if (pkt.seq != next_seq) {
putchar('e');
next_seq = pkt.seq+1;
recv_err++;
/* max allowed errors occured, lose the connection */
if (recv_err > MAX_RECV_ERRORS) {
fprintf(stderr, "%s: connection lost!\n", __FUNCTION__);
connected = 0;
break;
}
continue;
}
/* consider consecutive errors */
recv_err = 0;
//show_packet(&pkt, n-sizeof(pkt.seq));
//printf("\r%d/%d", recv_err, recv_cnt);
/* synchonize rcvd data with outputs */
//fox_out_sync(pkt.data, sys->out_data_size);
/* update counter */
next_seq++;
}
}
return 0;
}