529 lines
12 KiB
Plaintext
529 lines
12 KiB
Plaintext
WANPIPE TDMV API
|
|
================
|
|
|
|
The TDM API is only supported from wanpipe release:
|
|
|
|
wanpipe-beta1-2.3.4.tgz
|
|
|
|
|
|
Installation
|
|
============
|
|
|
|
Please read README.asterisk
|
|
|
|
|
|
Configuration
|
|
=============
|
|
|
|
Please refer to the APPENDIX Config File
|
|
|
|
|
|
|
|
LibSangoma
|
|
==========
|
|
|
|
The libsangoma is a standalone library that
|
|
a developer would use to communicate the the
|
|
TDM API sockets.
|
|
|
|
LibSangoma Installation
|
|
-----------------------
|
|
./configure
|
|
make
|
|
make install
|
|
|
|
|
|
LibSangoma Functions
|
|
--------------------
|
|
|
|
/*-----------SOCKET HANDLING FUNCTIONS-------------*/
|
|
|
|
/* Socket Create/Bind functions
|
|
* create_socket: Creates a socket on specific span and first available chan
|
|
* create_socket_by_name: Creates a socket on a specific chan name
|
|
* create_socket_intr: Creates a socket on specific chan based on span/chan numbers
|
|
*/
|
|
int sangoma_create_socket(int span);
|
|
int sangoma_create_socket_by_name(char *device, char *card);
|
|
int sangoma_create_socket_intr(int span, int intr);
|
|
|
|
/* Socket Rx/Tx functions
|
|
* sendmsg: tx header + data from separate buffers
|
|
* recvmsg: rx header + data to separate buffers
|
|
* wrte: tx header + data from single buffer
|
|
* read: rx header + data to single buffer
|
|
*/
|
|
int sangoma_sendmsg_socket(int sock, void *hdrbuf, int hdrlen,
|
|
void *databuf, int datalen, int flag);
|
|
int sangoma_readmsg_socket(int sock, void *hdrbuf, int hdrlen,
|
|
void *databuf, int datalen, int flag);
|
|
int sangoma_write_socket(int sock, void *data, int len);
|
|
int sangoma_read_socket(int sock, void *data, int len);
|
|
|
|
/* Decodec Span/Chan from interface name */
|
|
int sangoma_interface_toi(char *interface, int *span, int *chan);
|
|
|
|
|
|
/*----------------TDM API COMMANDS PER CHAN---------------*/
|
|
|
|
/* Get Full TDM API configuration per chan */
|
|
int sangoma_get_full_cfg(int sock, wanpipe_tdm_api_t *tdm_api);
|
|
|
|
/* Get/Set TDM Codec per chan */
|
|
int sangoma_tdm_set_codec(int sock, wanpipe_tdm_api_t *tdm_api, int codec);
|
|
int sangoma_tdm_get_codec(int sock, wanpipe_tdm_api_t *tdm_api);
|
|
|
|
/* Get/Set HW Tx/Rx Period in milliseconds */
|
|
int sangoma_tdm_set_hw_period(int sock, wanpipe_tdm_api_t *tdm_api, int period);
|
|
int sangoma_tdm_get_hw_period(int sock, wanpipe_tdm_api_t *tdm_api);
|
|
|
|
/* Get user MTU/MRU values in bytes */
|
|
int sangoma_tdm_get_usr_mtu_mru(int sock, wanpipe_tdm_api_t *tdm_api);
|
|
|
|
/* Not supported yet */
|
|
int sangoma_tdm_set_power_level(int sock, wanpipe_tdm_api_t *tdm_api, int power);
|
|
int sangoma_tdm_get_power_level(int sock, wanpipe_tdm_api_t *tdm_api);
|
|
|
|
|
|
|
|
|
|
TMDV API Sample Code
|
|
====================
|
|
|
|
priserver.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
APPENDIX
|
|
========
|
|
|
|
A104 - TDMV API Config File
|
|
A101/2 - TDMV API Config File
|
|
|
|
|
|
Save the config file below into: /etc/wanpipe/wanpipe1.conf
|
|
|
|
|
|
********************CUT HERE************************************
|
|
|
|
#================================================
|
|
# WANPIPE1 Configuration File
|
|
#================================================
|
|
|
|
|
|
[devices]
|
|
wanpipe1 = WAN_AFT, Comment #WAN_AFT_TE1 - Indicates A104 card
|
|
#WAN_AFT - Indicates A101/2 card
|
|
|
|
[interfaces]
|
|
|
|
#-------- DRIVER INTERFACE DEFINITIONS --------------------------------
|
|
|
|
w1g1 = wanpipe1, , TDM_API, Comment
|
|
w1g2 = wanpipe1, , TDM_API, Comment
|
|
w1g3 = wanpipe1, , TDM_API, Comment
|
|
w1g4 = wanpipe1, , TDM_API, Comment
|
|
w1g5 = wanpipe1, , TDM_API, Comment
|
|
w1g6 = wanpipe1, , TDM_API, Comment
|
|
w1g7 = wanpipe1, , TDM_API, Comment
|
|
w1g8 = wanpipe1, , TDM_API, Comment
|
|
w1g9 = wanpipe1, , TDM_API, Comment
|
|
w1g10 = wanpipe1, , TDM_API, Comment
|
|
w1g11 = wanpipe1, , TDM_API, Comment
|
|
w1g12 = wanpipe1, , TDM_API, Comment
|
|
w1g13 = wanpipe1, , TDM_API, Comment
|
|
w1g14 = wanpipe1, , TDM_API, Comment
|
|
w1g15 = wanpipe1, , TDM_API, Comment
|
|
w1g16 = wanpipe1, , TDM_API, Comment
|
|
w1g17 = wanpipe1, , TDM_API, Comment
|
|
w1g18 = wanpipe1, , TDM_API, Comment
|
|
w1g19 = wanpipe1, , TDM_API, Comment
|
|
w1g20 = wanpipe1, , TDM_API, Comment
|
|
w1g21 = wanpipe1, , TDM_API, Comment
|
|
w1g22 = wanpipe1, , TDM_API, Comment
|
|
w1g23 = wanpipe1, , TDM_API, Comment
|
|
w1g24 = wanpipe1, , API, Comment
|
|
|
|
[wanpipe1]
|
|
|
|
#-------- DEVICE / DRIVER BINDING ----------------------------------
|
|
|
|
CARD_TYPE = AFT #AFT: Same for all aft cards must
|
|
#This value must be hardcoed to AFT for all
|
|
#aft cards.
|
|
|
|
S514CPU = B #Used by A101/2 driver to determine T1/E1 port
|
|
#A - port 1
|
|
#B - port 2
|
|
#For A104 driver: Always set this value to A!
|
|
|
|
AUTO_PCISLOT = YES #Auto detect PCI/BUS info for this card type
|
|
#NO - disable this option
|
|
#YES- enable this option
|
|
# if enabled bottom two options
|
|
# PCISLOT and PCIBUS will not be used.
|
|
# Therefore one can set the to arbitrary value
|
|
# or remove them all together.
|
|
|
|
PCISLOT = 2 #PCI SLOT Number:
|
|
#Valid values = any number
|
|
|
|
PCIBUS = 2 #PCI BUS Number:
|
|
#Valid values = any number
|
|
|
|
#--------------FRONT END SETUP -----------------------------------
|
|
|
|
|
|
FE_MEDIA = T1 #Front End Type:
|
|
#T1 - set front end for T1 mode
|
|
#E1 - set front end for E1 mode
|
|
|
|
FE_LCODE = B8ZS #Front End Line Coding
|
|
#If T1: B8ZS or AMI
|
|
# E1: HDB3 or AMI
|
|
|
|
FE_FRAME = ESF #Front End Framing
|
|
#If T1: ESF or D4
|
|
# E1: CRC4 or NCRC4
|
|
|
|
FE_LINE = 4 #Front End Line number.
|
|
#Used by A104 driver to determine T1/E1 port
|
|
#Valid values are: 1-4
|
|
#
|
|
#The A101/2 driver doesn't use this option
|
|
#so one should hardcode it to 1 or
|
|
#remove it all together.
|
|
|
|
|
|
TE_CLOCK = NORMAL #T1/E1 Clock Source
|
|
#NORMAL - slave clock, clock is received from telco
|
|
# This is always the DEFAULT
|
|
#MASTER - master clcok, use hw oscillator clock
|
|
# Only used in back to back mode or
|
|
# when specified by telco.
|
|
|
|
|
|
TE_REF_CLOCK = 0 #T1/E1 Reference Clock Source
|
|
#This option allows one to use the incoming clock
|
|
#from a different port as a clock source to this
|
|
#port. FOR THIS OPTION TO WORK: TE_CLOCK=MASTER
|
|
#Valid options: 0 - disable
|
|
# 1-4 - use clock from particular port
|
|
|
|
|
|
ACTIVE_CH = ALL #Specify T1/E1 Active channels (timeslots)
|
|
#Since AFT cards support channelization this
|
|
#option MUST BE HARDCODED TO: ALL!
|
|
|
|
|
|
TE_HIGHIMPEDANCE = NO #Set the Front Ent chip in High Impedance mode
|
|
#used for datascoping:
|
|
#NO - Disable high impedance mode (DEFAULT)
|
|
#YES - Enable hight impedance mode
|
|
# (only if you know what you are doing)
|
|
|
|
LBO = 0DB #Front End Line Buildout
|
|
# 0db (Default)
|
|
# 7.5dB
|
|
# 15dB
|
|
# 22.5dB
|
|
# 0-110ft
|
|
# 110-220ft
|
|
# 220-330ft
|
|
# 330-440ft
|
|
# 440-550ft
|
|
# 550-660ft
|
|
|
|
|
|
FE_TXTRISTATE = NO #Front End Tri-State Mode
|
|
#Disable front end chip TX mode
|
|
#Used for datascoping or connecting multiple ports
|
|
#together where one port is operating normally and others
|
|
#are tristated, thus only receiving.
|
|
#NO - Disable tristae mode
|
|
#YES- Enable tristate mode
|
|
|
|
|
|
#------------ MISC DRIVER OPTIONS --------------------------
|
|
|
|
|
|
MTU = 1500 #Global MTU Value
|
|
#Note: This value is overwritten by the
|
|
# interface MTU value below if it exists.
|
|
#Values: any number [ suggested 128 - 4086 ]
|
|
|
|
IGNORE_FRONT_END = NO #Ignore Fronte End State
|
|
#NO - Do not ignore front end state,
|
|
# therefore if state changes, change the
|
|
# state of the above protocol.
|
|
#YES- Igonore front end state
|
|
# Thus if front end goes down, the protocol
|
|
# will not know.
|
|
|
|
|
|
|
|
#------------ VOICE INTERFACE CONFIG --------------------------
|
|
#Each interface corresponds to a specific T1/E1 timeslot
|
|
#For T1: Interface 24 must be configured for PRI
|
|
#For E1: Interface 16 must be configured for PRI
|
|
|
|
[w1g1]
|
|
PROTOCOL = HDLC #Protocol: HDLC : Hardcoded Value
|
|
|
|
HDLC_STREAMING = NO #HDLC Engine Control
|
|
#(NOT USED if interface is in TDM_API mode)
|
|
#NO: Disable HDLC Engine: Transparet (VOICE) mode
|
|
#YES: Enable HDLC Engine: PRI mode
|
|
|
|
ACTIVE_CH = 1 #Hardware Timeslot Number
|
|
#For T1: 1-24
|
|
#For E1: 1-31
|
|
|
|
IDLE_FLAG = 0x7E #Idle Flag to be transmitted
|
|
#in Tx underrun condition.
|
|
|
|
MTU = 80 #Maximum Tx Size
|
|
#API will/must transmit in MTU chunks
|
|
#1ms = 8
|
|
#10ms = 80 (Default)
|
|
|
|
MRU = 80 #Maximum Rx Size
|
|
#API will receive data in MRU chunks
|
|
#1ms = 8
|
|
#10ms = 80 (Default)
|
|
|
|
|
|
[w1g2]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 2
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g3]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 3
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
|
|
[w1g4]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 4
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
|
|
[w1g5]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 5
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
|
|
[w1g6]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 6
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g7]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 7
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g8]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 8
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g9]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 9
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g10]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 10
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g11]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 11
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g12]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 12
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g13]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 13
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g14]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 14
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g15]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 15
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g16]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 16
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g17]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 17
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g18]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 18
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g19]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 19
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g20]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 20
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g21]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 21
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g22]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 22
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
[w1g23]
|
|
PROTOCOL = HDLC
|
|
HDLC_STREAMING = NO
|
|
ACTIVE_CH = 23
|
|
IDLE_FLAG = 0x7E
|
|
MTU = 80
|
|
MRU = 80
|
|
|
|
|
|
#--------------- PRI/DCHAN CONFIGURATION ---------------
|
|
|
|
[w1g24]
|
|
|
|
PROTOCOL = HDLC #Protocol: HDLC : Hardcoded Value
|
|
|
|
HDLC_STREAMING = YES #HDLC Engine Control
|
|
#NO: Disable HDLC Engine: Transparet (VOICE) mode
|
|
#YES: Enable HDLC Engine: PRI mode (Default)
|
|
|
|
ACTIVE_CH = 24 #Hardware PRI Timeslot Number
|
|
#For T1: 24
|
|
#For E1: 16
|
|
|
|
IDLE_FLAG = 0x7E #Idle Flag to be transmitted
|
|
#in Tx underrun condition.
|
|
#Used in VOICE mode only.
|
|
|
|
MTU = 1500 #Maximum Tx Size
|
|
#Corresponds to maximum TX HDLC packet size
|
|
|
|
MRU = 1500 #Maximum Rx Size
|
|
#Corresponds to maximum RX HDLC packet size
|
|
|
|
|
|
|
|
********************CUT HERE************************************
|