diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c index 16754a84fb3ff37d203eb3fbae12834a08ce0709..8e07f7ac9ed66ef5c2c1db78a06ca870d27431e0 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c @@ -298,6 +298,8 @@ static void *watchdog_thread(void *arg) { int first_acquisition; struct timespec sleep_time,wait; + int ret; + wait.tv_sec=0; wait.tv_nsec=50000000L; @@ -405,10 +407,10 @@ static void *watchdog_thread(void *arg) { first_acquisition=1; printf("Locking watchdog for first acquisition\n"); - pthread_mutex_timedlock(&exm->watchdog_mutex,&wait); + ret = pthread_mutex_timedlock(&exm->watchdog_mutex,&wait); // main loop to keep up with DMA transfers from exmimo2 - int cnt_diff0=0; + unsigned long long cnt_diff0=0; while ((!oai_exit) && (!exm->watchdog_exit)) { if (exm->daq_state == running) { @@ -425,7 +427,15 @@ static void *watchdog_thread(void *arg) { exm->last_mbox = mbox; if (first_acquisition==0) - pthread_mutex_timedlock(&exm->watchdog_mutex,&wait); + { + ret = pthread_mutex_timedlock(&exm->watchdog_mutex,&wait); + if(ret) + { +// exm->watchdog_exit = 1; + printf("watchdog_thread pthread_mutex_timedlock error = %d\n", ret); + continue; + } + } exm->ts += (diff*exm->samples_per_frame/150) ; @@ -434,7 +444,7 @@ static void *watchdog_thread(void *arg) { (diff > 16)&& (first_acquisition==0)) {// we're too late so exit exm->watchdog_exit = 1; - printf("exiting, too late to keep up\n"); + printf("exiting, too late to keep up - diff = %d\n", diff); } first_acquisition=0; @@ -443,7 +453,7 @@ static void *watchdog_thread(void *arg) { cnt_diff0++; if (cnt_diff0 == 10) { exm->watchdog_exit = 1; - printf("exiting, HW stopped\n"); + printf("exiting, HW stopped %llu\n", cnt_diff0); } } else @@ -454,9 +464,11 @@ static void *watchdog_thread(void *arg) { (exm->ts - exm->last_ts_rx > exm->samples_per_frame)) { exm->watchdog_exit = 1; printf("RX Overflow, exiting (TS %llu, TS last read %llu)\n", - exm->ts,exm->last_ts_rx); + (long long unsigned int)exm->ts,(long long unsigned int)exm->last_ts_rx); } // printf("ts %lu, last_ts_rx %lu, mbox %d, diff %d\n",exm->ts, exm->last_ts_rx,mbox,diff); + + if ( !ret ) pthread_mutex_unlock(&exm->watchdog_mutex); } else {