#ifndef __INC_POS_DEVICE_AUDIO_H
#define __INC_POS_DEVICE_AUDIO_H
/*******************************************************************
 Includes Release 24
 (C) Copyright 1995-1997 proDAD
     All Rights Reserved

 $AUT Holger Burkarth
 $DAT >>Audio.h<<   28 Mar 1997    09:35:42 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PEXEC_DEVICE_H
#include <pExec/Device.h>
#endif

/*\
*** OpenDevice mit Unit==~0 geht immer:
*** Geeignet für: AUDIOCMD_Info, AUDIOCMD_ChannelInfo
\*/

 struct pOS_AudioDevice {struct pOS_Device Dev; };


/*----------------------------------
-----------------------------------*/
struct pOS_AudioIO
{
 /** struct pOS_IORequest **/

  struct pOS_Message   aio_Message;
  struct pOS_Device   *aio_Device;   /* device node pointer  */
  struct pOS_Unit     *aio_Unit;     /* unit (driver private) */
  UWORD                aio_Command;  /* (enum pOS_IOReqCommands) (enum pOS_AudioIOReqCommands) */
  UBYTE                aio_Flags;    /* (enum pOS_IOReqFlags) */
  SBYTE                aio_Error;    /* (enum pOS_IOReqErrors) */

  union {
    UBYTE  aio_Reserved[64];

    struct { /** CMD_WRITE **/
      struct pOS_AudioMap *amio_AudioMap;
      UWORD                amio_Volume;
      UWORD                amio_Cycles;
      ULONG                amio_Frequency;   /* Hz */
      ULONG                amio_Length;
    } aio_Map;

    struct { /** AUDIOCMD_Info **/
      ULONG  aiio_FirstHwChannels;  /* Erster Hardware-Channels */
      ULONG  aiio_NumHwChannels;    /* Anzahl der Hardware-Channels */
      ULONG  aiio_FirstSwChannels;  /* Erster Software-Channels */
      ULONG  aiio_NumSwChannels;    /* Anzahl der Software-Channels */
    } aio_Info;

    struct { /** AUDIOCMD_ChannelInfo **/
      ULONG                     acio_Channel;
      size_t                    acio_InfoSize; /* sizeof(pOS_AudioInfoData) */
      struct pOS_AudioInfoData *acio_InfoData;
    } aio_ChInfo;

    struct { /** AUDIOCMD_AllocChannel **/
      const struct pOS_TagItem *alio_Tags;
      ULONG                     alio_Result;
    } aio_AllocCh;

    /** AUDIOCMD_FreeChannel **/


  } aio_U;

};



enum pOS_AudioIOReqCommands
{
  AUDIOCMD_Info = CMD_NONSTD,
  AUDIOCMD_ChannelInfo,
  AUDIOCMD_AllocChannel,
  AUDIOCMD_FreeChannel
};


enum pOS_AudioIOReqErrors
{
  AUDIOIOERR_UnknownChannel=1
};

#endif
