#ifndef AEESOUND_H
#define AEESOUND_H
/*============================================================================
FILE: AEESound.h

SERVICES:  Basic Sound Services

DESCRIPTION:
   This file provides definitions for basic sound interfaces
   available to application developers.


PUBLIC CLASSES:  Not Applicable


INITIALIZATION AND SEQUENCING REQUIREMENTS:  Not Applicable

        Copyright © 1999-2002 QUALCOMM Incorporated.
               All Rights Reserved.
            QUALCOMM Proprietary/GTDR
============================================================================*/

#include "AEE.h"
#include "AEEResourceCtl.h"

/*-------------------------------------------------------------------
            Defines
-------------------------------------------------------------------*/

#define AEE_MAX_VOLUME            100  // Volume from 0 (silence) to AEE_MAX_VOLUME

/*-------------------------------------------------------------------
      Type Declarations
-------------------------------------------------------------------*/
enum {
   AEE_SOUND_UNKNOWN,
   AEE_SOUND_SUCCESS,
   AEE_SOUND_PLAY_DONE,
   AEE_SOUND_FAILURE,
   AEE_SOUND_RESOURCE_BUSY,
   AEE_SOUND_LAST
};
#ifdef WIN32
typedef unsigned AEESoundStatus;
#else
typedef int8 AEESoundStatus;
#endif

enum {
   AEE_SOUND_DEVICE_UNKNOWN,     // Unknown device
   AEE_SOUND_DEVICE_HANDSET,     // Handset
   AEE_SOUND_DEVICE_HFK,         // Hands Free Kit (HFK)
   AEE_SOUND_DEVICE_HEADSET,     // Headset

   AEE_SOUND_DEVICE_AHFK,        // Analog HFK
   AEE_SOUND_DEVICE_SDAC,        // Stereo DAC

   AEE_SOUND_DEVICE_TTY_HFK,     // TTY HFK
   AEE_SOUND_DEVICE_TTY_HEADSET, // TTY Headset

   AEE_SOUND_DEVICE_CURRENT,     // Currently selected device
   AEE_SOUND_DEVICE_SPEAKER,     // Built-In Speaker device
   AEE_SOUND_DEVICE_BT_HEADSET,  // BlueTooth headset
   AEE_SOUND_DEVICE_LAST         // Reserved
};
#ifdef WIN32
typedef unsigned AEESoundDevice;
#else
typedef int8 AEESoundDevice;
#endif

enum {
   AEE_SOUND_METHOD_UNKNOWN,     // Unknown method
   AEE_SOUND_METHOD_VOICE,       // Use the device's voice generator
   AEE_SOUND_METHOD_BEEP,        // Use the device's keybeep generator
   AEE_SOUND_METHOD_MESSAGE,     // Use the device's keybeep generator
   AEE_SOUND_METHOD_RING,        // Use the device's ring generator
   AEE_SOUND_METHOD_CLICK,       // Use the device's click generator
   AEE_SOUND_METHOD_MIDI,        // Use the device's Midi generator
   AEE_SOUND_METHOD_AUX,         // Use the device's auxiliary generator if avail
   AEE_SOUND_METHOD_LAST         // Reserved
};
#ifdef WIN32
typedef unsigned AEESoundMethod;
#else
typedef int8 AEESoundMethod;
#endif

enum {
   AEE_SOUND_APATH_LOCAL,
   AEE_SOUND_APATH_TX,
   AEE_SOUND_APATH_BOTH,
   AEE_SOUND_APATH_MUTE,
   AEE_SOUND_APATH_LAST
};
#ifdef WIN32
typedef unsigned AEESoundAPath;
#else
typedef int8 AEESoundAPath;
#endif

enum {
   AEE_SOUND_MUTECTL_UNMUTED,
   AEE_SOUND_MUTECTL_MUTED,
   AEE_SOUND_MUTECTL_LAST
};
#ifdef WIN32
typedef unsigned AEESoundMuteCtl;
#else
typedef int8 AEESoundMuteCtl;
#endif

