Browse Source

try arrival timestamping again

pull/450/head
Christoph Kuhr 7 years ago
parent
commit
f5c1d11d16
1 changed files with 62 additions and 23 deletions
  1. +62
    -23
      linux/avb/listener_mediaclock.c

+ 62
- 23
linux/avb/listener_mediaclock.c View File

@@ -71,12 +71,38 @@ uint64_t mediaclock_listener_wait_recv_ts( FILE* filepointer, ieee1722_avtp_driv
// };


fprintf(filepointer, "test 1\n");fflush(filepointer);
struct iovec iov = { stream_packet, BUFLEN };
fprintf(filepointer, "test 2\n");fflush(filepointer);
struct msghdr msg = { (void*)((struct sockaddr *)(*si_other_avb)), slen_avb, &iov, 1, NULL, 0, 0 };
struct msghdr msg;
struct cmsghdr *cmsg;
struct sockaddr_ll remote;
struct iovec sgentry;
struct {
struct cmsghdr cm;
char control[256];
} control;


memset( &msg, 0, sizeof( msg ));

msg.msg_iov = &sgentry;
msg.msg_iovlen = 1;

sgentry.iov_base = stream_packet;
sgentry.iov_len = BUFLEN;

memset( &remote, 0, sizeof(remote));
msg.msg_name = (caddr_t) &remote;
msg.msg_namelen = sizeof( remote );
msg.msg_control = &control;
msg.msg_controllen = sizeof(control);





// struct iovec iov = { stream_packet, BUFLEN };
// struct msghdr msg = { (void*)((struct sockaddr *)(*si_other_avb)), slen_avb, &iov, 1, NULL, 0, 0 };


fprintf(filepointer, "test 3\n");fflush(filepointer);
int status = recvmsg((*avtp_transport_socket_fds)->fd, &msg, NULL);

if (status == 0) {
@@ -119,29 +145,42 @@ uint64_t mediaclock_listener_wait_recv_ts( FILE* filepointer, ieee1722_avtp_driv


fprintf(filepointer, "stream packet!\n");fflush(filepointer);
struct cmsghdr *cmsg;// = (struct cmsghdr *)malloc(sizeof(struct cmsghdr));
// struct cmsghdr *cmsg;// = (struct cmsghdr *)malloc(sizeof(struct cmsghdr));
// cmsg = CMSG_FIRSTHDR(&msg);
// fprintf(filepointer, "%d %d %d\n", cmsg->cmsg_len, cmsg->cmsg_level, cmsg->cmsg_type);fflush(filepointer);
// for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg, cmsg)){
// fprintf(filepointer, "stream packet!: %d %d\n", cmsg->cmsg_level, cmsg->cmsg_type);fflush(filepointer);
// if (cmsg->cmsg_level != SOL_SOCKET)
// continue;
// switch (cmsg->cmsg_type){
// case SO_TIMESTAMPING:{
// struct timespec* stamp = (struct timespec*)CMSG_DATA(cmsg); // timestamp is found
// fprintf(filepointer, "Timestamp %ld sec %ld nanosec\n", stamp->tv_sec, stamp->tv_nsec);fflush(filepointer);
// return 0;
// break;
// }
// default:
// fprintf(filepointer, "no timestamp\n");fflush(filepointer);
// break;
// }
// }


// Retrieve the timestamp
cmsg = CMSG_FIRSTHDR(&msg);
fprintf(filepointer, "%d %d %d\n", cmsg->cmsg_len, cmsg->cmsg_level, cmsg->cmsg_type);fflush(filepointer);
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg, cmsg)){
fprintf(filepointer, "stream packet!: %d %d\n", cmsg->cmsg_level, cmsg->cmsg_type);fflush(filepointer);
if (cmsg->cmsg_level != SOL_SOCKET)
continue;
switch (cmsg->cmsg_type){
case SO_TIMESTAMPING:{
struct timespec* stamp = (struct timespec*)CMSG_DATA(cmsg); // timestamp is found
fprintf(filepointer, "Timestamp %ld sec %ld nanosec\n", stamp->tv_sec, stamp->tv_nsec);fflush(filepointer);
return 0;
break;
}
default:
fprintf(filepointer, "no timestamp\n");fflush(filepointer);
break;
while( cmsg != NULL ) {
if( cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SO_TIMESTAMPING ) {
struct timespec *ts_device, *ts_system;
ts_system = ((struct timespec *) CMSG_DATA(cmsg)) + 1;
ts_device = ts_system + 1;
fprintf(filepointer, "Timestamp %ld sec %ld nanosec\n", ts_system->tv_sec, ts_system->tv_nsec);fflush(filepointer);

break;
}
cmsg = CMSG_NXTHDR(&msg,cmsg);
}




struct timeval sys_time;

if (clock_gettime(CLOCK_REALTIME, &sys_time)) {


Loading…
Cancel
Save