/usr/include/sipxtapi/mp/dmaTask.h is in libsipxtapi-dev 3.3.0~test17-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | //
// Copyright (C) 2006 SIPez LLC.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// Copyright (C) 2004-2006 SIPfoundry Inc.
// Licensed by SIPfoundry under the LGPL license.
//
// Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// $$
///////////////////////////////////////////////////////////////////////////////
#ifndef _INCLUDED_DMATASK_H /* [ */
#define _INCLUDED_DMATASK_H
// SYSTEM INCLUDES
// APPLICATION INCLUDES
#include "os/OsTask.h"
#include "os/OsBSem.h"
#include "mp/MpMisc.h"
// DEFINES
/* the maximum number of buffers in input or output queue */
#define DMA_QLEN 10
#ifdef _WIN32
# define N_BUFFERS 100
# define USER_BUFFER_MASK 0xff // if N_BUFFERS is greater than 256, must change USER_BUFFER_MASK!
# define N_IN_BUFFERS N_BUFFERS
# define N_OUT_BUFFERS N_BUFFERS
// N_OUT_PRIME was previously set to 8. however, we found that on windows
// vista this would cause a bad stutter. this is because after calling
// 8 waveOpenOut we got a batch of 8 WOM_DONE and then called another
// 8 waveOpenOut. hence there was a gap. by using 16 buffers we find
// that vista sends 5 WOM_DONE at a time. windows xp and windows 2000
// send WOM_DONE one at a time at regular intervals. this is surely
// a bug in windows vista! that said we can't fix vista and there
// doesn't appear to be any harm with setting N_OUT_PRIME to 16.
# define N_IN_PRIME 32 // must not be more than N_IN_BUFFERS:
# define N_OUT_PRIME 16 // must not be more than N_OUT_BUFFERS:
# define N_SAMPLES 80
# define SAMPLES_PER_SEC 8000
# define MIN_SAMPLE_RATE 100
# define BITS_PER_SAMPLE 16
#endif
// MACROS
// EXTERNAL FUNCTIONS
int showFrameCount(int silent);
// EXTERNAL VARIABLES
// CONSTANTS
// STRUCTS
// TYPEDEFS
typedef void (*MuteListenerFuncPtr)(bool);
// FORWARD DECLARATIONS
extern OsStatus dmaStartup(int samplesPerFrame);/* initialize the DMA driver */
extern void dmaShutdown(void); /* release the DMA driver */
#ifdef _WIN32
extern void dmaSignalMicDeviceChange(void); /* Signal a device change to the Mic Thread */
#endif
extern int unMuteSpkr(void);
extern int muteSpkr(void);
extern int unMuteMic(void);
extern int muteMic(void);
typedef enum {
MP_MIC_SELECT_NEITHER,
MP_MIC_SELECT_HANDSET,
MP_MIC_SELECT_BASE
} MpDmaMicChoice;
extern OsStatus MpDma_selectMic(MpDmaMicChoice choice);
extern MpDmaMicChoice MpDma_getMicMode(void);
extern unsigned short gTableSize;
extern unsigned short shpAttenTable[];
#ifdef WIN32 /* [ */
extern int DmaTask_setSpkrQPreload(int qlen);
extern int DmaTask_setMicQPreload(int qlen);
#endif /* WIN32 ] */
class DmaTask : public OsTask
{
/* //////////////////////////// PUBLIC //////////////////////////////////// */
public:
/* ============================ CREATORS ================================== */
///@name Creators
//@{
static DmaTask* getDmaTask(int samplesPerFrame = 80);
//:Return a pointer to the DMA task, creating it if necessary
virtual
~DmaTask();
//:Destructor
/* ============================ MANIPULATORS ============================== */
virtual int run(void* pArg);
//@}
/* ============================ ACCESSORS ================================= */
///@name Accessors
//@{
static bool setRingerEnabled(bool enabled)
{
bool prevSetting = smIsRingerEnabled;
smIsRingerEnabled = enabled;
return prevSetting;
} ;
//: Maintain the "ringer" state for the device and return the previous setting.
static bool isRingerEnabled(void) { return smIsRingerEnabled;} ;
//: Test whether the device's ringer is currently enabled.
static void setMuteListener(MuteListenerFuncPtr pFunc) { smpMuteListener = pFunc; } ;
//: Set a listener for "mute" state changes. To remove the listener, set the
//: listener to NULL.
static bool setMuteEnabled(bool enabled)
{
bool prevSetting = smIsMuted;
smIsMuted = enabled;
if (smpMuteListener)
{
smpMuteListener(enabled);
}
return prevSetting;
};
//: Set the "mute" state for the device and return the previous setting.
static bool isMuteEnabled(void) { return smIsMuted; } ;
//: Test whether the device's ringer is currently enabled.
static void setRingDevice(const char* szDevice)
{
mRingDeviceName = szDevice ;
mbOutputDevicesChanged = true ;
};
static void setCallDevice(const char* szDevice)
{
mCallDeviceName = szDevice ;
mbOutputDevicesChanged = true ;
};
static void setInputDevice(const char* szDevice)
{
mMicDeviceName = szDevice ;
mbInputDeviceChanged = true ;
};
static UtlString& getRingDevice() { return mRingDeviceName ;} ;
static UtlString& getCallDevice() { return mCallDeviceName ;} ;
static UtlString& getMicDevice() { return mMicDeviceName ;} ;
static bool isOutputDeviceChanged() { return mbOutputDevicesChanged ;} ;
static void clearOutputDeviceChanged() { mbOutputDevicesChanged = false ;} ;
static bool isInputDeviceChanged() { return mbInputDeviceChanged ;} ;
static void clearInputDeviceChanged() { mbInputDeviceChanged = false ;} ;
/* ============================ INQUIRY =================================== */
/* //////////////////////////// PROTECTED ///////////////////////////////// */
protected:
DmaTask(MSG_Q_ID doneQ = NULL, int samplesPerFrame = 0,
int prio = DEF_DMA_TASK_PRIORITY, // default task priority
int options = DEF_DMA_TASK_OPTIONS, // default task options
int stack = DEF_DMA_TASK_STACKSIZE); // default task stack size
//:Default constructor
static bool smIsRingerEnabled ;
static bool smIsMuted ;
static MuteListenerFuncPtr smpMuteListener ;
/* //////////////////////////// PRIVATE /////////////////////////////////// */
private:
static const int DEF_DMA_TASK_PRIORITY; // default task priority
static const int DEF_DMA_TASK_OPTIONS; // default task options
static const int DEF_DMA_TASK_STACKSIZE; // default task stack size
int mFrameSamples; // Number of samples per frame
MSG_Q_ID mDoneQ; // Message queue to wait on
static UtlString mRingDeviceName; // Name of "ring" device (speaker)
static UtlString mCallDeviceName; // Name of in-call device (speaker)
static UtlString mMicDeviceName; // Name of in-call input device (microphone)
static bool mbOutputDevicesChanged; // Has the output device changed?
static bool mbInputDeviceChanged; // Has the output device changed?
// Static data members used to enforce Singleton behavior
static DmaTask* spInstance; // pointer to the single instance of
// the MpDmaTask class
static OsBSem sLock; // semaphore used to ensure that there
// is only one instance of this class
DmaTask(const DmaTask& rDmaTask);
//:Copy constructor (not implemented for this task)
DmaTask& operator=(const DmaTask& rhs);
//:Assignment operator (not implemented for this task)
};
/*************************************************************************/
#endif /* _INCLUDED_DMATASK_H ] */
|