enum {
   AEE_TONE_FIRST,
   AEE_TONE_0,                       /* DTMF for 0 key                                                           */
   AEE_TONE_1,                       /* DTMF for 1 key                                                           */
   AEE_TONE_2,                       /* DTMF for 2 key                                                           */
   AEE_TONE_3,                       /* DTMF for 3 key                                                           */
   AEE_TONE_4,                       /* DTMF for 4 key                                                           */
   AEE_TONE_5,                       /* DTMF for 5 key                                                           */
   AEE_TONE_6,                       /* DTMF for 6 key                                                           */
   AEE_TONE_7,                       /* DTMF for 7 key                                                           */
   AEE_TONE_8,                       /* DTMF for 8 key                                                           */
   AEE_TONE_9,                       /* DTMF for 9 key                                                           */
   AEE_TONE_A,                       /* DTMF for A key                                                           */
   AEE_TONE_B,                       /* DTMF for B key                                                           */
   AEE_TONE_C,                       /* DTMF for C key                                                           */
   AEE_TONE_D,                       /* DTMF for D key                                                           */
   AEE_TONE_POUND,                   /* DTMF for # key                                                           */
   AEE_TONE_STAR,                    /* DTMF for * key                                                           */
   AEE_TONE_CTRL,                    /* Tone for a control key                                                   */
   AEE_TONE_2ND,                     /* Tone for secondary function on a key                                     */
   AEE_TONE_WARN,                    /* Warning tone (e.g. overwriting user phone# slot)                         */
   AEE_TONE_ERR,                     /* Tone to indicate an error                                                */
   AEE_TONE_TIME,                    /* Time marker tone                                                         */
   AEE_TONE_RING_A,                  /* 1st Ringer tone                                                          */
   AEE_TONE_RING_B,                  /* 2nd Ringer tone                                                          */
   AEE_TONE_RING_C,                  /* 3rd Ringer tone                                                          */
   AEE_TONE_RING_D,                  /* 4th Ringer tone                                                          */
   AEE_TONE_RING_A4,                 /*  440.0 Hz  -Piano Notes-                                                 */
   AEE_TONE_RING_AS4,                /*  466.1 Hz                                                                */
   AEE_TONE_RING_B4,                 /*  493.8 Hz                                                                */
   AEE_TONE_RING_C4,                 /*  523.2 Hz                                                                */
   AEE_TONE_RING_CS4,                /*  554.3 Hz                                                                */
   AEE_TONE_RING_D4,                 /*  587.3 Hz                                                                */
   AEE_TONE_RING_DS4,                /*  622.2 Hz                                                                */
   AEE_TONE_RING_E4,                 /*  659.2 Hz                                                                */
   AEE_TONE_RING_F4,                 /*  698.5 Hz                                                                */
   AEE_TONE_RING_FS4,                /*  739.9 Hz                                                                */
   AEE_TONE_RING_G4,                 /*  784.0 Hz                                                                */
   AEE_TONE_RING_GS4,                /*  830.6 Hz                                                                */
   AEE_TONE_RING_A5,                 /*  880.0 Hz                                                                */
   AEE_TONE_RING_AS5,                /*  932.2 Hz                                                                */
   AEE_TONE_RING_B5,                 /*  987.7 Hz                                                                */
   AEE_TONE_RING_C5,                 /* 1046.5 Hz                                                                */
   AEE_TONE_RING_CS5,                /* 1108.7 Hz                                                                */
   AEE_TONE_RING_D5,                 /* 1174.6 Hz                                                                */
   AEE_TONE_RING_DS5,                /* 1244.3 Hz                                                                */
   AEE_TONE_RING_E5,                 /* 1318.5 Hz                                                                */
   AEE_TONE_RING_F5,                 /* 1397.0 Hz                                                                */
   AEE_TONE_RING_FS5,                /* 1479.9 Hz                                                                */
   AEE_TONE_RING_G5,                 /* 1568.0 Hz                                                                */
   AEE_TONE_RING_GS5,                /* 1661.2 Hz                                                                */
   AEE_TONE_RING_A6,                 /* 1760.0 Hz                                                                */
   AEE_TONE_RING_AS6,                /* 1864.7 Hz                                                                */
   AEE_TONE_RING_B6,                 /* 1975.5 Hz                                                                */
   AEE_TONE_RING_C6,                 /* 2093.1 Hz                                                                */
   AEE_TONE_RING_CS6,                /* 2217.4 Hz                                                                */
   AEE_TONE_RING_D6,                 /* 2349.3 Hz                                                                */
   AEE_TONE_RING_DS6,                /* 2489.1 Hz                                                                */
   AEE_TONE_RING_E6,                 /* 2637.0 Hz                                                                */
   AEE_TONE_RING_F6,                 /* 2793.7 Hz                                                                */
   AEE_TONE_RING_FS6,                /* 2959.9 Hz                                                                */
   AEE_TONE_RING_G6,                 /* 3135.9 Hz                                                                */
   AEE_TONE_RING_GS6,                /* 3322.4 Hz                                                                */
   AEE_TONE_RING_A7,                 /* 3520.0 Hz                                                                */
   AEE_TONE_RBACK,                   /* Ring back (audible ring)                                                 */
   AEE_TONE_BUSY,                    /* Busy tone                                                                */
   AEE_TONE_INTERCEPT_A,             /* First tone of an intercept                                               */
   AEE_TONE_INTERCEPT_B,             /* Second tone of an intercept                                              */
   AEE_TONE_REORDER_TONE,            /* Reorder                                                                  */
   AEE_TONE_PWRUP,                   /* Power-up tone                                                            */
   AEE_TONE_OFF_HOOK_TONE,           /* Off-hook tone, IS-95 (CAI 7.7.5.5)                                       */
   AEE_TONE_CALL_WT_TONE,            /* Call-waiting tone                                                        */
   AEE_TONE_DIAL_TONE_TONE,          /* Dial tone                                                                */
   AEE_TONE_ANSWER_TONE,             /* Answer tone                                                              */
   AEE_TONE_HIGH_PITCH_A,            /* 1st High pitch for IS-54B alerting                                       */
   AEE_TONE_HIGH_PITCH_B,            /* 2nd High pitch for IS-54B alerting                                       */
   AEE_TONE_MED_PITCH_A,             /* 1st Medium pitch for IS-54B alerting                                     */
   AEE_TONE_MED_PITCH_B,             /* 2nd Medium pitch for IS-54B alerting                                     */
   AEE_TONE_LOW_PITCH_A,             /* 1st Low pitch for IS-54B alerting                                        */
   AEE_TONE_LOW_PITCH_B,             /* 2nd Low pitch for IS-54B alerting                                        */
   AEE_TONE_TEST_ON,                 /* Test tone on                                                             */
   AEE_TONE_MSG_WAITING,             /* Message Waiting Tone                                                     */
   AEE_TONE_PIP_TONE_TONE,           /* Used for Pip-Pip-Pip-Pip (Vocoder) Tone                                  */
   AEE_TONE_SPC_DT_INDIA,            /* Used for India's Special Dial Tone                                       */
   AEE_TONE_SIGNAL_INDIA,            /* Used in Various India Signalling Tones                                   */
   AEE_TONE_DT_TONE_INDIA,           /* Used for India's Normal Dial Tone (and others)                           */
   AEE_TONE_DT_TONE_BRAZIL,          /* Used for Brazil's Dial Tone                                              */
   AEE_TONE_DT_DTACO_TONE,           /* Used for DTACO's single tone (350Hz, 350Hz)                              */
                                     // FEATURE_IDS || definedFEATURE_PHONE_VR_HFK                               
   AEE_TONE_HFK_TONE1,               /* These two tones used for Voice Activation and                            */
   AEE_TONE_HFK_TONE2,               /* Incoming Call Answer in phone VR-HFK                                     */
                                                                                                                 
   AEE_TONE_SILENCE,                 /* Control tone - SND_SILENCE                                               */
   AEE_TONE_PTT_ALERT_ARRIVAL,       /* Played when there is an incoming alert                                   */                         
   AEE_TONE_PTT_CALL_ARRIVAL,        /* Played when there is an incoming PTT call                                */
   AEE_TONE_PTT_FAIL,                /* Played when there is a generic PTT failure                               */
   AEE_TONE_PTT_FLOOR_DENY,          /* Played when a user is denied floor request in a PTT call                 */
   AEE_TONE_PTT_FLOOR_GRANT,         /* Played when a user is granted floor request in a PTT call                */
   AEE_TONE_PTT_FLOOR_INTERRUPTION,  /* Played when a user is interrupted by high-priority user in a PTT call    */
   AEE_TONE_PTT_ADD_MEMBER,          /* Played when adding member to a PTT call                                  */
   AEE_TONE_PTT_SUCCESS,             /* Played when there is a generic PTT success                               */
   AEE_TONE_PTT_TALK_ANNOUNCE,       /* Played when other user grabs the floor in a PTT call                     */
   AEE_TONE_PTT_FLOOR_AVAILABLE,     /* Played when other talker releases the floor in a PTT call                */
   AEE_TONE_LAST                     /* Use for range checking last tone                                         */
};
#ifdef WIN32
typedef unsigned AEESoundTone;
#else
typedef int8 AEESoundTone;
#endif

