Added support for Dahdi drivers. Compatibility with Zaptel is maintained.
git-svn-id: http://yate.null.ro/svn/yate/trunk@3094 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
c19b5a879c
commit
7073af1da6
15
configure.in
15
configure.in
|
@ -437,6 +437,16 @@ AC_SUBST(MYSQL_VER)
|
|||
|
||||
HAVE_ZAP=no
|
||||
ZAP_FLAGS=""
|
||||
AC_ARG_ENABLE(dahdi,AC_HELP_STRING([--enable-dahdi],[Enable Dahdi driver (default: yes)]),want_dahdi=$enableval,want_dahdi=yes)
|
||||
if [[ "x$want_dahdi" = "xyes" ]]; then
|
||||
AC_MSG_CHECKING([for Dahdi generic headers])
|
||||
AC_TRY_COMPILE([
|
||||
#include <dahdi/user.h>
|
||||
],[],
|
||||
HAVE_ZAP="yes"
|
||||
)
|
||||
AC_MSG_RESULT([$HAVE_ZAP])
|
||||
if [[ "x$HAVE_ZAP" = "xno" ]]; then
|
||||
AC_ARG_ENABLE(zaptel,AC_HELP_STRING([--enable-zaptel],[Enable Zaptel driver (default: yes)]),want_zaptel=$enableval,want_zaptel=yes)
|
||||
if [[ "x$want_zaptel" = "xyes" ]]; then
|
||||
AC_MSG_CHECKING([for Zaptel generic headers])
|
||||
|
@ -444,7 +454,7 @@ AC_TRY_COMPILE([
|
|||
#include <zaptel/zaptel.h>
|
||||
],[],
|
||||
HAVE_ZAP="yes"
|
||||
ZAP_FLAGS="-DNEW_ZAPTEL_LOCATION"
|
||||
ZAP_FLAGS="-DNEW_ZAPTEL_LOCATION -DHAVE_ZAP"
|
||||
)
|
||||
AC_MSG_RESULT([$HAVE_ZAP])
|
||||
if [[ "x$HAVE_ZAP" = "xno" ]]; then
|
||||
|
@ -453,10 +463,13 @@ AC_TRY_COMPILE([
|
|||
#include <linux/zaptel.h>
|
||||
],[],
|
||||
HAVE_ZAP="yes"
|
||||
ZAP_FLAGS="-DHAVE_ZAP"
|
||||
)
|
||||
AC_MSG_RESULT([$HAVE_ZAP])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(HAVE_ZAP)
|
||||
AC_SUBST(ZAP_FLAGS)
|
||||
|
||||
|
|
|
@ -30,12 +30,16 @@
|
|||
#else
|
||||
|
||||
extern "C" {
|
||||
#ifdef HAVE_ZAP
|
||||
#ifdef NEW_ZAPTEL_LOCATION
|
||||
#define __LINUX__
|
||||
#include <zaptel/zaptel.h>
|
||||
#else
|
||||
#include <linux/zaptel.h>
|
||||
#endif
|
||||
#else
|
||||
#include <dahdi/user.h>
|
||||
#endif
|
||||
};
|
||||
|
||||
#include <string.h>
|
||||
|
@ -63,6 +67,152 @@ class ZapModule; // The module
|
|||
|
||||
#define ZAP_CRC_LEN 2 // The length of the CRC field in signalling packets
|
||||
|
||||
#ifdef HAVE_ZAP
|
||||
|
||||
// alarms
|
||||
#define DAHDI_ALARM_RECOVER ZT_ALARM_RECOVER
|
||||
#define DAHDI_ALARM_LOOPBACK ZT_ALARM_LOOPBACK
|
||||
#define DAHDI_ALARM_RED ZT_ALARM_RED
|
||||
#define DAHDI_ALARM_YELLOW ZT_ALARM_YELLOW
|
||||
#define DAHDI_ALARM_BLUE ZT_ALARM_BLUE
|
||||
#define DAHDI_ALARM_NOTOPEN ZT_ALARM_NOTOPEN
|
||||
|
||||
|
||||
// events
|
||||
#define DAHDI_EVENT_NONE ZT_EVENT_NONE
|
||||
#define DAHDI_EVENT_ONHOOK ZT_EVENT_ONHOOK
|
||||
#define DAHDI_EVENT_RINGOFFHOOK ZT_EVENT_RINGOFFHOOK
|
||||
#define DAHDI_EVENT_WINKFLASH ZT_EVENT_WINKFLASH
|
||||
#define DAHDI_EVENT_ALARM ZT_EVENT_ALARM
|
||||
#define DAHDI_EVENT_NOALARM ZT_EVENT_NOALARM
|
||||
#define DAHDI_EVENT_ABORT ZT_EVENT_ABORT
|
||||
#define DAHDI_EVENT_OVERRUN ZT_EVENT_OVERRUN
|
||||
#define DAHDI_EVENT_BADFCS ZT_EVENT_BADFCS
|
||||
#define DAHDI_EVENT_DIALCOMPLETE ZT_EVENT_DIALCOMPLETE
|
||||
#define DAHDI_EVENT_RINGERON ZT_EVENT_RINGERON
|
||||
#define DAHDI_EVENT_RINGEROFF ZT_EVENT_RINGEROFF
|
||||
#define DAHDI_EVENT_HOOKCOMPLETE ZT_EVENT_HOOKCOMPLETE
|
||||
#define DAHDI_EVENT_BITSCHANGED ZT_EVENT_BITSCHANGED
|
||||
#define DAHDI_EVENT_PULSE_START ZT_EVENT_PULSE_START
|
||||
#define DAHDI_EVENT_TIMER_EXPIRED ZT_EVENT_TIMER_EXPIRED
|
||||
#define DAHDI_EVENT_TIMER_PING ZT_EVENT_TIMER_PING
|
||||
#define DAHDI_EVENT_RINGBEGIN ZT_EVENT_RINGBEGIN
|
||||
#define DAHDI_EVENT_POLARITY ZT_EVENT_POLARITY
|
||||
|
||||
#ifdef ZT_EVENT_REMOVED
|
||||
#define DAHDI_EVENT_REMOVED ZT_EVENT_REMOVED
|
||||
#endif
|
||||
|
||||
#define DAHDI_EVENT_PULSEDIGIT ZT_EVENT_PULSEDIGIT
|
||||
#define DAHDI_EVENT_DTMFDOWN ZT_EVENT_DTMFDOWN
|
||||
#define DAHDI_EVENT_DTMFUP ZT_EVENT_DTMFUP
|
||||
#define DAHDI_EVENT_PULSEDIGIT ZT_EVENT_PULSEDIGIT
|
||||
|
||||
// hook events
|
||||
#define DAHDI_ONHOOK ZT_ONHOOK
|
||||
#define DAHDI_OFFHOOK ZT_OFFHOOK
|
||||
#define DAHDI_WINK ZT_WINK
|
||||
#define DAHDI_FLASH ZT_FLASH
|
||||
#define DAHDI_START ZT_START
|
||||
#define DAHDI_RING ZT_RING
|
||||
#define DAHDI_RINGOFF ZT_RINGOFF
|
||||
|
||||
// flush buffers
|
||||
#define DAHDI_FLUSH_READ ZT_FLUSH_READ
|
||||
#define DAHDI_FLUSH_WRITE ZT_FLUSH_WRITE
|
||||
#define DAHDI_FLUSH_BOTH ZT_FLUSH_BOTH
|
||||
#define DAHDI_FLUSH_EVENT ZT_FLUSH_EVENT
|
||||
#define DAHDI_FLUSH_ALL ZT_FLUSH_ALL
|
||||
|
||||
// formats
|
||||
#define DAHDI_LAW_DEFAULT ZT_LAW_DEFAULT
|
||||
#define DAHDI_LAW_MULAW ZT_LAW_MULAW
|
||||
#define DAHDI_LAW_ALAW ZT_LAW_ALAW
|
||||
|
||||
// dial operations
|
||||
#define DAHDI_DIAL_OP_APPEND ZT_DIAL_OP_APPEND
|
||||
#define DAHDI_DIAL_OP_REPLACE ZT_DIAL_OP_REPLACE
|
||||
#define DAHDI_DIAL_OP_CANCEL ZT_DIAL_OP_CANCEL
|
||||
|
||||
// signalling types
|
||||
#define DAHDI_SIG_NONE ZT_SIG_NONE
|
||||
#define DAHDI_SIG_FXSLS ZT_SIG_FXSLS
|
||||
#define DAHDI_SIG_FXSGS ZT_SIG_FXSGS
|
||||
#define DAHDI_SIG_FXSKS ZT_SIG_FXSKS
|
||||
#define DAHDI_SIG_FXOLS ZT_SIG_FXOLS
|
||||
#define DAHDI_SIG_FXOGS ZT_SIG_FXOGS
|
||||
#define DAHDI_SIG_FXOKS ZT_SIG_FXOKS
|
||||
#define DAHDI_SIG_EM ZT_SIG_EM
|
||||
#define DAHDI_SIG_CLEAR ZT_SIG_CLEAR
|
||||
#define DAHDI_SIG_HDLCRAW ZT_SIG_HDLCRAW
|
||||
#define DAHDI_SIG_HDLCFCS ZT_SIG_HDLCFCS
|
||||
#define DAHDI_SIG_HDLCNET ZT_SIG_HDLCNET
|
||||
#define DAHDI_SIG_SLAVE ZT_SIG_SLAVE
|
||||
#define DAHDI_SIG_SF ZT_SIG_SF
|
||||
#define DAHDI_SIG_CAS ZT_SIG_CAS
|
||||
#define DAHDI_SIG_DACS ZT_SIG_DACS
|
||||
#define DAHDI_SIG_EM_E1 ZT_SIG_EM_E1
|
||||
#define DAHDI_SIG_DACS_RBS ZT_SIG_DACS_RBS
|
||||
#define DAHDI_SIG_HARDHDLC ZT_SIG_HARDHDLC
|
||||
|
||||
// tonedetect
|
||||
#define DAHDI_TONEDETECT_ON ZT_TONEDETECT_ON
|
||||
#define DAHDI_TONEDETECT_MUTE ZT_TONEDETECT_MUTE
|
||||
|
||||
// dtmfs
|
||||
#define DAHDI_MAX_DTMF_BUF ZT_MAX_DTMF_BUF
|
||||
#define DAHDI_TONE_DTMF_0 ZT_TONE_DTMF_0
|
||||
#define DAHDI_TONE_DTMF_1 ZT_TONE_DTMF_1
|
||||
#define DAHDI_TONE_DTMF_2 ZT_TONE_DTMF_2
|
||||
#define DAHDI_TONE_DTMF_3 ZT_TONE_DTMF_3
|
||||
#define DAHDI_TONE_DTMF_4 ZT_TONE_DTMF_4
|
||||
#define DAHDI_TONE_DTMF_5 ZT_TONE_DTMF_5
|
||||
#define DAHDI_TONE_DTMF_6 ZT_TONE_DTMF_6
|
||||
#define DAHDI_TONE_DTMF_7 ZT_TONE_DTMF_7
|
||||
#define DAHDI_TONE_DTMF_8 ZT_TONE_DTMF_8
|
||||
#define DAHDI_TONE_DTMF_9 ZT_TONE_DTMF_9
|
||||
#define DAHDI_TONE_DTMF_s ZT_TONE_DTMF_s
|
||||
#define DAHDI_TONE_DTMF_p ZT_TONE_DTMF_p
|
||||
#define DAHDI_TONE_DTMF_A ZT_TONE_DTMF_A
|
||||
#define DAHDI_TONE_DTMF_B ZT_TONE_DTMF_B
|
||||
#define DAHDI_TONE_DTMF_C ZT_TONE_DTMF_C
|
||||
#define DAHDI_TONE_DTMF_D ZT_TONE_DTMF_D
|
||||
|
||||
// ioctl operations
|
||||
#define DAHDI_SIG_EM ZT_SIG_EM
|
||||
#define DAHDI_GETEVENT ZT_GETEVENT
|
||||
#define DAHDI_SPECIFY ZT_SPECIFY
|
||||
#define DAHDI_SET_BLOCKSIZE ZT_SET_BLOCKSIZE
|
||||
#define DAHDI_SET_BUFINFO ZT_SET_BUFINFO
|
||||
#define DAHDI_SETLAW ZT_SETLAW
|
||||
#define DAHDI_AUDIOMODE ZT_AUDIOMODE
|
||||
#define DAHDI_ECHOCANCEL ZT_ECHOCANCEL
|
||||
#define DAHDI_DIAL ZT_DIAL
|
||||
#define DAHDI_HOOK ZT_HOOK
|
||||
#define DAHDI_TONEDETECT ZT_TONEDETECT
|
||||
#define DAHDI_SETPOLARITY ZT_SETPOLARITY
|
||||
#define DAHDI_SETLINEAR ZT_SETLINEAR
|
||||
#define DAHDI_SET_DIALPARAMS ZT_SET_DIALPARAMS
|
||||
#define DAHDI_GET_PARAMS ZT_GET_PARAMS
|
||||
#define DAHDI_SPANSTAT ZT_SPANSTAT
|
||||
#define DAHDI_GET_DIALPARAMS ZT_GET_DIALPARAMS
|
||||
#define DAHDI_ECHOTRAIN ZT_ECHOTRAIN
|
||||
#define DAHDI_FLUSH ZT_FLUSH
|
||||
#define DAHDI_SENDTONE ZT_SENDTONE
|
||||
#define DAHDI_GETVERSION ZT_GETVERSION
|
||||
|
||||
// policies
|
||||
#define DAHDI_POLICY_IMMEDIATE ZT_POLICY_IMMEDIATE
|
||||
|
||||
// data types
|
||||
#define dahdi_params zt_params
|
||||
#define dahdi_bufferinfo zt_bufferinfo
|
||||
#define dahdi_dialoperation zt_dialoperation
|
||||
#define dahdi_dialparams zt_dialparams
|
||||
#define dahdi_spaninfo zt_spaninfo
|
||||
#define dahdi_versioninfo zt_versioninfo
|
||||
|
||||
#endif
|
||||
// Worker thread client (implements process())
|
||||
class ZapWorkerClient
|
||||
{
|
||||
|
@ -105,54 +255,54 @@ class ZapDevice : public GenObject
|
|||
public:
|
||||
// Flags to check alarms
|
||||
enum Alarm {
|
||||
Recover = ZT_ALARM_RECOVER, // Recovering from alarm
|
||||
Loopback = ZT_ALARM_LOOPBACK, // In loopback
|
||||
Red = ZT_ALARM_RED, // Interface is down
|
||||
Yellow = ZT_ALARM_YELLOW, // Remote peer doesn't see us
|
||||
Blue = ZT_ALARM_BLUE, // We don't see the remote peer
|
||||
NotOpen = ZT_ALARM_NOTOPEN
|
||||
Recover = DAHDI_ALARM_RECOVER, // Recovering from alarm
|
||||
Loopback = DAHDI_ALARM_LOOPBACK, // In loopback
|
||||
Red = DAHDI_ALARM_RED, // Interface is down
|
||||
Yellow = DAHDI_ALARM_YELLOW, // Remote peer doesn't see us
|
||||
Blue = DAHDI_ALARM_BLUE, // We don't see the remote peer
|
||||
NotOpen = DAHDI_ALARM_NOTOPEN
|
||||
};
|
||||
|
||||
// List of events
|
||||
enum Event {
|
||||
None = ZT_EVENT_NONE,
|
||||
OnHook = ZT_EVENT_ONHOOK,
|
||||
OffHookRing = ZT_EVENT_RINGOFFHOOK,
|
||||
WinkFlash = ZT_EVENT_WINKFLASH,
|
||||
Alarm = ZT_EVENT_ALARM,
|
||||
NoAlarm = ZT_EVENT_NOALARM,
|
||||
HdlcAbort = ZT_EVENT_ABORT,
|
||||
HdlcOverrun = ZT_EVENT_OVERRUN,
|
||||
BadFCS = ZT_EVENT_BADFCS,
|
||||
DialComplete = ZT_EVENT_DIALCOMPLETE,
|
||||
RingerOn = ZT_EVENT_RINGERON,
|
||||
RingerOff = ZT_EVENT_RINGEROFF,
|
||||
HookComplete = ZT_EVENT_HOOKCOMPLETE,
|
||||
BitsChanged = ZT_EVENT_BITSCHANGED, // Bits changing on a CAS/User channel
|
||||
PulseStart = ZT_EVENT_PULSE_START, // Beginning of a pulse coming on its way
|
||||
Timeout = ZT_EVENT_TIMER_EXPIRED,
|
||||
TimerPing = ZT_EVENT_TIMER_PING,
|
||||
RingBegin = ZT_EVENT_RINGBEGIN,
|
||||
Polarity = ZT_EVENT_POLARITY, // Polarity reversal event
|
||||
#ifdef ZT_EVENT_REMOVED
|
||||
Removed = ZT_EVENT_REMOVED,
|
||||
None = DAHDI_EVENT_NONE,
|
||||
OnHook = DAHDI_EVENT_ONHOOK,
|
||||
OffHookRing = DAHDI_EVENT_RINGOFFHOOK,
|
||||
WinkFlash = DAHDI_EVENT_WINKFLASH,
|
||||
Alarm = DAHDI_EVENT_ALARM,
|
||||
NoAlarm = DAHDI_EVENT_NOALARM,
|
||||
HdlcAbort = DAHDI_EVENT_ABORT,
|
||||
HdlcOverrun = DAHDI_EVENT_OVERRUN,
|
||||
BadFCS = DAHDI_EVENT_BADFCS,
|
||||
DialComplete = DAHDI_EVENT_DIALCOMPLETE,
|
||||
RingerOn = DAHDI_EVENT_RINGERON,
|
||||
RingerOff = DAHDI_EVENT_RINGEROFF,
|
||||
HookComplete = DAHDI_EVENT_HOOKCOMPLETE,
|
||||
BitsChanged = DAHDI_EVENT_BITSCHANGED, // Bits changing on a CAS/User channel
|
||||
PulseStart = DAHDI_EVENT_PULSE_START, // Beginning of a pulse coming on its way
|
||||
Timeout = DAHDI_EVENT_TIMER_EXPIRED,
|
||||
TimerPing = DAHDI_EVENT_TIMER_PING,
|
||||
RingBegin = DAHDI_EVENT_RINGBEGIN,
|
||||
Polarity = DAHDI_EVENT_POLARITY, // Polarity reversal event
|
||||
#ifdef DAHDI_EVENT_REMOVED
|
||||
Removed = DAHDI_EVENT_REMOVED,
|
||||
#endif
|
||||
// These are event masks
|
||||
PulseDigit = ZT_EVENT_PULSEDIGIT, // This is OR'd with the digit received
|
||||
DtmfDown = ZT_EVENT_DTMFDOWN, // Ditto for DTMF key down event
|
||||
DtmfUp = ZT_EVENT_DTMFUP, // Ditto for DTMF key up event
|
||||
DigitEvent = ZT_EVENT_PULSEDIGIT | ZT_EVENT_DTMFDOWN | ZT_EVENT_DTMFUP
|
||||
PulseDigit = DAHDI_EVENT_PULSEDIGIT, // This is OR'd with the digit received
|
||||
DtmfDown = DAHDI_EVENT_DTMFDOWN, // Ditto for DTMF key down event
|
||||
DtmfUp = DAHDI_EVENT_DTMFUP, // Ditto for DTMF key up event
|
||||
DigitEvent = DAHDI_EVENT_PULSEDIGIT | DAHDI_EVENT_DTMFDOWN | DAHDI_EVENT_DTMFUP
|
||||
};
|
||||
|
||||
// List of hook to send events
|
||||
enum HookEvent {
|
||||
HookOn = ZT_ONHOOK,
|
||||
HookOff = ZT_OFFHOOK,
|
||||
HookWink = ZT_WINK,
|
||||
HookFlash = ZT_FLASH,
|
||||
HookStart = ZT_START,
|
||||
HookRing = ZT_RING,
|
||||
HookRingOff = ZT_RINGOFF
|
||||
HookOn = DAHDI_ONHOOK,
|
||||
HookOff = DAHDI_OFFHOOK,
|
||||
HookWink = DAHDI_WINK,
|
||||
HookFlash = DAHDI_FLASH,
|
||||
HookStart = DAHDI_START,
|
||||
HookRing = DAHDI_RING,
|
||||
HookRingOff = DAHDI_RINGOFF
|
||||
};
|
||||
|
||||
// Rx Hook states, not exported from zaptel.h in user mode
|
||||
|
@ -174,7 +324,7 @@ public:
|
|||
SetEchoCancel = 5, // Set echo cancel
|
||||
SetDial = 6, // Append, replace, or cancel a dial string
|
||||
SetHook = 7, // Set Hookswitch Status
|
||||
#ifdef ZT_TONEDETECT
|
||||
#ifdef DAHDI_TONEDETECT
|
||||
SetToneDetect = 8, // Set tone detection
|
||||
#else
|
||||
SetToneDetect = 101,
|
||||
|
@ -193,19 +343,19 @@ public:
|
|||
};
|
||||
|
||||
enum FlushTarget {
|
||||
FlushRead = ZT_FLUSH_READ,
|
||||
FlushWrite = ZT_FLUSH_WRITE,
|
||||
FlushRdWr = ZT_FLUSH_BOTH,
|
||||
FlushEvent = ZT_FLUSH_EVENT,
|
||||
FlushAll = ZT_FLUSH_ALL,
|
||||
FlushRead = DAHDI_FLUSH_READ,
|
||||
FlushWrite = DAHDI_FLUSH_WRITE,
|
||||
FlushRdWr = DAHDI_FLUSH_BOTH,
|
||||
FlushEvent = DAHDI_FLUSH_EVENT,
|
||||
FlushAll = DAHDI_FLUSH_ALL,
|
||||
};
|
||||
|
||||
// Zaptel formats
|
||||
enum Format {
|
||||
Slin = -1,
|
||||
Default = ZT_LAW_DEFAULT,
|
||||
Mulaw = ZT_LAW_MULAW,
|
||||
Alaw = ZT_LAW_ALAW
|
||||
Default = DAHDI_LAW_DEFAULT,
|
||||
Mulaw = DAHDI_LAW_MULAW,
|
||||
Alaw = DAHDI_LAW_ALAW
|
||||
};
|
||||
|
||||
// Device type: D-channel, voice/data circuit or control
|
||||
|
@ -222,9 +372,9 @@ public:
|
|||
|
||||
// Dial operations
|
||||
enum DialOperation {
|
||||
DialAppend = ZT_DIAL_OP_APPEND,
|
||||
DialReplace = ZT_DIAL_OP_REPLACE,
|
||||
DialCancel = ZT_DIAL_OP_CANCEL
|
||||
DialAppend = DAHDI_DIAL_OP_APPEND,
|
||||
DialReplace = DAHDI_DIAL_OP_REPLACE,
|
||||
DialCancel = DAHDI_DIAL_OP_CANCEL
|
||||
};
|
||||
|
||||
// Create a device used to query the driver (chan=0) or a zaptel channel
|
||||
|
@ -700,25 +850,25 @@ static TokenDict s_alarms[] = {
|
|||
|
||||
// Zaptel signalling type
|
||||
static TokenDict s_zaptelSig[] = {
|
||||
{"NONE", ZT_SIG_NONE}, // Channel not configured
|
||||
{"FXSLS", ZT_SIG_FXSLS},
|
||||
{"FXSGS", ZT_SIG_FXSGS},
|
||||
{"FXSKS", ZT_SIG_FXSKS},
|
||||
{"FXOLS", ZT_SIG_FXOLS},
|
||||
{"FXOGS", ZT_SIG_FXOGS},
|
||||
{"FXOKS", ZT_SIG_FXOKS},
|
||||
{"E&M", ZT_SIG_EM}, // Ear & mouth
|
||||
{"CLEAR", ZT_SIG_CLEAR}, // Clear channel
|
||||
{"HDLCRAW", ZT_SIG_HDLCRAW}, // Raw unchecked HDLC
|
||||
{"HDLCFCS", ZT_SIG_HDLCFCS}, // HDLC with FCS calculation
|
||||
{"HDLCNET", ZT_SIG_HDLCNET}, // HDLC Network
|
||||
{"SLAVE", ZT_SIG_SLAVE}, // Slave to another channel
|
||||
{"SF", ZT_SIG_SF}, // Single Freq. tone only, no sig bits
|
||||
{"CAS", ZT_SIG_CAS }, // Just get bits
|
||||
{"DACS", ZT_SIG_DACS}, // Cross connect
|
||||
{"EM_E1", ZT_SIG_EM_E1}, // E1 E&M Variation
|
||||
{"DACS_RBS", ZT_SIG_DACS_RBS}, // Cross connect w/ RBS
|
||||
{"HARDHDLC", ZT_SIG_HARDHDLC},
|
||||
{"NONE", DAHDI_SIG_NONE}, // Channel not configured
|
||||
{"FXSLS", DAHDI_SIG_FXSLS},
|
||||
{"FXSGS", DAHDI_SIG_FXSGS},
|
||||
{"FXSKS", DAHDI_SIG_FXSKS},
|
||||
{"FXOLS", DAHDI_SIG_FXOLS},
|
||||
{"FXOGS", DAHDI_SIG_FXOGS},
|
||||
{"FXOKS", DAHDI_SIG_FXOKS},
|
||||
{"E&M", DAHDI_SIG_EM}, // Ear & mouth
|
||||
{"CLEAR", DAHDI_SIG_CLEAR}, // Clear channel
|
||||
{"HDLCRAW", DAHDI_SIG_HDLCRAW}, // Raw unchecked HDLC
|
||||
{"HDLCFCS", DAHDI_SIG_HDLCFCS}, // HDLC with FCS calculation
|
||||
{"HDLCNET", DAHDI_SIG_HDLCNET}, // HDLC Network
|
||||
{"SLAVE", DAHDI_SIG_SLAVE}, // Slave to another channel
|
||||
{"SF", DAHDI_SIG_SF}, // Single Freq. tone only, no sig bits
|
||||
{"CAS", DAHDI_SIG_CAS}, // Just get bits
|
||||
{"DACS", DAHDI_SIG_DACS}, // Cross connect
|
||||
{"EM_E1", DAHDI_SIG_EM_E1}, // E1 E&M Variation
|
||||
{"DACS_RBS", DAHDI_SIG_DACS_RBS}, // Cross connect w/ RBS
|
||||
{"HARDHDLC", DAHDI_SIG_HARDHDLC},
|
||||
{0,0}
|
||||
};
|
||||
|
||||
|
@ -747,7 +897,7 @@ static TokenDict s_events[] = {
|
|||
MAKE_NAME(DtmfDown),
|
||||
MAKE_NAME(DtmfUp),
|
||||
MAKE_NAME(DigitEvent),
|
||||
#ifdef ZT_EVENT_REMOVED
|
||||
#ifdef DAHDI_EVENT_REMOVED
|
||||
MAKE_NAME(Removed),
|
||||
#endif
|
||||
{0,0}
|
||||
|
@ -808,10 +958,13 @@ static TokenDict s_formats[] = {
|
|||
{"alaw", ZapDevice::Alaw},
|
||||
{0,0}
|
||||
};
|
||||
|
||||
#ifdef HAVE_ZAP
|
||||
const char* ZapDevice::s_zapCtlName = "/dev/zap/ctl";
|
||||
const char* ZapDevice::s_zapDevName = "/dev/zap/channel";
|
||||
|
||||
#else
|
||||
const char* ZapDevice::s_zapCtlName = "/dev/dahdi/ctl";
|
||||
const char* ZapDevice::s_zapDevName = "/dev/dahdi/channel";
|
||||
#endif
|
||||
ZapDevice::ZapDevice(Type t, SignallingComponent* dbg, unsigned int chan,
|
||||
unsigned int circuit)
|
||||
: m_type(t),
|
||||
|
@ -923,7 +1076,7 @@ bool ZapDevice::open(unsigned int numbufs, unsigned int bufsize)
|
|||
if (!ioctl(SetChannel,&m_channel))
|
||||
break;
|
||||
|
||||
ZT_PARAMS par;
|
||||
struct dahdi_params par;
|
||||
if (!ioctl(GetParams,&par))
|
||||
break;
|
||||
|
||||
|
@ -943,16 +1096,16 @@ bool ZapDevice::open(unsigned int numbufs, unsigned int bufsize)
|
|||
|
||||
// Open for an interface
|
||||
// Check channel mode
|
||||
if (par.sigtype != ZT_SIG_HDLCFCS && par.sigtype != ZT_SIG_HARDHDLC) {
|
||||
if (par.sigtype != DAHDI_SIG_HDLCFCS && par.sigtype != DAHDI_SIG_HARDHDLC) {
|
||||
Debug(m_owner,DebugWarn,"Channel %u is not in '%s' or '%s' mode [%p]",
|
||||
m_channel,lookup(ZT_SIG_HDLCFCS,s_zaptelSig),
|
||||
lookup(ZT_SIG_HARDHDLC,s_zaptelSig),m_owner);
|
||||
m_channel,lookup(DAHDI_SIG_HDLCFCS,s_zaptelSig),
|
||||
lookup(DAHDI_SIG_HARDHDLC,s_zaptelSig),m_owner);
|
||||
break;
|
||||
}
|
||||
// Set buffers
|
||||
ZT_BUFFERINFO bi;
|
||||
bi.txbufpolicy = ZT_POLICY_IMMEDIATE;
|
||||
bi.rxbufpolicy = ZT_POLICY_IMMEDIATE;
|
||||
struct dahdi_bufferinfo bi;
|
||||
bi.txbufpolicy = DAHDI_POLICY_IMMEDIATE;
|
||||
bi.rxbufpolicy = DAHDI_POLICY_IMMEDIATE;
|
||||
bi.numbufs = numbufs;
|
||||
bi.bufsize = bufsize;
|
||||
if (ioctl(SetBuffers,&bi))
|
||||
|
@ -1000,10 +1153,10 @@ bool ZapDevice::setFormat(Format format)
|
|||
bool ZapDevice::setDtmfDetect(bool detect)
|
||||
{
|
||||
int tmp = 0;
|
||||
#ifdef ZT_TONEDETECT
|
||||
#ifdef DAHDI_TONEDETECT
|
||||
setLinear(0,DebugAll);
|
||||
if (detect)
|
||||
tmp = ZT_TONEDETECT_ON | ZT_TONEDETECT_MUTE;
|
||||
tmp = DAHDI_TONEDETECT_ON | DAHDI_TONEDETECT_MUTE;
|
||||
#endif
|
||||
if (!ioctl(SetToneDetect,&tmp,detect?DebugNote:DebugAll))
|
||||
return false;
|
||||
|
@ -1052,7 +1205,7 @@ void ZapDevice::pollHook()
|
|||
if (m_rxHookSig < 0)
|
||||
return;
|
||||
|
||||
ZT_PARAMS par;
|
||||
struct dahdi_params par;
|
||||
if (!ioctl(GetParams,&par))
|
||||
return;
|
||||
|
||||
|
@ -1064,7 +1217,7 @@ void ZapDevice::pollHook()
|
|||
// state changed, save the event for later
|
||||
m_rxHookSig = rxsig;
|
||||
// states are reversed but that's how Zaptel is...
|
||||
m_savedEvent = (rxsig == RxSigOnHook) ? ZT_EVENT_WINKFLASH : ZT_EVENT_ONHOOK;
|
||||
m_savedEvent = (rxsig == RxSigOnHook) ? DAHDI_EVENT_WINKFLASH : DAHDI_EVENT_ONHOOK;
|
||||
}
|
||||
|
||||
// Send hook events
|
||||
|
@ -1095,13 +1248,13 @@ bool ZapDevice::sendDtmf(const char* tone, bool dtmf, DialOperation op,
|
|||
if (!(tone && *tone))
|
||||
return false;
|
||||
|
||||
ZT_DIAL_OPERATION dop;
|
||||
struct dahdi_dialoperation dop;
|
||||
dop.op = op;
|
||||
dop.dialstr[0] = dtmf ? 'T' : 'P';
|
||||
|
||||
if (allDigits) {
|
||||
int len = strlen(tone);
|
||||
int maxLen = ZT_MAX_DTMF_BUF - 2;
|
||||
int maxLen = DAHDI_MAX_DTMF_BUF - 2;
|
||||
if (len > maxLen) {
|
||||
Debug(m_owner,DebugNote,
|
||||
"%sCan't send DTMF '%s' (len %d greater then max len %d) [%p]",
|
||||
|
@ -1139,11 +1292,11 @@ bool ZapDevice::sendDtmf(char tone)
|
|||
#define YZAP_TONES 20
|
||||
static char tones[YZAP_TONES+1] = "0123456789*#ABCDabcd";
|
||||
static int zapTones[YZAP_TONES] = {
|
||||
ZT_TONE_DTMF_0, ZT_TONE_DTMF_1, ZT_TONE_DTMF_2, ZT_TONE_DTMF_3,
|
||||
ZT_TONE_DTMF_4, ZT_TONE_DTMF_5, ZT_TONE_DTMF_6, ZT_TONE_DTMF_7,
|
||||
ZT_TONE_DTMF_8, ZT_TONE_DTMF_9, ZT_TONE_DTMF_s, ZT_TONE_DTMF_p,
|
||||
ZT_TONE_DTMF_A, ZT_TONE_DTMF_B, ZT_TONE_DTMF_C, ZT_TONE_DTMF_D,
|
||||
ZT_TONE_DTMF_A, ZT_TONE_DTMF_B, ZT_TONE_DTMF_C, ZT_TONE_DTMF_D
|
||||
DAHDI_TONE_DTMF_0, DAHDI_TONE_DTMF_1, DAHDI_TONE_DTMF_2, DAHDI_TONE_DTMF_3,
|
||||
DAHDI_TONE_DTMF_4, DAHDI_TONE_DTMF_5, DAHDI_TONE_DTMF_6, DAHDI_TONE_DTMF_7,
|
||||
DAHDI_TONE_DTMF_8, DAHDI_TONE_DTMF_9, DAHDI_TONE_DTMF_s, DAHDI_TONE_DTMF_p,
|
||||
DAHDI_TONE_DTMF_A, DAHDI_TONE_DTMF_B, DAHDI_TONE_DTMF_C, DAHDI_TONE_DTMF_D,
|
||||
DAHDI_TONE_DTMF_A, DAHDI_TONE_DTMF_B, DAHDI_TONE_DTMF_C, DAHDI_TONE_DTMF_D
|
||||
};
|
||||
|
||||
// Get zaptel tone
|
||||
|
@ -1170,7 +1323,7 @@ int ZapDevice::getEvent(char& digit)
|
|||
m_savedEvent = 0;
|
||||
else if (!ioctl(GetEvent,&event,DebugMild))
|
||||
return 0;
|
||||
if ((m_zapsig == ZT_SIG_EM) && (m_type == FXO)) {
|
||||
if ((m_zapsig == DAHDI_SIG_EM) && (m_type == FXO)) {
|
||||
// For an "E&M FXO" the meanings of on/off hook change
|
||||
switch (event) {
|
||||
case OnHook:
|
||||
|
@ -1198,7 +1351,7 @@ int ZapDevice::getEvent(char& digit)
|
|||
// Get alarms from this device. Return true if alarms changed
|
||||
bool ZapDevice::checkAlarms()
|
||||
{
|
||||
ZT_SPANINFO info;
|
||||
struct dahdi_spaninfo info;
|
||||
memset(&info,0,sizeof(info));
|
||||
info.spanno = m_span;
|
||||
if (!(ioctl(GetInfo,&info,DebugAll)))
|
||||
|
@ -1308,7 +1461,7 @@ int ZapDevice::send(const void* buffer, int len)
|
|||
// Get driver version and echo canceller
|
||||
bool ZapDevice::getVersion(NamedList& dest)
|
||||
{
|
||||
zt_versioninfo info;
|
||||
struct dahdi_versioninfo info;
|
||||
if (!ioctl(GetVersion,&info,DebugNote))
|
||||
return false;
|
||||
dest.setParam("version",info.version);
|
||||
|
@ -1319,7 +1472,7 @@ bool ZapDevice::getVersion(NamedList& dest)
|
|||
// Get span info
|
||||
bool ZapDevice::getSpanInfo(int span, NamedList& dest, int* spans)
|
||||
{
|
||||
zt_spaninfo info;
|
||||
struct dahdi_spaninfo info;
|
||||
memset(&info,0,sizeof(info));
|
||||
info.spanno = (span != -1) ? span : m_span;
|
||||
if (!ioctl(GetInfo,&info,DebugNote))
|
||||
|
@ -1343,7 +1496,7 @@ bool ZapDevice::getSpanInfo(int span, NamedList& dest, int* spans)
|
|||
// Get channel parameters
|
||||
bool ZapDevice::getChanParams(NamedList& dest)
|
||||
{
|
||||
ZT_PARAMS par;
|
||||
struct dahdi_params par;
|
||||
if (!ioctl(GetParams,&par))
|
||||
return false;
|
||||
dest.addParam("format",lookup(par.curlaw,s_formats));
|
||||
|
@ -1364,8 +1517,8 @@ bool ZapDevice::getChanParams(NamedList& dest)
|
|||
// Set/get dial parameters (DTMF/MF length)
|
||||
bool ZapDevice::dialParams(bool set, int& toneLen, int& mfLen)
|
||||
{
|
||||
ZT_DIAL_PARAMS dp;
|
||||
::memset(&dp,0,sizeof(ZT_DIAL_PARAMS));
|
||||
struct dahdi_dialparams dp;
|
||||
::memset(&dp,0,sizeof(struct dahdi_dialparams));
|
||||
|
||||
if (!set) {
|
||||
if (!ioctl(GetDialParams,&dp,DebugMild))
|
||||
|
@ -1391,35 +1544,35 @@ bool ZapDevice::ioctl(IoctlRequest request, void* param, int level)
|
|||
int ret = -1;
|
||||
switch (request) {
|
||||
case GetEvent:
|
||||
ret = ::ioctl(m_handle,ZT_GETEVENT,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_GETEVENT,param);
|
||||
break;
|
||||
case SetChannel:
|
||||
ret = ::ioctl(m_handle,ZT_SPECIFY,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SPECIFY,param);
|
||||
break;
|
||||
case SetBlkSize:
|
||||
ret = ::ioctl(m_handle,ZT_SET_BLOCKSIZE,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SET_BLOCKSIZE,param);
|
||||
break;
|
||||
case SetBuffers:
|
||||
ret = ::ioctl(m_handle,ZT_SET_BUFINFO,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SET_BUFINFO,param);
|
||||
break;
|
||||
case SetFormat:
|
||||
ret = ::ioctl(m_handle,ZT_SETLAW,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SETLAW,param);
|
||||
break;
|
||||
case SetAudioMode:
|
||||
ret = ::ioctl(m_handle,ZT_AUDIOMODE,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_AUDIOMODE,param);
|
||||
break;
|
||||
case SetEchoCancel:
|
||||
ret = ::ioctl(m_handle,ZT_ECHOCANCEL,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_ECHOCANCEL,param);
|
||||
break;
|
||||
case SetDial:
|
||||
ret = ::ioctl(m_handle,ZT_DIAL,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_DIAL,param);
|
||||
break;
|
||||
case SetHook:
|
||||
ret = ::ioctl(m_handle,ZT_HOOK,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_HOOK,param);
|
||||
break;
|
||||
case SetToneDetect:
|
||||
#ifdef ZT_TONEDETECT
|
||||
ret = ::ioctl(m_handle,ZT_TONEDETECT,param);
|
||||
#ifdef DAHDI_TONEDETECT
|
||||
ret = ::ioctl(m_handle,DAHDI_TONEDETECT,param);
|
||||
break;
|
||||
#else
|
||||
// Show message only if requested to set tone detection
|
||||
|
@ -1429,34 +1582,34 @@ bool ZapDevice::ioctl(IoctlRequest request, void* param, int level)
|
|||
return false;
|
||||
#endif
|
||||
case SetPolarity:
|
||||
ret = ::ioctl(m_handle,ZT_SETPOLARITY,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SETPOLARITY,param);
|
||||
break;
|
||||
case SetLinear:
|
||||
ret = ::ioctl(m_handle,ZT_SETLINEAR,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SETLINEAR,param);
|
||||
break;
|
||||
case SetDialParams:
|
||||
ret = ::ioctl(m_handle,ZT_SET_DIALPARAMS,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SET_DIALPARAMS,param);
|
||||
break;
|
||||
case GetParams:
|
||||
ret = ::ioctl(m_handle,ZT_GET_PARAMS,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_GET_PARAMS,param);
|
||||
break;
|
||||
case GetInfo:
|
||||
ret = ::ioctl(m_handle,ZT_SPANSTAT,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SPANSTAT,param);
|
||||
break;
|
||||
case GetDialParams:
|
||||
ret = ::ioctl(m_handle,ZT_GET_DIALPARAMS,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_GET_DIALPARAMS,param);
|
||||
break;
|
||||
case StartEchoTrain:
|
||||
ret = ::ioctl(m_handle,ZT_ECHOTRAIN,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_ECHOTRAIN,param);
|
||||
break;
|
||||
case FlushBuffers:
|
||||
ret = ::ioctl(m_handle,ZT_FLUSH,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_FLUSH,param);
|
||||
break;
|
||||
case SendTone:
|
||||
ret = ::ioctl(m_handle,ZT_SENDTONE,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_SENDTONE,param);
|
||||
break;
|
||||
case GetVersion:
|
||||
ret = ::ioctl(m_handle,ZT_GETVERSION,param);
|
||||
ret = ::ioctl(m_handle,DAHDI_GETVERSION,param);
|
||||
break;
|
||||
}
|
||||
if (!ret || errno == EINPROGRESS) {
|
||||
|
@ -2580,7 +2733,7 @@ bool ZapAnalogCircuit::processEvent(int event, char c)
|
|||
return enqueueEvent(event,SignallingCircuitEvent::RingerOn);
|
||||
case ZapDevice::RingerOff:
|
||||
return enqueueEvent(event,SignallingCircuitEvent::RingerOff);
|
||||
#ifdef ZT_EVENT_REMOVED
|
||||
#ifdef DAHDI_EVENT_REMOVED
|
||||
case ZapDevice::Removed:
|
||||
#endif
|
||||
case ZapDevice::OnHook:
|
||||
|
|
Loading…
Reference in New Issue