wdbSerial.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:2k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* wdbSerial.c - WDB serial communication initialization library */
  2. /* Copyright 1998 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01c,13sep01,jhw  Fixed sysSerialChanGet return value test (SPR 70225).
  7. 01b,22may98,dbt  reworked
  8. 01a,11mar98,ms   written
  9. */
  10. /*
  11. DESCRIPTION
  12. Initializes the serial connection for the WDB agent.
  13. NOMANUAL
  14. */
  15. /* lower WDB_MTU to SLMTU bytes for serial connection */
  16. #if     WDB_MTU > SLMTU
  17. #undef  WDB_MTU
  18. #define WDB_MTU SLMTU
  19. #endif  /* WDB_MTU > SLMTU */
  20. /******************************************************************************
  21. *
  22. * wdbCommDevInit - initialize the serial connection
  23. *
  24. * This routine initializes the serial connection used by the WDB agent.
  25. *
  26. * RETURNS :
  27. * OK or ERROR if the serial connection can not be initialized.
  28. *
  29. * NOMANUAL
  30. */
  31. STATUS wdbCommDevInit
  32.     (
  33.     WDB_COMM_IF * pCommIf,
  34.     char **  ppWdbInBuf,
  35.     char ** ppWdbOutBuf
  36.     )
  37.     {
  38.     SIO_CHAN * pSioChan; /* serial I/O channel */
  39.     static WDB_SLIP_PKT_DEV wdbSlipPktDev; /* SLIP packet device */
  40.     static uint_t wdbInBuf [WDB_MTU/4];
  41.     static uint_t wdbOutBuf [WDB_MTU/4];
  42.     /* update input & output buffer pointers */
  43.     *ppWdbInBuf = (char *) wdbInBuf;
  44.     *ppWdbOutBuf = (char *) wdbOutBuf;
  45.     /* update communcation interface mtu */
  46.     wdbCommMtu = WDB_MTU;
  47.     /* a raw serial channel supports task or external agent */
  48.     pSioChan = sysSerialChanGet (WDB_TTY_CHANNEL);
  49.     if (pSioChan == (SIO_CHAN *) ERROR)
  50. {
  51. if (_func_printErr != NULL)
  52.     _func_printErr ("wdbSerialInit error: bad serial channel %dn",
  53. WDB_TTY_CHANNEL);
  54. return (ERROR);
  55. }
  56.     sioIoctl (pSioChan, SIO_BAUD_SET, (void *)WDB_TTY_BAUD);
  57. #ifdef  INCLUDE_WDB_TTY_TEST
  58.     {
  59.     int waitChar = 0;
  60.     
  61.     if (WDB_TTY_ECHO)
  62. waitChar = 0333;
  63. #ifdef INCLUDE_KERNEL
  64.     /* test in polled mode if the kernel hasn't started */
  65.     if (taskIdCurrent == 0)
  66. wdbSioTest (pSioChan, SIO_MODE_POLL, waitChar);
  67.     else
  68. wdbSioTest (pSioChan, SIO_MODE_INT, waitChar);
  69. #else /* INCLUDE_KERNEL */
  70.     wdbSioTest (pSioChan, SIO_MODE_POLL, waitChar);
  71. #endif /* INCLUDE_KERNEL */
  72.     }
  73. #endif  /* INCLUDE_WDB_TTY_TEST */
  74.     wdbSlipPktDevInit   (&wdbSlipPktDev, pSioChan, udpRcv);
  75.     if (udpCommIfInit (pCommIf, &wdbSlipPktDev.wdbDrvIf) == ERROR)
  76. return (ERROR);
  77.     return (OK);
  78.     }