--- testsuites/sptests/sppps01/init.c | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
diff --git a/testsuites/sptests/sppps01/init.c b/testsuites/sptests/sppps01/init.c index 996a3a1e16..ee3fe1645b 100644 --- a/testsuites/sptests/sppps01/init.c +++ b/testsuites/sptests/sppps01/init.c @@ -76,6 +76,48 @@ T_TEST_CASE( WaitPPSEventDefaultHandler ) T_eq_int( status, ETIMEDOUT ); } +static int wokenup = 0; + +static void fake_wakeup(struct pps_state *pps) +{ + wokenup++; +} + +T_TEST_CASE( PPSEventEarlyReturns ) +{ + struct test_pps_device pps_dev; + + wokenup = 0; + pps_dev.task_waiting = RTEMS_INVALID_ID; + + memset( &pps_dev.pps, 0, sizeof( pps_dev.pps ) ); + pps_dev.pps.ppscap = PPS_CAPTUREBOTH; + pps_init_abi( &pps_dev.pps ); + pps_dev.pps.wakeup = fake_wakeup; + pps_dev.pps.ppsparam.mode = PPS_CAPTUREASSERT; + + pps_capture( &pps_dev.pps ); + /* Trigger event with a different event than the one previously selected */ + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( wokenup, 0 ); + + pps_dev.pps.ppsparam.mode = PPS_CAPTURECLEAR; + + /* Wait th_generation to be updated */ + rtems_task_wake_after(1); + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( wokenup, 0 ); + + /* Save current timecounter in pps_state object */ + pps_capture( &pps_dev.pps ); + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( wokenup, 0 ); + + pps_capture( &pps_dev.pps ); + pps_event( &pps_dev.pps, PPS_CAPTURECLEAR ); + T_eq_int( wokenup, 1 ); +} + static void wakeup(struct pps_state *pps) { struct test_pps_device *pps_dev; -- 2.25.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel