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

VxWorks

开发平台:

C/C++

  1. /* evtdata.c - xdr routines for coding/decoding WDB event data */
  2. /* Copyright 1994-1998 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01g,10mar98,dbt added support for user events.
  8. 01f,27jul95,ms  reworked to handle compiler alignments.
  9. 01e,10jun95,pad Included rpc/rpc.h
  10. 01d,04apr95,ms  new data types.
  11. 01c,06nov94,tpr added comments.
  12. 01b,04nov94,tpr changed xdr_int to xdr_TGT_INT_T for objp->eventArg coding.
  13. 01a,03oct94,tpr written.
  14. */
  15. /*
  16. DESCRIPTION
  17. This module contains the eXternal Data Representation (XDR) routine
  18. for the wdbEvtData_t structure of the WDB protocol.
  19. This data is passed up to the host during a WDB_EVENT_GET call.
  20. */
  21. /* includes */
  22. #include <rpc/rpc.h>
  23. #include "wdbP.h"
  24. /* data types */
  25. typedef struct
  26.     {
  27.     TGT_INT_T           numInts;
  28.     WDB_CTX             context;
  29.     UINT32              info [WDB_MAX_EVT_DATA];
  30.     } WDB_EVT_CTX_INFO;
  31. /******************************************************************************
  32. *
  33. * xdr_WDB_EVT_CTX_INFO -
  34. */ 
  35. static BOOL xdr_WDB_EVT_CTX_INFO
  36.     (
  37.     XDR *     xdrs, /* xdr handle */
  38.     WDB_EVT_CTX_INFO *  objp /* pointer to the object to process */
  39.     )
  40.     {
  41.     UINT32 ix;
  42.     if (!xdr_TGT_INT_T (xdrs, &objp->numInts))
  43. return (FALSE);
  44.     if (!xdr_WDB_CTX (xdrs, &objp->context))
  45. return (FALSE);
  46.     for (ix = 0; (ix + 2 < objp->numInts) && (ix + 2 < WDB_MAX_EVT_DATA); ix++)
  47. {
  48. if (!xdr_UINT32 (xdrs, &objp->info[ix]))
  49.     return (FALSE);
  50. }
  51.     return (TRUE);
  52.     }
  53. /*******************************************************************************
  54. *
  55. * xdr_WDB_EVT_INFO - code, decode or free a WDB_EVT_INFO.
  56. *
  57. * RETURNS: TRUE if it succeeds, FALSE otherwise.
  58. */
  59. BOOL xdr_WDB_EVT_INFO
  60.     (
  61.     XDR *     xdrs, /* xdr handle */
  62.     WDB_EVT_INFO *  objp /* pointer to the object to process */
  63.     )
  64.     {
  65.     UINT32 ix;
  66.     if (!xdr_TGT_INT_T (xdrs, &objp->numInts))
  67. return (FALSE);
  68.     for (ix = 0; (ix < objp->numInts) && (ix < WDB_MAX_EVT_DATA); ix++)
  69. {
  70. if (!xdr_UINT32 (xdrs, &objp->info[ix]))
  71.     return (FALSE);
  72. }
  73.     return (TRUE);
  74.     }
  75. /******************************************************************************
  76. *
  77. * xdr_WDB_CALL_RETURN_INFO - code/decode data for a WDB_CALL_RETURN event.
  78. */ 
  79. BOOL xdr_WDB_CALL_RETURN_INFO
  80.     (
  81.     XDR * xdrs, /* xdr handle */
  82.     WDB_CALL_RET_INFO * objp /* pointer to a WDB_CALL_RET_INFO */
  83.     )
  84.     {
  85.     if (!xdr_UINT32 (xdrs, &objp->callId))
  86. return (FALSE);
  87.     if (!xdr_enum (xdrs, (enum_t *)&objp->returnType))
  88. return (FALSE);
  89.     switch (objp->returnType)
  90. {
  91. case WDB_CALL_RET_DBL:
  92.     if (!xdr_double (xdrs, &objp->returnVal.returnValDbl))
  93. return (FALSE);
  94.     break;
  95. case WDB_CALL_RET_INT:
  96. default:
  97.     if (!xdr_TGT_INT_T (xdrs, &objp->returnVal.returnValInt))
  98. return (FALSE);
  99. }
  100.     if (!xdr_TGT_INT_T (xdrs, &objp->errnoVal))
  101. return (FALSE);
  102.     return (TRUE);
  103.     }
  104. /*******************************************************************************
  105. *
  106. * xdr_WDB_EVT_DATA - code, decode or free a WDB_EVT_DATA.
  107. *
  108. * RETURNS: TRUE if it succeeds, FALSE otherwise.
  109. */
  110. BOOL xdr_WDB_EVT_DATA
  111.     (
  112.     XDR * xdrs, /* xdr handle */
  113.     WDB_EVT_DATA * objp /* pointer to a wdbEvtData_t */
  114.     )
  115.     {
  116.     if (!xdr_enum (xdrs, (enum_t *)&objp->evtType))
  117.         return (FALSE);
  118.     switch (objp->evtType)
  119. {
  120. case WDB_EVT_VIO_WRITE:
  121. case WDB_EVT_USER:
  122.     if (!xdr_WDB_MEM_XFER (xdrs, &objp->eventInfo.vioWriteInfo))
  123. return (FALSE);
  124.     /* fall through */
  125. case WDB_EVT_NONE:
  126.     return (TRUE);
  127. case WDB_EVT_CALL_RET:
  128.     if (!xdr_WDB_CALL_RETURN_INFO (xdrs, &objp->eventInfo.callRetInfo))
  129. return (FALSE);
  130.     break;
  131. case WDB_EVT_CTX_START:
  132. case WDB_EVT_CTX_EXIT:
  133. case WDB_EVT_BP:
  134. case WDB_EVT_HW_BP:
  135. case WDB_EVT_WP:
  136. case WDB_EVT_EXC:
  137.     if (!xdr_WDB_EVT_CTX_INFO (xdrs,
  138. (WDB_EVT_CTX_INFO *)&objp->eventInfo.evtInfo))
  139. return (FALSE);
  140.     break;
  141. default:
  142.     if (!xdr_WDB_EVT_INFO (xdrs, &objp->eventInfo.evtInfo))
  143. return (FALSE);
  144. }
  145.     return (TRUE);
  146.     }