void process(void* arg) { struct msghdr msg; struct iovec iov; struct sockaddr_in addr; int ret; while(1) { iov.iov_base=&buffer; iov.iov_len=sizeof(nanosecs_t); msg.msg_name=&addr; msg.msg_namelen=sizeof(addr); msg.msg_iov=&iov; msg.msg_iovlen=1; msg.msg_control=NULL; msg.msg_controllen=0; ret = recvmsg_rt(sock, &msg, 0); if ( (ret <= 0) || (msg.msg_namelen != sizeof(struct sockaddr_in)) ) return; memcpy(&tx_msg, &buffer, sizeof(nanosecs_t)); sendto_rt(sock, &tx_msg, reply_size, 0, (struct sockaddr *)&client_addr, sizeof(struct sockaddr_in)); } }
void event_handler(int arg) { struct { nanosecs_t time_stamp; unsigned long count; } packet; while (1) { rtos_event_sem_wait(&event_sem); ioctl_rt(tdma, RTMAC_RTIOC_TIMEOFFSET, &packet.time_stamp); rtos_irq_disable(&irq_handle); packet.time_stamp += time_stamp; packet.count = irq_count; rtos_irq_enable(&irq_handle); ioctl_rt(tdma, RTMAC_RTIOC_WAITONCYCLE, RTMAC_WAIT_ON_DEFAULT); if (sendto_rt(sock, &packet, sizeof(packet), 0, (struct sockaddr*)&dest_addr, sizeof(struct sockaddr_in)) < 0) break; } }
void process(void* arg) { while(1) { rt_sem_wait(&tx_sem); tx_time = rt_get_time_ns(); /* send the time */ if (sendto_rt(sock, &tx_time, sizeof(RTIME), 0, (struct sockaddr *) &server_addr, sizeof(struct sockaddr_in)) < 0) break; } }
void process(void *arg) { int ret = 0; while (1) { /* wait one period */ rt_task_wait_period(); /* get time */ tx_time = rt_get_cpu_time_ns(); memcpy(sendbuffer, &tx_time, sizeof(tx_time)); /* send the time */ ret = sendto_rt(sock, &sendbuffer, packetsize, 0, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)); if (ret) sent++; } }