enum {
   AEE_SOUND_STATUS_CB,
   AEE_SOUND_VOLUME_CB
};
#ifdef WIN32
typedef unsigned AEESoundCmd;
#else
typedef int8 AEESoundCmd;
#endif

typedef union
{
   uint16 wVolume;
   uint16 wPlayIndex;
} AEESoundCmdData;

typedef struct _AEESoundToneData
{
   AEESoundTone   eTone;
   uint16         wDuration;
} AEESoundToneData;

typedef struct _AEESoundInfo
{
   AEESoundDevice    eDevice;
   AEESoundMethod    eMethod;
   AEESoundAPath     eAPath;
   AEESoundMuteCtl   eEarMuteCtl;
   AEESoundMuteCtl   eMicMuteCtl;
} AEESoundInfo;

// ISound callback function type
typedef void (*PFNSOUNDSTATUS)
(
   void*          pUser,
   AEESoundCmd    eCBType,
   AEESoundStatus eSPStatus,
   uint32         dwParam
);

// Define interface pointers
typedef struct _ISound  ISound;

//-------------------------------------------------------------------
// Global Constant Declarations
//-------------------------------------------------------------------

//-------------------------------------------------------------------
// Global Data Declarations
//-------------------------------------------------------------------


//===============================================================================
// FUNCTION DECLARATIONS and INLINE FUNCTION DEFINITIONS
//===============================================================================


//-------------------------------------------------------------------
// Interface Definitions - C Style
//-------------------------------------------------------------------

//********************************************************************************************************************************
//
// ISound Interface
//
//********************************************************************************************************************************

QINTERFACE(ISound)
{
   DECLARE_IBASE(ISound)

   void     (*RegisterNotify)(ISound* po, PFNSOUNDSTATUS pfn, const void* pUser);

   int      (*Set)(ISound* po, const AEESoundInfo* pSoundInfo);
   void     (*Get)(ISound* po, AEESoundInfo* pSoundInfo);

   void     (*SetDevice)(ISound* po);

   void     (*PlayTone)(ISound* po, AEESoundToneData toneData);
   void     (*PlayToneList)(ISound* po, AEESoundToneData* pToneData, uint16 wDataLen);
   void     (*PlayFreqTone)(ISound* po, uint16 wHiFreq, uint16 wLoFreq, uint16 wDuration);
   void     (*StopTone)(ISound* po);

   void     (*Vibrate)(ISound* po, uint16 wDuration);
   void     (*StopVibrate)(ISound* po);

   void     (*SetVolume)(ISound* po, uint16 wVolume);
   void     (*GetVolume)(ISound* po);

   int      (*GetResourceCtl)(ISound * po, IResourceCtl ** ppo);
};

// Access Macros

#define ISOUND_AddRef(p)                     GET_PVTBL(p, ISound)->AddRef(p)
#define ISOUND_Release(p)                    GET_PVTBL(p, ISound)->Release(p)
#define ISOUND_RegisterNotify(p, f, u)       GET_PVTBL(p, ISound)->RegisterNotify(p, f, u)
#define ISOUND_Set(p, s)                     GET_PVTBL(p, ISound)->Set(p, s)
#define ISOUND_Get(p, s)                     GET_PVTBL(p, ISound)->Get(p, s)
#define ISOUND_SetDevice(p)                  GET_PVTBL(p, ISound)->SetDevice(p)
#define ISOUND_PlayTone(p, t)                GET_PVTBL(p, ISound)->PlayTone(p, t)
#define ISOUND_PlayToneList(p, t, d)         GET_PVTBL(p, ISound)->PlayToneList(p, t, d)
#define ISOUND_PlayFreqTone(p, h, l, d)      GET_PVTBL(p, ISound)->PlayFreqTone(p, h, l, d)
#define ISOUND_StopTone(p)                   GET_PVTBL(p, ISound)->StopTone(p)
#define ISOUND_Vibrate(p, d)                 GET_PVTBL(p, ISound)->Vibrate(p, d)
#define ISOUND_StopVibrate(p)                GET_PVTBL(p, ISound)->StopVibrate(p)
#define ISOUND_SetVolume(p, v)               GET_PVTBL(p, ISound)->SetVolume(p, v)
#define ISOUND_GetVolume(p)                  GET_PVTBL(p, ISound)->GetVolume(p)
#define ISOUND_GetResourceCtl(p,po)          GET_PVTBL(p, ISound)->GetResourceCtl(p, po)


