I hope it is know readable for everybody.
This commit is contained in:
parent
efbc36f4e7
commit
73f411e5c3
|
@ -0,0 +1,5 @@
|
|||
config.log
|
||||
config.cache
|
||||
config.status
|
||||
Makefile
|
||||
comperr
|
|
@ -0,0 +1,52 @@
|
|||
# $Id$
|
||||
#
|
||||
# Makefile for libcapi20
|
||||
# (C) 1998 Carsten Paeth
|
||||
#
|
||||
# $Log$
|
||||
# Revision 1.1 1998/08/25 16:33:14 calle
|
||||
# Added CAPI2.0 library. First Version.
|
||||
#
|
||||
#
|
||||
|
||||
prefix := @prefix@
|
||||
exec_prefix := @exec_prefix@
|
||||
|
||||
LIBDIR := @libdir@
|
||||
INCLUDEDIR := @includedir@
|
||||
INSTALL := @INSTALL@
|
||||
INSTALL_DATA := $(INSTALL) -m 0644 -o 0 -g 0
|
||||
|
||||
all: libcapi20.a
|
||||
|
||||
install: all
|
||||
$(INSTALL_DATA) libcapi20.a $(LIBDIR)
|
||||
$(INSTALL_DATA) capi20.h $(INCLUDEDIR)
|
||||
|
||||
ifeq (.depend,$(wildcard .depend))
|
||||
include .depend
|
||||
endif
|
||||
|
||||
.depend:
|
||||
$(CPP) -M $(CFLAGS) $(DEFS) *.c >.depend
|
||||
|
||||
depend: .depend
|
||||
|
||||
config:
|
||||
@./configure
|
||||
|
||||
Makefile: Makefile.in config.status
|
||||
./config.status
|
||||
|
||||
config.status: configure
|
||||
./config.status --recheck
|
||||
|
||||
libcapi20.a: capi20.o capifunc.o convert.o
|
||||
@rm -f $@
|
||||
$(AR) cvq $@ $^
|
||||
|
||||
clean:
|
||||
rm -f *.o libcapi20.a libcapi20.so.* comperr
|
||||
|
||||
distclean: clean
|
||||
rm -f config.status config.cache config.log Makefile .depend
|
|
@ -0,0 +1,41 @@
|
|||
dnl
|
||||
dnl Try finding linux sourcetree
|
||||
dnl
|
||||
|
||||
AC_DEFUN(AC_FIND_KERNEL, [
|
||||
OLD_CPPFLAGS="$CPPFLAGS"
|
||||
lxdir="no"
|
||||
eval tst_kerneldir=$CONFIG_KERNELDIR
|
||||
|
||||
AC_ARG_WITH(kernel,
|
||||
[ --with-kernel=DIR Set kernel source directory [/usr/src/linux]],
|
||||
DOTEST="y"; tst_kerneldir="${withval}")
|
||||
|
||||
if test "$DOTEST" = "y" || test "$CONFIG_KERNELDIR" != "" ; then
|
||||
AC_MSG_CHECKING([for linux kernel source in ${tst_kerneldir}])
|
||||
CPPFLAGS="-nostdinc -I${tst_kerneldir}/drivers/isdn"
|
||||
AC_TRY_CPP([#include <isdn_common.h>], lxdir=${tst_kerneldir},
|
||||
AC_MSG_RESULT("no"))
|
||||
fi
|
||||
if test "$lxdir" = "no" ; then
|
||||
AC_MSG_CHECKING([for linux kernel source in /usr/src/linux])
|
||||
CPPFLAGS="-nostdinc -I/usr/src/linux/drivers/isdn"
|
||||
AC_TRY_CPP([#include <isdn_common.h>], lxdir=/usr/src/linux)
|
||||
fi
|
||||
if test "$lxdir" = "no" ; then
|
||||
AC_MSG_RESULT("$lxdir")
|
||||
AC_MSG_CHECKING([for linux kernel source in /usr/local/src/linux])
|
||||
CPPFLAGS="-nostdinc -I/usr/local/src/linux/drivers/isdn"
|
||||
AC_TRY_CPP([#include <isdn_common.h>], lxdir=/usr/local/src/linux)
|
||||
fi
|
||||
if test "$lxdir" != "no" ; then
|
||||
AC_MSG_RESULT("yes")
|
||||
else
|
||||
lxdir=""
|
||||
AC_MSG_ERROR("Kernel source not found. You MUST specify a correct path to the linux source in the configuration.")
|
||||
fi
|
||||
CONFIG_KERNELDIR="$lxdir"
|
||||
CPPFLAGS="$OLD_CPPFLAGS"
|
||||
AC_DEFINE_UNQUOTED(CONFIG_KERNELDIR,"$lxdir")
|
||||
AC_SUBST(CONFIG_KERNELDIR)
|
||||
])
|
|
@ -0,0 +1,323 @@
|
|||
/*
|
||||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.1 1998/08/25 16:33:16 calle
|
||||
* Added CAPI2.0 library. First Version.
|
||||
*
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <linux/capi.h>
|
||||
#include "capi20.h"
|
||||
|
||||
static int capi_fd = -1;
|
||||
static capi_ioctl_struct ioctl_data;
|
||||
static unsigned char rcvbuf[128+2048]; /* message + data */
|
||||
static unsigned char sndbuf[128+2048]; /* message + data */
|
||||
|
||||
unsigned capi20_isinstalled (void)
|
||||
{
|
||||
if (capi_fd >= 0)
|
||||
return 1;
|
||||
|
||||
/*----- open managment link -----*/
|
||||
if ((capi_fd = open("/dev/capi20", O_RDWR, 0666)) < 0)
|
||||
return 0;
|
||||
|
||||
return ioctl(capi_fd, CAPI_INSTALLED, 0) == 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* managment of application ids
|
||||
*/
|
||||
|
||||
static struct capi_applidmap {
|
||||
int used;
|
||||
int fd;
|
||||
} capi_applidmap[CAPI_MAXAPPL] = {0};
|
||||
|
||||
static inline _cword allocapplid(int fd)
|
||||
{
|
||||
_cword i;
|
||||
for (i=0; i < CAPI_MAXAPPL; i++) {
|
||||
if (capi_applidmap[i].used == 0) {
|
||||
capi_applidmap[i].used = 1;
|
||||
capi_applidmap[i].fd = fd;
|
||||
return i+1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void freeapplid(_cword applid)
|
||||
{
|
||||
capi_applidmap[applid-1].used = 0;
|
||||
capi_applidmap[applid-1].fd = -1;
|
||||
}
|
||||
|
||||
static inline int validapplid(_cword applid)
|
||||
{
|
||||
return applid > 0 && applid <= CAPI_MAXAPPL
|
||||
&& capi_applidmap[applid-1].used;
|
||||
}
|
||||
|
||||
static inline int applid2fd(_cword applid)
|
||||
{
|
||||
if (applid < CAPI_MAXAPPL)
|
||||
return capi_applidmap[applid-1].fd;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* CAPI2.0 functions
|
||||
*/
|
||||
|
||||
_cword
|
||||
capi20_register (unsigned MaxB3Connection,
|
||||
unsigned MaxB3Blks,
|
||||
unsigned MaxSizeB3,
|
||||
CAPI_REGISTER_ERROR *ErrorCode)
|
||||
{
|
||||
_cword applid;
|
||||
char buf[PATH_MAX];
|
||||
int i, fd = -1;
|
||||
|
||||
if (!capi20_isinstalled()) {
|
||||
*ErrorCode = CapiRegNotInstalled;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*ErrorCode = CapiRegOSResourceErr;
|
||||
|
||||
for (i=0; fd < 0; i++) {
|
||||
/*----- open pseudo-clone device -----*/
|
||||
sprintf(buf, "/dev/capi20.%02d", i);
|
||||
if ((fd = open(buf, O_RDWR|O_NONBLOCK, 0666)) < 0) {
|
||||
switch (errno) {
|
||||
case EEXIST:
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((applid = allocapplid(fd)) == 0)
|
||||
return 0;
|
||||
|
||||
ioctl_data.rparams.level3cnt = MaxB3Connection;
|
||||
ioctl_data.rparams.datablkcnt = MaxB3Blks;
|
||||
ioctl_data.rparams.datablklen = MaxSizeB3;
|
||||
|
||||
if (ioctl(fd, CAPI_REGISTER, &ioctl_data) < 0) {
|
||||
if (errno == EIO) {
|
||||
if (ioctl(fd, CAPI_GET_ERRCODE, &ioctl_data) < 0)
|
||||
return 0;
|
||||
*ErrorCode = ioctl_data.errcode;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return applid;
|
||||
}
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR
|
||||
capi20_release (unsigned Appl_Id)
|
||||
{
|
||||
if (!capi20_isinstalled())
|
||||
return CapiRegNotInstalled;
|
||||
if (!validapplid(Appl_Id))
|
||||
return CapiIllAppNr;
|
||||
(void)close(applid2fd(Appl_Id));
|
||||
freeapplid(Appl_Id);
|
||||
return CapiNoError;
|
||||
}
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR
|
||||
capi20_put_message (CAPI_MESSAGE Msg, unsigned Appl_Id)
|
||||
{
|
||||
MESSAGE_EXCHANGE_ERROR ret;
|
||||
int len = (Msg[0] | (Msg[1] << 8));
|
||||
int cmd = Msg[4];
|
||||
int subcmd = Msg[5];
|
||||
int rc;
|
||||
int fd;
|
||||
|
||||
if (!capi20_isinstalled())
|
||||
return CapiRegNotInstalled;
|
||||
|
||||
if (!validapplid(Appl_Id))
|
||||
return CapiIllAppNr;
|
||||
|
||||
fd = applid2fd(Appl_Id);
|
||||
|
||||
memcpy(sndbuf, Msg, len);
|
||||
|
||||
if (cmd == CAPI_DATA_B3 && subcmd == CAPI_REQ) {
|
||||
int datalen = (Msg[16] | (Msg[17] << 8));
|
||||
void *dataptr = (void *)(Msg[12]|(Msg[13]<<8)|(Msg[14]<<16)|(Msg[15]<<24));
|
||||
memcpy(sndbuf+len, dataptr, datalen);
|
||||
len += datalen;
|
||||
}
|
||||
|
||||
ret = CapiNoError;
|
||||
errno = 0;
|
||||
|
||||
if ((rc = write(fd, sndbuf, len)) != len) {
|
||||
switch (errno) {
|
||||
case EFAULT:
|
||||
case EINVAL:
|
||||
ret = CapiIllCmdOrSubcmdOrMsgToSmall;
|
||||
break;
|
||||
case EBADF:
|
||||
ret = CapiIllAppNr;
|
||||
break;
|
||||
case EIO:
|
||||
if (ioctl(fd, CAPI_GET_ERRCODE, &ioctl_data) < 0)
|
||||
ret = CapiMsgOSResourceErr;
|
||||
else ret = (MESSAGE_EXCHANGE_ERROR)ioctl_data.errcode;
|
||||
break;
|
||||
default:
|
||||
ret = CapiMsgOSResourceErr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR
|
||||
capi20_get_message (unsigned Appl_Id, CAPI_MESSAGE *ReturnMessage)
|
||||
{
|
||||
MESSAGE_EXCHANGE_ERROR ret;
|
||||
int rc, fd;
|
||||
|
||||
if (!capi20_isinstalled())
|
||||
return CapiRegNotInstalled;
|
||||
|
||||
if (!validapplid(Appl_Id))
|
||||
return CapiIllAppNr;
|
||||
|
||||
fd = applid2fd(Appl_Id);
|
||||
|
||||
*ReturnMessage = rcvbuf;
|
||||
if ((rc = read(fd, rcvbuf, sizeof(rcvbuf))) > 0) {
|
||||
return CapiNoError;
|
||||
}
|
||||
|
||||
if (rc == 0)
|
||||
return CapiReceiveQueueEmpty;
|
||||
|
||||
switch (errno) {
|
||||
case EMSGSIZE:
|
||||
ret = CapiIllCmdOrSubcmdOrMsgToSmall;
|
||||
break;
|
||||
case EAGAIN:
|
||||
return CapiReceiveQueueEmpty;
|
||||
default:
|
||||
ret = CapiMsgOSResourceErr;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
CAPI_MESSAGE
|
||||
capi20_get_manufacturer(unsigned contr, CAPI_MESSAGE LpBuffer)
|
||||
{
|
||||
if (!capi20_isinstalled())
|
||||
return 0;
|
||||
ioctl_data.contr = contr;
|
||||
if (ioctl(capi_fd, CAPI_GET_MANUFACTURER, &ioctl_data) < 0)
|
||||
return 0;
|
||||
strncpy(LpBuffer, ioctl_data.manufacturer, CAPI_MANUFACTURER_LEN);
|
||||
return LpBuffer;
|
||||
}
|
||||
|
||||
CAPI_MESSAGE
|
||||
capi20_get_version(unsigned contr, CAPI_MESSAGE version)
|
||||
{
|
||||
if (!capi20_isinstalled())
|
||||
return 0;
|
||||
ioctl_data.contr = contr;
|
||||
if (ioctl(capi_fd, CAPI_GET_VERSION, &ioctl_data) < 0)
|
||||
return 0;
|
||||
memcpy(version, &ioctl_data.version, sizeof(capi_version));
|
||||
return version;
|
||||
}
|
||||
|
||||
CAPI_MESSAGE
|
||||
capi20_get_serial_number(unsigned contr, CAPI_MESSAGE LpBuffer)
|
||||
{
|
||||
if (!capi20_isinstalled())
|
||||
return 0;
|
||||
ioctl_data.contr = contr;
|
||||
if (ioctl(capi_fd, CAPI_GET_SERIAL, &ioctl_data) < 0)
|
||||
return 0;
|
||||
memcpy(LpBuffer, &ioctl_data.serial, CAPI_SERIAL_LEN);
|
||||
return LpBuffer;
|
||||
}
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR
|
||||
capi20_get_profile(unsigned Controller, CAPI_MESSAGE LpBuffer)
|
||||
{
|
||||
if (!capi20_isinstalled())
|
||||
return CapiMsgNotInstalled;
|
||||
|
||||
ioctl_data.contr = Controller;
|
||||
if (ioctl(capi_fd, CAPI_GET_PROFILE, &ioctl_data) < 0) {
|
||||
if (errno != EIO)
|
||||
return CapiMsgOSResourceErr;
|
||||
if (ioctl(capi_fd, CAPI_GET_ERRCODE, &ioctl_data) < 0)
|
||||
return CapiMsgOSResourceErr;
|
||||
return (MESSAGE_EXCHANGE_ERROR)ioctl_data.errcode;
|
||||
}
|
||||
if (Controller)
|
||||
memcpy(LpBuffer, &ioctl_data.profile, CAPI_SERIAL_LEN);
|
||||
else
|
||||
memcpy(LpBuffer, &ioctl_data.profile.ncontroller,
|
||||
sizeof(ioctl_data.profile.ncontroller));
|
||||
return CapiNoError;
|
||||
}
|
||||
/*
|
||||
* functions added to the CAPI2.0 spec
|
||||
*/
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR
|
||||
capi20_waitformessage(_cword Appl_Id, struct timeval *tvp)
|
||||
{
|
||||
int fd;
|
||||
fd_set rfds;
|
||||
int retval;
|
||||
|
||||
FD_ZERO(&rfds);
|
||||
|
||||
if(!capi20_isinstalled())
|
||||
return CapiRegNotInstalled;
|
||||
|
||||
if(!validapplid(Appl_Id))
|
||||
return CapiIllAppNr;
|
||||
|
||||
fd = applid2fd(Appl_Id);
|
||||
|
||||
FD_SET(fd, &rfds);
|
||||
|
||||
fcntl(fd, F_SETFL, !O_NONBLOCK);
|
||||
retval = select(fd + 1, &rfds, NULL, NULL, tvp);
|
||||
fcntl(fd, F_SETFL, O_NONBLOCK);
|
||||
|
||||
return(CapiNoError);
|
||||
}
|
||||
|
||||
int
|
||||
capi20_fileno(_cword applid)
|
||||
{
|
||||
return applid2fd(applid);
|
||||
}
|
||||
|
|
@ -0,0 +1,957 @@
|
|||
#ifndef __CAPI20_H
|
||||
#define __CAPI20_H
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*----- basic-type definitions -----*/
|
||||
|
||||
typedef unsigned char *CAPI_MESSAGE;
|
||||
typedef unsigned char _cbyte;
|
||||
typedef unsigned short _cword;
|
||||
typedef unsigned long _cdword;
|
||||
typedef CAPI_MESSAGE _cstruct;
|
||||
typedef enum { CAPI_COMPOSE = 0, CAPI_DEFAULT = 1 } _cmstruct;
|
||||
|
||||
/*----- errornumbers -----*/
|
||||
|
||||
typedef enum {
|
||||
CapiToManyAppls =0x1001,
|
||||
CapiLogBlkSizeToSmall =0x1002,
|
||||
CapiBuffExeceeds64k =0x1003,
|
||||
CapiMsgBufSizeToSmall =0x1004,
|
||||
CapiAnzLogConnNotSupported =0x1005,
|
||||
CapiRegReserved =0x1006,
|
||||
CapiRegBusy =0x1007,
|
||||
CapiRegOSResourceErr =0x1008,
|
||||
CapiRegNotInstalled =0x1009,
|
||||
CapiRegCtrlerNotSupportExtEquip =0x100a,
|
||||
CapiRegCtrlerOnlySupportExtEquip =0x100b
|
||||
} CAPI_REGISTER_ERROR;
|
||||
|
||||
typedef enum {
|
||||
CapiNoError =0x0000,
|
||||
CapiIllAppNr =0x1101,
|
||||
CapiIllCmdOrSubcmdOrMsgToSmall =0x1102,
|
||||
CapiSendQueueFull =0x1103,
|
||||
CapiReceiveQueueEmpty =0x1104,
|
||||
CapiReceiveOverflow =0x1105,
|
||||
CapiUnknownNotPar =0x1106,
|
||||
CapiMsgBusy =0x1107,
|
||||
CapiMsgOSResourceErr =0x1108,
|
||||
CapiMsgNotInstalled =0x1109,
|
||||
CapiMsgCtrlerNotSupportExtEquip =0x110a,
|
||||
CapiMsgCtrlerOnlySupportExtEquip =0x110b
|
||||
} MESSAGE_EXCHANGE_ERROR;
|
||||
|
||||
/*----- CAPI commands -----*/
|
||||
|
||||
#define CAPI_ALERT 0x01
|
||||
#define CAPI_CONNECT 0x02
|
||||
#define CAPI_CONNECT_ACTIVE 0x03
|
||||
#define CAPI_CONNECT_B3_ACTIVE 0x83
|
||||
#define CAPI_CONNECT_B3 0x82
|
||||
#define CAPI_CONNECT_B3_T90_ACTIVE 0x88
|
||||
#define CAPI_DATA_B3 0x86
|
||||
#define CAPI_DISCONNECT_B3 0x84
|
||||
#define CAPI_DISCONNECT 0x04
|
||||
#define CAPI_FACILITY 0x80
|
||||
#define CAPI_INFO 0x08
|
||||
#define CAPI_LISTEN 0x05
|
||||
#define CAPI_MANUFACTURER 0xff
|
||||
#define CAPI_RESET_B3 0x87
|
||||
#define CAPI_SELECT_B_PROTOCOL 0x41
|
||||
|
||||
/*----- CAPI subcommands -----*/
|
||||
|
||||
#define CAPI_REQ 0x80
|
||||
#define CAPI_CONF 0x81
|
||||
#define CAPI_IND 0x82
|
||||
#define CAPI_RESP 0x83
|
||||
|
||||
/* standard CAPI2.0 functions */
|
||||
|
||||
unsigned capi20_isinstalled (void);
|
||||
|
||||
_cword capi20_register (unsigned MaxB3Connection,
|
||||
unsigned MaxB3Blks,
|
||||
unsigned MaxSizeB3,
|
||||
CAPI_REGISTER_ERROR *ErrorCode);
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR capi20_release (unsigned Appl_Id);
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR capi20_put_message (CAPI_MESSAGE Msg, unsigned Appl_Id);
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR capi20_get_message (unsigned Appl_Id, CAPI_MESSAGE *ReturnMessage);
|
||||
|
||||
CAPI_MESSAGE capi20_get_manufacturer (unsigned contr, CAPI_MESSAGE LpBuffer);
|
||||
|
||||
CAPI_MESSAGE capi20_get_version (unsigned contr, CAPI_MESSAGE version);
|
||||
|
||||
CAPI_MESSAGE capi20_get_serial_number (unsigned contr, CAPI_MESSAGE LpBuffer);
|
||||
|
||||
MESSAGE_EXCHANGE_ERROR capi20_get_profile (unsigned Controller, CAPI_MESSAGE LpBuffer);
|
||||
|
||||
/* CAPI2.0 Spec names */
|
||||
#define CAPI20_REGISTER capi20_register
|
||||
#define CAPI20_RELEASE capi20_release
|
||||
#define CAPI20_PUT_MESSAGE capi20_put_message
|
||||
#define CAPI20_GET_MESSAGE capi20_get_message
|
||||
#define CAPI20_GET_MANUFACTURER capi20_get_manufacturer
|
||||
#define CAPI20_GET_VERSION capi20_get_version
|
||||
#define CAPI20_GET_SERIAL_NUMBER capi20_get_serial_number
|
||||
#define CAPI20_GET_PROFILE capi20_get_profile
|
||||
|
||||
/* extra functions */
|
||||
#define CAPI20_WaitforMessage capi20_waitformessage
|
||||
MESSAGE_EXCHANGE_ERROR capi20_waitformessage(_cword Appl_Id, struct timeval *tvp);
|
||||
|
||||
int capi20_fileno(_cword applid);
|
||||
|
||||
/*
|
||||
* The _cmsg structure contains all possible CAPI 2.0 parameter.
|
||||
* All parameters are stored here first. The function capi_cmsg2message()
|
||||
* assembles the parameter and builds CAPI2.0 conform messages.
|
||||
* capi_message2cmsg disassembles CAPI 2.0 messages and stores the
|
||||
* parameter in the _cmsg structure
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
/* Header */
|
||||
_cword ApplId;
|
||||
_cbyte Command;
|
||||
_cbyte Subcommand;
|
||||
_cword Messagenumber;
|
||||
|
||||
/* Parameter */
|
||||
union {
|
||||
_cdword adrController;
|
||||
_cdword adrPLCI;
|
||||
_cdword adrNCCI;
|
||||
} adr;
|
||||
|
||||
_cmstruct AdditionalInfo;
|
||||
_cstruct B1configuration;
|
||||
_cword B1protocol;
|
||||
_cstruct B2configuration;
|
||||
_cword B2protocol;
|
||||
_cstruct B3configuration;
|
||||
_cword B3protocol;
|
||||
_cstruct BC;
|
||||
_cstruct BChannelinformation;
|
||||
_cmstruct BProtocol;
|
||||
_cstruct CalledPartyNumber;
|
||||
_cstruct CalledPartySubaddress;
|
||||
_cstruct CallingPartyNumber;
|
||||
_cstruct CallingPartySubaddress;
|
||||
_cdword CIPmask;
|
||||
_cdword CIPmask2;
|
||||
_cword CIPValue;
|
||||
_cdword Class;
|
||||
_cstruct ConnectedNumber;
|
||||
_cstruct ConnectedSubaddress;
|
||||
_cdword Data;
|
||||
_cword DataHandle;
|
||||
_cword DataLength;
|
||||
_cstruct FacilityConfirmationParameter;
|
||||
_cstruct Facilitydataarray;
|
||||
_cstruct FacilityIndicationParameter;
|
||||
_cstruct FacilityRequestParameter;
|
||||
_cstruct FacilityResponseParameters;
|
||||
_cword FacilitySelector;
|
||||
_cword Flags;
|
||||
_cdword Function;
|
||||
_cstruct HLC;
|
||||
_cword Info;
|
||||
_cstruct InfoElement;
|
||||
_cdword InfoMask;
|
||||
_cword InfoNumber;
|
||||
_cstruct Keypadfacility;
|
||||
_cstruct LLC;
|
||||
_cstruct ManuData;
|
||||
_cdword ManuID;
|
||||
_cstruct NCPI;
|
||||
_cword Reason;
|
||||
_cword Reason_B3;
|
||||
_cword Reject;
|
||||
_cstruct Useruserdata;
|
||||
|
||||
/* intern */
|
||||
unsigned l,p;
|
||||
unsigned char *par;
|
||||
CAPI_MESSAGE m;
|
||||
} _cmsg;
|
||||
|
||||
unsigned capi_cmsg2message(_cmsg *cmsg, CAPI_MESSAGE msg);
|
||||
|
||||
unsigned capi_message2cmsg (_cmsg *cmsg, CAPI_MESSAGE msg);
|
||||
|
||||
/*
|
||||
* capi_put_cmsg() works like capi_put_message() but it converts the _cmsg
|
||||
* first with capi_cmsg2message(). Possible errors from capi_put_message()
|
||||
* will be returned.
|
||||
*/
|
||||
|
||||
unsigned capi_put_cmsg(_cmsg *cmsg);
|
||||
|
||||
/*
|
||||
* capi_get_cmsg() works like capi_get_message() and converts the CAPI message
|
||||
* to a _cmsg with capi_message2cmsg(). Possible errors from capi_get_message()
|
||||
* will be returned.
|
||||
*/
|
||||
unsigned capi_get_cmsg(_cmsg *cmsg, unsigned applid);
|
||||
|
||||
/*
|
||||
* capi_cmsg_header() fills the _cmsg structure with default values, so only
|
||||
* parameter with non default values must be changed before sending the
|
||||
* message.
|
||||
*/
|
||||
unsigned capi_cmsg_header (_cmsg *cmsg, _cword _ApplId, _cbyte _Command, _cbyte _Subcommand, _cword _Messagenumber, _cdword _Controller);
|
||||
|
||||
/*
|
||||
* capi_cmsg_answer() is used to answer indications. It changes the header
|
||||
* of an indication to a response, and leaves all other parameters the same
|
||||
*/
|
||||
unsigned capi_cmsg_answer (_cmsg *cmsg);
|
||||
|
||||
/*----- defines to access specific parameter -----*/
|
||||
|
||||
#define ALERT_REQ_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define ALERT_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
|
||||
/* Additional info elements */
|
||||
#define ALERT_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
|
||||
#define ALERT_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define ALERT_REQ_USERUSERDATA(x) ((x)->Useruserdata)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define ALERT_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
|
||||
/* which is used to transfer additional parameters coded */
|
||||
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
|
||||
/* This field is used to transport one or more complete facility */
|
||||
/* data information elements. */
|
||||
#define ALERT_CONF_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define ALERT_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: alert initiated */
|
||||
/* 0x0003: alert already sent by another application */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal PLCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
#define CONNECT_REQ_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define CONNECT_REQ_CIPVALUE(x) ((x)->CIPValue)
|
||||
/* Compatibility Information Profile */
|
||||
#define CONNECT_REQ_CALLEDPARTYNUMBER(x) ((x)->CalledPartyNumber)
|
||||
/* Called party number */
|
||||
#define CONNECT_REQ_CALLINGPARTYNUMBER(x) ((x)->CallingPartyNumber)
|
||||
/* Calling party number */
|
||||
#define CONNECT_REQ_CALLEDPARTYSUBADDRESS(x) ((x)->CalledPartySubaddress)
|
||||
/* Called party subaddress */
|
||||
#define CONNECT_REQ_CALLINGPARTYSUBADDRESS(x) ((x)->CallingPartySubaddress)
|
||||
/* Calling party subaddress */
|
||||
#define CONNECT_REQ_BPROTOCOL(x) ((x)->BProtocol)
|
||||
/* B protocol to be used */
|
||||
#define CONNECT_REQ_B1PROTOCOL(x) ((x)->B1protocol)
|
||||
/* Physical layer and framing */
|
||||
#define CONNECT_REQ_B2PROTOCOL(x) ((x)->B2protocol)
|
||||
/* Data link layer */
|
||||
#define CONNECT_REQ_B3PROTOCOL(x) ((x)->B3protocol)
|
||||
/* Network layer */
|
||||
#define CONNECT_REQ_B1CONFIGURATION(x) ((x)->B1configuration)
|
||||
/* Physical layer and framing parameter */
|
||||
#define CONNECT_REQ_B2CONFIGURATION(x) ((x)->B2configuration)
|
||||
/* Data link layer parameter */
|
||||
#define CONNECT_REQ_B3CONFIGURATION(x) ((x)->B3configuration)
|
||||
/* Network layer parameter */
|
||||
#define CONNECT_REQ_BC(x) ((x)->BC)
|
||||
/* Bearer Capability */
|
||||
#define CONNECT_REQ_LLC(x) ((x)->LLC)
|
||||
/* Low Layer Compatibility */
|
||||
#define CONNECT_REQ_HLC(x) ((x)->HLC)
|
||||
/* High Layer Compatibility */
|
||||
#define CONNECT_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
|
||||
/* Additional information elements */
|
||||
#define CONNECT_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
|
||||
#define CONNECT_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define CONNECT_REQ_USERUSERDATA(x) ((x)->Useruserdata)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define CONNECT_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
|
||||
/* which is used to transfer additional parameters coded */
|
||||
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
|
||||
/* This field is used to transport one or more complete facility */
|
||||
/* data information elements. */
|
||||
#define CONNECT_CONF_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define CONNECT_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: connect initiated */
|
||||
/* 0x2002: illegal controller */
|
||||
/* 0x2003: out of PLCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
/* 0x3001: B1 protocol not supported */
|
||||
/* 0x3002: B2 protocol not supported */
|
||||
/* 0x3003: B3 protocol not supported */
|
||||
/* 0x3004: B1 protocol parameter not supported */
|
||||
/* 0x3005: B2 protocol parameter not supported */
|
||||
/* 0x3006: B3 protocol parameter not supported */
|
||||
/* 0x3007: B protocol combination not supported */
|
||||
/* 0x300A: CIP Value unknown */
|
||||
#define CONNECT_IND_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define CONNECT_IND_CIPVALUE(x) ((x)->CIPValue)
|
||||
/* Compatibility Information Profile */
|
||||
#define CONNECT_IND_CALLEDPARTYNUMBER(x) ((x)->CalledPartyNumber)
|
||||
/* Called party number */
|
||||
#define CONNECT_IND_CALLINGPARTYNUMBER(x) ((x)->CallingPartyNumber)
|
||||
/* Calling party number */
|
||||
#define CONNECT_IND_CALLEDPARTYSUBADDRESS(x) ((x)->CalledPartySubaddress)
|
||||
/* Called party subaddress */
|
||||
#define CONNECT_IND_CALLINGPARTYSUBADDRESS(x) ((x)->CallingPartySubaddress)
|
||||
/* Calling party subaddress */
|
||||
#define CONNECT_IND_BC(x) ((x)->BC)
|
||||
/* Bearer compatibility */
|
||||
#define CONNECT_IND_LLC(x) ((x)->LLC)
|
||||
/* Low Layer Compatibility */
|
||||
#define CONNECT_IND_HLC(x) ((x)->HLC)
|
||||
/* High Layer Compatibility */
|
||||
#define CONNECT_IND_ADDITIONALINFO(x) ((x)->AdditionalInfo)
|
||||
/* Additional information elements */
|
||||
#define CONNECT_IND_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
|
||||
#define CONNECT_IND_KEYPADFACILITY(x) ((x)->Keypadfacility)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define CONNECT_IND_USERUSERDATA(x) ((x)->Useruserdata)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define CONNECT_IND_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
|
||||
/* which is used to transfer additional parameters coded */
|
||||
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
|
||||
/* This field is used to transport one or more complete facility */
|
||||
/* data information elements. */
|
||||
#define CONNECT_RESP_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define CONNECT_RESP_REJECT(x) ((x)->Reject)
|
||||
/* 0: accept call */
|
||||
/* 1: ignore call */
|
||||
/* 2: reject call, normal call clearing */
|
||||
/* 3: reject call, user busy */
|
||||
/* 4: reject call, requestet circuit/channel not available */
|
||||
/* 5: reject call, facility rejected */
|
||||
/* 6: reject call, channel unacceptable */
|
||||
/* 7: reject call, incompatible destination */
|
||||
/* 8: reject call, destination out of order */
|
||||
#define CONNECT_RESP_BPROTOCOL(x) ((x)->BProtocol)
|
||||
/* B protocol to be used */
|
||||
#define CONNECT_RESP_B1PROTOCOL(x) ((x)->B1protocol)
|
||||
/* Physical layer and framing */
|
||||
#define CONNECT_RESP_B2PROTOCOL(x) ((x)->B2protocol)
|
||||
/* Data link layer */
|
||||
#define CONNECT_RESP_B3PROTOCOL(x) ((x)->B3protocol)
|
||||
/* Network layer */
|
||||
#define CONNECT_RESP_B1CONFIGURATION(x) ((x)->B1configuration)
|
||||
/* Physical layer and framing parameter */
|
||||
#define CONNECT_RESP_B2CONFIGURATION(x) ((x)->B2configuration)
|
||||
/* Data link layer parameter */
|
||||
#define CONNECT_RESP_B3CONFIGURATION(x) ((x)->B3configuration)
|
||||
/* Network layer parameter */
|
||||
#define CONNECT_RESP_CONNECTEDNUMBER(x) ((x)->ConnectedNumber)
|
||||
/* Connected number */
|
||||
#define CONNECT_RESP_CONNECTEDSUBADDRESS(x) ((x)->ConnectedSubaddress)
|
||||
/* Connected subaddress */
|
||||
#define CONNECT_RESP_LLC(x) ((x)->LLC)
|
||||
/* Low Layer Compatibility */
|
||||
#define CONNECT_RESP_ADDITIONALINFO(x) ((x)->AdditionalInfo)
|
||||
/* Additional information elements */
|
||||
#define CONNECT_RESP_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
|
||||
#define CONNECT_RESP_KEYPADFACILITY(x) ((x)->Keypadfacility)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define CONNECT_RESP_USERUSERDATA(x) ((x)->Useruserdata)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define CONNECT_RESP_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
|
||||
/* which is used to transfer additional parameters coded */
|
||||
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
|
||||
/* This field is used to transport one or more complete facility */
|
||||
/* data information elements. */
|
||||
#define CONNECT_ACTIVE_IND_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define CONNECT_ACTIVE_IND_CONNECTEDNUMBER(x) ((x)->ConnectedNumber)
|
||||
/* Connected number */
|
||||
#define CONNECT_ACTIVE_IND_CONNECTEDSUBADDRESS(x) ((x)->ConnectedSubaddress)
|
||||
/* Connected subaddress */
|
||||
#define CONNECT_ACTIVE_IND_LLC(x) ((x)->LLC)
|
||||
/* Low Layer Compatibility */
|
||||
#define CONNECT_ACTIVE_RESP_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define CONNECT_B3_ACTIVE_IND_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define CONNECT_B3_ACTIVE_IND_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define CONNECT_B3_ACTIVE_RESP_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define CONNECT_B3_REQ_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define CONNECT_B3_REQ_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define CONNECT_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define CONNECT_B3_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: connect initiated */
|
||||
/* 0x0001: NCPI not supported by current protocol, NCPI ignored */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal PLCI */
|
||||
/* 0x2004: out of NCCI */
|
||||
/* 0x3008: NCPI not supported */
|
||||
#define CONNECT_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define CONNECT_B3_IND_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define CONNECT_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define CONNECT_B3_RESP_REJECT(x) ((x)->Reject)
|
||||
/* 0: accept call */
|
||||
/* 2: reject call, normal call clearing */
|
||||
#define CONNECT_B3_RESP_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define CONNECT_B3_T90_ACTIVE_IND_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define CONNECT_B3_T90_ACTIVE_IND_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define CONNECT_B3_T90_ACTIVE_RESP_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DATA_B3_REQ_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DATA_B3_REQ_DATA(x) ((x)->Data)
|
||||
/* Pointer to the data to be sent */
|
||||
#define DATA_B3_REQ_DATALENGTH(x) ((x)->DataLength)
|
||||
/* Size of data area to be sent */
|
||||
#define DATA_B3_REQ_DATAHANDLE(x) ((x)->DataHandle)
|
||||
/* Referenced in DATA_B3_CONF */
|
||||
#define DATA_B3_REQ_FLAGS(x) ((x)->Flags)
|
||||
/* [0]: qualifier bit */
|
||||
/* [1]: more data bit */
|
||||
/* [2]: delivery confirmation bit */
|
||||
/* [3]: expedited data */
|
||||
/* [4] to [15]: reserved */
|
||||
#define DATA_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DATA_B3_CONF_DATAHANDLE(x) ((x)->DataHandle)
|
||||
/* Identifies the data area of corresponding DATA_B3_REQ */
|
||||
#define DATA_B3_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: data transmission initiated */
|
||||
/* 0x0002: flags not supported by current protocol, flags ignored */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal NCCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
/* 0x300A: flags not supported (reserved bits) */
|
||||
/* 0x300C: data length not supported by current protocol */
|
||||
#define DATA_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DATA_B3_IND_DATA(x) ((x)->Data)
|
||||
/* Pointer to data received */
|
||||
#define DATA_B3_IND_DATALENGTH(x) ((x)->DataLength)
|
||||
/* Size of data area received */
|
||||
#define DATA_B3_IND_DATAHANDLE(x) ((x)->DataHandle)
|
||||
/* handle to data area, referenced in DATA_B3_RESP */
|
||||
#define DATA_B3_IND_FLAGS(x) ((x)->Flags)
|
||||
/* 0: qualifier bit */
|
||||
/* 1: more-data bit */
|
||||
/* 2: delivery confirmation bit */
|
||||
/* 3: expedited data */
|
||||
/* 4 to 14: reserved */
|
||||
/* [15]: framing error bit, data may be invalid (only with corresponding B2 protocol) */
|
||||
#define DATA_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DATA_B3_RESP_DATAHANDLE(x) ((x)->DataHandle)
|
||||
/* Data area reference in corresponding DATA_B3_IND */
|
||||
#define DISCONNECT_B3_REQ_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DISCONNECT_B3_REQ_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define DISCONNECT_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DISCONNECT_B3_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: disconnect initiated */
|
||||
/* 0x0001: NCPI not supported by current protocol, NCPI ignored */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal NCCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
/* 0x3008: NCPI not supported */
|
||||
#define DISCONNECT_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DISCONNECT_B3_IND_REASON_B3(x) ((x)->Reason_B3)
|
||||
/* 0: clearing according to protocol */
|
||||
/* 0x3301: protocol error layer 1 */
|
||||
/* 0x3302: protocol error layer 2 */
|
||||
/* 0x3303: protocol error layer 3 */
|
||||
/* protocol dependent values are described in chapter 6 */
|
||||
#define DISCONNECT_B3_IND_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define DISCONNECT_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define DISCONNECT_REQ_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define DISCONNECT_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
|
||||
/* Additional information elements */
|
||||
#define DISCONNECT_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
|
||||
#define DISCONNECT_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define DISCONNECT_REQ_USERUSERDATA(x) ((x)->Useruserdata)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define DISCONNECT_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
|
||||
/* which is used to transfer additional parameters coded */
|
||||
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
|
||||
/* This field is used to transport one or more complete facility */
|
||||
/* data information elements. */
|
||||
#define DISCONNECT_CONF_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define DISCONNECT_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: disconnect initiated */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal PLCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
#define DISCONNECT_IND_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define DISCONNECT_IND_REASON(x) ((x)->Reason)
|
||||
/* 0: no cause available */
|
||||
/* 0x3301: protocol error layer 1 */
|
||||
/* 0x3302: protocol error layer 2 */
|
||||
/* 0x3303: protocol error layer 3 */
|
||||
/* 0x3304: another application got that call */
|
||||
/* 0x34xx: disconnect cause from the network according to Q.931/ETS 300 102-1. In the field 'xx' the cause value received within a cause information element (octet 4) from the network is indicated. */
|
||||
#define DISCONNECT_RESP_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define FACILITY_REQ_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define FACILITY_REQ_PLCI(x) ((x)->adr.adrPLCI)
|
||||
#define FACILITY_REQ_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Depending on the facility selector */
|
||||
#define FACILITY_REQ_FACILITYSELECTOR(x) ((x)->FacilitySelector)
|
||||
/* 0: Handset Support */
|
||||
/* 1: DTMF */
|
||||
/* 2 to n: reserved */
|
||||
#define FACILITY_REQ_FACILITYREQUESTPARAMETER(x) ((x)->FacilityRequestParameter)
|
||||
/* Facility depending parameters */
|
||||
#define FACILITY_CONF_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define FACILITY_CONF_PLCI(x) ((x)->adr.adrPLCI)
|
||||
#define FACILITY_CONF_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Depending on the facility selector */
|
||||
#define FACILITY_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: request accepted */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: incorrect Controller/PLCI/NCCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
/* 0x300B: facility not supported */
|
||||
#define FACILITY_CONF_FACILITYSELECTOR(x) ((x)->FacilitySelector)
|
||||
/* 0: Handset Support */
|
||||
/* 1: DTMF */
|
||||
/* 2 to n: reserved */
|
||||
#define FACILITY_CONF_FACILITYCONFIRMATIONPARAMETER(x) ((x)->FacilityConfirmationParameter)
|
||||
/* Facility-depending parameters */
|
||||
#define FACILITY_IND_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define FACILITY_IND_PLCI(x) ((x)->adr.adrPLCI)
|
||||
#define FACILITY_IND_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Depending on the facility selector */
|
||||
#define FACILITY_IND_FACILITYSELECTOR(x) ((x)->FacilitySelector)
|
||||
/* 0: Handset Support */
|
||||
/* 1: DTMF */
|
||||
/* 2 to n: reserved */
|
||||
#define FACILITY_IND_FACILITYINDICATIONPARAMETER(x) ((x)->FacilityIndicationParameter)
|
||||
/* Facility-depending parameters */
|
||||
#define FACILITY_RESP_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define FACILITY_RESP_PLCI(x) ((x)->adr.adrPLCI)
|
||||
#define FACILITY_RESP_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Depending on the facility selector */
|
||||
#define FACILITY_RESP_FACILITYSELECTOR(x) ((x)->FacilitySelector)
|
||||
/* 0: Handset Support */
|
||||
/* 1: DTMF */
|
||||
/* 2 to n: reserved */
|
||||
/* Facility response parameters */
|
||||
/* struct */
|
||||
/* Facility-depending parameters */
|
||||
#define INFO_REQ_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define INFO_REQ_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* See note */
|
||||
#define INFO_REQ_CALLEDPARTYNUMBER(x) ((x)->CalledPartyNumber)
|
||||
/* Called party number */
|
||||
#define INFO_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
|
||||
/* Additional information elements */
|
||||
#define INFO_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
|
||||
#define INFO_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define INFO_REQ_USERUSERDATA(x) ((x)->Useruserdata)
|
||||
/* coded according to ETS 300 102-1 / Q.931 */
|
||||
#define INFO_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
|
||||
/* which is used to transfer additional parameters coded */
|
||||
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
|
||||
/* This field is used to transport one or more complete facility */
|
||||
/* data information elements. */
|
||||
#define INFO_CONF_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define INFO_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: transmission of information initiated */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal Controller/PLCI */
|
||||
/* 0x2003: out of PLCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
#define INFO_IND_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define INFO_IND_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define INFO_IND_INFONUMBER(x) ((x)->InfoNumber)
|
||||
/* Information element identifier */
|
||||
#define INFO_IND_INFOELEMENT(x) ((x)->InfoElement)
|
||||
/* Information element dependent structure */
|
||||
#define INFO_RESP_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define INFO_RESP_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* As in INFO_IND */
|
||||
#define LISTEN_REQ_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define LISTEN_REQ_INFOMASK(x) ((x)->InfoMask)
|
||||
/* Bit field, coding as follows: */
|
||||
/* 0: cause */
|
||||
/* 1: date/Time */
|
||||
/* 2: display */
|
||||
/* 3: user-user information */
|
||||
/* 4: call progression */
|
||||
/* 5: facility */
|
||||
/* 6: charging */
|
||||
/* 7 to 31: reserved */
|
||||
#define LISTEN_REQ_CIPMASK(x) ((x)->CIPmask)
|
||||
/* Bit field, coding as follows: */
|
||||
/* 0: any match */
|
||||
/* 1: speech */
|
||||
/* 2: unrestricted digital information */
|
||||
/* 3: restricted digital information */
|
||||
/* 4: 3.1 kHz audio */
|
||||
/* 5: 7.0 kHz audio */
|
||||
/* 6: video */
|
||||
/* 7: packet mode */
|
||||
/* 8: 56 kBit/s rate adaptation */
|
||||
/* 9: unrestricted digital information with tones/announcements */
|
||||
/* 10..15: reserved */
|
||||
/* 16: telephony */
|
||||
/* 17: fax group 2/3 */
|
||||
/* 18: fax group 4 class 1 */
|
||||
/* 19: Teletex service (basic and mixed), fax group 4 class 2 */
|
||||
/* 20: Teletex service (basic and processable) */
|
||||
/* 21: Teletex service (basic) */
|
||||
/* 22: Videotex */
|
||||
/* 23: Telex */
|
||||
/* reserved for additional services */
|
||||
/* 25: OSI applications according X.200 */
|
||||
/* 26: 7 kHz Telephony */
|
||||
/* 27: Video Telephony F.721, first connection */
|
||||
/* 28: Video Telephony F.721, second connection */
|
||||
/* 29 to 31: reserved */
|
||||
#define LISTEN_REQ_CIPMASK2(x) ((x)->CIPmask2)
|
||||
/* reserved for additional services */
|
||||
#define LISTEN_REQ_CALLINGPARTYNUMBER(x) ((x)->CallingPartyNumber)
|
||||
/* Calling party number */
|
||||
#define LISTEN_REQ_CALLINGPARTYSUBADDRESS(x) ((x)->CallingPartySubaddress)
|
||||
/* Calling party subaddress */
|
||||
#define LISTEN_CONF_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define LISTEN_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: listen is active */
|
||||
/* 0x2002: illegal controller */
|
||||
/* 0x2005: out of LISTEN-Resources */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
#define MANUFACTURER_REQ_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define MANUFACTURER_REQ_MANUID(x) ((x)->ManuID)
|
||||
/* Manufacturer specific ID (should be unique) */
|
||||
/* Manufacturer specific */
|
||||
#define MANUFACTURER_REQ_CLASS(x) ((x)->Class)
|
||||
#define MANUFACTURER_REQ_FUNCTION(x) ((x)->Function)
|
||||
#define MANUFACTURER_REQ_MANUDATA(x) ((x)->ManuData)
|
||||
/* Manufacturer specific data */
|
||||
#define MANUFACTURER_CONF_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define MANUFACTURER_CONF_MANUID(x) ((x)->ManuID)
|
||||
/* Manufacturer specific ID (should be unique) */
|
||||
/* Manufacturer specific */
|
||||
#define MANUFACTURER_CONF_CLASS(x) ((x)->Class)
|
||||
#define MANUFACTURER_CONF_FUNCTION(x) ((x)->Function)
|
||||
#define MANUFACTURER_CONF_MANUDATA(x) ((x)->ManuData)
|
||||
/* Manufacturer specific data */
|
||||
#define MANUFACTURER_IND_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define MANUFACTURER_IND_MANUID(x) ((x)->ManuID)
|
||||
/* Manufacturer specific ID (should be unique) */
|
||||
/* Manufacturer specific */
|
||||
#define MANUFACTURER_IND_CLASS(x) ((x)->Class)
|
||||
#define MANUFACTURER_IND_FUNCTION(x) ((x)->Function)
|
||||
#define MANUFACTURER_IND_MANUDATA(x) ((x)->ManuData)
|
||||
/* Manufacturer specific data */
|
||||
#define MANUFACTURER_RESP_CONTROLLER(x) ((x)->adr.adrController)
|
||||
#define MANUFACTURER_RESP_MANUID(x) ((x)->ManuID)
|
||||
/* Manufacturer specific ID (should be unique) */
|
||||
/* Manufacturer specific */
|
||||
#define MANUFACTURER_RESP_CLASS(x) ((x)->Class)
|
||||
#define MANUFACTURER_RESP_FUNCTION(x) ((x)->Function)
|
||||
#define MANUFACTURER_RESP_MANUDATA(x) ((x)->ManuData)
|
||||
/* Manufacturer specific data */
|
||||
#define RESET_B3_REQ_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define RESET_B3_REQ_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define RESET_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define RESET_B3_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: reset initiated */
|
||||
/* 0x0001: NCPI not supported by current protocol, NCPI ignored */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal NCCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
/* 0x3008: NCPI not supported */
|
||||
/* 0x300D: reset procedure not supported by current protocol */
|
||||
#define RESET_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define RESET_B3_IND_NCPI(x) ((x)->NCPI)
|
||||
/* Network Control Protocol Information */
|
||||
#define RESET_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
|
||||
/* Network Control Connection Identifier */
|
||||
#define SELECT_B_PROTOCOL_REQ_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define SELECT_B_PROTOCOL_REQ_BPROTOCOL(x) ((x)->BProtocol)
|
||||
/* Protocol definition */
|
||||
#define SELECT_B_PROTOCOL_REQ_B1PROTOCOL(x) ((x)->B1protocol)
|
||||
/* Physical layer and framing */
|
||||
#define SELECT_B_PROTOCOL_REQ_B2PROTOCOL(x) ((x)->B2protocol)
|
||||
/* Data link layer */
|
||||
#define SELECT_B_PROTOCOL_REQ_B3PROTOCOL(x) ((x)->B3protocol)
|
||||
/* Network layer */
|
||||
#define SELECT_B_PROTOCOL_REQ_B1CONFIGURATION(x) ((x)->B1configuration)
|
||||
/* Physical layer and framing parameter */
|
||||
#define SELECT_B_PROTOCOL_REQ_B2CONFIGURATION(x) ((x)->B2configuration)
|
||||
/* Data link layer parameter */
|
||||
#define SELECT_B_PROTOCOL_REQ_B3CONFIGURATION(x) ((x)->B3configuration)
|
||||
/* Network layer parameter */
|
||||
#define SELECT_B_PROTOCOL_CONF_PLCI(x) ((x)->adr.adrPLCI)
|
||||
/* Physical Link Connection Identifier */
|
||||
#define SELECT_B_PROTOCOL_CONF_INFO(x) ((x)->Info)
|
||||
/* 0: protocol switch successful */
|
||||
/* 0x2001: message not supported in current state */
|
||||
/* 0x2002: illegal PLCI */
|
||||
/* 0x2007: illegal message parameter coding */
|
||||
/* 0x3001: B1 protocol not supported */
|
||||
/* 0x3002: B2 protocol not supported */
|
||||
/* 0x3003: B3 protocol not supported */
|
||||
/* 0x3004: B1 protocol parameter not supported */
|
||||
/* 0x3005: B2 protocol parameter not supported */
|
||||
/* 0x3006: B3 protocol parameter not supported */
|
||||
/* 0x3007: B protocol combination not supported */
|
||||
|
||||
/*----- tests for specific commands -----*/
|
||||
|
||||
#define IS_CONNECT_IND(m) ((m)->Command==0x02 && (m)->Subcommand==0x82)
|
||||
#define IS_CONNECT_ACTIVE_IND(m) ((m)->Command==0x03 && (m)->Subcommand==0x82)
|
||||
#define IS_CONNECT_B3_ACTIVE_IND(m) ((m)->Command==0x83 && (m)->Subcommand==0x82)
|
||||
#define IS_CONNECT_B3_IND(m) ((m)->Command==0x82 && (m)->Subcommand==0x82)
|
||||
#define IS_CONNECT_B3_T90_ACTIVE_IND(m) ((m)->Command==0x88 && (m)->Subcommand==0x82)
|
||||
#define IS_DATA_B3_IND(m) ((m)->Command==0x86 && (m)->Subcommand==0x82)
|
||||
#define IS_DISCONNECT_B3_IND(m) ((m)->Command==0x84 && (m)->Subcommand==0x82)
|
||||
#define IS_DISCONNECT_IND(m) ((m)->Command==0x04 && (m)->Subcommand==0x82)
|
||||
#define IS_FACILITY_IND(m) ((m)->Command==0x80 && (m)->Subcommand==0x82)
|
||||
#define IS_INFO_IND(m) ((m)->Command==0x08 && (m)->Subcommand==0x82)
|
||||
#define IS_MANUFACTURER_IND(m) ((m)->Command==0xff && (m)->Subcommand==0x82)
|
||||
#define IS_RESET_B3_IND(m) ((m)->Command==0x87 && (m)->Subcommand==0x82)
|
||||
#define IS_ALERT_CONF(m) ((m)->Command==0x01 && (m)->Subcommand==0x81)
|
||||
#define IS_CONNECT_CONF(m) ((m)->Command==0x02 && (m)->Subcommand==0x81)
|
||||
#define IS_CONNECT_B3_CONF(m) ((m)->Command==0x82 && (m)->Subcommand==0x81)
|
||||
#define IS_DATA_B3_CONF(m) ((m)->Command==0x86 && (m)->Subcommand==0x81)
|
||||
#define IS_DISCONNECT_B3_CONF(m) ((m)->Command==0x84 && (m)->Subcommand==0x81)
|
||||
#define IS_DISCONNECT_CONF(m) ((m)->Command==0x04 && (m)->Subcommand==0x81)
|
||||
#define IS_FACILITY_CONF(m) ((m)->Command==0x80 && (m)->Subcommand==0x81)
|
||||
#define IS_INFO_CONF(m) ((m)->Command==0x08 && (m)->Subcommand==0x81)
|
||||
#define IS_LISTEN_CONF(m) ((m)->Command==0x05 && (m)->Subcommand==0x81)
|
||||
#define IS_MANUFACTURER_CONF(m) ((m)->Command==0xff && (m)->Subcommand==0x81)
|
||||
#define IS_RESET_B3_CONF(m) ((m)->Command==0x87 && (m)->Subcommand==0x81)
|
||||
#define IS_SELECT_B_PROTOCOL_CONF(m) ((m)->Command==0x41 && (m)->Subcommand==0x81)
|
||||
|
||||
/*----- header functions that fill the _cmsg structure with default -----*/
|
||||
/*----- values. Only nonstandard parameter need to be changed -----*/
|
||||
|
||||
#define ALERT_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x01,0x80,Messagenumber,adr)
|
||||
#define CONNECT_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x02,0x80,Messagenumber,adr)
|
||||
#define CONNECT_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x82,0x80,Messagenumber,adr)
|
||||
#define DATA_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x86,0x80,Messagenumber,adr)
|
||||
#define DISCONNECT_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x84,0x80,Messagenumber,adr)
|
||||
#define DISCONNECT_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x04,0x80,Messagenumber,adr)
|
||||
#define FACILITY_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x80,0x80,Messagenumber,adr)
|
||||
#define INFO_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x08,0x80,Messagenumber,adr)
|
||||
#define LISTEN_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x05,0x80,Messagenumber,adr)
|
||||
#define MANUFACTURER_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0xff,0x80,Messagenumber,adr)
|
||||
#define RESET_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x87,0x80,Messagenumber,adr)
|
||||
#define SELECT_B_PROTOCOL_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x41,0x80,Messagenumber,adr)
|
||||
#define CONNECT_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x02,0x83,Messagenumber,adr)
|
||||
#define CONNECT_ACTIVE_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x03,0x83,Messagenumber,adr)
|
||||
#define CONNECT_B3_ACTIVE_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x83,0x83,Messagenumber,adr)
|
||||
#define CONNECT_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x82,0x83,Messagenumber,adr)
|
||||
#define CONNECT_B3_T90_ACTIVE_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x88,0x83,Messagenumber,adr)
|
||||
#define DATA_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x86,0x83,Messagenumber,adr)
|
||||
#define DISCONNECT_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x84,0x83,Messagenumber,adr)
|
||||
#define DISCONNECT_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x04,0x83,Messagenumber,adr)
|
||||
#define FACILITY_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x80,0x83,Messagenumber,adr)
|
||||
#define INFO_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x08,0x83,Messagenumber,adr)
|
||||
#define MANUFACTURER_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0xff,0x83,Messagenumber,adr)
|
||||
#define RESET_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
|
||||
CAPI_CMSG_HEADER(cmsg,ApplId,0x87,0x83,Messagenumber,adr)
|
||||
|
||||
/*
|
||||
* CAPI-functions that correspond to the CAPI messages specified in the
|
||||
* CAPI 2.0 specification. All possible parameter have to be specified.
|
||||
* The CAPI message is sent immediately when calling these functions,
|
||||
* return values are the same as in capi_put_message()
|
||||
*/
|
||||
|
||||
unsigned ALERT_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cstruct BChannelinformation
|
||||
,_cstruct Keypadfacility
|
||||
,_cstruct Useruserdata
|
||||
,_cstruct Facilitydataarray);
|
||||
unsigned CONNECT_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cword CIPValue
|
||||
,_cstruct CalledPartyNumber
|
||||
,_cstruct CallingPartyNumber
|
||||
,_cstruct CalledPartySubaddress
|
||||
,_cstruct CallingPartySubaddress
|
||||
,_cword B1protocol
|
||||
,_cword B2protocol
|
||||
,_cword B3protocol
|
||||
,_cstruct B1configuration
|
||||
,_cstruct B2configuration
|
||||
,_cstruct B3configuration
|
||||
,_cstruct BC
|
||||
,_cstruct LLC
|
||||
,_cstruct HLC
|
||||
,_cstruct BChannelinformation
|
||||
,_cstruct Keypadfacility
|
||||
,_cstruct Useruserdata
|
||||
,_cstruct Facilitydataarray);
|
||||
unsigned CONNECT_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cstruct NCPI);
|
||||
unsigned DATA_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cdword Data
|
||||
,_cword DataLength
|
||||
,_cword DataHandle
|
||||
,_cword Flags);
|
||||
unsigned DISCONNECT_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cstruct NCPI);
|
||||
unsigned DISCONNECT_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cstruct BChannelinformation
|
||||
,_cstruct Keypadfacility
|
||||
,_cstruct Useruserdata
|
||||
,_cstruct Facilitydataarray);
|
||||
unsigned FACILITY_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cword FacilitySelector
|
||||
,_cstruct FacilityRequestParameter);
|
||||
unsigned INFO_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cstruct CalledPartyNumber
|
||||
,_cstruct BChannelinformation
|
||||
,_cstruct Keypadfacility
|
||||
,_cstruct Useruserdata
|
||||
,_cstruct Facilitydataarray);
|
||||
unsigned LISTEN_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cdword InfoMask
|
||||
,_cdword CIPmask
|
||||
,_cdword CIPmask2
|
||||
,_cstruct CallingPartyNumber
|
||||
,_cstruct CallingPartySubaddress);
|
||||
unsigned MANUFACTURER_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cdword ManuID
|
||||
,_cdword Class
|
||||
,_cdword Function
|
||||
,_cstruct ManuData);
|
||||
unsigned RESET_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cstruct NCPI);
|
||||
unsigned SELECT_B_PROTOCOL_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cword B1protocol
|
||||
,_cword B2protocol
|
||||
,_cword B3protocol
|
||||
,_cstruct B1configuration
|
||||
,_cstruct B2configuration
|
||||
,_cstruct B3configuration);
|
||||
unsigned CONNECT_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cword Reject
|
||||
,_cword B1protocol
|
||||
,_cword B2protocol
|
||||
,_cword B3protocol
|
||||
,_cstruct B1configuration
|
||||
,_cstruct B2configuration
|
||||
,_cstruct B3configuration
|
||||
,_cstruct ConnectedNumber
|
||||
,_cstruct ConnectedSubaddress
|
||||
,_cstruct LLC
|
||||
,_cstruct BChannelinformation
|
||||
,_cstruct Keypadfacility
|
||||
,_cstruct Useruserdata
|
||||
,_cstruct Facilitydataarray);
|
||||
unsigned CONNECT_ACTIVE_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr);
|
||||
unsigned CONNECT_B3_ACTIVE_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr);
|
||||
unsigned CONNECT_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cword Reject
|
||||
,_cstruct NCPI);
|
||||
unsigned CONNECT_B3_T90_ACTIVE_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr);
|
||||
unsigned DATA_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cword DataHandle);
|
||||
unsigned DISCONNECT_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr);
|
||||
unsigned DISCONNECT_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr);
|
||||
unsigned FACILITY_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cword FacilitySelector
|
||||
,_cstruct FacilityResponseParameters);
|
||||
unsigned INFO_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr);
|
||||
unsigned MANUFACTURER_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr
|
||||
,_cdword ManuID
|
||||
,_cdword Class
|
||||
,_cdword Function
|
||||
,_cstruct ManuData);
|
||||
unsigned RESET_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber
|
||||
,_cdword adr);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __CAPI20_H */
|
|
@ -0,0 +1,310 @@
|
|||
/*
|
||||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.1 1998/08/25 16:33:19 calle
|
||||
* Added CAPI2.0 library. First Version.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "capi20.h"
|
||||
|
||||
unsigned ALERT_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cstruct BChannelinformation,
|
||||
_cstruct Keypadfacility,
|
||||
_cstruct Useruserdata,
|
||||
_cstruct Facilitydataarray) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x01,0x80,Messagenumber,adr);
|
||||
cmsg->BChannelinformation = BChannelinformation;
|
||||
cmsg->Keypadfacility = Keypadfacility;
|
||||
cmsg->Useruserdata = Useruserdata;
|
||||
cmsg->Facilitydataarray = Facilitydataarray;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned CONNECT_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cword CIPValue,
|
||||
_cstruct CalledPartyNumber,
|
||||
_cstruct CallingPartyNumber,
|
||||
_cstruct CalledPartySubaddress,
|
||||
_cstruct CallingPartySubaddress,
|
||||
_cword B1protocol,
|
||||
_cword B2protocol,
|
||||
_cword B3protocol,
|
||||
_cstruct B1configuration,
|
||||
_cstruct B2configuration,
|
||||
_cstruct B3configuration,
|
||||
_cstruct BC,
|
||||
_cstruct LLC,
|
||||
_cstruct HLC,
|
||||
_cstruct BChannelinformation,
|
||||
_cstruct Keypadfacility,
|
||||
_cstruct Useruserdata,
|
||||
_cstruct Facilitydataarray) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x02,0x80,Messagenumber,adr);
|
||||
cmsg->CIPValue = CIPValue;
|
||||
cmsg->CalledPartyNumber = CalledPartyNumber;
|
||||
cmsg->CallingPartyNumber = CallingPartyNumber;
|
||||
cmsg->CalledPartySubaddress = CalledPartySubaddress;
|
||||
cmsg->CallingPartySubaddress = CallingPartySubaddress;
|
||||
cmsg->B1protocol = B1protocol;
|
||||
cmsg->B2protocol = B2protocol;
|
||||
cmsg->B3protocol = B3protocol;
|
||||
cmsg->B1configuration = B1configuration;
|
||||
cmsg->B2configuration = B2configuration;
|
||||
cmsg->B3configuration = B3configuration;
|
||||
cmsg->BC = BC;
|
||||
cmsg->LLC = LLC;
|
||||
cmsg->HLC = HLC;
|
||||
cmsg->BChannelinformation = BChannelinformation;
|
||||
cmsg->Keypadfacility = Keypadfacility;
|
||||
cmsg->Useruserdata = Useruserdata;
|
||||
cmsg->Facilitydataarray = Facilitydataarray;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned CONNECT_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cstruct NCPI) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x82,0x80,Messagenumber,adr);
|
||||
cmsg->NCPI = NCPI;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned DATA_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cdword Data,
|
||||
_cword DataLength,
|
||||
_cword DataHandle,
|
||||
_cword Flags) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x86,0x80,Messagenumber,adr);
|
||||
cmsg->Data = Data;
|
||||
cmsg->DataLength = DataLength;
|
||||
cmsg->DataHandle = DataHandle;
|
||||
cmsg->Flags = Flags;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned DISCONNECT_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cstruct NCPI) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x84,0x80,Messagenumber,adr);
|
||||
cmsg->NCPI = NCPI;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned DISCONNECT_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cstruct BChannelinformation,
|
||||
_cstruct Keypadfacility,
|
||||
_cstruct Useruserdata,
|
||||
_cstruct Facilitydataarray) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x04,0x80,Messagenumber,adr);
|
||||
cmsg->BChannelinformation = BChannelinformation;
|
||||
cmsg->Keypadfacility = Keypadfacility;
|
||||
cmsg->Useruserdata = Useruserdata;
|
||||
cmsg->Facilitydataarray = Facilitydataarray;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned FACILITY_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cword FacilitySelector,
|
||||
_cstruct FacilityRequestParameter) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x80,0x80,Messagenumber,adr);
|
||||
cmsg->FacilitySelector = FacilitySelector;
|
||||
cmsg->FacilityRequestParameter = FacilityRequestParameter;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned INFO_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cstruct CalledPartyNumber,
|
||||
_cstruct BChannelinformation,
|
||||
_cstruct Keypadfacility,
|
||||
_cstruct Useruserdata,
|
||||
_cstruct Facilitydataarray) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x08,0x80,Messagenumber,adr);
|
||||
cmsg->CalledPartyNumber = CalledPartyNumber;
|
||||
cmsg->BChannelinformation = BChannelinformation;
|
||||
cmsg->Keypadfacility = Keypadfacility;
|
||||
cmsg->Useruserdata = Useruserdata;
|
||||
cmsg->Facilitydataarray = Facilitydataarray;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned LISTEN_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cdword InfoMask,
|
||||
_cdword CIPmask,
|
||||
_cdword CIPmask2,
|
||||
_cstruct CallingPartyNumber,
|
||||
_cstruct CallingPartySubaddress) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x05,0x80,Messagenumber,adr);
|
||||
cmsg->InfoMask = InfoMask;
|
||||
cmsg->CIPmask = CIPmask;
|
||||
cmsg->CIPmask2 = CIPmask2;
|
||||
cmsg->CallingPartyNumber = CallingPartyNumber;
|
||||
cmsg->CallingPartySubaddress = CallingPartySubaddress;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned MANUFACTURER_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cdword ManuID,
|
||||
_cdword Class,
|
||||
_cdword Function,
|
||||
_cstruct ManuData) {
|
||||
capi_cmsg_header (cmsg,ApplId,0xff,0x80,Messagenumber,adr);
|
||||
cmsg->ManuID = ManuID;
|
||||
cmsg->Class = Class;
|
||||
cmsg->Function = Function;
|
||||
cmsg->ManuData = ManuData;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned RESET_B3_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cstruct NCPI) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x87,0x80,Messagenumber,adr);
|
||||
cmsg->NCPI = NCPI;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned SELECT_B_PROTOCOL_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cword B1protocol,
|
||||
_cword B2protocol,
|
||||
_cword B3protocol,
|
||||
_cstruct B1configuration,
|
||||
_cstruct B2configuration,
|
||||
_cstruct B3configuration) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x41,0x80,Messagenumber,adr);
|
||||
cmsg->B1protocol = B1protocol;
|
||||
cmsg->B2protocol = B2protocol;
|
||||
cmsg->B3protocol = B3protocol;
|
||||
cmsg->B1configuration = B1configuration;
|
||||
cmsg->B2configuration = B2configuration;
|
||||
cmsg->B3configuration = B3configuration;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned CONNECT_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cword Reject,
|
||||
_cword B1protocol,
|
||||
_cword B2protocol,
|
||||
_cword B3protocol,
|
||||
_cstruct B1configuration,
|
||||
_cstruct B2configuration,
|
||||
_cstruct B3configuration,
|
||||
_cstruct ConnectedNumber,
|
||||
_cstruct ConnectedSubaddress,
|
||||
_cstruct LLC,
|
||||
_cstruct BChannelinformation,
|
||||
_cstruct Keypadfacility,
|
||||
_cstruct Useruserdata,
|
||||
_cstruct Facilitydataarray) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x02,0x83,Messagenumber,adr);
|
||||
cmsg->Reject = Reject;
|
||||
cmsg->B1protocol = B1protocol;
|
||||
cmsg->B2protocol = B2protocol;
|
||||
cmsg->B3protocol = B3protocol;
|
||||
cmsg->B1configuration = B1configuration;
|
||||
cmsg->B2configuration = B2configuration;
|
||||
cmsg->B3configuration = B3configuration;
|
||||
cmsg->ConnectedNumber = ConnectedNumber;
|
||||
cmsg->ConnectedSubaddress = ConnectedSubaddress;
|
||||
cmsg->LLC = LLC;
|
||||
cmsg->BChannelinformation = BChannelinformation;
|
||||
cmsg->Keypadfacility = Keypadfacility;
|
||||
cmsg->Useruserdata = Useruserdata;
|
||||
cmsg->Facilitydataarray = Facilitydataarray;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned CONNECT_ACTIVE_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x03,0x83,Messagenumber,adr);
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned CONNECT_B3_ACTIVE_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x83,0x83,Messagenumber,adr);
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned CONNECT_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cword Reject,
|
||||
_cstruct NCPI) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x82,0x83,Messagenumber,adr);
|
||||
cmsg->Reject = Reject;
|
||||
cmsg->NCPI = NCPI;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned CONNECT_B3_T90_ACTIVE_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x88,0x83,Messagenumber,adr);
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned DATA_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cword DataHandle) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x86,0x83,Messagenumber,adr);
|
||||
cmsg->DataHandle = DataHandle;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned DISCONNECT_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x84,0x83,Messagenumber,adr);
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned DISCONNECT_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x04,0x83,Messagenumber,adr);
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned FACILITY_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cword FacilitySelector,
|
||||
_cstruct FacilityResponseParameters) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x80,0x83,Messagenumber,adr);
|
||||
cmsg->FacilitySelector = FacilitySelector;
|
||||
cmsg->FacilityResponseParameters = FacilityResponseParameters;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned INFO_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x08,0x83,Messagenumber,adr);
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned MANUFACTURER_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr,
|
||||
_cdword ManuID,
|
||||
_cdword Class,
|
||||
_cdword Function,
|
||||
_cstruct ManuData) {
|
||||
capi_cmsg_header (cmsg,ApplId,0xff,0x83,Messagenumber,adr);
|
||||
cmsg->ManuID = ManuID;
|
||||
cmsg->Class = Class;
|
||||
cmsg->Function = Function;
|
||||
cmsg->ManuData = ManuData;
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
||||
|
||||
unsigned RESET_B3_RESP (_cmsg *cmsg, _cword ApplId, _cword Messagenumber,
|
||||
_cdword adr) {
|
||||
capi_cmsg_header (cmsg,ApplId,0x87,0x83,Messagenumber,adr);
|
||||
return capi_put_cmsg (cmsg);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,38 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(capi20.c)
|
||||
AC_PREFIX_DEFAULT(/usr)
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
|
||||
I4LCONFDIR=${I4LCONFDIR:-"/etc/isdn"}
|
||||
I4LVERSION=${I4LVERSION:-"?.?"}
|
||||
CONFIG_DATADIR=${CONFIG_DATADIR:-"/usr/lib/isdn"}
|
||||
CONFIG_MANDIR=`eval echo ${CONFIG_MANDIR:-"/usr/man"}`
|
||||
CONFIG_SBINDIR=`eval echo ${CONFIG_SBINDIR:-"/sbin"}`
|
||||
CONFIG_KERNELDIR=`eval echo ${CONFIG_KERNELDIR:-"/usr/src/linux"}`
|
||||
|
||||
dnl Checks for libraries.
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(fcntl.h sys/ioctl.h unistd.h)
|
||||
dnl Check for kernel stuff
|
||||
AC_FIND_KERNEL
|
||||
AC_CHECK_HEADERS($CONFIG_KERNELDIR/include/linux/capi.h $CONFIG_KERNELDIR/include/linux/kernelcapi.h,,
|
||||
AC_MSG_ERROR("Missing $ac_hdr. Kernel source installed?"))
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
|
||||
dnl Checks for library functions.
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AC_CHECK_FUNCS(select)
|
||||
|
||||
AC_SUBST(INSTALL)
|
||||
AC_SUBST(I4LVERSION)
|
||||
AC_SUBST(CONFIG_SBINDIR)
|
||||
AC_SUBST(CONFIG_DATADIR)
|
||||
AC_SUBST(CONFIG_MANDIR)
|
||||
AC_SUBST(CONFIG_KERNELDIR)
|
||||
AC_OUTPUT(Makefile)
|
|
@ -0,0 +1,417 @@
|
|||
/*
|
||||
* $Id$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.1 1998/08/25 16:33:23 calle
|
||||
* Added CAPI2.0 library. First Version.
|
||||
*
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <time.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "capi20.h"
|
||||
|
||||
typedef struct {
|
||||
int typ;
|
||||
unsigned off;
|
||||
} _cdef;
|
||||
|
||||
#define _CBYTE 1
|
||||
#define _CWORD 2
|
||||
#define _CDWORD 3
|
||||
#define _CSTRUCT 4
|
||||
#define _CMSTRUCT 5
|
||||
#define _CEND 6
|
||||
|
||||
static _cdef cdef[] = {
|
||||
/*00*/{_CEND},
|
||||
/*01*/{_CEND},
|
||||
/*02*/{_CEND},
|
||||
/*03*/{_CDWORD, offsetof(_cmsg,adr.adrController) },
|
||||
/*04*/{_CMSTRUCT, offsetof(_cmsg,AdditionalInfo) },
|
||||
/*05*/{_CSTRUCT, offsetof(_cmsg,B1configuration) },
|
||||
/*06*/{_CWORD, offsetof(_cmsg,B1protocol) },
|
||||
/*07*/{_CSTRUCT, offsetof(_cmsg,B2configuration) },
|
||||
/*08*/{_CWORD, offsetof(_cmsg,B2protocol) },
|
||||
/*09*/{_CSTRUCT, offsetof(_cmsg,B3configuration) },
|
||||
/*0a*/{_CWORD, offsetof(_cmsg,B3protocol) },
|
||||
/*0b*/{_CSTRUCT, offsetof(_cmsg,BC) },
|
||||
/*0c*/{_CSTRUCT, offsetof(_cmsg,BChannelinformation) },
|
||||
/*0d*/{_CMSTRUCT, offsetof(_cmsg,BProtocol) },
|
||||
/*0e*/{_CSTRUCT, offsetof(_cmsg,CalledPartyNumber) },
|
||||
/*0f*/{_CSTRUCT, offsetof(_cmsg,CalledPartySubaddress) },
|
||||
/*10*/{_CSTRUCT, offsetof(_cmsg,CallingPartyNumber) },
|
||||
/*11*/{_CSTRUCT, offsetof(_cmsg,CallingPartySubaddress) },
|
||||
/*12*/{_CDWORD, offsetof(_cmsg,CIPmask) },
|
||||
/*13*/{_CDWORD, offsetof(_cmsg,CIPmask2) },
|
||||
/*14*/{_CWORD, offsetof(_cmsg,CIPValue) },
|
||||
/*15*/{_CDWORD, offsetof(_cmsg,Class) },
|
||||
/*16*/{_CSTRUCT, offsetof(_cmsg,ConnectedNumber) },
|
||||
/*17*/{_CSTRUCT, offsetof(_cmsg,ConnectedSubaddress) },
|
||||
/*18*/{_CDWORD, offsetof(_cmsg,Data) },
|
||||
/*19*/{_CWORD, offsetof(_cmsg,DataHandle) },
|
||||
/*1a*/{_CWORD, offsetof(_cmsg,DataLength) },
|
||||
/*1b*/{_CSTRUCT, offsetof(_cmsg,FacilityConfirmationParameter) },
|
||||
/*1c*/{_CSTRUCT, offsetof(_cmsg,Facilitydataarray) },
|
||||
/*1d*/{_CSTRUCT, offsetof(_cmsg,FacilityIndicationParameter) },
|
||||
/*1e*/{_CSTRUCT, offsetof(_cmsg,FacilityRequestParameter) },
|
||||
/*1f*/{_CSTRUCT, offsetof(_cmsg,FacilityResponseParameters) },
|
||||
/*20*/{_CWORD, offsetof(_cmsg,FacilitySelector) },
|
||||
/*21*/{_CWORD, offsetof(_cmsg,Flags) },
|
||||
/*22*/{_CDWORD, offsetof(_cmsg,Function) },
|
||||
/*23*/{_CSTRUCT, offsetof(_cmsg,HLC) },
|
||||
/*24*/{_CWORD, offsetof(_cmsg,Info) },
|
||||
/*25*/{_CSTRUCT, offsetof(_cmsg,InfoElement) },
|
||||
/*26*/{_CDWORD, offsetof(_cmsg,InfoMask) },
|
||||
/*27*/{_CWORD, offsetof(_cmsg,InfoNumber) },
|
||||
/*28*/{_CSTRUCT, offsetof(_cmsg,Keypadfacility) },
|
||||
/*29*/{_CSTRUCT, offsetof(_cmsg,LLC) },
|
||||
/*2a*/{_CSTRUCT, offsetof(_cmsg,ManuData) },
|
||||
/*2b*/{_CDWORD, offsetof(_cmsg,ManuID) },
|
||||
/*2c*/{_CSTRUCT, offsetof(_cmsg,NCPI) },
|
||||
/*2d*/{_CWORD, offsetof(_cmsg,Reason) },
|
||||
/*2e*/{_CWORD, offsetof(_cmsg,Reason_B3) },
|
||||
/*2f*/{_CWORD, offsetof(_cmsg,Reject) },
|
||||
/*30*/{_CSTRUCT, offsetof(_cmsg,Useruserdata) },
|
||||
};
|
||||
|
||||
static unsigned char *cpars[] = {
|
||||
/*00*/ 0,
|
||||
/*01 ALERT_REQ*/
|
||||
(unsigned char*)"\x03\x04\x0c\x28\x30\x1c\x01\x01",
|
||||
/*02 CONNECT_REQ*/
|
||||
(unsigned char*)"\x03\x14\x0e\x10\x0f\x11\x0d\x06\x08\x0a\x05\x07\x09\x01\x0b\x29\x23\x04\x0c\x28\x30\x1c\x01\x01",
|
||||
/*03*/ 0,
|
||||
/*04 DISCONNECT_REQ*/
|
||||
(unsigned char*)"\x03\x04\x0c\x28\x30\x1c\x01\x01",
|
||||
/*05 LISTEN_REQ*/
|
||||
(unsigned char*)"\x03\x26\x12\x13\x10\x11\x01",
|
||||
/*06*/ 0,
|
||||
/*07*/ 0,
|
||||
/*08 INFO_REQ*/
|
||||
(unsigned char*)"\x03\x0e\x04\x0c\x28\x30\x1c\x01\x01",
|
||||
/*09 FACILITY_REQ*/
|
||||
(unsigned char*)"\x03\x20\x1e\x01",
|
||||
/*0a SELECT_B_PROTOCOL_REQ*/
|
||||
(unsigned char*)"\x03\x0d\x06\x08\x0a\x05\x07\x09\x01\x01",
|
||||
/*0b CONNECT_B3_REQ*/
|
||||
(unsigned char*)"\x03\x2c\x01",
|
||||
/*0c*/ 0,
|
||||
/*0d DISCONNECT_B3_REQ*/
|
||||
(unsigned char*)"\x03\x2c\x01",
|
||||
/*0e*/ 0,
|
||||
/*0f DATA_B3_REQ*/
|
||||
(unsigned char*)"\x03\x18\x1a\x19\x21\x01",
|
||||
/*10 RESET_B3_REQ*/
|
||||
(unsigned char*)"\x03\x2c\x01",
|
||||
/*11*/ 0,
|
||||
/*12*/ 0,
|
||||
/*13 ALERT_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*14 CONNECT_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*15*/ 0,
|
||||
/*16 DISCONNECT_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*17 LISTEN_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*18 MANUFACTURER_REQ*/
|
||||
(unsigned char*)"\x03\x2b\x15\x22\x2a\x01",
|
||||
/*19*/ 0,
|
||||
/*1a INFO_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*1b FACILITY_CONF*/
|
||||
(unsigned char*)"\x03\x24\x20\x1b\x01",
|
||||
/*1c SELECT_B_PROTOCOL_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*1d CONNECT_B3_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*1e*/ 0,
|
||||
/*1f DISCONNECT_B3_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*20*/ 0,
|
||||
/*21 DATA_B3_CONF*/
|
||||
(unsigned char*)"\x03\x19\x24\x01",
|
||||
/*22 RESET_B3_CONF*/
|
||||
(unsigned char*)"\x03\x24\x01",
|
||||
/*23*/ 0,
|
||||
/*24*/ 0,
|
||||
/*25*/ 0,
|
||||
/*26 CONNECT_IND*/
|
||||
(unsigned char*)"\x03\x14\x0e\x10\x0f\x11\x0b\x29\x23\x04\x0c\x28\x30\x1c\x01\x01",
|
||||
/*27 CONNECT_ACTIVE_IND*/
|
||||
(unsigned char*)"\x03\x16\x17\x29\x01",
|
||||
/*28 DISCONNECT_IND*/
|
||||
(unsigned char*)"\x03\x2d\x01",
|
||||
/*29*/ 0,
|
||||
/*2a MANUFACTURER_CONF*/
|
||||
(unsigned char*)"\x03\x2b\x15\x22\x2a\x01",
|
||||
/*2b*/ 0,
|
||||
/*2c INFO_IND*/
|
||||
(unsigned char*)"\x03\x27\x25\x01",
|
||||
/*2d FACILITY_IND*/
|
||||
(unsigned char*)"\x03\x20\x1d\x01",
|
||||
/*2e*/ 0,
|
||||
/*2f CONNECT_B3_IND*/
|
||||
(unsigned char*)"\x03\x2c\x01",
|
||||
/*30 CONNECT_B3_ACTIVE_IND*/
|
||||
(unsigned char*)"\x03\x2c\x01",
|
||||
/*31 DISCONNECT_B3_IND*/
|
||||
(unsigned char*)"\x03\x2e\x2c\x01",
|
||||
/*32*/ 0,
|
||||
/*33 DATA_B3_IND*/
|
||||
(unsigned char*)"\x03\x18\x1a\x19\x21\x01",
|
||||
/*34 RESET_B3_IND*/
|
||||
(unsigned char*)"\x03\x2c\x01",
|
||||
/*35 CONNECT_B3_T90_ACTIVE_IND*/
|
||||
(unsigned char*)"\x03\x2c\x01",
|
||||
/*36*/ 0,
|
||||
/*37*/ 0,
|
||||
/*38 CONNECT_RESP*/
|
||||
(unsigned char*)"\x03\x2f\x0d\x06\x08\x0a\x05\x07\x09\x01\x16\x17\x29\x04\x0c\x28\x30\x1c\x01\x01",
|
||||
/*39 CONNECT_ACTIVE_RESP*/
|
||||
(unsigned char*)"\x03\x01",
|
||||
/*3a DISCONNECT_RESP*/
|
||||
(unsigned char*)"\x03\x01",
|
||||
/*3b*/ 0,
|
||||
/*3c MANUFACTURER_IND*/
|
||||
(unsigned char*)"\x03\x2b\x15\x22\x2a\x01",
|
||||
/*3d*/ 0,
|
||||
/*3e INFO_RESP*/
|
||||
(unsigned char*)"\x03\x01",
|
||||
/*3f FACILITY_RESP*/
|
||||
(unsigned char*)"\x03\x20\x1f\x01",
|
||||
/*40*/ 0,
|
||||
/*41 CONNECT_B3_RESP*/
|
||||
(unsigned char*)"\x03\x2f\x2c\x01",
|
||||
/*42 CONNECT_B3_ACTIVE_RESP*/
|
||||
(unsigned char*)"\x03\x01",
|
||||
/*43 DISCONNECT_B3_RESP*/
|
||||
(unsigned char*)"\x03\x01",
|
||||
/*44*/ 0,
|
||||
/*45 DATA_B3_RESP*/
|
||||
(unsigned char*)"\x03\x19\x01",
|
||||
/*46 RESET_B3_RESP*/
|
||||
(unsigned char*)"\x03\x01",
|
||||
/*47 CONNECT_B3_T90_ACTIVE_RESP*/
|
||||
(unsigned char*)"\x03\x01",
|
||||
/*48*/ 0,
|
||||
/*49*/ 0,
|
||||
/*4a*/ 0,
|
||||
/*4b*/ 0,
|
||||
/*4c*/ 0,
|
||||
/*4d*/ 0,
|
||||
/*4e MANUFACTURER_RESP*/
|
||||
(unsigned char*)"\x03\x2b\x15\x22\x2a\x01",
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
|
||||
#define byteTLcpy(x,y) *(_cbyte *)(x)=*(_cbyte *)(y);
|
||||
#define wordTLcpy(x,y) *(_cword *)(x)=*(_cword *)(y);
|
||||
#define dwordTLcpy(x,y) memcpy(x,y,4);
|
||||
#define structTLcpy(x,y,l) memcpy (x,y,l)
|
||||
#define structTLcpyovl(x,y,l) memmove (x,y,l)
|
||||
|
||||
#define byteTRcpy(x,y) *(_cbyte *)(y)=*(_cbyte *)(x);
|
||||
#define wordTRcpy(x,y) *(_cword *)(y)=*(_cword *)(x);
|
||||
#define dwordTRcpy(x,y) memcpy(y,x,4);
|
||||
#define structTRcpy(x,y,l) memcpy (y,x,l)
|
||||
#define structTRcpyovl(x,y,l) memmove (y,x,l)
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
static unsigned command_2_index (unsigned c, unsigned sc) {
|
||||
if (c & 0x80) c = 0x9+(c&0x0f);
|
||||
else if (c<=0x0f) ;
|
||||
else if (c==0x41) c = 0x9+0x1;
|
||||
else if (c==0xff) c = 0x00;
|
||||
return (sc&3)*(0x9+0x9)+c;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
#define TYP (cdef[cmsg->par[cmsg->p]].typ)
|
||||
#define OFF (((char *)cmsg)+cdef[cmsg->par[cmsg->p]].off)
|
||||
|
||||
static void jumpcstruct (_cmsg *cmsg) {
|
||||
unsigned layer;
|
||||
for (cmsg->p++,layer=1; layer;) {
|
||||
assert (cmsg->p);
|
||||
cmsg->p++;
|
||||
switch (TYP) {
|
||||
case _CMSTRUCT:
|
||||
layer++;
|
||||
break;
|
||||
case _CEND:
|
||||
layer--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-------------------------------------------------------*/
|
||||
static void PARS_2_MESSAGE (_cmsg *cmsg) {
|
||||
|
||||
for (;TYP != _CEND; cmsg->p++) {
|
||||
switch (TYP) {
|
||||
case _CBYTE:
|
||||
byteTLcpy (cmsg->m+cmsg->l, OFF);
|
||||
cmsg->l++;
|
||||
break;
|
||||
case _CWORD:
|
||||
wordTLcpy (cmsg->m+cmsg->l, OFF);
|
||||
cmsg->l+=2;
|
||||
break;
|
||||
case _CDWORD:
|
||||
dwordTLcpy (cmsg->m+cmsg->l, OFF);
|
||||
cmsg->l+=4;
|
||||
break;
|
||||
case _CSTRUCT:
|
||||
if (*(CAPI_MESSAGE *) OFF == 0) {
|
||||
*(cmsg->m+cmsg->l)='\0';
|
||||
cmsg->l++;
|
||||
}
|
||||
else if(**(_cstruct*)OFF != 0xff) {
|
||||
structTLcpy (cmsg->m+cmsg->l, *(_cstruct*)OFF, 1+**(_cstruct*)OFF);
|
||||
cmsg->l+=1+**(_cstruct*)OFF;
|
||||
}
|
||||
else {
|
||||
_cstruct s = *(_cstruct*)OFF;
|
||||
structTLcpy (cmsg->m+cmsg->l, s, 3+*(_cword*)(s+1));
|
||||
cmsg->l+= 3+*(_cword*)(s+1);
|
||||
}
|
||||
break;
|
||||
case _CMSTRUCT:
|
||||
/*----- Metastruktur 0 -----*/
|
||||
if (*(_cmstruct*)OFF == CAPI_DEFAULT) {
|
||||
*(cmsg->m+cmsg->l)='\0';
|
||||
cmsg->l++;
|
||||
jumpcstruct (cmsg);
|
||||
}
|
||||
/*----- Metastruktur wird composed -----*/
|
||||
else {
|
||||
unsigned _l = cmsg->l;
|
||||
unsigned _ls;
|
||||
cmsg->l++;
|
||||
cmsg->p++;
|
||||
PARS_2_MESSAGE (cmsg);
|
||||
_ls = cmsg->l-_l-1;
|
||||
if (_ls < 255)
|
||||
(cmsg->m+_l)[0] = (_cbyte)_ls;
|
||||
else {
|
||||
structTLcpyovl (cmsg->m+_l+3, cmsg->m+_l+1, _ls);
|
||||
(cmsg->m+_l)[0] = 0xff;
|
||||
wordTLcpy (cmsg->m+_l+1, &_ls);
|
||||
cmsg->l+=2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
unsigned capi_cmsg2message (_cmsg *cmsg, CAPI_MESSAGE msg)
|
||||
{
|
||||
cmsg->m = msg;
|
||||
cmsg->l = 8;
|
||||
cmsg->p = 0;
|
||||
cmsg->par = cpars [command_2_index (cmsg->Command,cmsg->Subcommand)];
|
||||
|
||||
PARS_2_MESSAGE (cmsg);
|
||||
|
||||
wordTLcpy (msg+0, &cmsg->l);
|
||||
byteTLcpy (cmsg->m+4, &cmsg->Command);
|
||||
byteTLcpy (cmsg->m+5, &cmsg->Subcommand);
|
||||
wordTLcpy (cmsg->m+2, &cmsg->ApplId);
|
||||
wordTLcpy (cmsg->m+6, &cmsg->Messagenumber);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
static void MESSAGE_2_PARS (_cmsg *cmsg) {
|
||||
for (;TYP != _CEND; cmsg->p++) {
|
||||
|
||||
switch (TYP) {
|
||||
case _CBYTE:
|
||||
byteTRcpy (cmsg->m+cmsg->l, OFF);
|
||||
cmsg->l++;
|
||||
break;
|
||||
case _CWORD:
|
||||
wordTRcpy (cmsg->m+cmsg->l, OFF);
|
||||
cmsg->l+=2;
|
||||
break;
|
||||
case _CDWORD:
|
||||
dwordTRcpy (cmsg->m+cmsg->l, OFF);
|
||||
cmsg->l+=4;
|
||||
break;
|
||||
case _CSTRUCT:
|
||||
*(CAPI_MESSAGE *)OFF = cmsg->m+cmsg->l;
|
||||
|
||||
if (cmsg->m[cmsg->l] != 0xff)
|
||||
cmsg->l+= 1+ cmsg->m[cmsg->l];
|
||||
else
|
||||
cmsg->l+= 3+ *(_cword *)(cmsg->m+cmsg->l+1);
|
||||
break;
|
||||
case _CMSTRUCT:
|
||||
/*----- Metastruktur 0 -----*/
|
||||
if (cmsg->m[cmsg->l] == '\0') {
|
||||
*(_cmstruct*)OFF = CAPI_DEFAULT;
|
||||
cmsg->l++;
|
||||
jumpcstruct (cmsg);
|
||||
}
|
||||
else {
|
||||
unsigned _l = cmsg->l;
|
||||
*(_cmstruct*)OFF = CAPI_COMPOSE;
|
||||
cmsg->l = (cmsg->m+_l)[0] == 255 ? cmsg->l+3 : cmsg->l+1;
|
||||
cmsg->p++;
|
||||
MESSAGE_2_PARS (cmsg);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
unsigned capi_message2cmsg (_cmsg *cmsg, CAPI_MESSAGE msg)
|
||||
{
|
||||
memset (cmsg, 0, sizeof(_cmsg));
|
||||
cmsg->m = msg;
|
||||
cmsg->l = 8;
|
||||
cmsg->p = 0;
|
||||
byteTRcpy (cmsg->m+4, &cmsg->Command);
|
||||
byteTRcpy (cmsg->m+5, &cmsg->Subcommand);
|
||||
cmsg->par = cpars [command_2_index (cmsg->Command,cmsg->Subcommand)];
|
||||
|
||||
MESSAGE_2_PARS (cmsg);
|
||||
|
||||
wordTRcpy (msg+0, &cmsg->l);
|
||||
wordTRcpy (cmsg->m+2, &cmsg->ApplId);
|
||||
wordTRcpy (cmsg->m+6, &cmsg->Messagenumber);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
unsigned capi_cmsg_answer (_cmsg *cmsg)
|
||||
{
|
||||
cmsg->Subcommand |= 0x01;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
unsigned capi_cmsg_header (_cmsg *cmsg, _cword _ApplId,
|
||||
_cbyte _Command, _cbyte _Subcommand,
|
||||
_cword _Messagenumber, _cdword _Controller) {
|
||||
memset (cmsg, 0, sizeof(_cmsg));
|
||||
cmsg->ApplId = _ApplId ;
|
||||
cmsg->Command = _Command ;
|
||||
cmsg->Subcommand = _Subcommand ;
|
||||
cmsg->Messagenumber = _Messagenumber;
|
||||
cmsg->adr.adrController = _Controller ;
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
exit 0
|
Loading…
Reference in New Issue