31 #ifndef OPAL_LIDS_DAHDI_EP_H
32 #define OPAL_LIDS_DAHDI_EP_H
41 #include <ptlib/mutex.h>
42 #include <ptclib/inetmail.h>
43 #include <ptclib/dtmf.h>
48 #include <dahdi/user.h>
51 #include <sys/ioctl.h>
81 virtual PStringArray
GetAllNames()
const { PStringArray l; l.AppendString(DeviceName);
return l; }
92 virtual bool Open(
const PString & device);
96 virtual unsigned GetLineCount()
const
97 {
return m_channelInfoList.size(); }
99 virtual bool IsLineTerminal(
unsigned line)
100 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->IsFXS(); }
102 virtual bool IsLineOffHook(
unsigned line)
103 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->IsOffHook(); }
105 virtual bool SetLineOffHook(
unsigned line,
bool newState =
true)
106 {
if (!IsValidLine(line) || IsLineTerminal(line))
return false;
return m_channelInfoList[line]->SetOffHook(newState); }
108 virtual bool PlayTone(
unsigned line,
CallProgressTones tone) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->PlayTone(tone); }
110 virtual bool IsTonePlaying(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->IsTonePlaying(); }
112 virtual bool StopTone(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->StopTone(); }
114 virtual char ReadDTMF(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->ReadDTMF(); }
116 virtual PINDEX
GetReadFrameSize(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetReadFrameSize(); }
118 virtual PINDEX
GetWriteFrameSize(
unsigned line) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetWriteFrameSize(); }
120 virtual bool SetReadFrameSize(
unsigned line, PINDEX frameSize) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetReadFrameSize(frameSize); }
121 virtual bool SetWriteFrameSize(
unsigned line, PINDEX frameSize) {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetWriteFrameSize(frameSize); }
123 virtual bool SetReadFormat(
unsigned line,
const OpalMediaFormat & mediaFormat);
124 virtual bool SetWriteFormat(
unsigned line,
const OpalMediaFormat & mediaFormat);
126 virtual bool StopReading(
unsigned line);
127 virtual bool StopWriting(
unsigned line);
135 virtual bool EnableAudio(
unsigned line,
bool enable =
true)
136 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->EnableAudio(enable); }
138 virtual bool ReadFrame(
unsigned line,
void * buf, PINDEX & count)
139 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->ReadFrame(buf, count); }
141 virtual bool WriteFrame(
unsigned line,
const void * buf, PINDEX count, PINDEX & written)
142 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->WriteFrame(buf, count, written); }
144 virtual bool SetRecordVolume(
unsigned line,
unsigned volume)
145 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetRecordVolume(volume); }
147 virtual bool SetPlayVolume(
unsigned line,
unsigned volume)
148 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->SetPlayVolume(volume); }
150 virtual bool GetRecordVolume(
unsigned line,
unsigned & volume)
151 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetRecordVolume(volume); }
153 virtual bool GetPlayVolume(
unsigned line,
unsigned & volume)
154 {
if (!IsValidLine(line))
return false;
return m_channelInfoList[line]->GetPlayVolume(volume); }
156 virtual bool IsAudioEnabled(
unsigned line)
const {
return false;
return m_channelInfoList[line]->IsAudioEnabled(); }
158 virtual bool IsValidLine(
unsigned line)
const {
return line < (unsigned)m_channelInfoList.size(); }
165 virtual bool Open(
int samplesPerBlock);
166 virtual bool Close();
169 virtual bool IsFXS() {
return false; }
174 virtual bool IsTonePlaying();
176 virtual bool StopTone();
178 virtual bool EnableAudio(
bool enable);
183 virtual bool SetReadFrameSize(PINDEX frameSize) {
return frameSize == m_samplesPerBlock*2; }
186 virtual bool ReadFrame(
void * buf, PINDEX & count);
187 virtual bool WriteFrame(
const void * buf, PINDEX count, PINDEX & written);
188 virtual bool InternalReadFrame(
void * buf);
193 virtual bool StopReading();
194 virtual bool StopWriting();
196 virtual bool StartMedia();
197 virtual bool StopMedia();
199 virtual char ReadDTMF();
201 virtual bool LookForEvent();
202 virtual bool DetectTones(
void * buffer,
int len);
204 virtual bool SetRecordVolume(
unsigned volume)
207 virtual bool SetPlayVolume(
unsigned volume)
210 virtual bool GetRecordVolume(
unsigned & volume)
211 { volume = m_readVol;
return true; }
213 virtual bool GetPlayVolume(
unsigned & volume)
214 { volume = m_writeVol;
return true; }
219 virtual void Flush();
221 short DecodeSample(BYTE sample);
222 BYTE EncodeSample(
short sample);
256 virtual bool IsOffHook() {
return m_hookState == eOffHook; }
258 virtual void OnHook();
259 virtual void OffHook();
260 virtual bool IsFXS() {
return true; }
268 static bool IsDigitalSpan(dahdi_spaninfo & span)
269 {
return span.linecompat > 0; }
287 #endif // OPAL_LIDS_DAHDI_EP_H