static void receiver(long nothing) { fd_set rxfds; RTIME timeout = 0; int ready = 0; socklen_t fromlen = sizeof(rx_addr); rt_printk("RtnetTest: Receiver task initialised\n"); while(!end) { FD_ZERO(&rxfds); FD_SET(sock, &rxfds); ready = 0; ready = rt_dev_select(sock + 1, &rxfds, NULL, NULL, timeout); if (ready > 0 && FD_ISSET(sock, &rxfds)) { rlen = rt_dev_recvfrom(sock, buffer_in, sizeof(buffer_in), 0, (struct sockaddr*) &rx_addr, &fromlen); if (rlen > 0) { rx_samp.cnt++; // rx_samp.tx = simple_strtoll(buffer_in, NULL, 10); sscanf(buffer_in, "%lld", &rx_samp.tx); rx_samp.rx = rt_get_real_time_ns(); rt_mbx_send_if(mbx, &rx_samp, sizeof(rx_samp)); memset(buffer_in, 0, sizeof(buffer_in)); } } else if (EPERM == -ready) { rt_printk("RtnetTest: Failed to rt_dev_select on socket\n"); end = 1; break; } else if (EINTR == -ready) { rt_printk("RtnetTest: rt_dev_select was interrupted\n"); end = 1; break; } } return; }
static RTAI_SYSCALL_MODE int sys_rtdm_select(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, nanosecs_rel_t timeout) { return rt_dev_select(nfds, rfds, wfds, efds, timeout); }