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

VxWorks

开发平台:

C/C++

  1. /* wvServer.c - WindView RPC server */
  2. /* Copyright 1994 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01e,05apr94,smb  corrected documentation
  8. 01e,22feb94,smb  corrected Copyright date
  9. 01d,20jan94,c_s  doc cleanup.
  10. 01c,14jan94,c_s  added online doc for wvServerInit, description block.
  11. 01b,30dec93,c_s  service routines now place results in heap memory, for 
  12.    reentrancy.  wvServer () entry point now has arguments
  13.    for priority and stack size.  Since the svc module
  14.    is now hand coded rather than the output of rpcgen, 
  15.    the nonsense with main () and __main () is removed.
  16. 01a,06dec93,c_s  written.
  17. */
  18. /*
  19. DESCRIPTION
  20. This module implements the RPC calls for the WindView command server, and
  21. exports the routine wvServerInit to start up the RPC service.
  22. INCLUDE FILES: wvLib.h wvRpc.h
  23. NOMANUAL
  24. SEE ALSO: 
  25. */
  26. /* includes */
  27. #include "vxWorks.h"
  28. #include "symLib.h"
  29. #include "string.h"
  30. #include "taskLib.h"
  31. #include "rpc/rpc.h"
  32. #include "rpcLib.h"
  33. #include "wvRpc.h"
  34. #include "wvLib.h"
  35. /* externs */
  36. extern SYMTAB_ID sysSymTbl;
  37. /* forward declarations */
  38. void wvServer (void);
  39. /*******************************************************************************
  40. *
  41. * wvproc_symtab_lookup_1 - RPC service routine for symbol-table lookup
  42. *
  43. * The named symbol is looked up in sysSymTbl.  The name is tried first
  44. * verbatim and then with an underscore prepended.
  45. * before kernel objects are initialized.
  46. *
  47. * RETURNS:  a pointer to the unsigned long result on the heap; if the
  48. *     symbol couldn't be found that result will be zero.  If memory
  49. *           couldn't be allocated NULL is returned.
  50. * SEE ALSO:
  51. * NOMANUAL
  52. */
  53. u_long *wvproc_symtab_lookup_1 
  54.     (
  55.     char **name
  56.     )
  57.     {
  58.     SYM_TYPE type;
  59.     u_long *value = (u_long *) malloc (sizeof (u_long));
  60.     int status;
  61.     char tmp_name [80];
  62.     if (!value)
  63. {
  64. return NULL;
  65. }
  66.     *tmp_name = '_';
  67.     strcpy (tmp_name+1, *name);
  68.     status = symFindByName (sysSymTbl, tmp_name+1, (char **) value, &type);
  69.     if (status == ERROR)
  70. {
  71. status = symFindByName (sysSymTbl, tmp_name, (char **) value, &type);
  72. }
  73.        
  74.     if (status == ERROR)
  75. {
  76. *value = 0;
  77. }
  78.     return value;
  79.     }
  80. /*******************************************************************************
  81. *
  82. * wvproc_task_spawn_1 - RPC service routine for task spawning
  83. *
  84. * The passed <pSpawnRec> contains the arguments for taskSpawn () (see
  85. * wvRpc.x).
  86. *
  87. * RETURNS:  the return value of taskSpawn on the heap, or NULL if memory 
  88. *           couldn't be allocated.
  89. * SEE ALSO:
  90. * NOMANUAL
  91. */
  92. u_long *wvproc_task_spawn_1 
  93.     (
  94.     struct taskSpawnRec *pSpawnRec
  95.     )
  96.     {
  97.     u_long *value = (u_long *) malloc (sizeof (u_long));
  98.     if (!value)
  99. {
  100. return NULL;
  101. }
  102.     *value = taskSpawn (pSpawnRec->name,
  103.         pSpawnRec->priority,
  104.         pSpawnRec->options,
  105.         pSpawnRec->stackSize,
  106.         (FUNCPTR) pSpawnRec->entry,
  107.         pSpawnRec->arg [0],
  108.         pSpawnRec->arg [1],
  109.         pSpawnRec->arg [2],
  110.         pSpawnRec->arg [3],
  111.         pSpawnRec->arg [4],
  112.         pSpawnRec->arg [5],
  113.         pSpawnRec->arg [6],
  114.         pSpawnRec->arg [7],
  115.         pSpawnRec->arg [8],
  116.         pSpawnRec->arg [9]);
  117.     return value;
  118.     }
  119. /*******************************************************************************
  120. *
  121. * wvproc_call_function_1 - RPC service routine for calling a function
  122. *
  123. * The passed <pCallRec> contains the function address and arguments to 
  124. * pass.  
  125. *
  126. * RETURNS:  the return value of function on the heap, or NULL if memory 
  127. *           couldn't be allocated.
  128. * SEE ALSO:
  129. * NOMANUAL
  130. */
  131. u_long *wvproc_call_function_1 
  132.     (
  133.     struct callFuncRec *pCallRec
  134.     )
  135.     {
  136.     u_long *value = (u_long *) malloc (sizeof (u_long));
  137.     unsigned long (*function) () = (unsigned long (*)()) pCallRec->funcPtr;
  138.     if (!value)
  139. {
  140. return NULL;
  141. }
  142.     *value = function (pCallRec->arg[0],
  143.        pCallRec->arg[1],
  144.        pCallRec->arg[2],
  145.        pCallRec->arg[3],
  146.        pCallRec->arg[4],
  147.        pCallRec->arg[5],
  148.        pCallRec->arg[6],
  149.        pCallRec->arg[7],
  150.        pCallRec->arg[8],
  151.        pCallRec->arg[9],
  152.        pCallRec->arg[10],
  153.        pCallRec->arg[11],
  154.        pCallRec->arg[12],
  155.        pCallRec->arg[13],
  156.        pCallRec->arg[14],
  157.        pCallRec->arg[15],
  158.        pCallRec->arg[16],
  159.        pCallRec->arg[17],
  160.        pCallRec->arg[18],
  161.        pCallRec->arg[19]);
  162.     return value;
  163.     }
  164. /*******************************************************************************
  165. *
  166. * wvServerInit - start the WindView command server on the target (WindView)
  167. *
  168. * This routine spawns the RPC server task for WindView with the indicated 
  169. * stack size and priority.
  170. *
  171. * This routine is invoked automatically from usrConfig.c when 
  172. * INCLUDE_WINDVIEW is defined in configAll.h.  It should be performed
  173. * after usrNetInit() has run.
  174. *
  175. * RETURNS:  
  176. * The task ID of the server task, or ERROR if it could not be started.
  177. *  
  178. * SEE ALSO: wvLib
  179. */
  180. STATUS wvServerInit 
  181.     (
  182.     int serverStackSize, /* server task stack size */
  183.     int serverPriority /* server task priority */
  184.     )
  185.     {
  186.     return taskSpawn ("tWvSvc", serverPriority, 0, serverStackSize,
  187.               (FUNCPTR) wvSvc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
  188.     }