コード例 #1
0
ファイル: rtemspppd.c プロジェクト: epicsdeb/rtems
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 );
}
コード例 #2
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);
}