wdShow.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* wdShow.c - watchdog show routines */
  2. /* Copyright 1990-1993 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01j,18dec00,pes  Correct compiler warnings
  8. 01i,17mar99,jdi  doc: updated w/ info about proj facility (SPR 25727).
  9. 01h,24jun96,sbs  made windview instrumentation conditionally compiled
  10. 01f,10oct95,jdi  doc: added .tG Shell to wdShow().
  11. 01g,16jan94,c_s  wdShowInit () now initializes instrumented class.
  12. 01f,10dec93,smb  included private/classLibP.h for windview
  13. 01e,03feb93,jdi  changed INCLUDE_SHOW_RTNS to ...ROUTINES.
  14. 01d,01feb93,jdi  documentation cleanup for 5.1.
  15. 01c,28jul92,jcf  changed wdShowInit to call wdLibInit.
  16. 01b,07jul92,ajm  changed wdStateMsg to be static
  17. 01a,15jun92,jcf  extracted from v1l of semLib.c.
  18. */
  19. /*
  20. DESCRIPTION
  21. This library provides routines to show watchdog statistics, such as
  22. watchdog activity, a watchdog routine, etc.
  23. The routine wdShowInit() links the watchdog show facility into
  24. the VxWorks system.  It is called automatically when this show
  25. facility is configured into VxWorks using either of the
  26. following methods:
  27. .iP
  28. If you use the configuration header files, define
  29. INCLUDE_SHOW_ROUTINES in config.h.
  30. .iP
  31. If you use the Tornado project facility, select INCLUDE_WATCHDOGS_SHOW.
  32. INCLUDE FILES: wdLib.h
  33. SEE ALSO: wdLib,
  34. .pG "Basic OS, Target Shell,"
  35. windsh,
  36. .tG "Shell"
  37. */
  38. /* LINTLIBRARY */
  39. #include "vxWorks.h"
  40. #include "errno.h"
  41. #include "intLib.h"
  42. #include "qLib.h"
  43. #include "stdlib.h"
  44. #include "stdarg.h"
  45. #include "string.h"
  46. #include "stdio.h"
  47. #include "private/wdLibP.h"
  48. #include "private/kernelLibP.h"
  49. #include "private/objLibP.h"
  50. #include "private/classLibP.h"
  51. /* locals */
  52. LOCAL char * wdStateMsg [0x3] = 
  53.     {
  54.     "OUT_OF_Q", "IN_Q", "DEAD"
  55.     };
  56. /******************************************************************************
  57. *
  58. * wdShowInit - initialize the watchdog show facility
  59. *
  60. * This routine links the watchdog show facility into the VxWorks system.
  61. * It is called automatically when the watchdog show facility is
  62. * configured into VxWorks using either of the following methods:
  63. * .iP
  64. * If you use the configuration header files, define
  65. * INCLUDE_SHOW_ROUTINES in config.h.
  66. * .iP
  67. * If you use the Tornado project facility, select INCLUDE_WATCHDOGS_SHOW.
  68. *
  69. * RETURNS: N/A
  70. */
  71. void wdShowInit (void)
  72.     {
  73.     if (wdLibInit () == OK)
  74. {
  75. classShowConnect (wdClassId, (FUNCPTR)wdShow);
  76. #ifdef WV_INSTRUMENTATION
  77. classShowConnect (wdInstClassId, (FUNCPTR)wdShow);
  78. #endif
  79. }
  80.     }
  81. /*******************************************************************************
  82. *
  83. * wdShow - show information about a watchdog
  84. *
  85. * This routine displays the state of a watchdog.
  86. *
  87. * EXAMPLE:
  88. * A summary of the state of a watchdog is displayed as follows:
  89. * .CS
  90. *     -> wdShow myWdId
  91. *     Watchdog Id         : 0x3dd46c
  92. *     State               : OUT_OF_Q
  93. *     Ticks Remaining     : 0
  94. *     Routine             : 0
  95. *     Parameter           : 0
  96. * .CE
  97. *
  98. * RETURNS: OK or ERROR.
  99. *
  100. * SEE ALSO:
  101. * .pG "Target Shell,"
  102. * windsh,
  103. * .tG "Shell"
  104. */
  105. STATUS wdShow
  106.     (
  107.     WDOG_ID wdId /* watchdog to display */
  108.     )
  109.     {
  110.     int ticks;
  111.     int state;
  112.     int arg;
  113.     FUNCPTR rtn;
  114.     FAST int lock;
  115.     lock = intLock (); /* LOCK INTERRUPTS */
  116.     if (OBJ_VERIFY (wdId, wdClassId) != OK)
  117. {
  118. intUnlock (lock); /* UNLOCK INTERRUPTS */
  119. return (ERROR);
  120. }
  121.     state = (int)wdId->status; /* record state */
  122.     if (state == WDOG_IN_Q)
  123. {
  124. ticks = Q_KEY (&tickQHead, &wdId->tickNode, 1);
  125. rtn = wdId->wdRoutine; /* record routine */
  126. arg = wdId->wdParameter; /* record parameter */
  127. }
  128.     else
  129. {
  130. ticks = 0;
  131. rtn = (FUNCPTR) NULL;
  132. arg = 0;
  133. }
  134.     intUnlock (lock); /* UNLOCK INTERRUPTS */
  135.     /* show summary information */
  136.     printf ("n");
  137.     printf ("%-20s: 0x%-10xn", "Watchdog Id", (int)wdId);
  138.     printf ("%-20s: %-10sn", "State", wdStateMsg[state & 0x3]);
  139.     printf ("%-20s: %-10dn", "Ticks Remaining", ticks);
  140.     printf ("%-20s: 0x%-10xn", "Routine", (int)rtn);
  141.     printf ("%-20s: 0x%-10xn", "Parameter", arg);
  142.     printf ("n");
  143.     return (OK);
  144.     }