int rtems_pppd_terminate(void) { /* send terminate signal to pppd task */ rtems_event_send(rtems_pppd_taskid, RTEMS_EVENT_29); /* call the disconnect function */ rtems_pppd_disconnect(); return ( 0 ); }
static rtems_task pppdapp(rtems_task_argument arg) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_interval tickspersecond = 0; rtems_option options; rtems_event_set in; rtems_event_set out; /* initialize ticks per second */ tickspersecond = rtems_clock_get_ticks_per_second(); if ( tickspersecond == 0 ) { /* ensure value is greater than zero */ tickspersecond = 100; } /* initiate connection */ pppdapp_setup(); rtems_pppd_connect(); /* enter processing loop */ in = (RTEMS_EVENT_10 | RTEMS_EVENT_11); options = (RTEMS_EVENT_ANY | RTEMS_WAIT); while ( sc == RTEMS_SUCCESSFUL ) { /* wait for the next event */ sc = rtems_event_receive(in, options, RTEMS_NO_TIMEOUT, &out); if ( sc == RTEMS_SUCCESSFUL ) { /* determine which event was sent */ if ( out & RTEMS_EVENT_10 ) { /* ip up recived */ /* call disconnect function */ rtems_pppd_disconnect(); } if ( out & RTEMS_EVENT_11 ) { /* ip down recived */ /* sleep 10 seconds and call connect function */ rtems_task_wake_after(10*tickspersecond); rtems_pppd_connect(); } } } /* terminate myself */ rtems_task_delete(RTEMS_SELF); }