/*=====================================================================
  DATA STRUCTURE DOCUMENTATION
=======================================================================

AEESoundAPath

Description:
AEESoundAPath is used to indicate whether or not ISound Interface should transmit
the tone over-the-air in a call

Definition:
typedef enum {
   AEE_SOUND_APATH_LOCAL,
   AEE_SOUND_APATH_TX,
   AEE_SOUND_APATH_BOTH,
   AEE_SOUND_APATH_MUTE,
   AEE_SOUND_APATH_LAST
} AEESoundAPath;

Members:

AEE_SOUND_APATH_LOCAL : DTMF on local audio
AEE_SOUND_APATH_TX : Transmit DTMFs
AEE_SOUND_APATH_BOTH : Transmit and sound DTMFs locally
AEE_SOUND_APATH_MUTE : Mute DTMFs
AEE_SOUND_APATH_LAST : Reserved


Comments:
None

See Also:
None

=============================================================================

AEESoundCmd

Description:
AEESoundCmd specifies the callback type used by ISound to send events and data to
the application

Definition:
typedef enum {
   AEE_SOUND_STATUS_CB,
   AEE_SOUND_VOLUME_CB
} AEESoundCmd;

Members:

AEE_SOUND_STATUS_CB : ISound status callback
AEE_SOUND_VOLUME_CB : Get volume callback


Comments:
None

See Also:
None

=============================================================================

AEESoundCmdData

Description:
AEESoundCmdData specifies the data sent through callback to application.

Definition:
typedef union
{
   uint16 wVolume;
   uint16 wPlayIndex;
} AEESoundCmdData;

Members:

wVolume : Volume sent through volume callback
wPlayIndex : Current tone to be played. This is sent through status callback for
PlayToneList

Comments:
None

See Also:
None

=============================================================================

AEESoundDevice

Description:
AEESoundDevice specifies the device selected and used by ISound Interface .

Definition:
typedef enum {
   AEE_SOUND_DEVICE_UNKNOWN,
   AEE_SOUND_DEVICE_HANDSET,
   AEE_SOUND_DEVICE_HFK,
   AEE_SOUND_DEVICE_HEADSET,
   AEE_SOUND_DEVICE_AHFK,
   AEE_SOUND_DEVICE_SDAC,
   AEE_SOUND_DEVICE_TTY_HFK,
   AEE_SOUND_DEVICE_TTY_HEADSET,
   AEE_SOUND_DEVICE_CURRENT,
   AEE_SOUND_DEVICE_LAST
} AEESoundDevice;

Members:

AEE_SOUND_DEVICE_UNKNOWN : Unknown device
AEE_SOUND_DEVICE_HANDSET : Handset
AEE_SOUND_DEVICE_HFK : Hands Free Kit (HFK)
AEE_SOUND_DEVICE_HEADSET : Headset
AEE_SOUND_DEVICE_AHFK : Analog HFK
AEE_SOUND_DEVICE_SDAC : Stereo DAC
AEE_SOUND_DEVICE_TTY_HFK : TTY HFK
AEE_SOUND_DEVICE_TTY_HEADSET : TTY Headset
AEE_SOUND_DEVICE_CURRENT : Currently selected device
AEE_SOUND_DEVICE_LAST : Reserved


Comments:
None

See Also:
None

=============================================================================

AEESoundInfo

Description:
AEESoundInfo specifies the ISound attributes that are used by ISound for all its
operations.

Definition:
typedef struct
{
   AEESoundDevice eDevice;
   AEESoundMethod eMethod;
   AEESoundAPath eAPath;
   AEESoundMuteCtl eEarMuteCtl;
   AEESoundMuteCtl eMicMuteCtl;
} AEESoundInfo;

Members:
eDevice : Device used
eMethod : Method used
eAPath : Over-the-air audio path
eEarMuteCtl : Earpiece mute control
eMicMuteCtl : Microphone mute control

Comments:
None

See Also:
AEESoundDevice , AEESoundMethod ,
AEESoundAPath , AEESoundMuteCtl

=============================================================================

AEESoundMethod

Description:
AEESoundMethod specifies the method used by ISound Interface .

Definition:
typedef enum {
   AEE_SOUND_METHOD_UNKNOWN,
   AEE_SOUND_METHOD_VOICE,
   AEE_SOUND_METHOD_BEEP,
   AEE_SOUND_METHOD_MESSAGE,
   AEE_SOUND_METHOD_RING,
   AEE_SOUND_METHOD_CLICK,
   AEE_SOUND_METHOD_MIDI,
   AEE_SOUND_METHOD_AUX,
   AEE_SOUND_METHOD_LAST
} AEESoundMethod;

Members:
AEE_SOUND_METHOD_UNKNOWN : Unknown method
AEE_SOUND_METHOD_VOICE : Use the device's voice generator
AEE_SOUND_METHOD_BEEP : Use the device's keybeep generator
AEE_SOUND_METHOD_MESSAGE : Use the device's keybeep generator
AEE_SOUND_METHOD_RING : Use the device's ring generator
AEE_SOUND_METHOD_CLICK : Use the device's click generator
AEE_SOUND_METHOD_MIDI : Use the device's Midi generator
AEE_SOUND_METHOD_AUX : Use the device's auxiliary generator if avail
AEE_SOUND_METHOD_LAST : Reserved

Comments:
None

See Also:
None

=============================================================================

AEESoundMuteCtl

Description:
AEESoundMuteCtl is used to control ear piece and microphone muting.

Definition:
typedef enum {
   AEE_SOUND_MUTECTL_UNMUTED,
   AEE_SOUND_MUTECTL_MUTED,
   AEE_SOUND_MUTECTL_LAST
} AEESoundMuteCtl;

Members:
AEE_SOUND_MUTECTL_UNMUTED : Audio path is not muted
AEE_SOUND_MUTECTL_MUTED : Audio path is muted
AEE_SOUND_MUTECTL_LAST : Reserved

Comments:
None

See Also:
None

=============================================================================

AEESoundStatus

Description:
AEESoundStatus is returned in callback functions to indicate ISound events and return
data to the application.

Definition:
typedef enum {
   AEE_SOUND_UNKNOWN,
   AEE_SOUND_SUCCESS,
   AEE_SOUND_PLAY_DONE,
   AEE_SOUND_FAILURE,
   AEE_SOUND_RESOURCE_BUSY,
   AEE_SOUND_LAST
} AEESoundStatus;

Members:

AEE_SOUND_UNKNOWN : Unknown status
AEE_SOUND_SUCCESS : Request is accepted
AEE_SOUND_PLAY_DONE : Playback of the tone is either completed or overridden by
                      another tone
AEE_SOUND_FAILURE : Error occurred with this request
AEE_SOUND_RESOURCE_BUSY: Sound resource is being held by other ISound interface in the
                         same application or background application.
AEE_SOUND_LAST : Reserved


Comments:
None

See Also:
None

=============================================================================

AEESoundTone

Description:
AEESoundTone specifies the tone identifiers which are used to play tone by ISound.

Definition:
typedef enum {
   AEE_TONE_FIRST,
   AEE_TONE_0,
   AEE_TONE_1,
   AEE_TONE_2,
   AEE_TONE_3,
   AEE_TONE_4,
   AEE_TONE_5,
   AEE_TONE_6,
   AEE_TONE_7,
   AEE_TONE_8,
   AEE_TONE_9,
   AEE_TONE_A,
   AEE_TONE_B,
   AEE_TONE_C,
   AEE_TONE_D,
   AEE_TONE_POUND,
   AEE_TONE_STAR,
   AEE_TONE_CTRL,
   AEE_TONE_2ND,
   AEE_TONE_WARN,
   AEE_TONE_ERR,
   AEE_TONE_TIME,
   AEE_TONE_RING_A,
   AEE_TONE_RING_B,
   AEE_TONE_RING_C,
   AEE_TONE_RING_D,
   AEE_TONE_RING_A4,
   AEE_TONE_RING_AS4,
   AEE_TONE_RING_B4,
   AEE_TONE_RING_C4,
   AEE_TONE_RING_CS4,
   AEE_TONE_RING_D4,
   AEE_TONE_RING_DS4,
   AEE_TONE_RING_E4,
   AEE_TONE_RING_F4,
   AEE_TONE_RING_FS4,
   AEE_TONE_RING_G4,
   AEE_TONE_RING_GS4,
   AEE_TONE_RING_A5,
   AEE_TONE_RING_AS5,
   AEE_TONE_RING_B5,
   AEE_TONE_RING_C5,
   AEE_TONE_RING_CS5,
   AEE_TONE_RING_D5,
   AEE_TONE_RING_DS5,
   AEE_TONE_RING_E5,
   AEE_TONE_RING_F5,
   AEE_TONE_RING_FS5,
   AEE_TONE_RING_G5,
   AEE_TONE_RING_GS5,
   AEE_TONE_RING_A6,
   AEE_TONE_RING_AS6,
   AEE_TONE_RING_B6,
   AEE_TONE_RING_C6,
   AEE_TONE_RING_CS6,
   AEE_TONE_RING_D6,
   AEE_TONE_RING_DS6,
   AEE_TONE_RING_E6,
   AEE_TONE_RING_F6,
   AEE_TONE_RING_FS6,
   AEE_TONE_RING_G6,
   AEE_TONE_RING_GS6,
   AEE_TONE_RING_A7,
   AEE_TONE_RBACK,
   AEE_TONE_BUSY,
   AEE_TONE_INTERCEPT_A,
   AEE_TONE_INTERCEPT_B,
   AEE_TONE_REORDER_TONE,
   AEE_TONE_PWRUP,
   AEE_TONE_OFF_HOOK_TONE,
   AEE_TONE_CALL_WT_TONE,
   AEE_TONE_DIAL_TONE_TONE,
   AEE_TONE_ANSWER_TONE,
   AEE_TONE_HIGH_PITCH_A,
   AEE_TONE_HIGH_PITCH_B,
   AEE_TONE_MED_PITCH_A,
   AEE_TONE_MED_PITCH_B,
   AEE_TONE_LOW_PITCH_A,
   AEE_TONE_LOW_PITCH_B,
   AEE_TONE_TEST_ON,
   AEE_TONE_MSG_WAITING,
   AEE_TONE_PIP_TONE_TONE,
   AEE_TONE_SPC_DT_INDIA,
   AEE_TONE_SIGNAL_INDIA,
   AEE_TONE_DT_TONE_INDIA,
   AEE_TONE_DT_TONE_BRAZIL,
   AEE_TONE_DT_DTACO_TONE,
   AEE_TONE_HFK_TONE1,
   AEE_TONE_HFK_TONE2,
   AEE_TONE_SILENCE,
   AEE_TONE_PTT_ALERT_ARRIVAL,                               
   AEE_TONE_PTT_CALL_ARRIVAL,        
   AEE_TONE_PTT_FAIL,                
   AEE_TONE_PTT_FLOOR_DENY,          
   AEE_TONE_PTT_FLOOR_GRANT,         
   AEE_TONE_PTT_FLOOR_INTERRUPTION,  
   AEE_TONE_PTT_ADD_MEMBER,          
   AEE_TONE_PTT_SUCCESS,             
   AEE_TONE_PTT_TALK_ANNOUNCE,       
   AEE_TONE_PTT_FLOOR_AVAILABLE,           
   AEE_TONE_LAST
} AEESoundTone;


Members:

AEE_TONE_FIRST : Reserved
AEE_TONE_0 : DTMF for 0 key
AEE_TONE_1 : DTMF for 1 key
AEE_TONE_2 : DTMF for 2 key
AEE_TONE_3 : DTMF for 3 key
AEE_TONE_4 : DTMF for 4 key
AEE_TONE_5 : DTMF for 5 key
AEE_TONE_6 : DTMF for 6 key
AEE_TONE_7 : DTMF for 7 key
AEE_TONE_8 : DTMF for 8 key
AEE_TONE_9 : DTMF for 9 key
AEE_TONE_A : DTMF for A key
AEE_TONE_B : DTMF for B key
AEE_TONE_C : DTMF for C key
AEE_TONE_D : DTMF for D key
AEE_TONE_POUND : DTMF for # key
AEE_TONE_STAR : DTMF for * key
AEE_TONE_CTRL : Tone for a control key
AEE_TONE_2ND : Tone for secondary function on a key
AEE_TONE_WARN : Warning tone (for example, overwriting user phone# slot)
AEE_TONE_ERR : Tone to indicate an error
AEE_TONE_TIME : Time marker tone
AEE_TONE_RING_A : 1st Ringer tone
AEE_TONE_RING_B : 2nd Ringer tone
AEE_TONE_RING_C : 3rd Ringer tone
AEE_TONE_RING_D : 4th Ringer tone
AEE_TONE_RING_A4 : 440.0 Hz -Piano Notes-
AEE_TONE_RING_AS4 : 466.1 Hz
AEE_TONE_RING_B4 : 493.8 Hz
AEE_TONE_RING_C4 : 523.2 Hz
AEE_TONE_RING_CS4 : 554.3 Hz
AEE_TONE_RING_D4 : 587.3 Hz
AEE_TONE_RING_DS4 : 622.2 Hz
AEE_TONE_RING_E4 : 659.2 Hz
AEE_TONE_RING_F4 : 698.5 Hz
AEE_TONE_RING_FS4 : 739.9 Hz
AEE_TONE_RING_G4 : 784.0 Hz
AEE_TONE_RING_GS4 : 830.6 Hz
AEE_TONE_RING_A5 : 880.0 Hz
AEE_TONE_RING_AS5 : 932.2 Hz
AEE_TONE_RING_B5 : 987.7 Hz
AEE_TONE_RING_C5 : 1046.5 Hz
AEE_TONE_RING_CS5 : 1108.7 Hz
AEE_TONE_RING_D5 : 1174.6 Hz
AEE_TONE_RING_DS5 : 1244.3 Hz
AEE_TONE_RING_E5 : 1318.5 Hz
AEE_TONE_RING_F5 : 1397.0 Hz
AEE_TONE_RING_FS5 : 1479.9 Hz
AEE_TONE_RING_G5 : 1568.0 Hz
AEE_TONE_RING_GS5 : 1661.2 Hz
AEE_TONE_RING_A6 : 1760.0 Hz
AEE_TONE_RING_AS6 : 1864.7 Hz
AEE_TONE_RING_B6 : 1975.5 Hz
AEE_TONE_RING_C6 : 2093.1 Hz
AEE_TONE_RING_CS6 : 2217.4 Hz
AEE_TONE_RING_D6 : 2349.3 Hz
AEE_TONE_RING_DS6 : 2489.1 Hz
AEE_TONE_RING_E6 : 2637.0 Hz
AEE_TONE_RING_F6 : 2793.7 Hz
AEE_TONE_RING_FS6 : 2959.9 Hz
AEE_TONE_RING_G6 : 3135.9 Hz
AEE_TONE_RING_GS6 : 3322.4 Hz
AEE_TONE_RING_A7 : 3520.0 Hz
AEE_TONE_RBACK : Ring back (audible ring)
AEE_TONE_BUSY : Busy tone
AEE_TONE_INTERCEPT_A : First tone of an intercept
AEE_TONE_INTERCEPT_B : Second tone of an intercept
AEE_TONE_REORDER_TONE : Reorder
AEE_TONE_PWRUP : Power-up tone
AEE_TONE_OFF_HOOK_TONE : Off-hook tone, IS-95 (CAI 7.7.5.5)
AEE_TONE_CALL_WT_TONE : Call-waiting tone
AEE_TONE_DIAL_TONE_TONE : Dial tone
AEE_TONE_ANSWER_TONE : Answer tone
AEE_TONE_HIGH_PITCH_A : 1st High pitch for IS-54B alerting
AEE_TONE_HIGH_PITCH_B : 2nd High pitch for IS-54B alerting
AEE_TONE_MED_PITCH_A : 1st Medium pitch for IS-54B alerting
AEE_TONE_MED_PITCH_B : 2nd Medium pitch for IS-54B alerting
AEE_TONE_LOW_PITCH_A : 1st Low pitch for IS-54B alerting
AEE_TONE_LOW_PITCH_B : 2nd Low pitch for IS-54B alerting
AEE_TONE_TEST_ON : Test tone on
AEE_TONE_MSG_WAITING : Message Waiting Tone
AEE_TONE_PIP_TONE_TONE : Used for Pip-Pip-Pip-Pip (Vocoder) Tone
AEE_TONE_SPC_DT_INDIA : Used for India's Special Dial Tone
AEE_TONE_SIGNAL_INDIA : Used in Various India Signalling Tones
AEE_TONE_DT_TONE_INDIA : Used for India's Normal Dial Tone (and others)
AEE_TONE_DT_TONE_BRAZIL : Used for Brazil's Dial Tone
AEE_TONE_DT_DTACO_TONE : Used for DTACO's single tone (350Hz, 350Hz)
AEE_TONE_HFK_TONE1 : These two tones used for Voice Activation and
AEE_TONE_HFK_TONE2 : Incoming Call Answer in phone VR-HFK
AEE_TONE_SILENCE  :  Control tone - SND_SILENCE.
AEE_TONE_PTT_ALERT_ARRIVAL: Played when there is an incoming alert                         
AEE_TONE_PTT_CALL_ARRIVAL: Played when there is an incoming PTT call                              
AEE_TONE_PTT_FAIL: Played when there is a generic PTT failure                             
AEE_TONE_PTT_FLOOR_DENY: Played when a user is denied floor request in a PTT call               
AEE_TONE_PTT_FLOOR_GRANT: Played when a user is granted floor request in a PTT call              
AEE_TONE_PTT_FLOOR_INTERRUPTION: Played when a user is interrupted by high-priority user in a PTT call  
AEE_TONE_PTT_ADD_MEMBER: Played when adding member to a PTT call                                
AEE_TONE_PTT_SUCCESS: Played when there is a generic PTT success                             
AEE_TONE_PTT_TALK_ANNOUNCE: Played when other user grabs the floor in a PTT call                   
AEE_TONE_PTT_FLOOR_AVAILABLE: Played when other talker releases the floor in a PTT call
AEE_TONE_LAST : Reserved


Comments:
None

See Also:
None

=============================================================================

AEESoundToneData

Description:
AEESoundToneData specifies tone id and duration to play the tone using the ISOUND_PlayTone()
and ISOUND_PlayToneList() .

Definition:
typedef struct
{
   AEESoundTone eTone;
   uint16 wDuration;
} AEESoundToneData ;

Members:
eTone : Tone ID
wDuration : Duration in milliseconds

Comments:
None

See Also:
AEESoundTone

=======================================================================

PFNSOUNDSTATUS

Description:
PFNSOUNDSTATUS is the type definition of the ISound callback function that applications
must register with ISound . ISound sends all the events and data to the applications
via the registered callback function.

Definition:
typedef void ( * PFNSOUNDSTATUS)
(
   void * pUser,
   AEESoundCmd eCBType,
   AEESoundStatus eSPStatus,
   uint32 dwParam
);

Members:
pUser : Application specified data pointer
eCBType : Type of callback
eSPStatus : Status within the callback type
dwParam : Pointer to AEESoundCmdData , if any. NULL otherwise.

Comments:
None

See Also:
AEESoundCmd ,
AEESoundPlayerStatus
AEESoundCmdData

=======================================================================
  INTERFACES   DOCUMENTATION
=======================================================================

Interface Name: ISound

Description:
The ISound Interface provides the basic sound services. These services enable playing
of beeps, rings, vibrations, various tones and list of tones. ISound defines a set
of tones that can be played for a period of time or continuously until explicitly
stopped. The tone identifiers can be put in a list and all the tones in the list
can be played using a single function call. The ISound Interface also provides functions
to get and set the volume.

To use the ISound Interface:
Create an instance of the ISound Interface with ClassID: AEECLSID_SOUND

Register the status callback function using the ISOUND_RegisterNotify() . ISound
always communicates with applets through this callback function. The Callback function
carries information regarding user data, status callback types ( AEE_SOUND_STATUS_CB,
AEE_SOUND_VOLUME_CB ) and status (AEE_SOUND_SUCCESS , AEE_SOUND_PLAY_DONE , AEE_SOUND_FAILURE)
Data, if any, is returned in the callback through the dwParam parameter which
points to AEESoundPlayerCmdData . Otherwise dwParam is NULL. It is not always required
to register a callback function; applet developer can choose not to get any ISound
events as follows:
ISOUND_RegisterNotify(pISound, NULL, NULL);

Set ISound parameters using the ISOUND_Set() . This step is optional and ISound
assumes default values for the parameters if it is not performed.

After these steps, ISound is ready for service. the ISound function description for
more details on each function.

Tone-Database:
On the target device, device manufacturers can map elements of the AEESoundTone
type to the corresponding IDs in the tone database. For example, AEE_TONE_0 maps
to SND_0 on an MSM3300-based device.

In the BREW Simulator, device manufacturers or applet developers can define their
own tone files in .WAV format and add them to BREW Simulator tone-database. The tones
are saved in the <\bin\DataFiles> subdirectory under the <\BREW> directory(where
BREW is installed) based on AEESoundTone type. For example, to add AEE_TONE_0 to
BREW Simulator, save your .WAV file as "AEE_TONE_0.wav" in the <\bin\DataFiles> subdirectory
under the <\BREW> directory(where BREW is installed). Same mechanism applies to
BeepType required in ISHELL_Beep() function. For example, to create your own BEEP_ALERT
tone, save your .WAV file as "BEEP_ALERT.wav" in the <\bin\DataFiles> subdirectory
under the <\BREW> directory(where BREW is installed). A few sample tones and all
beep types are provided. Their usage is illustrated in the sample Sound applet.

===========================================================================
ISOUND_AddRef()

Description:
This function increments the reference count of the ISound Interface object. This
allows the object to be shared by multiple callers. The object is freed when the
reference count reaches 0 (zero). ISOUND_Release() .

Prototype:
uint32 ISOUND_AddRef(ISound * pISound)

Parameters:

pISound : Pointer to the ISound Interface object

Return Value:
Returns the incremented reference count for the object. A valid object returns a
positive reference count.

Comments:
None

Side Effects:
None

Version:
   Introduced BREW Client 1.0

See Also:
   ISOUND_Release()

=============================================================================


ISOUND_Get()

Description:
This function gets the device attributes of ISound Interface object.

Prototype:
void ISOUND_Get(ISound * pISound, const AEESoundInfo * pSoundInfo)

Parameters:

pISound : [in] : Pointer to ISound Interface object
pSoundInfo : [out] : Structure containing ISound device attributes

Return Value:
None

Comments:
ISOUND_Set() function description for details on AEESoundInfo

Side Effects:
None

Version:
   Introduced BREW Client 1.0

See Also:
   None

=============================================================================

ISOUND_GetVolume()

Description:
This function retrieves the current volume used for the device/method pair.

Prototype:
void ISOUND_GetVolume(ISound * pISound)

Parameters:

pISound : Pointer to ISound Interface object

Return Value:
None

Comments:
None

Side Effects:
The volume level is sent back to the client via pointer to the AEESoundCmdData structure in the
callback function. The result includes the status as well as the current volume level. The status can
be one of the following values:

AEE_SOUND_SUCCESS:   Successful retrieving the current volume level. The dwParam of the callback function
                     is a pointer to the AEESoundCmdData structure which contains the volume
AEE_SOUND_FAILURE:   Failed to retrieve the current volume level and the volume level is reset to 0

Version:
   Introduced BREW Client 1.0
See Also:
   None

=============================================================================

ISOUND_PlayFreqTone()

Description:
This function plays a tone given a high frequency and a low frequency for the specified
amount of time.

Prototype:
void ISOUND_PlayFreqTone(ISound * pISound, uint16 wHiFreq, uint16 wLoFreq, uint16
wDuration)

Parameters:

pISound : Pointer to ISound Interface object
wHiFreq : Higher frequency of the DTMF pair
wLoFreq : Lower frequency of the DTMF pair
wDuration : Tone play duration in milliseconds

Return Value:
None

Comments:
If the duration is set to 0 (zero), the tone plays until the ISOUND_StopTone() call
is issued. This function is not supported in the BREW Simulator but it is supported
on the target device.

Side Effects:
The result of the operation is sent to the client via the callback function pointer.
Also, when the operation is done, it notifies the client through the same callback
function pointer.
The status can be one of the following values:

AEE_SOUND_SUCCESS:   Successful playing the tone
AEE_SOUND_FAILURE:   Failed playing the tone
AEE_SOUND_PLAY_DONE: Done playing the tone or replaced by another tone

Version:
   Introduced BREW Client 1.0

See Also:
   None

=============================================================================

ISOUND_PlayTone()

Description:
This function plays a tone given a tone ID for the specified amount of time.

Prototype:
void ISOUND_PlayTone(ISound * pISound, AEESoundToneData toneData)

Parameters:

pISound : Pointer to ISound Interface object
toneData : Structure containing a ToneID and the duration in milliseconds for which
that tone is to be played

Return Value:
None

Comments:
If the duration is set to 0 (zero) for any tone in the list, the tone plays until
the ISOUND_StopTone() call is issued.

Side Effects:
The result of the operation is sent to the client via the callback function the
<\bin\DataFiles> subdirectory under the <\BREW> directory(where BREW is installed).
Also, when the operation is done, it notifies the client through the same callback
function the <\bin\DataFiles> subdirectory under the <\BREW> directory(where BREW
is installed).
The status can be one of the following values:

AEE_SOUND_SUCCESS:   Successful playing the tone
AEE_SOUND_FAILURE:   Failed to play the tone
AEE_SOUND_PLAY_DONE: Done playing the tone or replaced by another tone

Version:
   Introduced BREW Client 1.0
See Also:
   None

=============================================================================

ISOUND_PlayToneList()

Description:
This function plays a list of tones, given a tone ID for the specified amount of
time for each tone.

Prototype:
void ISOUND_PlayToneList(ISound * pISound, AEESoundToneData * pToneData, uint16
wDataLen)

Parameters:

pISound : Pointer to ISound Interface object
pToneData : List(Array) of AEESoundToneData structures, each containing ToneID and
duration in milliseconds to be played for that tone
wDataLen : Number of tones in the pToneData list

Return Value:
None.

Comments:
Call ISOUND_StopTone() to end the playing of tone list. If the duration is set to
0 (zero) for any tone in the list, the tone plays until the ISOUND_StopTone() call
is issued.

Side Effects:
The result of the operation is sent to the client, for each tone in the tone list,
via the callback function pointer. Also, when the operation is done, it notifies
the client through the same callback function pointer. The status can be one of
the following values:

AEE_SOUND_SUCCESS:   Received for each successful playing of tone in the tone list
AEE_SOUND_FAILURE:   Failed playing the tone in the tone list and tone list playback ends
AEE_SOUND_PLAY_DONE: Received for each tone, in the tone list, after the tone playback is complete or
                     replaced by another tone

Version:
   Introduced BREW Client 1.0
See Also:
   None

=============================================================================
ISOUND_GetResourceCtl()

Description:
   This function returns a pointer to resource control object associated with
   this interface for accessing the sound resource. By default, ISound interface
   uses the associated resource control object to acquire the sound resource in
   the ISound APIs. Applications can use this resource control object to manage
   the sound resource differently, for example an application can use it to hold
   the sound resource for a certain period of time.

Prototype:
   int ISOUND_GetResourceCtl(ISound * po, IResourceCtl * ppo);

Parameters:
   po [in]:  Pointer to ISound interface.
   ppo[out]: Returned resource control interface object. Filled by this method

Return Value:
   SUCCESS: Valid resource control interface object returned
   EFAILED: Failed to get the resource control interface object

Comments:
   None

Side Effects:
   If the resource control interface is retrieved, then this function increments its
   reference count. User should invoke IRESOURCECTL_Release() when done.

Version:
   Introduced BREW SDK 3.1

See Also:
   None

=============================================================================
ISOUND_RegisterNotify()

Description:
This function registers the status callback function.

Prototype:
void ISOUND_RegisterNotify(ISound * pISound, PFNSOUNDSTATUS pfn, const void * pUser)


Parameters:

pISound : Pointer to ISound Interface object
pfn : Status callback function pointer (can be NULL, if no callback is required)
pUser : User data for unique correlation/identification of the transaction. This
piece of information is not retrieved or processed by ISound and can be NULL if
no identifying data is required. This same data pointer is passed back to the client
along with callback status to correlate the transactions.

Return Value:
None

Comments:
The following functions and their callback status types are listed here:

ISOUND_PlayTone      AEE_SOUND_STATUS_CB
ISOUND_PlayToneList  AEE_SOUND_STATUS_CB
ISOUND_PlayFreqTone  AEE_SOUND_STATUS_CB
ISOUND_StopTone      AEE_SOUND_STATUS_CB
ISOUND_Vibrate       AEE_SOUND_STATUS_CB
ISOUND_StopVibrate   AEE_SOUND_STATUS_CB
ISOUND_GetVolume     AEE_SOUND_VOLUME_CB
ISOUND_SetVolume     AEE_SOUND_STATUS_CB

The above list also indicates what types of status are sent out through the callback
functions. The status types determine the way the data portion of the status is
interpreted. The status indicates the status of the operations or the result of
the query in case of get-operations. each of the function descriptions to find out
the effects of this registered callback function.

Side Effects:
   None

Version:
   Introduced BREW Client 1.0
See Also:
   None

=============================================================================

ISOUND_Release()

Description:
This function decrements the reference count of an object. The object is freed from
memory and is no longer valid once the reference count reaches 0 (zero).

Prototype:
uint32 ISOUND_Release(ISound * pISound)

Parameters:

pISound : Pointer to the ISound Interface object

Return Value:

reference count : Decremented reference count for the object
0 (zero) : If the object has been freed and is no longer valid


Comments:
None

Side Effects:
None

Version:
Introduced BREW Client 1.0

See Also:
ISOUND_AddRef()

=============================================================================

ISOUND_Set()

Description:
This function sets the device attributes of ISound Interface object. The device
attributes include Device, Method, APath, Ear-piece Mute Control and Mic Mute Control.

Prototype:
int ISOUND_Set(ISound * pISound, const AEESoundInfo * pSoundInfo)

Parameters:

pISound : Pointer to ISound Interface object
pSoundInfo : Structure containing ISound device attributes

Return Value:

SUCCESS : ISound device attributes are set
EBADPARAM : One or more AEESoundInfo parameters are wrong


Comments:
The device is not connected until you call ISOUND_SetDevice() .

Side Effects:
If SUCCESS is NOT returned, then ISound Interface retains the previous values. If
it is created first time it has the default values.

Version:
Introduced BREW Client 1.0

See Also:
AEESoundInfo

=============================================================================

ISOUND_SetDevice()

Description:
This function commands ISound to connect to a specific audio device. There is always
one, and only one, audio device connected at any particular time. The audio device
is specified by the call to the ISOUND_Set() function.

Prototype:
void ISOUND_SetDevice(ISound * pISound)

Parameters:

pISound : Pointer to ISound Interface object

Return Value:
None

Comments:
This function is not supported in BREW Simulator but it is supported on the target
device.

Side Effects:
The result of the operation is sent to the client via the callback function the
<\bin\DataFiles> subdirectory under the <\BREW> directory(where BREW is installed).
The status can be one of the following values:

AEE_SOUND_SUCCESS:   Successful connecting to the new sound device
AEE_SOUND_FAILURE:   Failed to connect to the new sound device

Version:
Introduced BREW Client 1.0

See Also:
ISOUND_Set()

=============================================================================

ISOUND_SetVolume()

Description:
This function sets the volume to be used for the device/method pair specified in
the call to ISOUND_Set() .

Prototype:
void ISOUND_SetVolume(ISound * pISound, uint16 wVolume)

Parameters:

pISound : Pointer to ISound Interface object
wVolume : New volume level for device/method

Return Value:
None

Comments:
The range of volume is from 0 (zero, lowest) to AEE_MAX_VOLUME (highest). In the
BREW Simulator, the volume increases linearly. This may not be the case on target
device.

Side Effects:
The result of the operation is sent to the client via the callback function pointer.
The result can be one of the following:

AEE_SOUND_SUCCESS:   Successful setting the new volume level
AEE_SOUND_FAILURE:   Failed setting the new volume level; the old level still prevails

Version:
Introduced BREW Client 1.0

Version:
Introduced BREW Client 1.0

See Also:
ISOUND_Set()

=============================================================================

ISOUND_StopTone()

Description:
This function stops playing current tone or ends the playback of tone list.

Prototype:
void ISOUND_StopTone(ISound * pISound)

Parameters:

pISound : Pointer to ISound Interface object

Return Value:
None.

Comments:
In BREW Simulator, this function stops the vibration tone, if vibration is active.

Side Effects:
The result of the operation is sent to the client, via the callback function pointer.
Also, when the operation is done, it notifies the client through the same callback
function pointer. The status can be one of the following values:

AEE_SOUND_SUCCESS:   Successful and accepted the stop command. If playback of a tone or tone list is
                     active, then it also generates AEE_SOUND_PLAY_DONE callback
AEE_SOUND_FAILURE:   Failed and did not accept the stop command

Version:
Introduced BREW Client 1.0

See Also:
ISOUND_Vibrate()

=============================================================================

ISOUND_StopVibrate()

Description:
This stops the current vibration.

Prototype:
void ISOUND_StopVibrate(ISound * pISound)

Parameters:

pISound : Pointer to ISound Interface object

Return Value:
None

Comments:
In the BREW Simulator, this function is the same as calling ISOUND_StopTone() . As
a result, it may stop an ongoing ISOUND_PlayTone() playback.

Side Effects:
This function does not cause any callback.

Version:
Introduced BREW Client 1.0

See Also:
ISOUND_Vibrate()

=============================================================================

ISOUND_Vibrate()

Description:
This function causes the device to vibrate for the specified amount or until ISOUND_StopVibrate()
is called.

Prototype:
void ISOUND_Vibrate(ISound * pISound, uint16 w6Duration)

Parameters:

pISound : Pointer to the public ISound object
wDuration : Duration of vibration in milliseconds

Return Value:
None

Comments:
In the BREW Simulator, this function is the same as calling ISOUND_PlayTone() with
a sample tone. As a result, it may stop ongoing ISOUND_PlayTone() playback or vice
versa.

Side Effects:
This function does not cause any callback.

Version:
Introduced BREW Client 1.0

See Also:
ISOUND_StopVibrate()

==============================================================================*/

#endif // AEESOUND_H
