topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-ADSP.h / h



  /*
       File:       ADSP.h
   
       Contains:   AppleTalk Data Stream Protocol (ADSP) Interfaces.
   
       Version:    Technology: System 7.5
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1986-2001 by Apple Computer, Inc., all rights reserved
   
       Bugs?:      For bug reports, consult the following page on
                   the World Wide Web:
   
                       http://developer.apple.com/bugreporter/
   
  */
  ifndef __ADSP__
  define __ADSP__
  
  ifndef __MACERRORS__
  include <MacErrors.h>
  endif
  
  ifndef __APPLETALK__
  include <AppleTalk.h>
  endif
  
  if PRAGMA_ONCE
  #pragma once
  endif
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  if PRAGMA_IMPORT
  #pragma import on
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=mac68k
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  /*driver control csCodes*/
  enum {
      dspInit                     = 255,                          /* create a new connection end */
      dspRemove                   = 254,                          /* remove a connection end */
      dspOpen                     = 253,                          /* open a connection */
      dspClose                    = 252,                          /* close a connection */
      dspCLInit                   = 251,                          /* create a connection listener */
      dspCLRemove                 = 250,                          /* remove a connection listener */
      dspCLListen                 = 249,                          /* post a listener request */
      dspCLDeny                   = 248,                          /* deny an open connection request */
      dspStatus                   = 247,                          /* get status of connection end */
      dspRead                     = 246,                          /* read data from the connection */
      dspWrite                    = 245,                          /* write data on the connection */
      dspAttention                = 244,                          /* send an attention message */
      dspOptions                  = 243,                          /* set connection end options */
      dspReset                    = 242,                          /* forward reset the connection */
      dspNewCID                   = 241                           /* generate a cid for a connection end */
  };
  
  enum {
                                                                  /* connection opening modes */
      ocRequest                   = 1,                            /* request a connection with remote */
      ocPassive                   = 2,                            /* wait for a connection request from remote */
      ocAccept                    = 3,                            /* accept request as delivered by listener */
      ocEstablish                 = 4                             /* consider connection to be open */
  };
  
  enum {
                                                                  /* connection end states */
      sListening                  = 1,                            /* for connection listeners */
      sPassive                    = 2,                            /* waiting for a connection request from remote */
      sOpening                    = 3,                            /* requesting a connection with remote */
      sOpen                       = 4,                            /* connection is open */
      sClosing                    = 5,                            /* connection is being torn down */
      sClosed                     = 6                             /* connection end state is closed */
  };
  
  enum {
                                                                  /* client event flags */
      eClosed                     = 0x80,                         /* received connection closed advice */
      eTearDown                   = 0x40,                         /* connection closed due to broken connection */
      eAttention                  = 0x20,                         /* received attention message */
      eFwdReset                   = 0x10                          /* received forward reset advice */
  };
  
  enum {
                                                                  /* miscellaneous constants */
      attnBufSize                 = 570,                          /* size of client attention buffer */
      minDSPQueueSize             = 100                           /* Minimum size of receive or send Queue */
  };
  
  /* connection control block */
  typedef struct TRCCB                    TRCCB;
  typedef TRCCB *                         TPCCB;
  
  struct TRCCB {
      TPCCB                           ccbLink;                    /* link to next ccb */
      UInt16                          refNum;                     /* user reference number */
      UInt16                          state;                      /* state of the connection end */
      UInt8                           userFlags;                  /* flags for unsolicited connection events */
      UInt8                           localSocket;                /* socket number of this connection end */
      AddrBlock                       remoteAddress;              /* internet address of remote end */
      UInt16                          attnCode;                   /* attention code received */
      UInt16                          attnSize;                   /* size of received attention data */
      void *                          attnPtr;                    /* ptr to received attention data */
      UInt8                           reserved[220];              /* for adsp internal use */
  };
  
  typedef CALLBACK_API( void , ADSPConnectionEventProcPtr )(TPCCB sourceCCB);
  /*
      WARNING: ADSPConnectionEventProcPtr uses register based parameters under classic 68k
               and cannot be written in a high-level language without 
               the help of mixed mode or assembly glue.
  */
  typedef struct DSPParamBlock            DSPParamBlock;
  typedef DSPParamBlock *                 DSPPBPtr;
  typedef CALLBACK_API( void , ADSPCompletionProcPtr )(DSPPBPtr thePBPtr);
  /*
      WARNING: ADSPCompletionProcPtr uses register based parameters under classic 68k
               and cannot be written in a high-level language without 
               the help of mixed mode or assembly glue.
  */
  typedef REGISTER_UPP_TYPE(ADSPConnectionEventProcPtr)           ADSPConnectionEventUPP;
  typedef REGISTER_UPP_TYPE(ADSPCompletionProcPtr)                ADSPCompletionUPP;
  
  struct TRinitParams {
      TPCCB                           ccbPtr;                     /* pointer to connection control block */
      ADSPConnectionEventUPP          userRoutine;                /* client routine to call on event */
      UInt16                          sendQSize;                  /* size of send queue (0..64K bytes) */
      void *                          sendQueue;                  /* client passed send queue buffer */
      UInt16                          recvQSize;                  /* size of receive queue (0..64K bytes) */
      void *                          recvQueue;                  /* client passed receive queue buffer */
      void *                          attnPtr;                    /* client passed receive attention buffer */
      UInt8                           localSocket;                /* local socket number */
      UInt8                           filler1;                    /* filler for proper byte alignment */
  };
  typedef struct TRinitParams             TRinitParams;
  
  struct TRopenParams {
      UInt16                          localCID;                   /* local connection id */
      UInt16                          remoteCID;                  /* remote connection id */
      AddrBlock                       remoteAddress;              /* address of remote end */
      AddrBlock                       filterAddress;              /* address filter */
      UInt32                          sendSeq;                    /* local send sequence number */
      UInt16                          sendWindow;                 /* send window size */
      UInt32                          recvSeq;                    /* receive sequence number */
      UInt32                          attnSendSeq;                /* attention send sequence number */
      UInt32                          attnRecvSeq;                /* attention receive sequence number */
      UInt8                           ocMode;                     /* open connection mode */
      UInt8                           ocInterval;                 /* open connection request retry interval */
      UInt8                           ocMaximum;                  /* open connection request retry maximum */
      UInt8                           filler2;                    /* filler for proper byte alignment */
  };
  typedef struct TRopenParams             TRopenParams;
  
  struct TRcloseParams {
      UInt8                           abort;                      /* abort connection immediately if non-zero */
      UInt8                           filler3;                    /* filler for proper byte alignment */
  };
  typedef struct TRcloseParams            TRcloseParams;
  
  struct TRioParams {
      UInt16                          reqCount;                   /* requested number of bytes */
      UInt16                          actCount;                   /* actual number of bytes */
      void *                          dataPtr;                    /* pointer to data buffer */
      UInt8                           eom;                        /* indicates logical end of message */
      UInt8                           flush;                      /* send data now */
  };
  typedef struct TRioParams               TRioParams;
  
  struct TRattnParams {
      UInt16                          attnCode;                   /* client attention code */
      UInt16                          attnSize;                   /* size of attention data */
      void *                          attnData;                   /* pointer to attention data */
      UInt8                           attnInterval;               /* retransmit timer in 10-tick intervals */
      UInt8                           filler4;                    /* filler for proper byte alignment */
  };
  typedef struct TRattnParams             TRattnParams;
  
  struct TRstatusParams {
      TPCCB                           statusCCB;                  /* pointer to ccb */
      UInt16                          sendQPending;               /* pending bytes in send queue */
      UInt16                          sendQFree;                  /* available buffer space in send queue */
      UInt16                          recvQPending;               /* pending bytes in receive queue */
      UInt16                          recvQFree;                  /* available buffer space in receive queue */
  };
  typedef struct TRstatusParams           TRstatusParams;
  
  struct TRoptionParams {
      UInt16                          sendBlocking;               /* quantum for data packets */
      UInt8                           sendTimer;                  /* send timer in 10-tick intervals */
      UInt8                           rtmtTimer;                  /* retransmit timer in 10-tick intervals */
      UInt8                           badSeqMax;                  /* threshold for sending retransmit advice */
      UInt8                           useCheckSum;                /* use ddp packet checksum */
  };
  typedef struct TRoptionParams           TRoptionParams;
  
  struct TRnewcidParams {
      UInt16                          newcid;                     /* new connection id returned */
  };
  typedef struct TRnewcidParams           TRnewcidParams;
  
  struct DSPParamBlock {
      QElem *                         qLink;
      short                           qType;
      short                           ioTrap;
      Ptr                             ioCmdAddr;
      ADSPCompletionUPP               ioCompletion;
      OSErr                           ioResult;
      StringPtr                       ioNamePtr;
      short                           ioVRefNum;
      short                           ioCRefNum;                  /* adsp driver refNum */
      short                           csCode;                     /* adsp driver control code */
      long                            qStatus;                    /* adsp internal use */
      short                           ccbRefNum;
      union {
          TRinitParams                    initParams;
          TRopenParams                    openParams;
          TRcloseParams                   closeParams;            /*dspClose, dspRemove*/
          TRioParams                      ioParams;               /*dspRead, dspWrite*/
          TRattnParams                    attnParams;             /*dspAttention*/
          TRstatusParams                  statusParams;           /*dspStatus*/
          TRoptionParams                  optionParams;           /*dspOptions*/
          TRnewcidParams                  newCIDParams;           /*dspNewCID*/
      }                                 u;
  };
  
  if OPAQUE_UPP_TYPES
  if CALL_NOT_IN_CARBON
      EXTERN_API(ADSPConnectionEventUPP)
      NewADSPConnectionEventUPP      (ADSPConnectionEventProcPtr userRoutine);
  
      EXTERN_API(ADSPCompletionUPP)
      NewADSPCompletionUPP           (ADSPCompletionProcPtr   userRoutine);
  
      EXTERN_API(void)
      DisposeADSPConnectionEventUPP    (ADSPConnectionEventUPP userUPP);
  
      EXTERN_API(void)
      DisposeADSPCompletionUPP       (ADSPCompletionUPP       userUPP);
  
      EXTERN_API(void)
      InvokeADSPConnectionEventUPP    (TPCCB                  sourceCCB,
                                      ADSPConnectionEventUPP  userUPP);
  
      EXTERN_API(void)
      InvokeADSPCompletionUPP        (DSPPBPtr                thePBPtr,
                                      ADSPCompletionUPP       userUPP);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  else
      enum { uppADSPConnectionEventProcInfo = 0x0000B802 };           /* register no_return_value Func(4_bytes:A1) */
      enum { uppADSPCompletionProcInfo = 0x00009802 };                /* register no_return_value Func(4_bytes:A0) */
      #define NewADSPConnectionEventUPP(userRoutine)                  (ADSPConnectionEventUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppADSPConnectionEventProcInfo, GetCurrentArchitecture())
      #define NewADSPCompletionUPP(userRoutine)                       (ADSPCompletionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppADSPCompletionProcInfo, GetCurrentArchitecture())
      #define DisposeADSPConnectionEventUPP(userUPP)                  DisposeRoutineDescriptor(userUPP)
      #define DisposeADSPCompletionUPP(userUPP)                       DisposeRoutineDescriptor(userUPP)
      #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
      #pragma parameter InvokeADSPConnectionEventUPP(__A1, __A0)
      void InvokeADSPConnectionEventUPP(TPCCB sourceCCB, ADSPConnectionEventUPP userUPP) = 0x4E90;
      #else
          #define InvokeADSPConnectionEventUPP(sourceCCB, userUPP)        CALL_ONE_PARAMETER_UPP((userUPP), uppADSPConnectionEventProcInfo, (sourceCCB))
      #endif
      #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
      #pragma parameter InvokeADSPCompletionUPP(__A0, __A1)
      void InvokeADSPCompletionUPP(DSPPBPtr thePBPtr, ADSPCompletionUPP userUPP) = 0x4E91;
      #else
          #define InvokeADSPCompletionUPP(thePBPtr, userUPP)              CALL_ONE_PARAMETER_UPP((userUPP), uppADSPCompletionProcInfo, (thePBPtr))
      #endif
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewADSPConnectionEventProc(userRoutine)                 NewADSPConnectionEventUPP(userRoutine)
  define NewADSPCompletionProc(userRoutine)                      NewADSPCompletionUPP(userRoutine)
  define CallADSPConnectionEventProc(userRoutine, sourceCCB)     InvokeADSPConnectionEventUPP(sourceCCB, userRoutine)
  define CallADSPCompletionProc(userRoutine, thePBPtr)           InvokeADSPCompletionUPP(thePBPtr, userRoutine)
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=reset
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(pop)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack()
  endif
  
  ifdef PRAGMA_IMPORT_OFF
  #pragma import off
  #elif PRAGMA_IMPORT
  #pragma import reset
  endif
  
  ifdef __cplusplus
  }
  endif
  
  endif /* __ADSP__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.