gio.h
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:6k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2003 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  
  7.  */
  8. /* "@(#) DDK 1.11.00.00 11-04-03 (ddk-b13)" */
  9. /*
  10.  *  ======== gio.h ========
  11.  *
  12.  *  General Input/Output Module's public header file.
  13.  *
  14.  */
  15. #ifndef GIO_
  16. #define GIO_
  17. #include <iom.h>
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. /*
  22.  *  These function pointers are used to bind blocking functions to IOM.
  23.  *  In DSP/BIOS TSK based applications, these function pointers
  24.  *  will be assigned to SEM_create, SEM_delete, SEM_pend and SEM_post. These
  25.  *  pointers can be assigned to simple block/unblock operations for users
  26.  *  who aren't using TSK.
  27.  */
  28. typedef Ptr  (*GIO_TsemCreate)(Int count, Ptr attrs);
  29. typedef Void (*GIO_TsemDelete)(Ptr semHandle);
  30. typedef Bool (*GIO_TsemPend)(Ptr semHandle, Uns timeout);
  31. typedef Void (*GIO_TsemPost)(Ptr semHandle);
  32. /*
  33.  *  A pointer named 'GIO' and a global GIO_CONFIG structure will be initialized
  34.  *  by the configuration tool to point to an GIO_Config structure.  This 
  35.  *  structure will be referenced at run-time so that GIO will not have any
  36.  *  hard-coded reference to SEM_pend, SEM_post, etc. This will allow GIO to
  37.  *  be used in TSK and non-TSK based applications.
  38.  */
  39. typedef struct GIO_Config {
  40.     GIO_TsemCreate      SEMCREATE;      /* typically SEM_create */
  41.     GIO_TsemDelete      SEMDELETE;      /* typically SEM_delete */
  42.     GIO_TsemPend        SEMPEND;        /* typically SEM_pend */
  43.     GIO_TsemPost        SEMPOST;        /* typically SEM_post */
  44. } GIO_Config;
  45. /*
  46.  *  This attributes structure is passed to GIO_create() to specify channel-
  47.  *  specific parameters.
  48.  */
  49. typedef struct GIO_Attrs  {
  50.     Int         nPackets;       /* number of asynch I/O packets */
  51.     Uns         timeout;        /* for blocking calls (SYS_FOREVER) */
  52. } GIO_Attrs;
  53. /*
  54.  *  This is the application-level callback function.
  55.  */
  56. typedef Void    (*GIO_TappCallback)(Ptr arg, Int status, Ptr bufp, Uns size);
  57. /*
  58.  *  Application layer code can pass a pointer to one of these structures
  59.  *  for the optional asynchronous call extensions.  The callback
  60.  *  function 'fxn' is called with 'arg' and the other params as defined
  61.  *  by the GIO_TappCallback typedef.
  62.  */
  63. typedef struct GIO_AppCallback {
  64.     GIO_TappCallback    fxn;
  65.     Ptr                 arg;
  66. } GIO_AppCallback;
  67. /*
  68.  *  GIO_create() allocates and returns a pointer to one of these structures
  69.  *  when successful.  This structure contains all of the fields necessary
  70.  *  for subsequent calls to GIO.
  71.  */
  72. typedef struct GIO_Obj {
  73.     IOM_Fxns    *fxns;          /* pointer to mini-driver function table */
  74.     Uns         mode;           /* IOM_INPUT, IOM_OUTPUT or IOM_INOUT */
  75.     Uns         timeout;        /* timeout parameter used for blocking calls */
  76.     IOM_Packet  syncPacket;     /* used only for synchronous operations */
  77.     QUE_Obj     freeList;       /* available frames for asynchronous I/O */
  78.     Ptr         syncObj;        /* opaque pointer to synchronization object */
  79.     Ptr         mdChan;         /* pointer to mini-driver channel object */
  80. } GIO_Obj, *GIO_Handle;
  81. /*
  82.  *  Default IOM Attributes structure.  This structure is used to assign
  83.  *  GIO_Attrs defaults and when 'NULL' is passed to GIO_create().
  84.  */
  85. extern GIO_Attrs GIO_ATTRS;
  86. /*
  87.  *  Pointer to global GIO_Config structure (GIO_CONFIG). GIO_CONFIG is 
  88.  *  defined by the configuration tool.  
  89.  */
  90. extern GIO_Config *GIO;
  91. /*
  92.  *  -------- class APIs --------
  93.  */
  94. extern Void GIO_init();
  95. /*
  96.  *  ======== GIO_abort ========
  97.  *  Abort all input and output.  GIO_abort() is a synchronous call and only 
  98.  *  returns when all I/O has been successfully aborted.
  99.  */
  100. #define GIO_abort(gioChan) 
  101.         GIO_submit(gioChan, IOM_ABORT, NULL, NULL, NULL)
  102. /*
  103.  *  ======== IOM_control ========
  104.  *  Device specific control call. 
  105.  */
  106. extern Int GIO_control(GIO_Handle gioChan, Uns cmd, Ptr args);
  107. /*
  108.  *  ======== GIO_create ========
  109.  *  GIO_create() allocates and initializes an GIO_Obj structure.  GIO_create()
  110.  *  returns a non-NULL GIO_Handle object on success and NULL for failure.
  111.  *  The 'name' parameter is used to find a matching name in the device
  112.  *  table.  Associated IOM_Fxns table and params structure are then used
  113.  *  to create a channel for that device.   The 'attrs->nPackets' parameter
  114.  *  specifies the maximum number of queued asynchronous requests that
  115.  *  can be outstanding.
  116.  */
  117. extern GIO_Handle GIO_create(String name, Int mode, Int *status, Ptr optArgs,
  118.          GIO_Attrs *attrs);
  119. /*
  120.  *  ======== GIO_delete ========
  121.  *  GIO_delete() deletes the underlying mini-drivers and then frees up
  122.  *  the GIO_Obj structure and any associated GIO_Packet structures.
  123.  */
  124. extern Int GIO_delete(GIO_Handle gioChan);
  125. /*
  126.  *  ======== GIO_flush ========
  127.  *  Flush all input and output.  Flush drains all output buffers and discards
  128.  *  any pending input.  GIO_flush() is synchronous and only returns when
  129.  *  all I/O has been successfully flushed.
  130.  */
  131. #define GIO_flush(gioChan) 
  132.         GIO_submit(gioChan, IOM_FLUSH, NULL, NULL, NULL)
  133. /*
  134.  *  ======== GIO_read ========
  135.  *  Synchronous read command.  GIO_read() returns 'IOM_COMPLETE' when I/O
  136.  *  is complete. GIO_read() returns 'IOM_ETIMEOUT' error if timeout occured
  137.  *  before read could complete.
  138.  */
  139. #define GIO_read(gioChan, bufp, psize) 
  140.         GIO_submit(gioChan, IOM_READ, bufp, psize, NULL)
  141. /*
  142.  *  ======== GIO_submit ========
  143.  *  GIO_submit() is not typically called by the application level. Assorted
  144.  *  macros use GIO_submit() to do the needed work.
  145.  * 
  146.  *  The appCallback parameter causes GIO_submit() to be synchronous or
  147.  *  asynchronous.  If appCallback is  NULL, GIO_submit() will call the 
  148.  *  GIO->PEND blocking function(synchronous).  Otherwise, GIO_submit()
  149.  *  will call the callback function and argument when the I/O operation 
  150.  *  completes(asynchronous).
  151.  */
  152. extern Int GIO_submit(GIO_Handle gioChan, Uns cmd, Ptr bufp,
  153.         Uns *psize, GIO_AppCallback *appCallback);
  154. /*
  155.  *  ======== GIO_write ========
  156.  *  Synchronous write command.  Same semantics as GIO_read() above.
  157.  */
  158. #define GIO_write(gioChan, bufp, psize) 
  159.         GIO_submit(gioChan, IOM_WRITE, bufp, psize, NULL)
  160. #ifdef __cplusplus
  161. }
  162. #endif /* extern "C" */
  163. #endif /* GIO_ */