28 #ifndef OPAL_LIDS_DAHDI_EP_H
29 #define OPAL_LIDS_DAHDI_EP_H
38 #include <ptlib/mutex.h>
39 #include <ptclib/inetmail.h>
40 #include <ptclib/dtmf.h>
45 #include <dahdi/user.h>
48 #include <sys/ioctl.h>
78 virtual PStringArray
GetAllNames()
const { PStringArray l; l.AppendString(DeviceName);
return l; }
89 virtual bool Open(
const PString & device);
94 {
return m_channelInfoList.size(); }
97 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->IsFXS(); }
100 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->IsOffHook(); }
103 {
if (!IsValidLine(line) || IsLineTerminal(line))
return false;
return m_channelInfoList[line]->SetOffHook(newState); }
105 virtual bool PlayTone(
unsigned line,
CallProgressTones tone) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->PlayTone(tone); }
107 virtual bool IsTonePlaying(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->IsTonePlaying(); }
109 virtual bool StopTone(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->StopTone(); }
111 virtual char ReadDTMF(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->ReadDTMF(); }
113 virtual PINDEX
GetReadFrameSize(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetReadFrameSize(); }
115 virtual PINDEX
GetWriteFrameSize(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetWriteFrameSize(); }
117 virtual bool SetReadFrameSize(
unsigned line, PINDEX frameSize) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetReadFrameSize(frameSize); }
118 virtual bool SetWriteFrameSize(
unsigned line, PINDEX frameSize) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetWriteFrameSize(frameSize); }
120 virtual bool SetReadFormat(
unsigned line,
const OpalMediaFormat & mediaFormat);
121 virtual bool SetWriteFormat(
unsigned line,
const OpalMediaFormat & mediaFormat);
123 virtual bool StopReading(
unsigned line);
124 virtual bool StopWriting(
unsigned line);
133 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->EnableAudio(enable); }
135 virtual bool ReadFrame(
unsigned line,
void * buf, PINDEX & count)
136 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->ReadFrame(buf, count); }
138 virtual bool WriteFrame(
unsigned line,
const void * buf, PINDEX count, PINDEX & written)
139 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->WriteFrame(buf, count, written); }
142 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetRecordVolume(volume); }
145 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetPlayVolume(volume); }
148 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetRecordVolume(volume); }
151 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetPlayVolume(volume); }
153 virtual bool IsAudioEnabled(
unsigned line)
const {
return false;
return m_channelInfoList[line]->IsAudioEnabled(); }
155 virtual bool IsValidLine(
unsigned line)
const {
return line < (unsigned)m_channelInfoList.size(); }
162 virtual bool Open(
int samplesPerBlock);
163 virtual bool Close();
166 virtual bool IsFXS() {
return false; }
171 virtual bool IsTonePlaying();
173 virtual bool StopTone();
175 virtual bool EnableAudio(
bool enable);
180 virtual bool SetReadFrameSize(PINDEX frameSize) {
return frameSize == m_samplesPerBlock*2; }
183 virtual bool ReadFrame(
void * buf, PINDEX & count);
184 virtual bool WriteFrame(
const void * buf, PINDEX count, PINDEX & written);
185 virtual bool InternalReadFrame(
void * buf);
190 virtual bool StopReading();
191 virtual bool StopWriting();
193 virtual bool StartMedia();
194 virtual bool StopMedia();
196 virtual char ReadDTMF();
198 virtual bool LookForEvent();
199 virtual bool DetectTones(
void * buffer,
int len);
208 { volume = m_readVol;
return true; }
211 { volume = m_writeVol;
return true; }
216 virtual void Flush();
218 short DecodeSample(BYTE sample);
219 BYTE EncodeSample(
short sample);
253 virtual bool IsOffHook() {
return m_hookState == eOffHook; }
255 virtual void OnHook();
256 virtual void OffHook();
257 virtual bool IsFXS() {
return true; }
266 {
return span.linecompat > 0; }
284 #endif // OPAL_LIDS_DAHDI_EP_H
virtual PINDEX GetReadFrameSize(unsigned line)
Definition: dahdi_ep.h:113
virtual PString GetDescription() const
Definition: dahdi_ep.h:79
int m_spanNumber
Definition: dahdi_ep.h:221
virtual PINDEX GetWriteFrameSize(unsigned line)
Definition: dahdi_ep.h:115
static bool IsDigitalSpan(dahdi_spaninfo &span)
Definition: dahdi_ep.h:265
virtual bool SetWriteFrameSize(unsigned line, PINDEX frameSize)
Definition: dahdi_ep.h:118
int m_chanPos
Definition: dahdi_ep.h:223
virtual bool GetPlayVolume(unsigned line, unsigned &volume)
Definition: dahdi_ep.h:150
PThread * m_thread
Definition: dahdi_ep.h:277
virtual bool IsMediaRunning() const
Definition: dahdi_ep.h:169
Definition: dahdi_ep.h:157
virtual bool IsFXS()
Definition: dahdi_ep.h:166
int m_writeVol
Definition: dahdi_ep.h:242
ChannelInfoList m_channelInfoList
Definition: dahdi_ep.h:275
virtual bool PlayTone(unsigned line, CallProgressTones tone)
Definition: dahdi_ep.h:105
PDTMFDecoder m_dtmfDecoder
Definition: dahdi_ep.h:226
bool m_audioEnable
Definition: dahdi_ep.h:231
bool m_running
Definition: dahdi_ep.h:278
PMutex m_mutex
Definition: dahdi_ep.h:228
std::vector< BYTE > m_readBuffer
Definition: dahdi_ep.h:245
virtual bool IsValidLine(unsigned line) const
Definition: dahdi_ep.h:155
std::queue< char > m_dtmfQueue
Definition: dahdi_ep.h:240
virtual PINDEX GetWriteFrameSize()
Definition: dahdi_ep.h:179
PMutex m_mutex
Definition: dahdi_ep.h:273
virtual bool SetPlayVolume(unsigned volume)
Definition: dahdi_ep.h:204
virtual bool EnableAudio(unsigned line, bool enable=true)
Definition: dahdi_ep.h:132
bool m_mediaStarted
Definition: dahdi_ep.h:232
PMutex m_dtmfMutex
Definition: dahdi_ep.h:239
virtual OpalMediaFormatList GetMediaFormats() const
Definition: dahdi_ep.h:81
virtual bool SetRecordVolume(unsigned volume)
Definition: dahdi_ep.h:201
int m_readVol
Definition: dahdi_ep.h:243
virtual bool IsLineTerminal(unsigned line)
Definition: dahdi_ep.h:96
virtual bool IsTonePlaying(unsigned line)
Definition: dahdi_ep.h:107
Definition: dahdi_ep.h:64
PMutex m_pollListMutex
Definition: dahdi_ep.h:280
virtual bool WriteFrame(unsigned line, const void *buf, PINDEX count, PINDEX &written)
Definition: dahdi_ep.h:138
std::vector< ChannelInfo * > ChannelInfoList
Definition: dahdi_ep.h:274
virtual bool SetReadFrameSize(unsigned line, PINDEX frameSize)
Definition: dahdi_ep.h:117
virtual void OffHook()
Definition: dahdi_ep.h:214
virtual bool SetWriteFrameSize(PINDEX frameSize)
Definition: dahdi_ep.h:181
int m_fd
Definition: dahdi_ep.h:229
virtual bool IsLineOffHook(unsigned line)
Definition: dahdi_ep.h:99
bool m_isALaw
Definition: dahdi_ep.h:237
int m_toneBufferPos
Definition: dahdi_ep.h:236
virtual bool GetPlayVolume(unsigned &volume)
Definition: dahdi_ep.h:210
virtual OpalMediaFormat GetWriteFormat(unsigned line)
Definition: dahdi_ep.h:129
virtual bool SetLineOffHook(unsigned line, bool newState=true)
Definition: dahdi_ep.h:102
std::vector< BYTE > m_writeBuffer
Definition: dahdi_ep.h:246
virtual unsigned GetLineCount() const
Definition: dahdi_ep.h:93
virtual PStringArray GetAllNames() const
Definition: dahdi_ep.h:78
virtual bool IsOffHook()
Definition: dahdi_ep.h:253
virtual bool IsFXS()
Definition: dahdi_ep.h:257
virtual bool ReadFrame(unsigned line, void *buf, PINDEX &count)
Definition: dahdi_ep.h:135
virtual bool IsOffHook()
Definition: dahdi_ep.h:167
int m_toneBufferLen
Definition: dahdi_ep.h:235
virtual PString GetDeviceType() const
Definition: dahdi_ep.h:76
bool m_pollListDirty
Definition: dahdi_ep.h:281
virtual bool SetPlayVolume(unsigned line, unsigned volume)
Definition: dahdi_ep.h:144
int m_channelNumber
Definition: dahdi_ep.h:222
int m_samplesPerBlock
Definition: dahdi_ep.h:272
virtual bool SetOffHook(bool newState)
Definition: dahdi_ep.h:176
static const char * DeviceName
Definition: dahdi_ep.h:69
BYTE * m_toneBuffer
Definition: dahdi_ep.h:234
std::vector< pollfd > m_pollFds
Definition: dahdi_ep.h:279
virtual OpalMediaFormat GetReadFormat(unsigned line)
Definition: dahdi_ep.h:126
HookState
Definition: dahdi_ep.h:259
virtual char ReadDTMF(unsigned line)
Definition: dahdi_ep.h:111
Definition: dahdi_ep.h:249
virtual bool GetRecordVolume(unsigned line, unsigned &volume)
Definition: dahdi_ep.h:147
virtual bool IsAudioEnabled(unsigned line) const
Definition: dahdi_ep.h:153
virtual void OnHook()
Definition: dahdi_ep.h:213
virtual PINDEX GetReadFrameSize()
Definition: dahdi_ep.h:178
int m_samplesPerBlock
Definition: dahdi_ep.h:230
virtual bool IsAudioEnabled() const
Definition: dahdi_ep.h:168
CallProgressTones
Definition: lid.h:582
virtual bool SetReadFrameSize(PINDEX frameSize)
Definition: dahdi_ep.h:180
virtual PString GetDeviceName() const
Definition: dahdi_ep.h:77
virtual bool GetRecordVolume(unsigned &volume)
Definition: dahdi_ep.h:207
virtual bool StopTone(unsigned line)
Definition: dahdi_ep.h:109
bool m_hasHardwareToneDetection
Definition: dahdi_ep.h:225
virtual bool SetRecordVolume(unsigned line, unsigned volume)
Definition: dahdi_ep.h:141
Definition: dahdi_ep.h:260