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

VxWorks

开发平台:

C/C++

  1. /* rBuffShow.c - dynamic ring buffer (rBuff) show routines */
  2. /* Copyright 1984-1997 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01f,04mar99,dgp  replace INCLUDE_SHOW_ROUTINES with INCLUDE_RBUFF_SHOW
  8. 01e,28aug98,dgp  FCS man page edit
  9. 01d,06may98,dgp  clean up man pages for WV 2.0 beta release
  10. 01c,18dec97,cth  added include of wvBufferP.h
  11. 01b,16nov97,cth  changed rBuffId to WV2.0 generic-buffer id in rBuffShow
  12. 01a,23Sep97,nps  extracted from rBuffLib.c (based upon memShow.c).
  13. */
  14. /*
  15. DESCRIPTION
  16. This library contains display routines for the dynamic ring buffer.
  17. These routines are included automatically when INCLUDE_RBUFF_SHOW and
  18. INCLUDE_WINDVIEW are defined.
  19. SEE ALSO: rBuffLib, windsh,
  20. .pG "Target Shell,"
  21. .tG "Shell"
  22. */
  23. #include "vxWorks.h"
  24. #include "dllLib.h"
  25. #include "rBuffLib.h"
  26. #include "stdlib.h"
  27. #include "stdio.h"
  28. #include "string.h"
  29. #include "errno.h"
  30. #include "private/semLibP.h"
  31. #include "private/wvBufferP.h"
  32. /* globals */
  33. FUNCPTR rBuffShowRtn; /* rBuff show routine */
  34. /* forward declarations */
  35. /******************************************************************************
  36. *
  37. * rBuffShowInit - initialize the rBuff show facility
  38. *
  39. * This routine links the rBuff show facility into the VxWorks system.
  40. * These routines are included automatically when INCLUDE_RBUFF_SHOW is
  41. * defined.
  42. *
  43. * RETURNS: OK or ERROR.
  44. */
  45. void rBuffShowInit (void)
  46.     {
  47.     classShowConnect (rBuffClassId, (FUNCPTR)rBuffShow);
  48.     }
  49. /*******************************************************************************
  50. *
  51. * rBuffShow - show rBuff details and statistics
  52. *
  53. * If <type> is 1, the routine displays a list of all the buffers in
  54. * the rBuff.
  55. *
  56. * Protection is provided to ensure the snapshot shown is consistent.
  57. *
  58. * EXAMPLE
  59. * .CS
  60. *     -> rBuffShow buffId,1
  61. * .CE
  62. *
  63. * RETURNS: OK or ERROR.
  64. *
  65. * SEE ALSO: windsh, memPartShow(),
  66. * .pG "Target Shell,"
  67. * .tG "Shell"
  68. */
  69. STATUS rBuffShow
  70.     (
  71.     BUFFER_ID buffId, /* generic buffer identifier */
  72.     UINT32    type      /* 0 = statistics, 1 = statistics & list */
  73.     )
  74.     {
  75.     RBUFF_ID rBuff; /* access to private members of this rBuff */
  76.     /* Get access to this buffer's private information. */
  77.     rBuff = (RBUFF_ID) buffId;
  78.     /* Check validity of arguments. */
  79.     if (rBuff == NULL)
  80. {
  81. printf ("No rBuffId specified.n");
  82. return (ERROR);
  83. }
  84.     if (OBJ_VERIFY (rBuff, rBuffClassId) != OK)
  85. return (ERROR);
  86.     RBUFF_LOCK (rBuff);
  87.     printf ("nSummary of rBuff id: %p :n",rBuff);
  88.     printf ("---------------------------------n");
  89.     if (rBuff->info.srcPart == memSysPartId)
  90.         {
  91.         printf ("source partition   : System Partitionn");
  92.         }
  93.     else
  94.         {
  95.         printf ("source partition   : %pn", rBuff->info.srcPart);
  96.         }
  97.     printf ("options            : %08xn", rBuff->info.options);
  98.     printf ("buffer size        : %#xn",  rBuff->info.buffSize);
  99.     printf ("curr no. of buffs  : %d",     rBuff->info.currBuffs);
  100.     if (rBuff->info.currBuffs == rBuff->info.minBuffs)
  101.         {
  102.         printf (" (min)");
  103.         }
  104.     else if (rBuff->info.currBuffs == rBuff->info.maxBuffs)
  105.         {
  106.         printf (" (max)");
  107.         }
  108.     printf ("nmin/actualMax/max  : %d / %d / %dn",
  109.         rBuff->info.minBuffs,
  110.         rBuff->info.maxBuffsActual,
  111.         rBuff->info.maxBuffs);
  112.     printf ("empty buffs        : %dn",   rBuff->info.emptyBuffs);
  113.     printf ("times extended     : %dn",   rBuff->info.timesExtended);
  114. #if 0
  115.     printf ("curr buff to read  : %pn",   rBuff->info.buffRead);
  116.     printf ("curr buff to write : %pn",   rBuff->info.buffWrite);
  117. #endif
  118.     printf ("threshold (X'd)    : %#x (%#x)", rBuff->info.threshold,
  119.                                               rBuff->info.timesXThreshold);
  120.     if (rBuff->info.dataContent > rBuff->info.threshold)
  121.         {
  122.         printf (" *");
  123.         }
  124.     printf ("ndata content       : %#x (%d%%)n",
  125.         rBuff->info.dataContent,
  126.         (rBuff->info.dataContent * 100) /
  127.             (rBuff->info.buffSize * rBuff->info.currBuffs));
  128.     printf ("access count w / r : %d / %dn",
  129.         rBuff->info.writesSinceReset,
  130.         rBuff->info.readsSinceReset);
  131.     printf ("bytes total  w / r : %d / %dn",
  132.         rBuff->info.bytesWritten,
  133.         rBuff->info.bytesRead);
  134.     printf ("average      w / r : %d / %dn",
  135.         (rBuff->info.writesSinceReset == 0 ? 0 :
  136.             rBuff->info.bytesWritten / rBuff->info.writesSinceReset),
  137.         (rBuff->info.readsSinceReset == 0 ? 0 :
  138.             rBuff->info.bytesRead / rBuff->info.readsSinceReset));
  139.     if (type == 1)
  140.         {
  141.         /* now traverse the ring displaying the individual buffers */
  142.         RBUFF_PTR backHome, currBuff;
  143.         UINT32 buffCount   = 1;
  144.         backHome = currBuff = rBuff->buffRead;
  145.         printf ("n- traversing ring of buffers -n");
  146.         do
  147.             {
  148.             printf ("%03d: addr: %p buff: %p dataLen: 0x%04x spaceAvail: 0x%04x",
  149.                 buffCount++, currBuff, currBuff->dataStart,
  150.                 currBuff->dataLen, currBuff->spaceAvail);
  151.             if (currBuff == rBuff->buffWrite)
  152.                 {
  153.                 printf (" W");
  154.                 }
  155.             if (currBuff == rBuff->buffRead)
  156.                 {
  157.                 printf (" R");
  158.                 }
  159.             printf ("n");
  160.             currBuff = currBuff->next;
  161.             }
  162.         while(currBuff != backHome);
  163.         printf ("... and back to %pn",backHome);
  164.         }
  165.     RBUFF_UNLOCK(rBuff);
  166.     return (OK);
  167.     }
  168. /*******************************************************************************
  169. *
  170. * rBuffInfoGet - get rBuff information
  171. *
  172. * This routine takes a rBuff ID and a pointer to a 'rBuff_STATS' structure.
  173. * All the parameters of the structure are filled in with the current partition
  174. * information.
  175. *
  176. * RETURNS: OK if the structure has valid data, otherwise ERROR.
  177. *
  178. * SEE ALSO: rBuffShow()
  179. */
  180. STATUS rBuffInfoGet 
  181.     (
  182.     BUFFER_ID buffId, /* generic buffer identifier */
  183.     RBUFF_INFO_TYPE *pRBuffInfo /* rBuff info structure */
  184.     )
  185.     {
  186.     RBUFF_ID    rBuff;          /* access to private members of this rBuff */
  187.     /* Get access to this buffer's private information. */
  188.     rBuff = (RBUFF_ID) buffId;
  189.     /* Check validity of the arguments. */
  190.     if (rBuff == NULL)
  191. {
  192. printf ("No rBuffId specified.n");
  193. return (ERROR);
  194. }
  195.     if (OBJ_VERIFY (rBuff, rBuffClassId) != OK)
  196. return (ERROR);
  197.     RBUFF_LOCK (rBuff);
  198.     pRBuffInfo->srcPart          = rBuff->info.srcPart;
  199.     pRBuffInfo->options          = rBuff->info.options;
  200.     pRBuffInfo->buffSize         = rBuff->info.buffSize;
  201.     pRBuffInfo->currBuffs        = rBuff->info.currBuffs;
  202.     pRBuffInfo->minBuffs         = rBuff->info.minBuffs;
  203.     pRBuffInfo->maxBuffs         = rBuff->info.maxBuffs;
  204.     pRBuffInfo->maxBuffsActual   = rBuff->info.maxBuffsActual;
  205.     pRBuffInfo->emptyBuffs       = rBuff->info.emptyBuffs;
  206.     pRBuffInfo->timesExtended    = rBuff->info.timesExtended;
  207.     pRBuffInfo->threshold        = rBuff->info.threshold;
  208.     pRBuffInfo->timesXThreshold  = rBuff->info.timesXThreshold;
  209.     pRBuffInfo->dataContent      = rBuff->info.dataContent;
  210.     pRBuffInfo->writesSinceReset = rBuff->info.writesSinceReset;
  211.     pRBuffInfo->writesSinceReset = rBuff->info.readsSinceReset;
  212.     pRBuffInfo->bytesWritten     = rBuff->info.bytesWritten;
  213.     pRBuffInfo->bytesRead        = rBuff->info.bytesRead;
  214.     RBUFF_UNLOCK(rBuff);
  215.     return (OK);
  216.     }