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

VxWorks

开发平台:

C/C++

  1. /* smNameShow.c - shared memory objects name database show routines (VxMP Option) */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01i,03may02,mas  fix compiler warnings from volatile pointers (SPR 68334)
  7. 01h,24oct01,mas  doc update (SPR 71149)
  8. 01g,14feb93,jdi  documentation cleanup for 5.1.
  9. 01f,29jan93,pme  added little endian support. Changed name copy to use strcpy().
  10. 01e,21nov92,jdi  documentation cleanup.
  11. 01d,13nov92,dnw  added include of taskLib.h
  12. 01c,02sep92,pme  added SPARC support. documentation cleanup.
  13. 01b,29sep92,pme  changed objId to value. cleanup.
  14. 01a,19jul92,pme  added level to smNameShow.
  15.                  written.
  16. */
  17. /*
  18. DESCRIPTION
  19. This library provides a routine to show the contents of the shared memory
  20. objects name database.  The shared memory objects name database facility is
  21. provided by the smNameLib module.
  22. CONFIGURATION
  23. The routines in this library are included by default if the component
  24. INCLUDE_SM_OBJ is included.
  25. AVAILABILITY
  26. This module is distributed as a component of the unbundled shared memory
  27. objects support option, VxMP.
  28. INCLUDE FILES: smNameLib.h
  29. SEE ALSO: smNameLib, smObjLib,
  30. tb VxWorks Programmer's Guide: Shared Memory Objects
  31. */
  32. #include "vxWorks.h"
  33. #include "errno.h"
  34. #include "smDllLib.h"
  35. #include "smObjLib.h"
  36. #include "smMemLib.h"
  37. #include "stdio.h"
  38. #include "stdlib.h"
  39. #include "string.h"
  40. #include "taskLib.h"
  41. #include "netinet/in.h"
  42. #include "private/smNameLibP.h"
  43. #include "private/semSmLibP.h"
  44. /* globals */
  45. char * smTypeString[MAX_DEF_TYPE] = 
  46.     {
  47.     "SM_SEM_B", "SM_SEM_C", "SM_MSG_Q", "SM_PART_ID", "SM_BLOCK"
  48.     };
  49. /******************************************************************************
  50. *
  51. * smNameShowInit - initialize shared name databse show routine
  52. *
  53. * This routine links the shared memory objects show routine into the VxWorks
  54. * system.  These routines are included automatically by defining
  55. * %INCLUDE_SHOW_ROUTINES in configAll.h.
  56. *
  57. * RETURNS: N/A
  58. *
  59. * NOMANUAL
  60. */
  61. void smNameShowInit (void)
  62.     {
  63.     }
  64. /******************************************************************************
  65. *
  66. * smNameInfoGet - support routine for smNameShow
  67. *
  68. * This routine fills a table containing names, values and types stored in the 
  69. * shared name database.
  70. *
  71. * WARNING
  72. * This routine locks access to the shared name database while
  73. * getting its contents.  This can compromise the access time to
  74. * the name database from other CPU in the system.  Generally this routine is
  75. * used for debugging purposes only.
  76. *
  77. * RETURNS: OK or ERROR if name facility is not initialized 
  78. *
  79. * ERRNO: 
  80. *  S_smObjLib_LOCK_TIMEOUT
  81. *
  82. * SEE ALSO: smNameLib
  83. *
  84. * NOMANUAL
  85. */
  86. LOCAL STATUS smNameInfoGet
  87.     (
  88.     SM_OBJ_NAME_INFO nameList[], /* list of names extracted from database */
  89.     int *            pCurNumName,/* current number of names in data base */
  90.     int              maxNames   /* max names nameList[] can accomodate */
  91.     )
  92.     {
  93.     SM_OBJ_NAME    * smName;
  94.     int              ix;
  95.     TASK_SAFE ();
  96.     if (semSmTake ((SM_SEM_ID)&pSmNameDb->sem, WAIT_FOREVER) != OK)
  97. { /* get exclusive access */
  98. TASK_UNSAFE ();
  99. return (ERROR);
  100. }
  101.     smName = (SM_OBJ_NAME *) SM_DL_FIRST (&pSmNameDb->nameList);
  102.     ix = 0;
  103.     *pCurNumName = ntohl (pSmNameDb->curNumName);
  104.     /* fill the table with names, value and type */
  105.     while ((smName != LOC_NULL) && (ix <= maxNames)) 
  106. {
  107.         nameList[ix].value = (void *) ntohl ((int) smName->value); 
  108.         nameList[ix].type  = ntohl (smName->type); 
  109.         strcpy ((char *) &nameList[ix].name, (char *) &smName->name); 
  110. ix ++; /* incr name counter */
  111. /* get next name in database */
  112. smName = (SM_OBJ_NAME *) SM_DL_NEXT (smName);
  113. }
  114.     if (semSmGive ((SM_SEM_ID)&pSmNameDb->sem) != OK)  /* release access */
  115. {
  116. TASK_UNSAFE ();
  117. return (ERROR);
  118. }
  119.     TASK_UNSAFE ();
  120.     return (OK);
  121.     }
  122. /******************************************************************************
  123. *
  124. * smNameShow - show the contents of the shared memory objects name database (VxMP Option)
  125. *
  126. * This routine displays the names, values, and types of objects stored 
  127. * in the shared memory objects name database.  Predefined types
  128. * are shown, using their ASCII representations; all other types are printed
  129. * in hexadecimal.
  130. *
  131. * The <level> parameter defines the level of database information
  132. * displayed.  If <level> is 0, only statistics on the database contents are
  133. * displayed.  If <level> is greater than 0, then both statistics and
  134. * database contents are displayed.
  135. *
  136. * WARNING
  137. * This routine locks access to the shared memory objects name database while
  138. * displaying its contents.  This can compromise the access time to the name
  139. * database from other CPUs in the system.  Generally, this routine is used
  140. * for debugging purposes only.
  141. *
  142. * EXAMPLE:
  143. * cs
  144. * -> smNameShow
  145. *
  146. * Names in Database  Max : 30  Current : 6  Free : 24
  147. *
  148. * -> smNameShow 1
  149. *
  150. * Names in Database  Max : 30  Current : 6  Free : 24
  151. *
  152. * Name                Value         Type
  153. * ---------------- ----------- -------------
  154. * inputImage        0x802340    SM_MEM_BLOCK
  155. * ouputImage        0x806340    SM_MEM_BLOCK
  156. * imagePool         0x802001    SM_MEM_PART
  157. * imageInSem        0x8e0001    SM_SEM_B
  158. * imageOutSem       0x8e0101    SM_SEM_C
  159. * actionQ           0x8e0201    SM_MSG_Q
  160. * userObject        0x8e0400    0x1b0
  161. * ce
  162. *
  163. * AVAILABILITY
  164. * This routine is distributed as a component of the unbundled shared memory
  165. * objects support option, VxMP.
  166. * RETURNS: OK, or ERROR if the name facility is not initialized.
  167. *
  168. * ERRNO: 
  169. *  S_smNameLib_NOT_INITIALIZED 
  170. *  S_smObjLib_LOCK_TIMEOUT
  171. *
  172. * SEE ALSO: smNameLib
  173. */
  174. STATUS smNameShow 
  175.     (
  176.     int level /* information level */
  177.     )
  178.     {
  179.     SM_OBJ_NAME_INFO * nameInfo;
  180.     int                curNumName;  /* current # of names in database */
  181.     int                ix;
  182.     if (pSmNameDb == NULL) /* name facility initialized ? */
  183. {
  184. errno = S_smNameLib_NOT_INITIALIZED;
  185. return (ERROR);
  186. }
  187.     
  188.     /* allocate name info table */
  189.     nameInfo = (SM_OBJ_NAME_INFO *) 
  190. malloc (sizeof(SM_OBJ_NAME_INFO) * ntohl (pSmNameDb->maxName));
  191.     if (nameInfo == NULL)
  192.         {
  193. return (ERROR);
  194.         }
  195.     /* fill name info table */
  196.     if (smNameInfoGet (nameInfo, &curNumName, ntohl (pSmNameDb->maxName)) !=OK)
  197. {
  198. free (nameInfo);
  199. return (ERROR);
  200. }
  201.     /* print header lines */
  202.     printf ("nName in Database  Max : %d  Current : %d  Free : %dnn",
  203.        ntohl (pSmNameDb->maxName),
  204.        curNumName,
  205.        ntohl (pSmNameDb->maxName) - curNumName);
  206.     /* print database contents if requested */
  207.     if (level > 0)
  208. {
  209.      printf ("Name                   Value        Typen");
  210.      printf ("------------------- ------------ ------------n");
  211.      /* print each name, value and type */
  212.      for (ix=0; ix < curNumName; ix++)
  213.     {
  214.             printf ("%-19s  %#10x   ", nameInfo[ix].name, 
  215.     (int) nameInfo[ix].value);
  216.             if (nameInfo[ix].type < MAX_DEF_TYPE)
  217.                 {
  218.             printf ("%-12sn", smTypeString[nameInfo[ix].type]);
  219.                 }
  220.             else
  221.                 {
  222.             printf ("%-#10xn", nameInfo[ix].type);
  223.                 }
  224.     }
  225. }
  226.     
  227.     free (nameInfo); /* free nameInfo table */
  228.     return (OK);
  229.     }