Compare commits
133 Commits
v2.9.2-rc1
...
master
Author | SHA1 | Date |
---|---|---|
Harald Welte | 7160050851 | |
Harald Welte | 8b1300c64f | |
Harald Welte | 25db1de549 | |
Tzafrir Cohen | 99e1eb3931 | |
Tzafrir Cohen | b4d232a16b | |
Tzafrir Cohen | 55cd742b33 | |
Tzafrir Cohen | 980780d920 | |
Tzafrir Cohen | 5cf4228733 | |
Tzafrir Cohen | 2522272bb0 | |
Tzafrir Cohen | b32b05b65c | |
Tzafrir Cohen | e97af70c68 | |
Tzafrir Cohen | b5f85ef682 | |
Tzafrir Cohen | e89188c691 | |
Tzafrir Cohen | c47c863de8 | |
Tzafrir Cohen | 3b4ebbb6f2 | |
Tzafrir Cohen | 950ac20608 | |
Tzafrir Cohen | b87cbc284f | |
Tzafrir Cohen | 845b5cad9d | |
Tzafrir Cohen | 7d85dfbec2 | |
Tzafrir Cohen | 78754c91e2 | |
Tzafrir Cohen | a018543a58 | |
Tzafrir Cohen | 01c96f1dbe | |
Tzafrir Cohen | 12a607fe15 | |
Tzafrir Cohen | cd6136cec1 | |
Tzafrir Cohen | 49fd3ad883 | |
Tzafrir Cohen | b262662bf4 | |
Tzafrir Cohen | 3a3f5811fd | |
Tzafrir Cohen | 5f8a26faed | |
Tzafrir Cohen | 7d1b43d757 | |
Bernhard Schmidt | e91aa93bfb | |
Tzafrir Cohen | 9882223b59 | |
Tzafrir Cohen | e8300f5f29 | |
Tzafrir Cohen | 30a76fb778 | |
Tzafrir Cohen | 0a75720af7 | |
Tzafrir Cohen | 040980e53f | |
Tzafrir Cohen | cdefb75ff6 | |
Tzafrir Cohen | 8d6fda37df | |
Tzafrir Cohen | c26ed816ec | |
Tzafrir Cohen | bbc4932178 | |
Tzafrir Cohen | 256de21b96 | |
Tzafrir Cohen | 456ee492d8 | |
Tzafrir Cohen | 6fedac79bf | |
Tzafrir Cohen | 429b411e26 | |
Tzafrir Cohen | af067a3de7 | |
Tzafrir Cohen | 6f8f532d5a | |
Tzafrir Cohen | fe918dcc3e | |
Tzafrir Cohen | c371dfa38e | |
Tzafrir Cohen | 015484237d | |
Tzafrir Cohen | 955a8dcb4a | |
Tzafrir Cohen | b2d27998c4 | |
Tzafrir Cohen | bbffe6b910 | |
Tzafrir Cohen | 08e710ef27 | |
Tzafrir Cohen | d36171a88f | |
Tzafrir Cohen | 0465400ea8 | |
Oron Peled | 99e3c572d1 | |
Tzafrir Cohen | 6057ef25e9 | |
Oron Peled | e1da7b5284 | |
Tzafrir Cohen | f105a09eda | |
Oron Peled | 212b247e68 | |
Oron Peled | f225a5692c | |
Tzafrir Cohen | cffc5158cc | |
Oron Peled | 42850dba35 | |
Oron Peled | 06ae8473d7 | |
Oron Peled | dbb5ba6db6 | |
Oron Peled | 2097f1adc5 | |
Oron Peled | d02361e99f | |
Oron Peled | 77a3d8b0a7 | |
Oron Peled | bd49fc9d95 | |
Oron Peled | 0e6b068e89 | |
Oron Peled | 9c61e40187 | |
Oron Peled | 5ee15a2337 | |
Oron Peled | 01faf597d6 | |
Tzafrir Cohen | 48b25e849f | |
Tzafrir Cohen | d239b8dc4d | |
Tzafrir Cohen | 4676ad6671 | |
Tzafrir Cohen | b471526700 | |
Russ Meyerriecks | 855772135c | |
Oron Peled | ec1ebffa89 | |
Tzafrir Cohen | 9afcde3f1e | |
Russ Meyerriecks | 9a181ccfbc | |
Tzafrir Cohen | 10c1cd196e | |
Tzafrir Cohen | 65ba28fe4a | |
Oron Peled | 66e2c3ba11 | |
Oron Peled | 94ca4a1bb4 | |
Oron Peled | af920cd079 | |
Tzafrir Cohen | b375bb80b8 | |
Oron Peled | 0090086bce | |
Oron Peled | f21b592f68 | |
Oron Peled | d63812bd73 | |
Oron Peled | bf9500ab32 | |
Oron Peled | 703db3bcc3 | |
Oron Peled | b5b32a438f | |
Oron Peled | 4cc7df1089 | |
Oron Peled | ac6f437317 | |
Oron Peled | b054abb7e9 | |
Oron Peled | ee83afa669 | |
Oron Peled | 5ac7fef4b2 | |
Oron Peled | 6df9a492a0 | |
Oron Peled | fc620819b6 | |
Oron Peled | 723b3ce87f | |
Oron Peled | 5fd1ce5ca0 | |
Oron Peled | 41532ca8a1 | |
Oron Peled | fbb6c1a17e | |
Oron Peled | 131d694054 | |
Oron Peled | 010c4d836c | |
Oron Peled | 025b9a5593 | |
Oron Peled | c863d1d2c2 | |
Tzafrir Cohen | 77730a9059 | |
Tzafrir Cohen | 3f55dd78de | |
Tzafrir Cohen | 283f01bd67 | |
Oron Peled | 631d32680f | |
Oron Peled | 44fe560f3b | |
Oron Peled | 1a78b71fac | |
Oron Peled | f11b937659 | |
Oron Peled | cd6083b6ce | |
Oron Peled | 0eb77e626e | |
Oron Peled | 2e1c15baa3 | |
Russ Meyerriecks | 094bb2c1e8 | |
Oron Peled | 9aee76a3a5 | |
Tzafrir Cohen | d4537e46ce | |
Tzafrir Cohen | 60401c5f49 | |
Armen Karlozian | a109763160 | |
Shaun Ruffell | 6c40704fec | |
Russ Meyerriecks | 95e9dd71d8 | |
Russ Meyerriecks | df47721962 | |
Russ Meyerriecks | 4e14561508 | |
Shaun Ruffell | 49361e5ce7 | |
Shaun Ruffell | 8045f7f493 | |
Tzafrir Cohen | 64e7c688d3 | |
Oron Peled | b28ec382bb | |
Oron Peled | 412c3f0fe3 | |
Oron Peled | fc459c374c | |
Oron Peled | ca09f327ed |
|
@ -1,15 +1,36 @@
|
|||
*~
|
||||
*.o
|
||||
*.lo
|
||||
*.a
|
||||
*.so
|
||||
*.la
|
||||
.*.o.d
|
||||
.*.lo.d
|
||||
*.asciidoc
|
||||
*.html
|
||||
.deps
|
||||
.libs
|
||||
.dirstamp
|
||||
.version
|
||||
/.pc
|
||||
Makefile
|
||||
Makefile.in
|
||||
auxdir/
|
||||
build_tools/menuselect-deps
|
||||
aclocal.m4
|
||||
autom4te.cache/
|
||||
autoconfig.h
|
||||
autoconfig.h.in
|
||||
config.log
|
||||
config.status
|
||||
config.guess
|
||||
config.ignore
|
||||
configure
|
||||
dahdi_cfg
|
||||
dahdi_diag
|
||||
dahdi_maint
|
||||
dahdi_monitor
|
||||
dahdi_pcap
|
||||
dahdi_scan
|
||||
dahdi_speed
|
||||
dahdi_test
|
||||
|
@ -21,17 +42,19 @@ hdlcgen
|
|||
hdlcstress
|
||||
hdlctest
|
||||
hdlcverify
|
||||
libtonezone.a
|
||||
libtonezone.so
|
||||
libtool
|
||||
m4/
|
||||
makeopts
|
||||
patgen
|
||||
patlooptest
|
||||
pattest
|
||||
sethdlc
|
||||
stamp-h1
|
||||
timertest
|
||||
tonezone.lo
|
||||
tonezones.txt
|
||||
version.c
|
||||
xpp/*.check
|
||||
xpp/.depend
|
||||
xpp/.octasic.depend
|
||||
xpp/.perlcheck
|
||||
|
@ -47,4 +70,10 @@ xpp/test_parse
|
|||
xpp/twinstar.8
|
||||
xpp/xpp_blink.8
|
||||
xpp/xpp_sync.8
|
||||
xpp/xtalk/xlist_test
|
||||
xpp/xtalk/xtalk_raw_test
|
||||
xpp/xtalk/xtalk_send
|
||||
xpp/xtalk/xtalk_test
|
||||
xpp/xtalk/xusb_test
|
||||
xpp/xtalk/xusb_test_bypath
|
||||
zonedata.lo
|
||||
|
|
390
Makefile
390
Makefile
|
@ -1,390 +0,0 @@
|
|||
#
|
||||
# Makefile for DAHDI tools
|
||||
#
|
||||
# Copyright (C) 2001-2010 Digium, Inc.
|
||||
#
|
||||
#
|
||||
|
||||
ifeq ($(strip $(foreach var,clean distclean dist-clean update,$(findstring $(var),$(MAKECMDGOALS)))),)
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(foreach var,clean distclean dist-clean update,$(findstring $(var),$(MAKECMDGOALS)))),)
|
||||
ifneq ($(wildcard makeopts),)
|
||||
include makeopts
|
||||
endif
|
||||
endif
|
||||
|
||||
SUBDIRS_UTILS_ALL:= ppp
|
||||
SUBDIRS_UTILS := xpp
|
||||
|
||||
OPTFLAGS=-O2
|
||||
CFLAGS+=-I. $(OPTFLAGS) -g -fPIC -Wall -DBUILDING_TONEZONE #-DTONEZONE_DRIVER
|
||||
ifneq (,$(findstring ppc,$(UNAME_M)))
|
||||
CFLAGS+=-fsigned-char
|
||||
endif
|
||||
ifneq (,$(findstring x86_64,$(UNAME_M)))
|
||||
CFLAGS+=-m64
|
||||
endif
|
||||
|
||||
ifeq ($(DAHDI_DEVMODE),yes)
|
||||
CFLAGS+=-Werror -Wunused -Wundef $(DAHDI_DECLARATION_AFTER_STATEMENT) -Wmissing-format-attribute -Wformat-security #-Wformat=2
|
||||
endif
|
||||
|
||||
ROOT_PREFIX=
|
||||
|
||||
# extra cflags to build dependencies. Recursively expanded.
|
||||
MAKE_DEPS= -MD -MT $@ -MF .$(subst /,_,$@).d -MP
|
||||
|
||||
CFLAGS+=$(DAHDI_INCLUDE)
|
||||
|
||||
CHKCONFIG := $(wildcard /sbin/chkconfig)
|
||||
UPDATE_RCD := $(wildcard /usr/sbin/update-rc.d)
|
||||
ifeq (,$(DESTDIR))
|
||||
ifneq (,$(CHKCONFIG))
|
||||
ADD_INITD := $(CHKCONFIG) --add dahdi
|
||||
else
|
||||
ifneq (,$(UPDATE_RCD))
|
||||
ADD_INITD := $(UPDATE_RCD) dahdi defaults 15 30
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
INITRD_DIR := $(firstword $(wildcard $(DESTDIR)/etc/rc.d/init.d $(DESTDIR)/etc/init.d))
|
||||
ifneq (,$(INITRD_DIR))
|
||||
INIT_TARGET := $(INITRD_DIR)/dahdi
|
||||
COPY_INITD := install -D dahdi.init $(INIT_TARGET)
|
||||
endif
|
||||
|
||||
RCCONF_FILE = /etc/dahdi/init.conf
|
||||
MODULES_FILE = /etc/dahdi/modules
|
||||
GENCONF_FILE = /etc/dahdi/genconf_parameters
|
||||
MODPROBE_FILE = /etc/modprobe.d/dahdi.conf
|
||||
BLACKLIST_FILE = /etc/modprobe.d/dahdi.blacklist.conf
|
||||
BASH_COMP_DIR = /etc/bash_completion.d
|
||||
BASH_COMP_FILE = $(BASH_COMP_DIR)/dahdi
|
||||
|
||||
NETSCR_DIR := $(firstword $(wildcard $(DESTDIR)/etc/sysconfig/network-scripts ))
|
||||
ifneq (,$(NETSCR_DIR))
|
||||
NETSCR_TARGET := $(NETSCR_DIR)/ifup-hdlc
|
||||
COPY_NETSCR := install -D ifup-hdlc $(NETSCR_TARGET)
|
||||
endif
|
||||
|
||||
TOOLSVERSION=$(shell build_tools/make_version . dahdi/tools)
|
||||
|
||||
LTZ_A:=libtonezone.a
|
||||
LTZ_A_OBJS:=zonedata.o tonezone.o version.o
|
||||
LTZ_SO:=libtonezone.so
|
||||
LTZ_SO_OBJS:=zonedata.lo tonezone.lo version.o
|
||||
LTZ_SO_MAJOR_VER:=2
|
||||
LTZ_SO_MINOR_VER:=0
|
||||
|
||||
# sbindir, libdir, includedir and mandir are defined in makeopts
|
||||
# (from configure).
|
||||
BIN_DIR:=$(sbindir)
|
||||
LIB_DIR:=$(libdir)
|
||||
INC_DIR:=$(includedir)/dahdi
|
||||
MAN_DIR:=$(mandir)/man8
|
||||
DATA_DIR:=${datadir}/dahdi
|
||||
CONFIG_DIR:=$(sysconfdir)/dahdi
|
||||
CONFIG_FILE:=$(CONFIG_DIR)/system.conf
|
||||
UDEVRULES_DIR:=$(sysconfdir)/udev/rules.d
|
||||
|
||||
# Utilities we build with a standard build procedure:
|
||||
UTILS = dahdi_tool dahdi_test dahdi_monitor dahdi_speed sethdlc dahdi_cfg \
|
||||
fxstest fxotune dahdi_diag dahdi_scan
|
||||
|
||||
# some tests:
|
||||
UTILS += patgen pattest patlooptest hdlcstress hdlctest hdlcgen \
|
||||
hdlcverify timertest dahdi_maint
|
||||
|
||||
|
||||
BINS:=fxotune dahdi_cfg dahdi_monitor dahdi_speed dahdi_test dahdi_scan dahdi_maint
|
||||
ifeq (1,$(PBX_NEWT))
|
||||
BINS += dahdi_tool
|
||||
endif
|
||||
ifeq (1,$(PBX_HDLC))
|
||||
BINS += sethdlc
|
||||
endif
|
||||
ASSIGNED_DATA_SCRIPTS:=\
|
||||
dahdi_handle_device \
|
||||
dahdi_span_config \
|
||||
dahdi_auto_assign_compat \
|
||||
span_config.d/10-dahdi-cfg \
|
||||
span_config.d/20-fxotune \
|
||||
span_config.d/50-asterisk \
|
||||
handle_device.d/10-span-types \
|
||||
handle_device.d/20-span-assignments
|
||||
|
||||
ASSIGNED_UTILS:=dahdi_span_assignments dahdi_span_types \
|
||||
dahdi_waitfor_span_assignments
|
||||
ASSIGNED_CONF:=assigned-spans.conf.sample span-types.conf.sample
|
||||
|
||||
MAN_PAGES:= \
|
||||
$(wildcard $(BINS:%=doc/%.8)) \
|
||||
$(wildcard $(ASSIGNED_UTILS:%=doc/%.8))
|
||||
|
||||
TEST_BINS:=patgen pattest patlooptest hdlcstress hdlctest hdlcgen hdlcverify timertest dahdi_maint
|
||||
# All the man pages. Not just installed ones:
|
||||
GROFF_PAGES := $(wildcard doc/*.8 xpp/*.8)
|
||||
GROFF_HTML := $(GROFF_PAGES:%=%.html)
|
||||
|
||||
GENERATED_DOCS := $(GROFF_HTML) README.html README.Astribank.html
|
||||
|
||||
all: prereq programs
|
||||
|
||||
libs: $(LTZ_SO) $(LTZ_A)
|
||||
|
||||
utils-subdirs:
|
||||
@for dir in $(SUBDIRS_UTILS); do \
|
||||
$(MAKE) -C $$dir; \
|
||||
done
|
||||
|
||||
programs: libs utils
|
||||
|
||||
utils: $(BINS) utils-subdirs
|
||||
|
||||
version.c: FORCE
|
||||
@TOOLSVERSION="${TOOLSVERSION}" build_tools/make_version_c > $@.tmp
|
||||
@if cmp -s $@.tmp $@ ; then :; else \
|
||||
mv $@.tmp $@ ; \
|
||||
fi
|
||||
@rm -f $@.tmp
|
||||
|
||||
tests: $(TEST_BINS)
|
||||
|
||||
$(UTILS): %: %.o
|
||||
|
||||
$(UTILS): version.o
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) $(MAKE_DEPS) -c -o $@ $<
|
||||
|
||||
%.lo: %.c
|
||||
$(CC) $(CFLAGS) $(MAKE_DEPS) -c -o $@ $<
|
||||
|
||||
%: %.o
|
||||
$(CC) $(LDFLAGS) $^ $(LIBS) -o $@
|
||||
|
||||
prereq: config.status
|
||||
|
||||
dahdi_tool: CFLAGS+=$(NEWT_INCLUDE)
|
||||
dahdi_tool: LIBS+=$(NEWT_LIB)
|
||||
|
||||
dahdi_speed: CFLAGS+=-O0
|
||||
|
||||
$(LTZ_A): $(LTZ_A_OBJS)
|
||||
ar rcs $@ $^
|
||||
ranlib $@
|
||||
|
||||
$(LTZ_SO): $(LTZ_SO_OBJS)
|
||||
$(CC) $(CFLAGS) -shared -Wl,-soname,$(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) -o $@ $^ -lm
|
||||
|
||||
dahdi_cfg: $(LTZ_A)
|
||||
dahdi_cfg: LIBS+=-lm -lpthread
|
||||
dahdi_pcap:
|
||||
$(CC) $(CFLAGS) dahdi_pcap.c -lpcap -o $@ $<
|
||||
|
||||
|
||||
fxstest: $(LTZ_SO)
|
||||
fxstest: LIBS+=-lm
|
||||
fxotune: LIBS+=-lm
|
||||
|
||||
tonezones.txt: zonedata.c
|
||||
perl -ne 'next unless (/\.(country|description) = *"([^"]*)/); \
|
||||
print (($$1 eq "country")? "* $$2\t":"$$2\n");' $< \
|
||||
>$@
|
||||
|
||||
%.asciidoc: %.sample
|
||||
perl -n -e \
|
||||
'if (/^#($$|\s)(.*)/){ if (!$$in_doc){print "\n"}; $$in_doc=1; print "$$2\n" } else { if ($$in_doc){print "\n"}; $$in_doc=0; print " $$_" }' \
|
||||
$< \
|
||||
| perl -p -e 'if (/^ #?(\w+)=/ && ! exists $$cfgs{$$1}){my $$cfg = $$1; $$cfgs{$$cfg} = 1; s/^/\n[[cfg_$$cfg]]\n/}' >$@
|
||||
|
||||
docs: $(GENERATED_DOCS)
|
||||
|
||||
genconf_parameters.sample: xpp/genconf_parameters
|
||||
cp $< $@
|
||||
|
||||
README.html: README system.conf.asciidoc init.conf.asciidoc tonezones.txt \
|
||||
UPGRADE.txt genconf_parameters.asciidoc assigned-spans.conf.asciidoc \
|
||||
span-types.conf.asciidoc
|
||||
$(ASCIIDOC) -n -a toc -a toclevels=4 $<
|
||||
|
||||
README.Astribank.html: xpp/README.Astribank
|
||||
$(ASCIIDOC) -o $@ -n -a toc -a toclevels=4 $<
|
||||
|
||||
# on Debian: this requires the full groof, not just groff-base.
|
||||
%.8.html: %.8
|
||||
man -Thtml $^ >$@
|
||||
|
||||
htmlman: $(GROFF_HTML)
|
||||
|
||||
install: all install-programs
|
||||
@echo "###################################################"
|
||||
@echo "###"
|
||||
@echo "### DAHDI tools installed successfully."
|
||||
@echo "### If you have not done so before, install init scripts with:"
|
||||
@echo "###"
|
||||
@echo "### make config"
|
||||
@echo "###"
|
||||
@echo "###################################################"
|
||||
|
||||
install-programs: install-utils install-libs
|
||||
|
||||
install-utils: utils install-utils-subdirs
|
||||
ifneq (,$(BINS))
|
||||
install -d $(DESTDIR)$(BIN_DIR)
|
||||
install $(BINS) $(DESTDIR)$(BIN_DIR)/
|
||||
install -d $(DESTDIR)$(MAN_DIR)
|
||||
install -m 644 $(MAN_PAGES) $(DESTDIR)$(MAN_DIR)/
|
||||
endif
|
||||
ifeq (,$(wildcard $(DESTDIR)$(CONFIG_FILE)))
|
||||
$(INSTALL) -d $(DESTDIR)$(CONFIG_DIR)
|
||||
$(INSTALL) -m 644 system.conf.sample $(DESTDIR)$(CONFIG_FILE)
|
||||
endif
|
||||
install -d $(DESTDIR)$(DATA_DIR)
|
||||
tar cf - -C hotplug $(ASSIGNED_DATA_SCRIPTS) | tar xf - -C $(DESTDIR)$(DATA_DIR)/
|
||||
install $(ASSIGNED_UTILS) $(DESTDIR)/$(BIN_DIR)/
|
||||
install -m 644 $(ASSIGNED_CONF) $(DESTDIR)/$(CONFIG_DIR)/
|
||||
install -d $(DESTDIR)$(BASH_COMP_DIR)
|
||||
install -m 644 dahdi-bash-completion $(DESTDIR)$(BASH_COMP_FILE)
|
||||
|
||||
install-libs: libs
|
||||
$(INSTALL) -d -m 755 $(DESTDIR)/$(LIB_DIR)
|
||||
$(INSTALL) -m 755 $(LTZ_A) $(DESTDIR)$(LIB_DIR)/
|
||||
$(INSTALL) -m 755 $(LTZ_SO) $(DESTDIR)$(LIB_DIR)/$(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER)
|
||||
ifeq (,$(DESTDIR))
|
||||
if [ `id -u` = 0 ]; then \
|
||||
/sbin/ldconfig || : ;\
|
||||
fi
|
||||
endif
|
||||
rm -f $(DESTDIR)$(LIB_DIR)/$(LTZ_SO)
|
||||
$(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
|
||||
$(DESTDIR)$(LIB_DIR)/$(LTZ_SO).$(LTZ_SO_MAJOR_VER)
|
||||
$(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
|
||||
$(DESTDIR)$(LIB_DIR)/$(LTZ_SO)
|
||||
# Overwrite the 1.0 links out there. dahdi-tools 2.0.0 installed
|
||||
# 1.0 links but dahdi-tools changed them to 2.0 in order to explicitly
|
||||
# break applications linked with zaptel. But, this also meant that
|
||||
# applications linked with libtonezone.so.1.0 broke when dahdi-tools
|
||||
# 2.1.0 was installed.
|
||||
$(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
|
||||
$(DESTDIR)$(LIB_DIR)/$(LTZ_SO).1.0
|
||||
$(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
|
||||
$(DESTDIR)$(LIB_DIR)/$(LTZ_SO).1
|
||||
ifneq (no,$(USE_SELINUX))
|
||||
ifeq (,$(DESTDIR))
|
||||
/sbin/restorecon -v $(DESTDIR)$(LIB_DIR)/$(LTZ_SO)
|
||||
endif
|
||||
endif
|
||||
$(INSTALL) -d -m 755 $(DESTDIR)/$(INC_DIR)
|
||||
$(INSTALL) -m 644 tonezone.h $(DESTDIR)$(INC_DIR)/
|
||||
|
||||
install-utils-subdirs:
|
||||
@for dir in $(SUBDIRS_UTILS); do \
|
||||
$(MAKE) -C $$dir install; \
|
||||
done
|
||||
|
||||
install-tests: tests
|
||||
ifneq (,$(TEST_BINS))
|
||||
install -d $(DESTDIR)$(BIN_DIR)
|
||||
install $(TEST_BINS) $(DESTDIR)$(BIN_DIR)/
|
||||
endif
|
||||
|
||||
config:
|
||||
ifneq (,$(COPY_INITD))
|
||||
$(COPY_INITD)
|
||||
endif
|
||||
ifeq (,$(wildcard $(DESTDIR)$(RCCONF_FILE)))
|
||||
$(INSTALL) -D -m 644 init.conf.sample $(DESTDIR)$(RCCONF_FILE)
|
||||
endif
|
||||
ifeq (,$(wildcard $(DESTDIR)$(MODULES_FILE)))
|
||||
$(INSTALL) -D -m 644 modules.sample $(DESTDIR)$(MODULES_FILE)
|
||||
endif
|
||||
ifeq (,$(wildcard $(DESTDIR)$(GENCONF_FILE)))
|
||||
$(INSTALL) -D -m 644 xpp/genconf_parameters $(DESTDIR)$(GENCONF_FILE)
|
||||
endif
|
||||
ifeq (,$(wildcard $(DESTDIR)$(MODPROBE_FILE)))
|
||||
$(INSTALL) -D -m 644 modprobe.conf.sample $(DESTDIR)$(MODPROBE_FILE)
|
||||
endif
|
||||
ifeq (,$(wildcard $(DESTDIR)$(BLACKLIST_FILE)))
|
||||
$(INSTALL) -D -m 644 blacklist.sample $(DESTDIR)$(BLACKLIST_FILE)
|
||||
endif
|
||||
$(INSTALL) -d $(DESTDIR)$(UDEVRULES_DIR)
|
||||
$(INSTALL) -D -m 644 dahdi.rules $(DESTDIR)$(UDEVRULES_DIR)/
|
||||
ifneq (,$(COPY_NETSCR))
|
||||
$(COPY_NETSCR)
|
||||
endif
|
||||
ifneq (,$(ADD_INITD))
|
||||
$(ADD_INITD)
|
||||
endif
|
||||
@echo "DAHDI has been configured."
|
||||
@echo ""
|
||||
@echo "List of detected DAHDI devices:"
|
||||
@echo ""
|
||||
@if [ `xpp/dahdi_hardware | tee /dev/stderr | wc -l` -eq 0 ]; then \
|
||||
echo "No hardware found"; \
|
||||
else \
|
||||
echo ""; \
|
||||
echo "run 'dahdi_genconf modules' to load support for only " ;\
|
||||
echo "the DAHDI hardware installed in this system. By "; \
|
||||
echo "default support for all DAHDI hardware is loaded at "; \
|
||||
echo "DAHDI start. "; \
|
||||
fi
|
||||
|
||||
update:
|
||||
@if [ -d .svn ]; then \
|
||||
echo "Updating from Subversion..." ; \
|
||||
svn update | tee update.out; \
|
||||
rm -f .version; \
|
||||
if [ `grep -c ^C update.out` -gt 0 ]; then \
|
||||
echo ; echo "The following files have conflicts:" ; \
|
||||
grep ^C update.out | cut -b4- ; \
|
||||
fi ; \
|
||||
rm -f update.out; \
|
||||
else \
|
||||
echo "Not under version control"; \
|
||||
fi
|
||||
|
||||
dist:
|
||||
@./build_tools/make_dist "dahdi-tools" "$(TOOLSVERSION)"
|
||||
|
||||
clean:
|
||||
rm -f $(BINS) $(TEST_BINS)
|
||||
rm -f *.o dahdi_cfg tzdriver sethdlc
|
||||
rm -f $(LTZ_SO) $(LTZ_A) *.lo
|
||||
@for dir in $(SUBDIRS_UTILS_ALL); do \
|
||||
$(MAKE) -C $$dir clean; \
|
||||
done
|
||||
@for dir in $(SUBDIRS_UTILS); do \
|
||||
$(MAKE) -C $$dir clean; \
|
||||
done
|
||||
rm -f libtonezone*
|
||||
rm -f fxotune
|
||||
rm -f core
|
||||
rm -f dahdi_cfg-shared fxstest
|
||||
rm -rf $(GENERATED_DOCS) *.asciidoc tonezones.txt
|
||||
rm -f dahdi_pcap
|
||||
|
||||
distclean: dist-clean
|
||||
|
||||
dist-clean: clean
|
||||
rm -f makeopts
|
||||
rm -f config.log config.status
|
||||
rm -f .*.d
|
||||
|
||||
config.status: configure
|
||||
@CFLAGS="" ./configure
|
||||
@echo "****"
|
||||
@echo "**** The configure script was just executed, so 'make' needs to be"
|
||||
@echo "**** restarted."
|
||||
@echo "****"
|
||||
@exit 1
|
||||
|
||||
.PHONY: distclean dist-clean clean all install programs tests devel data config update install-programs install-libs install-utils-subdirs utils-subdirs prereq dist
|
||||
|
||||
FORCE:
|
||||
|
||||
ifneq ($(wildcard .*.d),)
|
||||
include .*.d
|
||||
endif
|
|
@ -0,0 +1,197 @@
|
|||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
LEGACY_MAKE = \
|
||||
$(MAKE) -f $(srcdir)/Makefile.legacy \
|
||||
top_srcdir=$(top_srcdir) \
|
||||
srcdir=$(srcdir)
|
||||
|
||||
CFLAGS += -g -Wall -O2 $(DAHDI_INCLUDE)
|
||||
if DAHDI_DEVMODE
|
||||
CFLAGS += \
|
||||
-Werror \
|
||||
-Wunused \
|
||||
-Wundef \
|
||||
$(DAHDI_DECLARATION_AFTER_STATEMENT) \
|
||||
-Wmissing-format-attribute \
|
||||
-Wformat-security \
|
||||
#-Wformat=2
|
||||
endif
|
||||
|
||||
SUBDIRS = xpp doc hotplug
|
||||
|
||||
if PPPD
|
||||
SUBDIRS += ppp
|
||||
endif
|
||||
|
||||
noinst_HEADERS = \
|
||||
bittest.h \
|
||||
dahdi_tools_version.h \
|
||||
fxotune.h \
|
||||
wavformat.h \
|
||||
#
|
||||
|
||||
sbin_PROGRAMS = \
|
||||
dahdi_test \
|
||||
dahdi_maint \
|
||||
dahdi_monitor \
|
||||
dahdi_cfg \
|
||||
dahdi_speed \
|
||||
dahdi_scan \
|
||||
fxotune
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
fxstest \
|
||||
patgen \
|
||||
pattest \
|
||||
patlooptest \
|
||||
dahdi_diag \
|
||||
timertest
|
||||
|
||||
dist_sbin_SCRIPTS = \
|
||||
dahdi_span_assignments \
|
||||
dahdi_waitfor_span_assignments \
|
||||
dahdi_span_types
|
||||
|
||||
if PBX_HDLC
|
||||
sbin_PROGRAMS += sethdlc
|
||||
noinst_PROGRAMS += hdlcstress hdlctest hdlcgen hdlcverify
|
||||
endif
|
||||
|
||||
# Libtool versioning for libtonezone:
|
||||
# Bump when interface changes
|
||||
LTZ_CURRENT = 2
|
||||
# Bump if interface change is backward compatible
|
||||
LTZ_AGE = 0
|
||||
# Bump if only implementation change
|
||||
LTZ_REVISION = 0
|
||||
|
||||
lib_LTLIBRARIES = libtonezone.la
|
||||
|
||||
libtonezone_la_SOURCES = \
|
||||
zonedata.c \
|
||||
tonezone.c \
|
||||
version.c
|
||||
dahdiinclude_HEADERS = tonezone.h
|
||||
libtonezone_la_CFLAGS = $(CFLAGS) -I$(srcdir) -DBUILDING_TONEZONE
|
||||
libtonezone_la_LDFLAGS = -version-info "$(LTZ_CURRENT):$(LTZ_REVISION):$(LTZ_AGE)"
|
||||
libtonezone_la_LIBADD = -lm
|
||||
|
||||
if PBX_PCAP
|
||||
noinst_PROGRAMS += dahdi_pcap
|
||||
dahdi_pcap_LDADD = -lpcap
|
||||
endif
|
||||
|
||||
patlooptest_LDADD = libtonezone.la
|
||||
fxstest_LDADD = libtonezone.la
|
||||
fxotune_LDADD = -lm
|
||||
dahdi_speed_CFLAGS = -O2
|
||||
|
||||
dahdi_maint_SOURCES = dahdi_maint.c version.c
|
||||
|
||||
if PBX_NEWT
|
||||
sbin_PROGRAMS += dahdi_tool
|
||||
dahdi_tool_CFLAGS = $(CFLAGS) $(NEWT_INCLUDE)
|
||||
dahdi_tool_LDADD = $(NEWT_LIB)
|
||||
endif
|
||||
|
||||
dahdi_cfg_LDFLAGS = -lpthread
|
||||
dahdi_cfg_LDADD = libtonezone.la
|
||||
|
||||
udevrulesdir = @udevrulesdir@
|
||||
udevrules_DATA = dahdi.rules
|
||||
|
||||
all-local:
|
||||
$(LEGACY_MAKE) all
|
||||
|
||||
clean-local:
|
||||
$(LEGACY_MAKE) clean
|
||||
|
||||
install-exec-hook:
|
||||
$(LEGACY_MAKE) install
|
||||
@echo "Compatibility symlinks (should be removed in the future)"
|
||||
ln -sf libtonezone.so.2.0.0 $(DESTDIR)$(libdir)/libtonezone.so.2.0
|
||||
|
||||
bashcompdir = $(sysconfdir)/bash_completion.d
|
||||
|
||||
install-data-hook:
|
||||
mkdir -p $(DESTDIR)$(bashcompdir)
|
||||
install -m 644 $(srcdir)/dahdi-bash-completion $(DESTDIR)$(bashcompdir)/dahdi
|
||||
|
||||
# Handle these files specially -- install them only with 'install-config'
|
||||
special_config_files = \
|
||||
init.conf.sample \
|
||||
blacklist.sample \
|
||||
modprobe.conf.sample \
|
||||
#
|
||||
|
||||
install-config:
|
||||
mkdir -p $(DESTDIR)$(dahdiconfdir)
|
||||
mkdir -p $(DESTDIR)$(sysconfdir)/modprobe.d
|
||||
install -m644 xpp/genconf_parameters $(DESTDIR)$(dahdiconfdir)/genconf_parameters
|
||||
install -m644 init.conf.sample $(DESTDIR)$(dahdiconfdir)/init.conf
|
||||
install -m644 blacklist.sample $(DESTDIR)$(sysconfdir)/modprobe.d/dahdi-blacklist.conf
|
||||
install -m644 modprobe.conf.sample $(DESTDIR)$(sysconfdir)/modprobe.d/dahdi.conf
|
||||
$(LEGACY_MAKE) config
|
||||
|
||||
dahdiconfdir = @sysconfdir@/dahdi
|
||||
dahdiconf_DATA = \
|
||||
system.conf.sample \
|
||||
assigned-spans.conf.sample \
|
||||
span-types.conf.sample \
|
||||
modules.sample \
|
||||
#
|
||||
|
||||
build_scripts = \
|
||||
build_tools/dahdi_svn_tarball \
|
||||
build_tools/dahdi_sysfs_copy \
|
||||
build_tools/dump_sys_state \
|
||||
build_tools/make_firmware_object.in \
|
||||
build_tools/make_tree \
|
||||
build_tools/make_version \
|
||||
build_tools/test_kernel_git \
|
||||
build_tools/uninstall-modules \
|
||||
#
|
||||
|
||||
.version:
|
||||
if ./build_tools/make_version . dahdi/tools > $@.tmp; then \
|
||||
mv "$@.tmp" "$@"; \
|
||||
fi
|
||||
|
||||
uninstall-hook:
|
||||
$(RM) $(DESTDIR)$(sysconfdir)/dahdi/span-types.conf.sample
|
||||
$(RM) $(DESTDIR)$(sysconfdir)/dahdi/assigned-spans.conf.sample
|
||||
$(RM) $(DESTDIR)$(sysconfdir)/dahdi/system.conf
|
||||
$(RM) $(DESTDIR)$(bashcompdir)/dahdi
|
||||
|
||||
docs:
|
||||
$(LEGACY_MAKE) $@
|
||||
|
||||
DISTCLEANFILES = makeopts config.log config.status .*.d
|
||||
|
||||
MAINTAINERCLEANFILES = \
|
||||
m4/libtool.m4 \
|
||||
m4/ltoptions.m4 \
|
||||
m4/ltsugar.m4 \
|
||||
m4/ltversion.m4 \
|
||||
m4/lt~obsolete.m4 \
|
||||
#
|
||||
|
||||
EXTRA_DIST = \
|
||||
.version \
|
||||
LICENSE \
|
||||
LICENSE.LGPL \
|
||||
UPGRADE.txt \
|
||||
bootstrap.sh \
|
||||
Makefile.legacy \
|
||||
dahdi.init \
|
||||
dahdi.xml \
|
||||
dahdi_pcap.c \
|
||||
ifup-hdlc \
|
||||
dahdi-bash-completion \
|
||||
$(special_config_files) \
|
||||
$(dahdiconf_DATA) \
|
||||
$(udevrules_DATA) \
|
||||
$(build_scripts) \
|
||||
#
|
||||
|
||||
.PHONY: docs config
|
|
@ -0,0 +1,133 @@
|
|||
#
|
||||
# Makefile for DAHDI tools
|
||||
#
|
||||
# Copyright (C) 2001-2010 Digium, Inc.
|
||||
#
|
||||
#
|
||||
|
||||
ifeq ($(strip $(foreach var,clean,$(findstring $(var),$(MAKECMDGOALS)))),)
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(foreach var,clean,$(findstring $(var),$(MAKECMDGOALS)))),)
|
||||
ifneq ($(wildcard makeopts),)
|
||||
include makeopts
|
||||
endif
|
||||
endif
|
||||
|
||||
CHKCONFIG := $(wildcard /sbin/chkconfig)
|
||||
UPDATE_RCD := $(wildcard /usr/sbin/update-rc.d)
|
||||
ifeq (,$(DESTDIR))
|
||||
ifneq (,$(CHKCONFIG))
|
||||
ADD_INITD := $(CHKCONFIG) --add dahdi
|
||||
else
|
||||
ifneq (,$(UPDATE_RCD))
|
||||
ADD_INITD := $(UPDATE_RCD) dahdi defaults 15 30
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
INITRD_DIR := $(firstword $(wildcard $(DESTDIR)/etc/rc.d/init.d $(DESTDIR)/etc/init.d))
|
||||
ifneq (,$(INITRD_DIR))
|
||||
INIT_TARGET := $(INITRD_DIR)/dahdi
|
||||
COPY_INITD := install -D dahdi.init $(INIT_TARGET)
|
||||
endif
|
||||
|
||||
NETSCR_DIR := $(firstword $(wildcard $(DESTDIR)/etc/sysconfig/network-scripts ))
|
||||
ifneq (,$(NETSCR_DIR))
|
||||
NETSCR_TARGET := $(NETSCR_DIR)/ifup-hdlc
|
||||
COPY_NETSCR := install -D ifup-hdlc $(NETSCR_TARGET)
|
||||
endif
|
||||
|
||||
# sbindir, libdir, includedir and mandir are defined in makeopts
|
||||
# (from configure).
|
||||
LIB_DIR:=$(libdir)
|
||||
|
||||
# All the man pages. Not just installed ones:
|
||||
GROFF_PAGES := $(wildcard doc/*.8 xpp/*.8)
|
||||
GROFF_HTML := $(GROFF_PAGES:%=%.html)
|
||||
|
||||
GENERATED_DOCS := $(GROFF_HTML) README.html README.Astribank.html
|
||||
|
||||
all:
|
||||
|
||||
tonezones.txt: zonedata.c
|
||||
perl -ne 'next unless (/\.(country|description) = *"([^"]*)/); \
|
||||
print (($$1 eq "country")? "* $$2\t":"$$2\n");' $< \
|
||||
>$@
|
||||
|
||||
%.asciidoc: %.sample
|
||||
perl -n -e \
|
||||
'if (/^#($$|\s)(.*)/){ if (!$$in_doc){print "\n"}; $$in_doc=1; print "$$2\n" } else { if ($$in_doc){print "\n"}; $$in_doc=0; print " $$_" }' \
|
||||
$< \
|
||||
| perl -p -e 'if (/^ #?(\w+)=/ && ! exists $$cfgs{$$1}){my $$cfg = $$1; $$cfgs{$$cfg} = 1; s/^/\n[[cfg_$$cfg]]\n/}' >$@
|
||||
|
||||
docs: $(GENERATED_DOCS)
|
||||
|
||||
genconf_parameters.sample: xpp/genconf_parameters
|
||||
cp $< $@
|
||||
|
||||
README.html: README system.conf.asciidoc init.conf.asciidoc tonezones.txt \
|
||||
UPGRADE.txt genconf_parameters.asciidoc assigned-spans.conf.asciidoc \
|
||||
span-types.conf.asciidoc
|
||||
TZ=UTC $(ASCIIDOC) -n -a toc -a toclevels=4 $<
|
||||
|
||||
README.Astribank.html: xpp/README.Astribank
|
||||
TZ=UTC $(ASCIIDOC) -o $@ -n -a toc -a toclevels=4 $<
|
||||
|
||||
# on Debian: this requires the full groff, not just groff-base.
|
||||
%.8.html: %.8
|
||||
man -Thtml $^ >$@
|
||||
|
||||
htmlman: $(GROFF_HTML)
|
||||
|
||||
install: all install-programs
|
||||
@echo "###################################################"
|
||||
@echo "###"
|
||||
@echo "### DAHDI tools installed successfully."
|
||||
@echo "### If you have not done so before, install init scripts with:"
|
||||
@echo "###"
|
||||
@echo "### make install-config"
|
||||
@echo "###"
|
||||
@echo "###################################################"
|
||||
|
||||
install-programs: install-libs
|
||||
|
||||
install-libs:
|
||||
ifneq (no,$(USE_SELINUX))
|
||||
ifeq (,$(DESTDIR))
|
||||
/sbin/restorecon -v $(DESTDIR)$(LIB_DIR)/$(LTZ_SO)
|
||||
endif
|
||||
endif
|
||||
|
||||
config:
|
||||
ifneq (,$(COPY_INITD))
|
||||
$(COPY_INITD)
|
||||
endif
|
||||
ifneq (,$(COPY_NETSCR))
|
||||
$(COPY_NETSCR)
|
||||
endif
|
||||
ifneq (,$(ADD_INITD))
|
||||
$(ADD_INITD)
|
||||
endif
|
||||
@echo "DAHDI has been configured."
|
||||
@echo ""
|
||||
@echo "List of detected DAHDI devices:"
|
||||
@echo ""
|
||||
@if [ `xpp/dahdi_hardware | tee /dev/stderr | wc -l` -eq 0 ]; then \
|
||||
echo "No hardware found"; \
|
||||
else \
|
||||
echo ""; \
|
||||
echo "run 'dahdi_genconf modules' to load support for only " ;\
|
||||
echo "the DAHDI hardware installed in this system. By "; \
|
||||
echo "default support for all DAHDI hardware is loaded at "; \
|
||||
echo "DAHDI start. "; \
|
||||
fi
|
||||
|
||||
clean:
|
||||
rm -f *.o tzdriver
|
||||
rm -f core
|
||||
rm -rf $(GENERATED_DOCS) *.asciidoc tonezones.txt
|
||||
|
||||
.PHONY: clean all install devel data config install-programs install-libs
|
||||
|
||||
FORCE:
|
60
README
60
README
|
@ -15,8 +15,9 @@ dahdi-linux before building dahdi-tools.
|
|||
Build System
|
||||
~~~~~~~~~~~~
|
||||
GCC and friends. Generally you will need to install the package gcc.
|
||||
There may be cases where you will need a specific version of gcc to build
|
||||
kernel modules.
|
||||
|
||||
Autotools (autoconf, automake and libtool) are needed if you clone from
|
||||
Git.
|
||||
|
||||
|
||||
Extra Libraries
|
||||
|
@ -24,20 +25,25 @@ Extra Libraries
|
|||
Some libraries are needed for extra utilities that are provided with
|
||||
DAHDI.
|
||||
|
||||
- libusb is needed for building fpga_load, needed for firmware loading of
|
||||
the Xorcom Astribank.
|
||||
- libusb is needed for building astribank_hexload, needed for firmware
|
||||
loading of the Xorcom Astribank.
|
||||
- libnewt is needed to build the optional but useful utility dahdi_tool.
|
||||
- libpcap is needed for building dahdi_pcap.
|
||||
- pppd is needed to build the dahdi pppd plugin.
|
||||
|
||||
|
||||
Installation
|
||||
~~~~~~~~~~~~
|
||||
Note: If using `sudo` to build/install, you may need to add /sbin to your PATH.
|
||||
----------------------------------
|
||||
# Only if you cloned from git:
|
||||
autoreconf -i
|
||||
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
# To install init scripts and config files:
|
||||
#make config
|
||||
# To install some extra configuration files:
|
||||
#make install-config
|
||||
----------------------------------
|
||||
|
||||
|
||||
|
@ -49,18 +55,11 @@ There are some make targets that are provided to build or install just
|
|||
parts of DAHDI:
|
||||
|
||||
. Build targets:
|
||||
- make: Build DAHDI user-space programs and libraries. partial
|
||||
targets of it:
|
||||
* make 'utilname': builds 'utilname' alone (e.g: `make dahdi_diag`)
|
||||
* make utils: Build just the programs.
|
||||
* make libs: Build libtonezone.
|
||||
* make tests: Build testing binaries.
|
||||
- make: Build DAHDI user-space programs and libraries.
|
||||
- make docs: Generate some extra documentation files.
|
||||
. Install targets:
|
||||
- make install: Install everything. Sub-targets of it:
|
||||
* make install-utils: Installs most things.
|
||||
* make install-libs: Installs libtonezone.
|
||||
- make config: install configuration files (overriding existing ones).
|
||||
- make install-test: Install testing binaries.
|
||||
- make install: Install everything
|
||||
- make install-config: install configuration files
|
||||
|
||||
|
||||
Installation to a Subtree
|
||||
|
@ -76,8 +75,8 @@ This can be useful for any partial install target from the list above.
|
|||
|
||||
Options For ./configure
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
The configure script executes various tests and based on them generates
|
||||
makeopts. You can pass it --with options and variable settings, for
|
||||
The configure script executes various tests and the build will depend on
|
||||
their result. You can pass it --with options and variable settings, for
|
||||
instance:
|
||||
|
||||
./configure --without-ncurses CC="gcc-4.10"
|
||||
|
@ -117,6 +116,29 @@ The configuration file of the dahdi init.d script is
|
|||
/etc/dahdi/init.conf . That file is used to override defaults that are
|
||||
set at the beginning of the init.d script.
|
||||
|
||||
/etc/dahdi/assigned-spans.conf
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Assigns span number and initial channel number for spans in each device.
|
||||
Just like system.conf it may be generated with dahdi_genconf:
|
||||
|
||||
dahdi_span_assignments auto
|
||||
dahdi_genconf
|
||||
|
||||
It may also be edited manually to allow reserving span and channel
|
||||
numbers for specific devices.
|
||||
|
||||
/etc/dahdi/span-types.conf
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Theoretically, this file is similar to assigned-spans.conf. It allows
|
||||
setting the type (E1/T1) of a "PRI" span. This cannot be configured
|
||||
anywhere else: it needs to be done before the span is assigned as it
|
||||
changes the number of channels the span has.
|
||||
|
||||
In practice most systems don't mix E1 and T1 and thus this file will
|
||||
typically have at most a single wild-card line setting all cards to be
|
||||
either E1 or T1.
|
||||
|
||||
|
||||
Reference Configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Sample system.conf
|
||||
|
|
114
autoconfig.h.in
114
autoconfig.h.in
|
@ -1,114 +0,0 @@
|
|||
/* autoconfig.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define if your system has the DAHDI headers. */
|
||||
#undef HAVE_DAHDI
|
||||
|
||||
/* Define if your system has the DAHDI23 headers. */
|
||||
#undef HAVE_DAHDI23
|
||||
|
||||
/* Define DAHDI23 headers version */
|
||||
#undef HAVE_DAHDI23_VERSION
|
||||
|
||||
/* Define DAHDI headers version */
|
||||
#undef HAVE_DAHDI_VERSION
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <linux/soundcard.h> header file. */
|
||||
#undef HAVE_LINUX_SOUNDCARD_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define this to indicate the ${NEWT_DESCRIP} library */
|
||||
#undef HAVE_NEWT
|
||||
|
||||
/* Define to indicate the ${NEWT_DESCRIP} library version */
|
||||
#undef HAVE_NEWT_VERSION
|
||||
|
||||
/* Define to 1 if you have the `semtimedop' function. */
|
||||
#undef HAVE_SEMTIMEDOP
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/soundcard.h> header file. */
|
||||
#undef HAVE_SYS_SOUNDCARD_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define this to indicate the ${USB_DESCRIP} library */
|
||||
#undef HAVE_USB
|
||||
|
||||
/* Define to indicate the ${USB_DESCRIP} library version */
|
||||
#undef HAVE_USB_VERSION
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Enable extensions on AIX 3, Interix. */
|
||||
#ifndef _ALL_SOURCE
|
||||
# undef _ALL_SOURCE
|
||||
#endif
|
||||
/* Enable GNU extensions on systems that have them. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# undef _GNU_SOURCE
|
||||
#endif
|
||||
/* Enable threading extensions on Solaris. */
|
||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||
# undef _POSIX_PTHREAD_SEMANTICS
|
||||
#endif
|
||||
/* Enable extensions on HP NonStop. */
|
||||
#ifndef _TANDEM_SOURCE
|
||||
# undef _TANDEM_SOURCE
|
||||
#endif
|
||||
/* Enable general extensions on Solaris. */
|
||||
#ifndef __EXTENSIONS__
|
||||
# undef __EXTENSIONS__
|
||||
#endif
|
||||
|
||||
|
||||
/* Define to 1 if on MINIX. */
|
||||
#undef _MINIX
|
||||
|
||||
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||
this defined. */
|
||||
#undef _POSIX_1_SOURCE
|
||||
|
||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
|
@ -1,26 +0,0 @@
|
|||
#! /bin/sh
|
||||
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo >&2 "Usage: $0 <package> <version>"
|
||||
exit 1
|
||||
fi
|
||||
package="$1"
|
||||
version="$2"
|
||||
tarball_prefix="$package-$version"
|
||||
echo "I: Making dist tarball for $tarball_prefix"
|
||||
tarball_name="$tarball_prefix.tar.gz"
|
||||
|
||||
tmp_work_dir=".tmp"
|
||||
tmp_version_dir="$tmp_work_dir/$tarball_prefix"
|
||||
|
||||
if [ "$DESTDIR" != '' ]; then
|
||||
destdir="$DESTDIR/"
|
||||
fi
|
||||
output="$destdir$tarball_name"
|
||||
|
||||
mkdir -p "$tmp_version_dir"
|
||||
git archive --format tar HEAD | tar xf - -C "$tmp_version_dir"
|
||||
echo "$version" > "$tmp_version_dir/.version"
|
||||
tar czf "$output" -C "$tmp_work_dir" "$tarball_prefix"
|
||||
rm -rf "$tmp_work_dir"
|
||||
echo "I: tarball is ready: '$output'"
|
|
@ -68,6 +68,8 @@ elif [ -d ${1}/.git ]; then
|
|||
# options.
|
||||
VERSION=GIT-`git rev-parse --short --verify HEAD`${MODIFIED}
|
||||
fi
|
||||
VERSION=${VERSION##*/} # Remove leading slashes: upsteram/2.10.2
|
||||
VERSION=${VERSION#[1-9]%} # Remove 1% from tag (tag from Debian epoch)
|
||||
echo ${VERSION}
|
||||
else
|
||||
PARTS=`LANG=C git log --pretty=full | grep -F "git-svn-id:" | head -1 | awk '{print $2;}' | sed -e s:^.*/svn/$2/:: | sed -e 's:/: :g' | sed -e 's/@.*$//g'`
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
cat << END
|
||||
/*
|
||||
* version.c
|
||||
* Automatically generated
|
||||
*/
|
||||
|
||||
const char dahdi_tools_version[] = "DAHDI Tools Version - ${TOOLSVERSION}";
|
||||
|
||||
END
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
207
configure.ac
207
configure.ac
|
@ -2,29 +2,65 @@
|
|||
|
||||
AC_PREREQ(2.59)
|
||||
|
||||
m4_define([TOOLSVERSION],
|
||||
m4_define([short_version],
|
||||
m4_bpatsubst(m4_esyscmd([build_tools/make_version . dahdi/tools]),
|
||||
[\([0-9.]*\)\(\w\|\W\)*],
|
||||
[\1]))
|
||||
AC_INIT(dahdi, TOOLSVERSION, www.asterisk.org)
|
||||
AC_INIT([dahdi-tools], short_version, [www.asterisk.org])
|
||||
|
||||
# check existence of the package
|
||||
AC_CONFIG_SRCDIR([dahdi_cfg.c])
|
||||
AC_CONFIG_AUX_DIR([auxdir])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
||||
|
||||
build_version=`build_tools/make_version . dahdi/tools`
|
||||
AC_SUBST([BUILD_VERSION], "$build_version")
|
||||
|
||||
# enable nice build output on automake1.11
|
||||
m4_pattern_allow([AM_DEFAULT_VERBOSITY])
|
||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],[AM_DEFAULT_VERBOSITY=1])
|
||||
AM_CONDITIONAL([SILENT_RULES], [test "$AM_DEFAULT_VERBOSITY" = '0'])
|
||||
|
||||
AC_COPYRIGHT("dahdi-tools")
|
||||
AC_REVISION($Revision$)
|
||||
|
||||
ac_default_prefix=/usr
|
||||
if test ${sysconfdir} = '${prefix}/etc'; then
|
||||
sysconfdir=/etc
|
||||
fi
|
||||
if test ${mandir} = '${prefix}/man'; then
|
||||
mandir=/usr/share/man
|
||||
fi
|
||||
# Preserve old defaults if called without --prefix or --prefix=/usr
|
||||
# prefix=/usr
|
||||
# sysconfdir=/etc
|
||||
|
||||
if test ${localstatedir} = '${prefix}/var'; then
|
||||
localstatedir=/var
|
||||
ac_default_prefix=/usr
|
||||
if test "$prefix" = 'NONE' -o "$prefix" = '/usr'; then
|
||||
if test ${sysconfdir} = '${prefix}/etc'; then
|
||||
sysconfdir=/etc
|
||||
fi
|
||||
if test ${mandir} = '${prefix}/man'; then
|
||||
mandir=/usr/share/man
|
||||
fi
|
||||
|
||||
if test ${localstatedir} = '${prefix}/var'; then
|
||||
localstatedir=/var
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([dahditoolsdir], ['${datadir}/dahdi'])
|
||||
AC_SUBST([dahdiincludedir], ['${includedir}/dahdi'])
|
||||
|
||||
# Where to install udev rules?
|
||||
# * Our default is $sysconfdir/udev/rules.d:
|
||||
# - This preserve legacy location.
|
||||
# - It doesn't write into modern vendor supplied location (/lib/udev/rules.d)
|
||||
# - It doesn't break "make distcheck" (where everything should be relative
|
||||
# to prefix.
|
||||
# * Packagers are encouraged to use --udevrules=/lib/udev/rules.d
|
||||
#
|
||||
m4_define([_UDEV_RULES_DIR_DEFAULT], [${sysconfdir}/udev/rules.d])dnl
|
||||
AC_ARG_WITH(udevrules,
|
||||
[AS_HELP_STRING([--with-udevrules=PATH],
|
||||
[Location of UDEV rules @<:@default=]_UDEV_RULES_DIR_DEFAULT[@:>@])],
|
||||
[udevrulesdir=$withval],
|
||||
[udevrulesdir=]'_UDEV_RULES_DIR_DEFAULT'
|
||||
)
|
||||
AC_SUBST([udevrulesdir], "$udevrulesdir")
|
||||
|
||||
# specify output header file
|
||||
AC_CONFIG_HEADER(autoconfig.h)
|
||||
|
@ -32,15 +68,18 @@ AC_CONFIG_HEADER(autoconfig.h)
|
|||
# This needs to be before any macros that use the C compiler
|
||||
AC_GNU_SOURCE
|
||||
|
||||
AC_CHECK_HEADERS([sys/soundcard.h linux/soundcard.h])
|
||||
|
||||
AC_CHECK_TOOL([LD], [ld])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CC
|
||||
AC_PROG_CPP
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_AWK
|
||||
AC_PROG_LIBTOOL
|
||||
AST_CHECK_GNU_MAKE
|
||||
|
||||
test_obj=conftest.o
|
||||
|
@ -70,6 +109,35 @@ AC_SUBST(DOWNLOAD)
|
|||
|
||||
AC_LANG(C)
|
||||
|
||||
AC_PATH_PROG([PERL], [perl])
|
||||
if test "$PERL" = ''; then
|
||||
AC_MSG_ERROR(perl is mandatory)
|
||||
fi
|
||||
# Where to install perl modules?
|
||||
# * Packagers are encouraged to use the result of "perl -V:vendorlib"
|
||||
# * Our default is:
|
||||
# - The result of "perl -V:sitelib" for our default prefix (/usr)
|
||||
# - The "$datadir/perl5" directory otherwise (e.g: during "make distcheck")
|
||||
#
|
||||
AC_MSG_CHECKING(for perl libdir)
|
||||
m4_define([_PERL_LIBDIR_DEFAULT], [${datadir}/perl5])dnl
|
||||
AC_ARG_WITH(perllib,
|
||||
[AS_HELP_STRING([--with-perllib=PATH],
|
||||
[Location of perl modules @<:@default=]_PERL_LIBDIR_DEFAULT[, or perl -V:sitelib@:>@])],
|
||||
[perllibdir=$withval],
|
||||
[
|
||||
if test "$prefix" = 'NONE' -o "$prefix" = '/usr'; then
|
||||
eval `"$PERL" -V:sitelib`
|
||||
perllibdir="$sitelib"
|
||||
else
|
||||
perllibdir='_PERL_LIBDIR_DEFAULT'
|
||||
fi
|
||||
]
|
||||
)
|
||||
AC_SUBST([perllibdir], "$perllibdir")
|
||||
AC_MSG_RESULT([$perllibdir])
|
||||
AM_CONDITIONAL([PERL], [test "$perllibdir" != ''])
|
||||
|
||||
AC_ARG_ENABLE(dev-mode,
|
||||
[ --enable-dev-mode Turn on developer mode],
|
||||
[case "${enableval}" in
|
||||
|
@ -78,6 +146,7 @@ AC_ARG_ENABLE(dev-mode,
|
|||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-dev-mode) ;;
|
||||
esac])
|
||||
AC_SUBST(DAHDI_DEVMODE)
|
||||
AM_CONDITIONAL([DAHDI_DEVMODE], [test "$DAHDI_DEVMODE" = 'yes'])
|
||||
|
||||
AC_MSG_CHECKING(for -Wdeclaration-after-statement support)
|
||||
if $(${CC} -Wdeclaration-after-statement -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
|
||||
|
@ -89,17 +158,104 @@ else
|
|||
fi
|
||||
AC_SUBST(DAHDI_DECLARATION_AFTER_STATEMENT)
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([sys/soundcard.h linux/soundcard.h])
|
||||
AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_INLINE
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_SSIZE_T
|
||||
AC_TYPE_UINT16_T
|
||||
AC_TYPE_UINT32_T
|
||||
AC_TYPE_UINT8_T
|
||||
|
||||
# Checks for libraries.
|
||||
AC_CHECK_LIB([m], [cos])
|
||||
AC_CHECK_LIB([pthread], [pthread_create])
|
||||
|
||||
AST_EXT_LIB_SETUP([DAHDI], [DAHDI], [dahdi])
|
||||
AST_EXT_LIB_SETUP([NEWT], [newt], [newt])
|
||||
AST_EXT_LIB_SETUP([USB], [usb], [usb])
|
||||
AST_EXT_LIB_SETUP([PCAP], [pcap], [pcap])
|
||||
|
||||
AST_C_DEFINE_CHECK([DAHDI], [DAHDI_CODE], [dahdi/user.h])
|
||||
DAHDI23_DIR="${DAHDI_DIR}"
|
||||
AST_C_DEFINE_CHECK([DAHDI23], [DAHDI_CONFIG_NTTE], [dahdi/user.h])
|
||||
AST_EXT_LIB_CHECK([NEWT], [newt], [newtBell], [newt.h])
|
||||
AST_EXT_LIB_CHECK([USB], [usb], [usb_init], [usb.h])
|
||||
AST_EXT_LIB_CHECK([PCAP], [pcap], [pcap_compile], [pcap.h])
|
||||
|
||||
saved_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $DAHDI_INCLUDE"
|
||||
AC_CHECK_DECL([DAHDI_TXMIRROR], [DAHDI_TXMIRROR=1], [DAHDI_TXMIRROR=0], [#include <dahdi/user.h>])
|
||||
CPPFLAGS="$saved_CPPFLAGS"
|
||||
|
||||
AM_CONDITIONAL([PBX_NEWT], [test "$PBX_NEWT" = "1"])
|
||||
AM_CONDITIONAL([PBX_PCAP], [test "$PBX_PCAP" = "1" -a "$DAHDI_TXMIRROR" = "1"])
|
||||
|
||||
AC_CHECK_FUNCS([semtimedop])
|
||||
AC_CHECK_FUNCS([alarm bzero gettimeofday memset pow regcomp select socket strcasecmp strchr strdup strerror strrchr strstr strtol strtoul])
|
||||
AC_FUNC_ERROR_AT_LINE
|
||||
AC_FUNC_MALLOC
|
||||
|
||||
# What the user asked for? libusb/libusbx
|
||||
AC_ARG_WITH([libusbx],
|
||||
[AS_HELP_STRING([--without-libusbx], [Disable libusbx @<:@default=check@:>@])],
|
||||
[],
|
||||
[with_libusbx=check])
|
||||
AC_ARG_WITH([libusb],
|
||||
[AS_HELP_STRING([--without-libusb], [Disable libusb-0.1 @<:@default=check@:>@])],
|
||||
[],
|
||||
[with_libusb=check])
|
||||
|
||||
# LIBUSBX tests
|
||||
have_libusbx=
|
||||
AS_IF([test "$with_libusbx" != "no"],
|
||||
[PKG_CHECK_MODULES([LIBUSBX], [libusb-1.0],
|
||||
[AC_CHECK_LIB([usb-1.0], [libusb_error_name],
|
||||
[
|
||||
have_libusbx="yes"
|
||||
AC_DEFINE([HAVE_LIBUSBX], [1], [Define to 1 if you have <libusb.h>.])
|
||||
AC_SUBST([PBX_USB], [1])
|
||||
], [
|
||||
if test "$with_libusbx" != "yes"; then
|
||||
AC_MSG_NOTICE([Ignoring old libusb-1.0, trying fallback to old libusb])
|
||||
fi
|
||||
])
|
||||
], [:])
|
||||
], [])
|
||||
|
||||
AS_IF([test "$with_libusbx" = "yes" -a "$have_libusbx" = ""],
|
||||
[AC_MSG_ERROR([No libusbx found (--with-libusbx was given)])])
|
||||
|
||||
# LIBUSB tests
|
||||
have_libusb=
|
||||
AS_IF([test "$with_libusb" != "no"],
|
||||
[AS_IF([test "$have_libusbx" != ""],
|
||||
[
|
||||
AS_IF([test "$with_libusbx" = "check"], [
|
||||
AC_MSG_NOTICE([Skipping LIBUSB tests (have good LIBUSBX)])
|
||||
])
|
||||
], [
|
||||
PKG_CHECK_MODULES([LIBUSB], [libusb],
|
||||
[
|
||||
have_libusb="yes"
|
||||
AC_SUBST([PBX_USB], [1])
|
||||
]
|
||||
[AC_DEFINE([HAVE_LIBUSB], [1], [Define to 1 if you have <usb.h>.])],
|
||||
[:]
|
||||
)
|
||||
])
|
||||
], [])
|
||||
|
||||
AS_IF([test "$with_libusb" = "yes" -a "$have_libusb" = ""],
|
||||
[AC_MSG_ERROR([No libusb found (--with-libusb was given)])])
|
||||
|
||||
AM_CONDITIONAL([LIBUSBX], [test "$have_libusbx" != ""])
|
||||
AM_CONDITIONAL([LIBUSB], [test "$have_libusb" != ""])
|
||||
AM_CONDITIONAL([PBX_USB], [test "$PBX_USB" = "1"])
|
||||
|
||||
|
||||
PBX_HDLC=0
|
||||
AC_MSG_CHECKING([for GENERIC_HDLC_VERSION version 4 in linux/hdlc.h])
|
||||
|
@ -138,6 +294,7 @@ if test "x${PBX_HDLC}" != "x1"; then
|
|||
fi
|
||||
|
||||
AC_SUBST(PBX_HDLC)
|
||||
AM_CONDITIONAL([PBX_HDLC], [test "$PBX_HDLC" = "1"])
|
||||
|
||||
AC_ARG_WITH(selinux,
|
||||
[AS_HELP_STRING([--with-selinux],
|
||||
|
@ -193,6 +350,9 @@ case "$with_ppp" in
|
|||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(PPPD_VERSION)
|
||||
AM_CONDITIONAL([PPPD], [test "$PPPD_VERSION" != ''])
|
||||
|
||||
if test "x${PBX_DAHDI}" != "x1"; then
|
||||
AC_MSG_NOTICE([***])
|
||||
AC_MSG_NOTICE([*** Building this package requires DAHDI support. *** ])
|
||||
|
@ -211,7 +371,26 @@ fi
|
|||
|
||||
AC_SUBST(PPPD_VERSION)
|
||||
|
||||
AC_CONFIG_FILES([makeopts])
|
||||
# Taken from octasic-helper
|
||||
AC_SUBST([USE_OCTASIC], [yes])
|
||||
AM_CONDITIONAL([USE_OCTASIC], [test "$USE_OCTASIC" = 'yes'])
|
||||
octasic_dir='$(top_srcdir)/xpp/oct612x'
|
||||
AC_SUBST([OCTASIC_CFLAGS], ["-I$octasic_dir/include -I$octasic_dir/octdeviceapi -I$octasic_dir/octdeviceapi/oct6100api"])
|
||||
|
||||
AC_SUBST([TOOLSVERSION], m4_esyscmd([build_tools/make_version . dahdi/tools]))
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
makeopts
|
||||
version.c
|
||||
Makefile
|
||||
doc/Makefile
|
||||
hotplug/Makefile
|
||||
ppp/Makefile
|
||||
xpp/Makefile
|
||||
xpp/xtalk/Makefile
|
||||
xpp/oct612x/Makefile
|
||||
xpp/perl_modules/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
AC_MSG_NOTICE(*** dahdi-tools build successfully configured ***)
|
||||
|
|
|
@ -48,7 +48,7 @@ __dahdi_span_types() {
|
|||
has_cmd=0
|
||||
for (( i=0; i < COMP_CWORD; i++)); do
|
||||
case "${COMP_WORDS[$i]}" in
|
||||
dumpconfig | list | set)
|
||||
dumpconfig | list | set | compare)
|
||||
has_cmd=1
|
||||
break
|
||||
;;
|
||||
|
@ -69,7 +69,7 @@ __dahdi_span_types() {
|
|||
grep -l '[EJT]1' /sys/devices/pci0000:00/0000:00:10.4/usb1/1-1/xbus-00/*/spantype 2>/dev/null | sed -e 's|/spantype||') )
|
||||
else
|
||||
COMPREPLY=( ${COMPREPLY[@]} $(compgen -W \
|
||||
'dumpconfig list set' -- $cur) )
|
||||
'dumpconfig list set compare' -- $cur) )
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -144,6 +144,14 @@ hotplug_exit_after_load() {
|
|||
|
||||
# Initialize the Xorcom Astribank (xpp/) using perl utiliites:
|
||||
xpp_startup() {
|
||||
if [ "$ASTERISK_SUPPORTS_DAHDI_HOTPLUG" = yes ]; then
|
||||
aas_param='/sys/module/dahdi/parameters/auto_assign_spans'
|
||||
aas=`cat "$aas_param" 2>/dev/null`
|
||||
if [ "$aas" = 0 ]; then
|
||||
echo 1>&2 "Don't wait for Astribanks (use Asterisk hotplug-support)"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
# do nothing if there are no astribank devices:
|
||||
if ! /usr/share/dahdi/waitfor_xpds; then return 0; fi
|
||||
|
||||
|
|
86
dahdi_cfg.c
86
dahdi_cfg.c
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include <getopt.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -89,11 +90,9 @@ static struct dahdi_lineconfig lc[DAHDI_MAX_SPANS];
|
|||
|
||||
static struct dahdi_chanconfig cc[DAHDI_MAX_CHANNELS];
|
||||
|
||||
static int current_span = 0;
|
||||
static int only_span = 0;
|
||||
static int restrict_channels = 0;
|
||||
static int selected_channels[DAHDI_MAX_CHANNELS];
|
||||
static int chan2span[DAHDI_MAX_CHANNELS];
|
||||
static int declared_spans[DAHDI_MAX_SPANS];
|
||||
|
||||
static struct dahdi_attach_echocan ae[DAHDI_MAX_CHANNELS];
|
||||
|
@ -108,7 +107,7 @@ static int fiftysixkhdlc[DAHDI_MAX_CHANNELS];
|
|||
|
||||
static int spans=0;
|
||||
|
||||
static int fo_real = 1;
|
||||
static int dry_run = 0;
|
||||
|
||||
static int verbose = 0;
|
||||
|
||||
|
@ -332,20 +331,9 @@ static char *trim(char *buf)
|
|||
|
||||
static int skip_channel(int x)
|
||||
{
|
||||
int spanno = chan2span[x];
|
||||
|
||||
if (restrict_channels) {
|
||||
if (!selected_channels[x])
|
||||
return 1;
|
||||
/* sanity check */
|
||||
if (only_span) {
|
||||
if (spanno != 0 && only_span != spanno) {
|
||||
fprintf(stderr,
|
||||
"Only span %d. Skip selected channel %d from span %d\n",
|
||||
only_span, x, spanno);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (only_span && !declared_spans[only_span]) {
|
||||
fprintf(stderr,
|
||||
|
@ -353,8 +341,6 @@ static int skip_channel(int x)
|
|||
only_span);
|
||||
exit(1);
|
||||
}
|
||||
if (only_span && only_span != spanno)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -441,7 +427,6 @@ int spanconfig(char *keyword, char *args)
|
|||
error("Span number should be a valid span number, not '%s'\n", realargs[0]);
|
||||
return -1;
|
||||
}
|
||||
current_span = span;
|
||||
declared_spans[span] = 1;
|
||||
res = sscanf(realargs[1], "%d", &timing);
|
||||
if ((res != 1) || (timing < 0) || (timing > MAX_TIMING)) {
|
||||
|
@ -614,7 +599,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
int master=0;
|
||||
int dacschan = 0;
|
||||
char *idle;
|
||||
int is_digital;
|
||||
bzero(chans, sizeof(chans));
|
||||
strtok(args, ":");
|
||||
idle = strtok(NULL, ":");
|
||||
|
@ -626,7 +610,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
if (res <= 0)
|
||||
return -1;
|
||||
for (x=1;x<DAHDI_MAX_CHANNELS;x++) {
|
||||
is_digital = 0;
|
||||
if (chans[x]) {
|
||||
if (slineno[x]) {
|
||||
error("Channel %d already configured as '%s' at line %d\n", x, sig[x], slineno[x]);
|
||||
|
@ -672,7 +655,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
return -1;
|
||||
cc[x].sigtype = DAHDI_SIG_CAS;
|
||||
sig[x] = sigtype_to_str(cc[x].sigtype);
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "dacs")) {
|
||||
/* Setup channel for monitor */
|
||||
cc[x].idlebits = dacschan;
|
||||
|
@ -683,7 +665,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
cc[dacschan].sigtype = DAHDI_SIG_DACS;
|
||||
sig[x] = sigtype_to_str(cc[dacschan].sigtype);
|
||||
dacschan++;
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "dacsrbs")) {
|
||||
/* Setup channel for monitor */
|
||||
cc[x].idlebits = dacschan;
|
||||
|
@ -693,7 +674,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
cc[dacschan].idlebits = x;
|
||||
cc[dacschan].sigtype = DAHDI_SIG_DACS_RBS;
|
||||
sig[x] = sigtype_to_str(cc[dacschan].sigtype);
|
||||
is_digital = 1;
|
||||
dacschan++;
|
||||
} else if (!strcasecmp(keyword, "unused")) {
|
||||
cc[x].sigtype = 0;
|
||||
|
@ -701,7 +681,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
} else if (!strcasecmp(keyword, "indclear") || !strcasecmp(keyword, "bchan")) {
|
||||
cc[x].sigtype = DAHDI_SIG_CLEAR;
|
||||
sig[x] = sigtype_to_str(cc[x].sigtype);
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "clear")) {
|
||||
sig[x] = sigtype_to_str(DAHDI_SIG_CLEAR);
|
||||
if (master) {
|
||||
|
@ -711,7 +690,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
cc[x].sigtype = DAHDI_SIG_CLEAR;
|
||||
master = x;
|
||||
}
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "rawhdlc")) {
|
||||
sig[x] = sigtype_to_str(DAHDI_SIG_HDLCRAW);
|
||||
if (master) {
|
||||
|
@ -721,7 +699,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
cc[x].sigtype = DAHDI_SIG_HDLCRAW;
|
||||
master = x;
|
||||
}
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "nethdlc")) {
|
||||
sig[x] = sigtype_to_str(DAHDI_SIG_HDLCNET);
|
||||
memset(cc[x].netdev_name, 0, sizeof(cc[x].netdev_name));
|
||||
|
@ -735,7 +712,6 @@ static int chanconfig(char *keyword, char *args)
|
|||
}
|
||||
master = x;
|
||||
}
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "fcshdlc")) {
|
||||
sig[x] = sigtype_to_str(DAHDI_SIG_HDLCFCS);
|
||||
if (master) {
|
||||
|
@ -745,26 +721,26 @@ static int chanconfig(char *keyword, char *args)
|
|||
cc[x].sigtype = DAHDI_SIG_HDLCFCS;
|
||||
master = x;
|
||||
}
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "dchan")) {
|
||||
sig[x] = "D-channel";
|
||||
cc[x].sigtype = DAHDI_SIG_HDLCFCS;
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "hardhdlc")) {
|
||||
sig[x] = "Hardware assisted D-channel";
|
||||
cc[x].sigtype = DAHDI_SIG_HARDHDLC;
|
||||
is_digital = 1;
|
||||
} else if (!strcasecmp(keyword, "mtp2")) {
|
||||
sig[x] = "MTP2";
|
||||
cc[x].sigtype = DAHDI_SIG_MTP2;
|
||||
is_digital = 1;
|
||||
} else {
|
||||
fprintf(stderr, "Huh? (%s)\n", keyword);
|
||||
}
|
||||
if (is_digital)
|
||||
chan2span[x] = current_span;
|
||||
else
|
||||
current_span = 0;
|
||||
|
||||
if (cc[x].sigtype != DAHDI_SIG_CAS &&
|
||||
cc[x].sigtype != DAHDI_SIG_DACS &&
|
||||
cc[x].sigtype != DAHDI_SIG_DACS_RBS) {
|
||||
if (NULL != idle) {
|
||||
fprintf(stderr, "WARNING: idlebits are not valid on %s channels.\n", sig[x]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -816,8 +792,9 @@ static int apply_fiftysix(void)
|
|||
int chanfd;
|
||||
|
||||
for (x = 1; x < DAHDI_MAX_CHANNELS; x++) {
|
||||
if (skip_channel(x))
|
||||
if (skip_channel(x) || !cc[x].sigtype)
|
||||
continue;
|
||||
|
||||
chanfd = open("/dev/dahdi/channel", O_RDWR);
|
||||
if (chanfd == -1) {
|
||||
fprintf(stderr,
|
||||
|
@ -1540,15 +1517,27 @@ static int span_restrict(char *str)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static const char *SEM_NAME = "dahdi_cfg";
|
||||
static sem_t *lock = SEM_FAILED;
|
||||
|
||||
static void signal_handler(int signal)
|
||||
{
|
||||
if (SEM_FAILED != lock) {
|
||||
sem_unlink(SEM_NAME);
|
||||
}
|
||||
/* The default handler should have been restored before this handler was
|
||||
* called, so we can let the "normal" processing finish the cleanup. */
|
||||
raise(signal);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int c;
|
||||
char *buf;
|
||||
char *key, *value;
|
||||
int x,found;
|
||||
sem_t *lock = SEM_FAILED;
|
||||
const char *SEM_NAME = "dahdi_cfg";
|
||||
int exit_code = 0;
|
||||
struct sigaction act;
|
||||
|
||||
while((c = getopt(argc, argv, "fthc:vsd::C:S:")) != -1) {
|
||||
switch(c) {
|
||||
|
@ -1568,7 +1557,7 @@ int main(int argc, char *argv[])
|
|||
force++;
|
||||
break;
|
||||
case 't':
|
||||
fo_real = 0;
|
||||
dry_run = 1;
|
||||
break;
|
||||
case 's':
|
||||
stopmode = 1;
|
||||
|
@ -1594,6 +1583,10 @@ int main(int argc, char *argv[])
|
|||
fprintf(stderr, "%s\n", dahdi_tools_version);
|
||||
}
|
||||
|
||||
if (!restrict_channels && only_span) {
|
||||
error("-S requires -C\n");
|
||||
goto finish;
|
||||
}
|
||||
if (!restrict_channels && !only_span) {
|
||||
bool all_assigned = wait_for_all_spans_assigned(5);
|
||||
|
||||
|
@ -1661,15 +1654,28 @@ finish:
|
|||
if (verbose) {
|
||||
printconfig(fd);
|
||||
}
|
||||
if (!fo_real)
|
||||
exit(0);
|
||||
|
||||
if (dry_run)
|
||||
exit(0);
|
||||
|
||||
if (debug & DEBUG_APPLY) {
|
||||
printf("About to open Master device\n");
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
sigemptyset(&act.sa_mask);
|
||||
act.sa_handler = signal_handler;
|
||||
act.sa_flags = SA_RESETHAND;
|
||||
|
||||
if (sigaction(SIGTERM, &act, NULL) == -1) {
|
||||
perror("Failed to install SIGTERM handler.");
|
||||
exit(1);
|
||||
}
|
||||
if (sigaction(SIGINT, &act, NULL) == -1) {
|
||||
perror("Failed to install SIGINT handler.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
lock = sem_open(SEM_NAME, O_CREAT, O_RDWR, 1);
|
||||
if (SEM_FAILED == lock) {
|
||||
perror("Unable to create 'dahdi_cfg' mutex");
|
||||
|
|
|
@ -66,6 +66,8 @@ usage() {
|
|||
echo >&2 " add - assign spans, according to /etc/dahdi/assigned-spans.conf"
|
||||
echo >&2 " remove - unassign spans"
|
||||
echo >&2 " list - human-readable list of all spans"
|
||||
echo >&2 " matched - found spans matched in configuration"
|
||||
echo >&2 " unmatched - found spans not matched in configuration"
|
||||
echo >&2 " dumpconfig - dump current state as new configuration"
|
||||
echo >&2 ""
|
||||
echo >&2 " options:"
|
||||
|
@ -109,7 +111,7 @@ while true ; do
|
|||
break
|
||||
;;
|
||||
*)
|
||||
echo "Internal error!"
|
||||
echo >&2 "Internal error!"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
@ -215,10 +217,10 @@ unassign_all_spans() {
|
|||
sort | while read spandir; do
|
||||
local_spanno=`cat "$spandir/local_spanno"`
|
||||
if [ "$dry_run" = true ]; then
|
||||
echo "(dry-run) unassign $device $local_spanno"
|
||||
echo >&2 "(dry-run) unassign $device $local_spanno"
|
||||
continue
|
||||
fi
|
||||
echo "unassign $device $local_spanno"
|
||||
echo >&2 "unassign $device $local_spanno"
|
||||
if ! echo "$local_spanno" > "$device/unassign_span"; then
|
||||
echo >&2 "$0: failed unassigning '$local_spanno' in '$device'"
|
||||
fi
|
||||
|
@ -245,12 +247,12 @@ assign_device_spans() {
|
|||
if [ -d "$span" ]; then
|
||||
span_local_spanno=`cat "$span/local_spanno"`
|
||||
if [ "$span_local_spanno" != "$local_spanno" ]; then
|
||||
echo "WARNING: $span_local_spanno != $local_spanno"
|
||||
echo >&2 "WARNING: $span_local_spanno != $local_spanno"
|
||||
fi
|
||||
echo "$device [$local_spanno] already assigned to span $spanno. Skipping..."
|
||||
echo >&2 "$device [$local_spanno] already assigned to span $spanno. Skipping..."
|
||||
continue
|
||||
fi
|
||||
echo "assign $device: $s"
|
||||
echo >&2 "assign $device: $s"
|
||||
if ! echo "$s" > "$device/assign_span"; then
|
||||
echo >&2 "$0: failed assigning '$s' to '$device'"
|
||||
fi
|
||||
|
@ -267,21 +269,21 @@ match_device() {
|
|||
# We use case to enable shell-style globbing in configuration
|
||||
case "$hardware_id" in
|
||||
$id)
|
||||
[ "$verbose" = true ] && echo "match by hwid ($id ~ $hardware_id): $spanspecs"
|
||||
[ "$verbose" = true ] && echo >&2 "match by hwid ($id ~ $hardware_id): $spanspecs"
|
||||
assign_device_spans "$device"
|
||||
;;
|
||||
esac
|
||||
# We use case to enable shell-style globbing in configuration
|
||||
case "$location" in
|
||||
$id)
|
||||
[ "$verbose" = true ] && echo "match by location ($id ~ $location): $spanspecs"
|
||||
[ "$verbose" = true ] && echo >&2 "match by location ($id ~ $location): $spanspecs"
|
||||
assign_device_spans "$device"
|
||||
;;
|
||||
esac
|
||||
# We use case to enable shell-style globbing in configuration
|
||||
case "$devpath" in
|
||||
$id)
|
||||
[ "$verbose" = true ] && echo "match by devpath ($id ~ $devpath): $spanspecs"
|
||||
[ "$verbose" = true ] && echo >&2 "match by devpath ($id ~ $devpath): $spanspecs"
|
||||
assign_device_spans "$device"
|
||||
;;
|
||||
esac
|
||||
|
@ -293,7 +295,7 @@ assign_devices() {
|
|||
echo >&2 "$0: Missing '$DAHDISASSIGNEDSPANSCONF'"
|
||||
exit 1
|
||||
fi
|
||||
echo "using '$DAHDISASSIGNEDSPANSCONF'"
|
||||
echo >&2 "using '$DAHDISASSIGNEDSPANSCONF'"
|
||||
for device in $DEVICES
|
||||
do
|
||||
match_device "$device"
|
||||
|
@ -303,13 +305,71 @@ assign_devices() {
|
|||
auto_assign_devices() {
|
||||
for device in $DEVICES
|
||||
do
|
||||
echo "auto-assign $device"
|
||||
echo >&2 "auto-assign $device"
|
||||
if [ "$dry_run" != true ]; then
|
||||
echo 1 > "$device/auto_assign"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
dev_match_conf() {
|
||||
local devpath="$1"
|
||||
local location="$2"
|
||||
local hardware_id="$3"
|
||||
local local_spanno="$4"
|
||||
filter_conf | while read id spanspecs
|
||||
do
|
||||
spanno=`echo "$spanspecs" | cut -d: -f1`
|
||||
match_dev=no
|
||||
# We use case to enable shell-style globbing in configuration
|
||||
case "$hardware_id" in
|
||||
$id)
|
||||
match_dev=yes
|
||||
;;
|
||||
esac
|
||||
# We use case to enable shell-style globbing in configuration
|
||||
case "$location" in
|
||||
$id)
|
||||
match_dev=yes
|
||||
;;
|
||||
esac
|
||||
# We use case to enable shell-style globbing in configuration
|
||||
case "$devpath" in
|
||||
$id)
|
||||
match_dev=yes
|
||||
;;
|
||||
esac
|
||||
if [ "$match_dev" = 'yes' -a "$local_spanno" = "$spanno" ]; then
|
||||
#printf "%-8s (%s) %-14s %s %s\n" "$local_spanno" "$spanno" "[$hardware_id]" "$location" "$devpath"
|
||||
echo "[$hardware_id]:$local_spanno"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
list_devices() {
|
||||
wanted="$1"
|
||||
if [ ! -f "$DAHDISASSIGNEDSPANSCONF" ]; then
|
||||
echo >&2 "$0: Missing '$DAHDISASSIGNEDSPANSCONF'"
|
||||
exit 1
|
||||
fi
|
||||
echo >&2 "using '$DAHDISASSIGNEDSPANSCONF'"
|
||||
for device in $DEVICES
|
||||
do
|
||||
devpath=`cd "$device" && pwd -P`
|
||||
location='@'`attr_clean "$device/location"`
|
||||
hardware_id=`attr_clean "$device/hardware_id"`
|
||||
for local_spanno in `cut -d: -f1 "$device/spantype"`
|
||||
do
|
||||
found=`dev_match_conf "$devpath" "$location" "$hardware_id" "$local_spanno"`
|
||||
if [ "$wanted" = "unmatched" ]; then
|
||||
[ -z "$found" ] && echo "[$hardware_id]:$local_spanno"
|
||||
else
|
||||
[ -z "$found" ] || echo "[$hardware_id]:$local_spanno"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
case "$action" in
|
||||
auto)
|
||||
auto_assign_devices
|
||||
|
@ -326,6 +386,12 @@ list)
|
|||
dumpconfig)
|
||||
dump_config
|
||||
;;
|
||||
matched)
|
||||
list_devices "matched"
|
||||
;;
|
||||
unmatched)
|
||||
list_devices "unmatched"
|
||||
;;
|
||||
*)
|
||||
echo >&2 "Bad action='$action'"
|
||||
usage
|
||||
|
|
|
@ -69,6 +69,7 @@ usage() {
|
|||
echo >&2 "Usage: $0 [options] action [devpath ...]"
|
||||
echo >&2 " action:"
|
||||
echo >&2 " set - set spans to E1/T1 according to /etc/dahdi/span-types.conf"
|
||||
echo >&2 " compare - show config values that differ from system"
|
||||
echo >&2 " list - human-readable list of all spans"
|
||||
echo >&2 " dumpconfig - dump current state in /etc/dahdi/span-types.conf format"
|
||||
echo >&2 ""
|
||||
|
@ -88,6 +89,8 @@ if [ $? != 0 ]; then
|
|||
usage
|
||||
fi
|
||||
|
||||
compare=false
|
||||
|
||||
# Note the quotes around `$TEMP': they are essential!
|
||||
eval set -- "$TEMP"
|
||||
|
||||
|
@ -321,13 +324,26 @@ handle_span() {
|
|||
echo >&2 "Set $devname span $spanno = $val"
|
||||
fi
|
||||
if [ "$dry_run" != 'true' ]; then
|
||||
echo "$spanno:$val" > "$attr_file"
|
||||
if [ "$compare" = 'true' ]; then
|
||||
config="$spanno:$val"
|
||||
system=`grep "$spanno:" "$attr_file"`
|
||||
if [ "$config" != "$system" ]; then
|
||||
|
||||
active_val=`echo $system | cut -d: -f2`
|
||||
echo "$devname $spanno $val $active_val" >>"$compare_results_file"
|
||||
fi
|
||||
else
|
||||
echo "$spanno:$val" > "$attr_file"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
set_all_devices() {
|
||||
span_differs='false'
|
||||
SPANS_DIFFER='false'
|
||||
|
||||
if [ ! -f "$DAHDISPANTYPESCONF" ]; then
|
||||
echo >&2 "$0: Missing configuration '$DAHDISPANTYPESCONF'"
|
||||
exit 1
|
||||
|
@ -348,6 +364,16 @@ set_all_devices() {
|
|||
esac
|
||||
done
|
||||
done
|
||||
if [ "$compare" = 'true' ]; then
|
||||
if [ -s "$compare_results_file" ]; then
|
||||
echo "# Device Unit Config Active"
|
||||
cat "$compare_results_file"
|
||||
rm -f "$compare_results_file"
|
||||
exit 5
|
||||
fi
|
||||
rm -f "$compare_results_file"
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
case "$action" in
|
||||
|
@ -360,6 +386,11 @@ dumpconfig)
|
|||
set)
|
||||
set_all_devices
|
||||
;;
|
||||
compare)
|
||||
compare=true
|
||||
compare_results_file=`mktemp`
|
||||
set_all_devices
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
|
|
|
@ -64,7 +64,7 @@ void hup_handler(int sig)
|
|||
printf("\n--- Results after %d passes ---\n", pass);
|
||||
printf("Best: %.3f%% -- Worst: %.3f%% -- Average: %f%%\n",
|
||||
best, worst, pass ? total/pass : 100.00);
|
||||
printf("Cummulative Accuracy (not per pass): %0.3f\n",
|
||||
printf("Cumulative Accuracy (not per pass): %0.3f\n",
|
||||
pass ? accuracy : 0.0);
|
||||
exit(0);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
*debhelper*
|
||||
*.substvars
|
||||
.debhelper/
|
||||
autoreconf.after
|
||||
autoreconf.before
|
||||
dahdi.udev
|
||||
dahdi/
|
||||
files
|
||||
libtonezone-dev/
|
||||
libtonezone2.0/
|
||||
savedfiles.cpio
|
||||
tmp/
|
|
@ -0,0 +1,89 @@
|
|||
Echo Canceller
|
||||
--------------
|
||||
In DAHDI (software) echo cancellers are separate modules, that are
|
||||
automatically loaded if their name is used in /etc/dahdi/system.conf .
|
||||
dahdi_genconf, the configuration generator, thus defaults to creating a
|
||||
system.conf with an echocanceller line for each channel. By default it is
|
||||
'mg2' (the MG2 echo canceller) but this can be changed by setting
|
||||
'echocanceller' (see the sample genconf_parameters file).
|
||||
|
||||
The Debian package of dahdi-linux is patched to include support of the
|
||||
echo canceller OSLEC. Thus dahdi-tools has been patched accordingly to
|
||||
make it the default echo canceller, and to remove 'echo' as well when
|
||||
unloading modules.
|
||||
|
||||
However if you, for any strange reason, use a version of the DAHDI
|
||||
kernel modules that does not include a working dahdi_echocan_oslec.ko,
|
||||
just set in /etc/dahdi/genconf_parameters:
|
||||
|
||||
echo_can mg2
|
||||
|
||||
|
||||
FXOTune
|
||||
-------
|
||||
FXOTune is a utility provided by Digium for fine-tuning parameters of the
|
||||
FXO modules of their TDM cards and compatibles, as well as of those of the
|
||||
Xorcom Astribank.
|
||||
|
||||
This package includes the fxotune utility. It will also load configuration
|
||||
from /etc/fxotune.conf if fxotune was used to tune the FXO modules. Note
|
||||
that fxotune will not work with X100P and similar cards.
|
||||
|
||||
|
||||
Supported tone-zones
|
||||
--------------------
|
||||
DAHDI is capable of playing ring tone, buy tone etc. for a large variety of
|
||||
countries. This is done using the loadzone and defaultzone settings in
|
||||
system.conf. A list of tone-zones supported by DAHDI and libtonezone is
|
||||
included in the file tonezones.txt in the documentation directory.
|
||||
|
||||
Example section of system.conf:
|
||||
loadzone=us,uk,de
|
||||
defaultzone=us
|
||||
|
||||
|
||||
dahdi vs. dahdi-linux
|
||||
---------------------
|
||||
Upstream DAHDI is split to two parts: dahdi-linux are parts that are
|
||||
supposed to be linux-specific, whereas dahdi-tools are supposed to be
|
||||
generic utilities to use the DAHDI interface.
|
||||
|
||||
DAHDI-linux includes mostly kernel modules, but also udev rules, xpp
|
||||
initialization scripts and firmwares (latter are stripped from the
|
||||
Debian package). Those are included in the package dahdi-linux.
|
||||
|
||||
Most of the dahdi utilities, e.g. dahdi_cfg, dahdi_test, dahdi_monitor
|
||||
and the dahdi-perl utilities are included in the package 'dahdi' that is
|
||||
built from the source package dahdi-tools.
|
||||
|
||||
|
||||
Automatic startup
|
||||
-----------------
|
||||
There is work in progress to start DAHDI devices automatically.
|
||||
See also http://docs.tzafrir.org.il/dahdi-tools/#_initialization and for
|
||||
the low-level description:
|
||||
http://docs.tzafrir.org.il/dahdi-linux/#_span_assignments
|
||||
|
||||
The dahdi-linux package sets dahdi.auto_assigned_spans to 0 by default,
|
||||
but the dahdi-tools should have the required scriptary in place to make
|
||||
sure an upgrade will not break an existing system. That said, if your
|
||||
system has more than one DAHDI device, you should create a
|
||||
/etc/dahdi/assigned-spans.conf using 'dahdi_genconf assignedspan' (or
|
||||
manually) rather than relying on any other ordering mechanism.
|
||||
|
||||
Much work has been put in place to make sure configurations
|
||||
work as before if there are no changes. It is still recommended to create
|
||||
a span-assignments file for your setup if you have more than one device:
|
||||
|
||||
dahdi_genconf assigedspans
|
||||
|
||||
The udev hook scripts run two main hooks:
|
||||
* /usr/share/dahdi/dahdi_handle_device:
|
||||
Run when a new DAHDI device is added or removed. Mainly to assign
|
||||
spans.
|
||||
* /usr/share/dahdi/dahdi_config_span:
|
||||
Run when a new DAHDI span is added or removed. Mainly to configure
|
||||
the new spans.
|
||||
|
||||
As you would expect, there are .d directories for the scripts and those
|
||||
are places for your hooks, if needed.
|
|
@ -0,0 +1,9 @@
|
|||
The packaging is based on the upstream git repository. However, the
|
||||
upstream release tarballs are different.
|
||||
|
||||
* We use pristine-tar.
|
||||
* We manually clean some generated files at build time (we re-create
|
||||
them anyway).
|
||||
|
||||
Before building a new release, be sure to download the tarball and
|
||||
commit it with pristine-tar.
|
|
@ -0,0 +1,3 @@
|
|||
* Transition from zaptel?
|
||||
* Fix copyright
|
||||
* xpp/README.Astribank.html
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
|||
dahdi_tool
|
||||
autoconfig.h
|
||||
genconf_parameters.sample
|
||||
version.c
|
||||
debian/dahdi.udev
|
||||
xpp/dahdi_genconf.8.html
|
||||
xpp/dahdi_hardware.8.html
|
||||
xpp/dahdi_registration.8.html
|
||||
xpp/lsdahdi.8.html
|
||||
xpp/twinstar.8.html
|
||||
xpp/xpp_blink.8.html
|
||||
xpp/xpp_sync.8.html
|
||||
|
||||
# Autotools files:
|
||||
Makefile
|
||||
config.log
|
||||
config.status
|
||||
doc/Makefile
|
||||
hotplug/Makefile
|
||||
libtool
|
||||
makeopts
|
||||
ppp/Makefile
|
||||
stamp-h1
|
||||
xpp/Makefile
|
||||
xpp/oct612x/Makefile
|
||||
xpp/perl_modules/Makefile
|
||||
xpp/xtalk/Makefile
|
||||
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,57 @@
|
|||
Source: dahdi-tools
|
||||
Section: comm
|
||||
Priority: optional
|
||||
Maintainer: Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>
|
||||
Uploaders: Tzafrir Cohen <tzafrir@debian.org>, Mark Purcell <msp@debian.org>
|
||||
# groff, man-db and asciidoc are required for generating documentation
|
||||
Build-Depends: debhelper (>= 10),
|
||||
autoconf,
|
||||
automake,
|
||||
cpio,
|
||||
pkg-config,
|
||||
linux-libc-dev,
|
||||
libnewt-dev,
|
||||
bzip2,
|
||||
libusb-1.0-0-dev,
|
||||
asciidoc-base | asciidoc,
|
||||
groff,
|
||||
man-db,
|
||||
Standards-Version: 4.3.0
|
||||
Homepage: http://www.asterisk.org/
|
||||
Vcs-Git: https://salsa.debian.org/pkg-voip-team/dahdi-tools.git
|
||||
Vcs-Browser: https://salsa.debian.org/pkg-voip-team/dahdi-tools
|
||||
Rules-Requires-Root: no
|
||||
|
||||
Package: dahdi
|
||||
Architecture: linux-any
|
||||
Multi-Arch: foreign
|
||||
Depends: ${shlibs:Depends}, ${perl:Depends}, ${misc:Depends}, procps, fxload, usbutils
|
||||
Description: utilities for using the DAHDI kernel modules
|
||||
DAHDI (formly Zaptel) is an interface for telephony devices used by e.g.
|
||||
the Asterisk PBX software. The dahdi-* packages provide the kernel
|
||||
DAHDI kernel modules and their required setup environment.
|
||||
.
|
||||
This package includes userspace utilities required to configure DAHDI
|
||||
modules.
|
||||
|
||||
Package: libtonezone2.0
|
||||
Section: libs
|
||||
Architecture: linux-any
|
||||
Multi-Arch: same
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: tonezone library (runtime)
|
||||
A library for generating tones to be sent through the DAHDI telephony
|
||||
interface.
|
||||
.
|
||||
This package contains the runtime library files.
|
||||
|
||||
Package: libtonezone-dev
|
||||
Section: libdevel
|
||||
Architecture: linux-any
|
||||
Multi-Arch: same
|
||||
Depends: libtonezone2.0 (= ${binary:Version}), ${misc:Depends}
|
||||
Description: tonezone library (development)
|
||||
A library for generating tones to be sent through the DAHDI telephony
|
||||
interface.
|
||||
.
|
||||
This package contains the development files.
|
|
@ -0,0 +1,17 @@
|
|||
Source: zaptel
|
||||
Section: comm
|
||||
Priority: extra
|
||||
Maintainer: Debian VoIP Team <pkg-voip-maintainers@lists.alioth.debian.org>
|
||||
Uploaders: Kilian Krause <kk@verfaction.de>, Jose Carlos Garcia Sogo <jsogo@debian.org>, Mark Purcell <msp@debian.org>, Santiago Garcia Mantinan <manty@debian.org>, Santiago Ruano Rincon <santiago@unicauca.edu.co>
|
||||
Build-Depends: debhelper (>> 3.0.0), bzip2
|
||||
Standards-Version: 3.6.1.1
|
||||
|
||||
Package: zaptel-modules-_KVERS_
|
||||
Architecture: any
|
||||
Provides: zaptel-modules
|
||||
Description: zaptel modules for Linux (kernel _KVERS_).
|
||||
This package contains the set of loadable kernel modules for the
|
||||
zapata telephony API.
|
||||
This package contains the compiled kernel modules for _KVERS_
|
||||
.
|
||||
In order to compile these modules use the module-assistant utility.
|
|
@ -0,0 +1,114 @@
|
|||
This package was debianized by Tzafrir Cohen <tzafrir.cohen@xorcom.com> on
|
||||
Tue, 26 Aug 2008 10:06:40 +0300
|
||||
|
||||
It was downloaded from
|
||||
http://downloads.asterisk.org/pub/telephony/dahdi-tools/
|
||||
|
||||
Copyright: (from dahdi_cfg.c)
|
||||
|
||||
* Written by Mark Spencer <markster@digium.com>
|
||||
* Based on previous works, designs, and architectures conceived and
|
||||
* written by Jim Dixon <jim@lambdatel.com>.
|
||||
*
|
||||
* Copyright (C) 2001 Jim Dixon / Zapata Telephony.
|
||||
* Copyright (C) 2001-2008 Digium, Inc.
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Primary Author: Mark Spencer <markster@digium.com>
|
||||
* Radio Support by Jim Dixon <jim@lambdatel.com>
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2 as published by the
|
||||
* Free Software Foundation. See the LICENSE file included with
|
||||
* this program for more details.
|
||||
|
||||
On Debian systems, a copy of the GNU General Public License Version 2
|
||||
may be found in /usr/share/common-licenses/GPL-2 .
|
||||
|
||||
Other Portions:
|
||||
dahdi_monitor.c: * Copyright (C) 2001 Jim Dixon / Zapata Telephony.
|
||||
dahdi_monitor.c: * Copyright (C) 2001-2008 Digium, Inc.
|
||||
dahdi_scan.c: * Copyright (C) 2007 Digium, Inc.
|
||||
dahdi_tool.c: * Copyright (C) 2001 Jim Dixon / Zapata Telephony.
|
||||
dahdi_tool.c: * Copyright (C) 2001-2008 Digium, Inc.
|
||||
sethdlc.c: * Copyright (C) 1999 - 2002 Krzysztof Halasa <khc@pm.waw.pl>
|
||||
sethdlc.c: "Copyright (C) 2000 - 2003 Krzysztof Halasa <khc@pm.waw.pl>\n"
|
||||
|
||||
Files in the xpp/ subdirectory:
|
||||
|
||||
* Written by Oron Peled <oron@actcom.co.il>
|
||||
* Copyright (C) 2004-2010, Xorcom
|
||||
|
||||
Perl programs and modules in the xpp/ directory:
|
||||
# This program is free software; you can redistribute and/or
|
||||
# modify it under the same terms as Perl itself.
|
||||
|
||||
Other scripts in the xpp directory:
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
|
||||
|
||||
Files in menuselect/:
|
||||
|
||||
menuselect is a GPLed program used in the build process of Asterisk and
|
||||
other Digium programs. Thus expect to find the same on those packages,
|
||||
and also not to find it in any binary package.
|
||||
|
||||
menuselect/Makefile:# Copyright (C) 2005-2008, Digium, Inc.
|
||||
menuselect/menuselect.c: * Copyright (C) 2005 - 2006, Russell Bryant
|
||||
menuselect/menuselect_curses.c: * Copyright (C) 2005 - 2006, Russell Bryant
|
||||
menuselect/menuselect.h: * Copyright (C) 2005-2006, Russell Bryant
|
||||
menuselect/menuselect_newt.c: * Copyright (C) 2008 Sean Bright
|
||||
menuselect/menuselect_stub.c: * Copyright (C) 2005 - 2006, Russell Bryant
|
||||
menuselect/missing:# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
|
||||
menuselect/README:Copyright (C) 2005-2006, Digium, Inc.
|
||||
menuselect/strcompat.c: * Copyright (C) 1999 - 2006, Digium, Inc.
|
||||
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
|
||||
Portions of menuselect/strcompat.c:
|
||||
* Based on Code from bsd-asprintf from OpenSSH
|
||||
* Copyright (c) 2004 Darren Tucker.
|
||||
*
|
||||
* Based originally on asprintf.c from OpenBSD:
|
||||
* Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
|
||||
Files under menuselect/mxml/:
|
||||
|
||||
mxml is a minimal XML parsing library used by Asterisk and co. Likewise
|
||||
used at build time for building menuselect above.
|
||||
|
||||
* Copyright 2003-2005 by Michael Sweet.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
|
||||
On Debian systems, a copy of the GNU General Public License may be found in
|
||||
/usr/share/common-licenses/GPL-2.
|
|
@ -0,0 +1 @@
|
|||
etc/init.d
|
|
@ -0,0 +1,13 @@
|
|||
Document: dahdi.astribank
|
||||
Title: Xorcom Astribank Documentation
|
||||
Author: Tzafrir Cohen
|
||||
Abstract: Technical Documentation of the Xorcom Astribank
|
||||
Section: Network/Communication
|
||||
|
||||
Format: HTML
|
||||
Index: /usr/share/doc/dahdi/README.Astribank.html
|
||||
Files: /usr/share/doc/dahdi/README.Astribank.html
|
||||
|
||||
Format: text
|
||||
Files: /usr/share/doc/dahdi/README.Astribank.gz
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
Document: dahdi
|
||||
Title: DAHDI Telephony Interface Driver
|
||||
Author: Tzafrir Cohen
|
||||
Abstract: Basic documentation of the DAHDI telephony interface
|
||||
Section: Network/Communication
|
||||
|
||||
Format: HTML
|
||||
Index: /usr/share/doc/dahdi/README.html
|
||||
Files: /usr/share/doc/dahdi/README.html
|
||||
|
||||
Format: text
|
||||
Files: /usr/share/doc/dahdi/README.gz
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
hotplug/span_config.d/50-asterisk
|
||||
xpp/genconf_parameters
|
||||
*.conf.sample
|
|
@ -0,0 +1,6 @@
|
|||
usr/sbin/*
|
||||
usr/share/perl5/Dahdi*
|
||||
usr/share/dahdi/*
|
||||
usr/share/man/man8/*
|
||||
usr/lib/dracut/dracut.conf.d/50-dahdi.conf
|
||||
usr/share/bash-completion/completions/dahdi
|
|
@ -0,0 +1 @@
|
|||
dahdi: mknod-in-maintainer-script postinst:16
|
|
@ -0,0 +1,5 @@
|
|||
README
|
||||
README.html
|
||||
tonezones.txt
|
||||
xpp/README.Astribank
|
||||
README.Astribank.html
|
|
@ -0,0 +1,3 @@
|
|||
usr/include/dahdi/tonezone.h
|
||||
usr/lib/*/lib*.a
|
||||
usr/lib/*/lib*.so
|
|
@ -0,0 +1 @@
|
|||
tonezones.txt
|
|
@ -0,0 +1 @@
|
|||
usr/lib/*/lib*.so.2*
|
|
@ -0,0 +1,12 @@
|
|||
libtonezone.so.2.0 libtonezone2.0 #MINVER#
|
||||
* Build-Depends-Package: libtonezone-dev
|
||||
builtin_zones@Base 1:2.2.1.1
|
||||
dahdi_tools_version@Base 1:2.2.1.1
|
||||
tone_zone_find@Base 1:2.2.1.1
|
||||
tone_zone_find_by_num@Base 1:2.2.1.1
|
||||
tone_zone_get_zone@Base 1:2.2.1.1
|
||||
tone_zone_play_tone@Base 1:2.2.1.1
|
||||
tone_zone_register@Base 1:2.2.1.1
|
||||
tone_zone_register_zone@Base 1:2.2.1.1
|
||||
tone_zone_set_zone@Base 1:2.2.1.1
|
||||
tone_zone_tone_name@Base 1:2.2.1.1
|
|
@ -0,0 +1,71 @@
|
|||
#!/bin/sh
|
||||
|
||||
# debian/modulestest: a postbuild script to build zaptel modules
|
||||
# example usage:
|
||||
#
|
||||
# svn-buildpackage --svn-postbuild='debian/modulestest -r' --svn-ignore-new
|
||||
|
||||
# At least one of the following two must be set to a sensible value:
|
||||
# If both are empty, the script does nothing useful)
|
||||
#
|
||||
# kernel versions: Comma-separated. Use those if you have their
|
||||
# kernel-headers/linux-headers packages installed
|
||||
#
|
||||
|
||||
# Full pathes to trees:
|
||||
# Use this to provide a full path to a custom kernel tree:
|
||||
#KERNEL_SOURCES=$HOME/Proj/Debs/Kernel/SwSusp/linux-2.6.15-rc5
|
||||
KERNEL_HEADERS=
|
||||
KERNEL_SOURCES=
|
||||
# run module-asustant with environment params that will generate
|
||||
# .changes files even without signing
|
||||
MODASS="env SIGNCHANGES=1 DEBSIGNCOMMAND=not_an_executable m-a"
|
||||
me=`basename $0`
|
||||
|
||||
# workaround for silly bash parsing issue in our build scripts:
|
||||
if [ "$#" -lt 1 ]; then
|
||||
set -- $MODULESTEST_ARGS
|
||||
fi
|
||||
|
||||
while getopts ah:rs:t arg
|
||||
do
|
||||
case "$arg" in
|
||||
a) # All of the kernel-headers packages installed:
|
||||
KERNEL_HEADERS=`COLUMNS=160 dpkg -l 'kernel-headers-2.[46].*-*-*' | awk '/^.i/{print $2}' | sed -e 's/^kernel-headers-//'| xargs| tr ' ' ,`
|
||||
;;
|
||||
h) KERNEL_HEADERS=$OPTARG;;
|
||||
s) KERNEL_SOURCES=$OPTARG;;
|
||||
r) KERNEL_HEADERS=`uname -r`;;
|
||||
t) # TODO: make this test per-distro or something
|
||||
KERNEL_HEADERS=2.4.27-2-386,2.6.8-2-686-smp
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $(( $OPTIND-1 ))
|
||||
|
||||
echo "Building for: Headers: $KERNEL_HEADERS, Sources: $KERNEL_SOURCES"
|
||||
|
||||
if [ "$KERNEL_HEADERS" != '' ]; then hdrs_sw="-l $KERNEL_HEADERS"; fi
|
||||
if [ "$KERNEL_SOURCES" != '' ]; then srcs_sw="-k $KERNEL_SOURCES"; fi
|
||||
|
||||
# must be absolute for m-a ta accept TARBALL:
|
||||
# Also note that $PWD is ugly and is about to be deleted. We need
|
||||
# $PWD/..
|
||||
TOP_DIR=`dirname $PWD`
|
||||
MODS_DIR=$TOP_DIR/modules
|
||||
TAR_BALL=$MODS_DIR/usr/src/zaptel.tar.bz2
|
||||
DEB=$TOP_DIR/$PACKAGE-source_${TAG_VERSION}_all.deb
|
||||
LOG_FILE=$TOP_DIR/$PACKAGE-modules-build-$TAG_VERSION.log
|
||||
|
||||
rm -f $LOG_FILE
|
||||
dpkg -x $DEB $MODS_DIR
|
||||
|
||||
if [ "$hdrs_sw" != '' ]; then
|
||||
TARBALL=$TAR_BALL $MODASS -u $TOP_DIR -t -i -f $hdrs_sw build $PACKAGE >>$LOG_FILE
|
||||
fi
|
||||
if [ "$srcs_sw" != '' ]; then
|
||||
TARBALL=$TAR_BALL $MODASS -u $TOP_DIR -t -i -f $srcs_sw build $PACKAGE >>$LOG_FILE
|
||||
fi
|
||||
|
||||
ls -l $TOP_DIR/$PACKAGE-modules-*_$TAG_VERSION+*.deb
|
||||
echo "$me: Log file: $LOG_FILE"
|
|
@ -0,0 +1,43 @@
|
|||
From: Jaco Kroon <jaco@uls.co.za>
|
||||
Subject: Remove unused union names that break build
|
||||
Bug: https://issues.asterisk.org/jira/browse/DAHTOOL-85
|
||||
|
||||
diff --git a/xpp/mpptalk.c b/xpp/mpptalk.c
|
||||
index fdb34f1..8fb3687 100644
|
||||
--- a/xpp/mpptalk.c
|
||||
+++ b/xpp/mpptalk.c
|
||||
@@ -237,7 +237,7 @@ union XTALK_PDATA(MPP) {
|
||||
MEMBER(MPP, TWS_PORT_GET_REPLY);
|
||||
MEMBER(MPP, TWS_PWR_GET);
|
||||
MEMBER(MPP, TWS_PWR_GET_REPLY);
|
||||
-} PACKED members;
|
||||
+} PACKED;
|
||||
|
||||
/*
|
||||
* Statuses
|
||||
diff --git a/xpp/xtalk/xtalk_raw.c b/xpp/xtalk/xtalk_raw.c
|
||||
index 49e47d5..251a502 100644
|
||||
--- a/xpp/xtalk/xtalk_raw.c
|
||||
+++ b/xpp/xtalk/xtalk_raw.c
|
||||
@@ -48,7 +48,7 @@ CMD_DEF(XTALK, ACK,
|
||||
|
||||
union XTALK_PDATA(XTALK) {
|
||||
MEMBER(XTALK, ACK);
|
||||
-} PACKED members;
|
||||
+} PACKED;
|
||||
|
||||
const struct xtalk_protocol xtalk_raw_proto = {
|
||||
.name = "XTALK-RAW",
|
||||
diff --git a/xpp/xtalk/xtalk_sync.c b/xpp/xtalk/xtalk_sync.c
|
||||
index 18a5cad..ffa79d2 100644
|
||||
--- a/xpp/xtalk/xtalk_sync.c
|
||||
+++ b/xpp/xtalk/xtalk_sync.c
|
||||
@@ -60,7 +60,7 @@ union XTALK_PDATA(XTALK) {
|
||||
MEMBER(XTALK, ACK);
|
||||
MEMBER(XTALK, PROTO_GET);
|
||||
MEMBER(XTALK, PROTO_GET_REPLY);
|
||||
-} PACKED members;
|
||||
+} PACKED;
|
||||
|
||||
const struct xtalk_protocol xtalk_sync_proto = {
|
||||
.name = "XTALK-SYNC",
|
|
@ -0,0 +1,134 @@
|
|||
From: Tzafrir Cohen <tzafrir@debian.org>
|
||||
Date: Sat, 2 Mar 2019 01:37:51 +0200
|
||||
Bug: https://issues.asterisk.org/jira/browse/DAHTOOL-82
|
||||
Subject: [PATCH] handle both spantypes and dahdi_spantypes in sysfs
|
||||
|
||||
dahdi_span_types and dahdi_span_assignments use information from sysfs.
|
||||
As of kernel 4.13, the name of the attribute chnaged. Handle both old
|
||||
and new name.
|
||||
|
||||
Signed-off-by: Tzafrir Cohen <tzafrir@debian.org>
|
||||
---
|
||||
dahdi_span_assignments | 15 ++++++++++++---
|
||||
dahdi_span_types | 23 ++++++++++++++++++-----
|
||||
2 files changed, 30 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dahdi_span_assignments b/dahdi_span_assignments
|
||||
index 9b4f305..235d61e 100755
|
||||
--- a/dahdi_span_assignments
|
||||
+++ b/dahdi_span_assignments
|
||||
@@ -151,6 +151,15 @@ attr_clean() {
|
||||
cat "$1" 2>/dev/null | tr -d '\n' | tr '!' '/' | tr -c 'a-zA-Z0-9/:.-' '_'
|
||||
}
|
||||
|
||||
+get_device_spannos() {
|
||||
+ device=$1
|
||||
+ sp_file="dahdi_spantype"
|
||||
+ if [ ! -f "$device/$sp_file" ]; then
|
||||
+ sp_file="spantype"
|
||||
+ fi
|
||||
+ cut -d: -f1 "$device/$sp_file"
|
||||
+}
|
||||
+
|
||||
show_devices() {
|
||||
|
||||
for device in $DEVICES
|
||||
@@ -158,7 +167,7 @@ show_devices() {
|
||||
devpath=`cd "$device" && pwd -P`
|
||||
location='@'`attr_clean "$device/location"`
|
||||
hardware_id=`attr_clean "$device/hardware_id"`
|
||||
- for local_spanno in `cut -d: -f1 "$device/spantype"`
|
||||
+ for local_spanno in `get_device_spannos "$device"`
|
||||
do
|
||||
span=`grep 2>/dev/null -Hw "$local_spanno" "$device/span-"*"/local_spanno" | \
|
||||
sed -e 's,/local_spanno:.*,,' -e 's,.*/,,'`
|
||||
@@ -193,7 +202,7 @@ dump_config() {
|
||||
id="$devpath"
|
||||
fi
|
||||
echo "# Device: [$hardware_id] @$location $devpath"
|
||||
- for local_spanno in `cut -d: -f1 "$device/spantype"`
|
||||
+ for local_spanno in `get_device_spannos "$device"`
|
||||
do
|
||||
span=`grep 2>/dev/null -Hw "$local_spanno" "$device/span-"*"/local_spanno" | \
|
||||
sed -e 's,/local_spanno:.*,,' -e 's,.*/,,'`
|
||||
@@ -358,7 +367,7 @@ list_devices() {
|
||||
devpath=`cd "$device" && pwd -P`
|
||||
location='@'`attr_clean "$device/location"`
|
||||
hardware_id=`attr_clean "$device/hardware_id"`
|
||||
- for local_spanno in `cut -d: -f1 "$device/spantype"`
|
||||
+ for local_spanno in `get_device_spannos "$device"`
|
||||
do
|
||||
found=`dev_match_conf "$devpath" "$location" "$hardware_id" "$local_spanno"`
|
||||
if [ "$wanted" = "unmatched" ]; then
|
||||
diff --git a/dahdi_span_types b/dahdi_span_types
|
||||
index 5fce110..f44b494 100755
|
||||
--- a/dahdi_span_types
|
||||
+++ b/dahdi_span_types
|
||||
@@ -172,6 +172,15 @@ attr_clean() {
|
||||
cat "$1" 2>/dev/null | tr -d '\n' | tr '!' '/' | tr -c 'a-zA-Z0-9/:.-' '_'
|
||||
}
|
||||
|
||||
+get_device_spantype_file() {
|
||||
+ device=$1
|
||||
+ sp_file="dahdi_spantype"
|
||||
+ if [ ! -f "$device/$sp_file" ]; then
|
||||
+ sp_file="spantype"
|
||||
+ fi
|
||||
+ echo "$device/$sp_file"
|
||||
+}
|
||||
+
|
||||
show_spantypes() {
|
||||
echo "# PRI span types (E1/T1/J1)"
|
||||
for device in $DEVICES
|
||||
@@ -179,7 +188,8 @@ show_spantypes() {
|
||||
devpath=`cd "$device" && pwd -P`
|
||||
location='@'`attr_clean "$device/location"`
|
||||
hardware_id=`attr_clean "$device/hardware_id"`
|
||||
- cat "$device/spantype" | while read st; do
|
||||
+ sp_file=`get_device_spantype_file "$device"`
|
||||
+ cat "$sp_file" | while read st; do
|
||||
case "$st" in
|
||||
*:[ETJ]1)
|
||||
printf "%-10s %-20s %-30s %s\n" \
|
||||
@@ -192,7 +202,7 @@ show_spantypes() {
|
||||
}
|
||||
|
||||
list_pri_spantypes() {
|
||||
- find $DEVICES -follow -maxdepth 1 -name spantype | \
|
||||
+ find $DEVICES -follow -maxdepth 1 -name spantype -or -name dahdi_spantype | \
|
||||
xargs cat | \
|
||||
sed -n '/:[ETJ]1$/s/^.*://p' | \
|
||||
sort -u | \
|
||||
@@ -255,7 +265,8 @@ dump_config() {
|
||||
id="$devpath"
|
||||
fi
|
||||
echo "# Device: [$hardware_id] @$location $devpath"
|
||||
- cat "$device/spantype" | while read st; do
|
||||
+ sp_file=`get_device_spantype_file "$device"`
|
||||
+ cat "$sp_file" | while read st; do
|
||||
case "$st" in
|
||||
*:[ETJ]1)
|
||||
if [ "$num_spantypes" -eq 1 ]; then
|
||||
@@ -281,7 +292,8 @@ filter_conf() {
|
||||
handle_span() {
|
||||
device="$1"
|
||||
spantype="$2"
|
||||
- attr_file="$device/spantype"
|
||||
+ sp_file=`get_device_spantype_file "$device"`
|
||||
+ attr_file="$sp_file"
|
||||
devpath=`cd "$device" && pwd -P`
|
||||
devname=`echo "$device" | sed "s,$devbase/,,"`
|
||||
location='@'`attr_clean "$device/location"`
|
||||
@@ -351,7 +363,8 @@ set_all_devices() {
|
||||
for device in $DEVICES
|
||||
do
|
||||
devname=`echo "$device" | sed "s,$devbase/,,"`
|
||||
- cat "$device/spantype" | while read spantype; do
|
||||
+ sp_file=`get_device_spantype_file "$device"`
|
||||
+ cat "$sp_file" | while read spantype; do
|
||||
case "$spantype" in
|
||||
*:[ETJ]1)
|
||||
handle_span "$device" "$spantype"
|
||||
--
|
||||
2.20.1
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
Subject: Make OSLEC the default DAHDI echo canceller
|
||||
Author: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
|
||||
Forwarded: no
|
||||
|
||||
Our dahdi-linux packages provide OSLEC, which is generally a better echo
|
||||
canceller than those included with DAHDI. Thus we should make it the
|
||||
default echo canceller in generated configurations.
|
||||
|
||||
Debian-specific configuration tweak.
|
||||
|
||||
--- a/xpp/perl_modules/Dahdi/Config/Params.pm
|
||||
+++ b/xpp/perl_modules/Dahdi/Config/Params.pm
|
||||
@@ -111,7 +111,7 @@ sub item($$@) {
|
||||
group_lines => '0',
|
||||
brint_overlap => 'no',
|
||||
bri_sig_style => 'bri_ptmp',
|
||||
- echo_can => 'mg2',
|
||||
+ echo_can => 'oslec',
|
||||
bri_hardhdlc => 'auto',
|
||||
pri_connection_type => 'PRI',
|
||||
r2_idle_bits => '1101',
|
|
@ -0,0 +1,16 @@
|
|||
From: Tzafrir Cohen <tzafrir@debian.org>
|
||||
Subject: Change defaults for some install paths
|
||||
|
||||
Index: dahdi-tools/Makefile.am
|
||||
===================================================================
|
||||
--- dahdi-tools.orig/Makefile.am 2020-08-19 23:41:45.003051626 +0300
|
||||
+++ dahdi-tools/Makefile.am 2020-08-19 23:41:44.999051671 +0300
|
||||
@@ -111,7 +111,7 @@
|
||||
@echo "Compatibility symlinks (should be removed in the future)"
|
||||
ln -sf libtonezone.so.2.0.0 $(DESTDIR)$(libdir)/libtonezone.so.2.0
|
||||
|
||||
-bashcompdir = $(sysconfdir)/bash_completion.d
|
||||
+bashcompdir = $(datadir)/bash-completion/completions
|
||||
|
||||
install-data-hook:
|
||||
mkdir -p $(DESTDIR)$(bashcompdir)
|
|
@ -0,0 +1,22 @@
|
|||
Author: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
|
||||
Description: Remove the useless utility dahdi_speed
|
||||
|
||||
It was useful long ago, but pointless now.
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index d43ce91..09e4f12 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -35,11 +35,11 @@ sbin_PROGRAMS = \
|
||||
dahdi_maint \
|
||||
dahdi_monitor \
|
||||
dahdi_cfg \
|
||||
- dahdi_speed \
|
||||
dahdi_scan \
|
||||
fxotune
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
+ dahdi_speed \
|
||||
fxstest \
|
||||
patgen \
|
||||
pattest \
|
|
@ -0,0 +1,8 @@
|
|||
zaptel_perl
|
||||
echocan_oslec
|
||||
remove_dahdi_speed
|
||||
soname.patch
|
||||
dahdi_spantypes.patch
|
||||
typos.patch
|
||||
dahdi-tools-3.1.0-fno-common.patch
|
||||
fix_install_paths.patch
|
|
@ -0,0 +1,17 @@
|
|||
From: Tzafrir Cohen <tzafrir@debian.org>
|
||||
Subject: add extra digit to library SO name: 2.0
|
||||
|
||||
Asterisk and various other programs were already looking for that SO
|
||||
name.
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 826a7ec..2afe476 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -392,5 +392,6 @@ AC_CONFIG_FILES([
|
||||
xpp/perl_modules/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
+sed -i -e '/^soname_spec=/s/major/&.\\$revision/' libtool
|
||||
|
||||
AC_MSG_NOTICE(*** dahdi-tools build successfully configured ***)
|
|
@ -0,0 +1,14 @@
|
|||
Index: dahdi-tools/xpp/astribank_is_starting.8
|
||||
===================================================================
|
||||
--- dahdi-tools.orig/xpp/astribank_is_starting.8 2019-03-03 23:44:05.883016682 +0200
|
||||
+++ dahdi-tools/xpp/astribank_is_starting.8 2019-03-04 01:34:40.398114773 +0200
|
||||
@@ -85,7 +85,7 @@
|
||||
.SH BUGS
|
||||
Option ordering matter. The \fB\-v\fR and \fB\-d\fR options should precede
|
||||
the actions (\fB\-a\fR, \fB\-r\fR and \fB\-w\fR).
|
||||
-The \fB\-t\fItimeout\fR option should preceed the \fB\-w\fR option.
|
||||
+The \fB\-t\fItimeout\fR option should precede the \fB\-w\fR option.
|
||||
|
||||
.SH SEE ALSO
|
||||
semctl(3)
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
Subject: Set perl installation path to vendorlib
|
||||
Author: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
|
||||
Forwarded: no
|
||||
|
||||
Point DAHDI PERL modules to the right directory under which to install
|
||||
perl modules.
|
||||
|
||||
(sitelib in Debian is under /usr/local. We don't want to install there)
|
||||
|
||||
Debian-specific configuration.
|
||||
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -120,20 +120,22 @@ fi
|
||||
# - The "$datadir/perl5" directory otherwise (e.g: during "make distcheck")
|
||||
#
|
||||
AC_MSG_CHECKING(for perl libdir)
|
||||
+set -x
|
||||
m4_define([_PERL_LIBDIR_DEFAULT], [${datadir}/perl5])dnl
|
||||
AC_ARG_WITH(perllib,
|
||||
[AS_HELP_STRING([--with-perllib=PATH],
|
||||
- [Location of perl modules @<:@default=]_PERL_LIBDIR_DEFAULT[, or perl -V:sitelib@:>@])],
|
||||
+ [Location of perl modules @<:@default=]_PERL_LIBDIR_DEFAULT[, or perl -V:vendorlib@:>@])],
|
||||
[perllibdir=$withval],
|
||||
[
|
||||
if test "$prefix" = 'NONE' -o "$prefix" = '/usr'; then
|
||||
- eval `"$PERL" -V:sitelib`
|
||||
- perllibdir="$sitelib"
|
||||
+ eval `"$PERL" -V:vendorlib`
|
||||
+ perllibdir="$vendorlib"
|
||||
else
|
||||
perllibdir='_PERL_LIBDIR_DEFAULT'
|
||||
fi
|
||||
]
|
||||
)
|
||||
+set +x
|
||||
AC_SUBST([perllibdir], "$perllibdir")
|
||||
AC_MSG_RESULT([$perllibdir])
|
||||
AM_CONDITIONAL([PERL], [test "$perllibdir" != ''])
|
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/make -f
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# GNU copyright 1997 to 1999 by Joey Hess.
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||
|
||||
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
|
||||
CFLAGS += -g
|
||||
endif
|
||||
|
||||
CHANGED_FILES_LIST = debian/savedfiles.lst
|
||||
CHANGED_FILES_ARCHIVE = debian/savedfiles.cpio
|
||||
|
||||
%:
|
||||
dh $@ --with autoreconf
|
||||
|
||||
override_dh_autoreconf:
|
||||
if [ ! -f "$(CHANGED_FILES_ARCHIVE)" -a -f Makefile.in ]; then \
|
||||
cpio -o < $(CHANGED_FILES_LIST) > $(CHANGED_FILES_ARCHIVE); \
|
||||
fi
|
||||
dh_autoreconf
|
||||
|
||||
override_dh_autoreconf_clean:
|
||||
dh_autoreconf_clean
|
||||
if [ -f "$(CHANGED_FILES_ARCHIVE)" ]; then \
|
||||
cpio -idu < $(CHANGED_FILES_ARCHIVE) && \
|
||||
rm -f $(CHANGED_FILES_ARCHIVE); \
|
||||
fi
|
||||
|
||||
# An ugly workaround because those files are included in the tarball
|
||||
override_dh_clean:
|
||||
dh_clean -X autom4te.cache
|
||||
|
||||
|
||||
override_dh_auto_build:
|
||||
$(MAKE) all docs
|
||||
cat dahdi.rules xpp/xpp.rules >debian/dahdi.udev
|
||||
|
||||
override_dh_auto_clean:
|
||||
ifeq ($(wildcard Makefile),)
|
||||
$(MAKE) -f Makefile.legacy clean
|
||||
else
|
||||
$(MAKE) clean
|
||||
endif
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure
|
||||
|
||||
override_dh_auto_install:
|
||||
# also run the 'config' target, in addition to the 'install' target:
|
||||
dh_auto_install -- config
|
||||
rm $(CURDIR)/debian/tmp/usr/share/dahdi/span_config.d/50-asterisk
|
||||
rm $(CURDIR)/debian/tmp/usr/lib/*/libtonezone.la
|
||||
rm -rf $(CURDIR)/debian/tmp/etc/dahdi
|
||||
rm -rf $(CURDIR)/debian/tmp/etc/udev/rules.d
|
|
@ -0,0 +1,27 @@
|
|||
Makefile.in
|
||||
aclocal.m4
|
||||
autoconfig.h.in
|
||||
autom4te.cache/output.0
|
||||
autom4te.cache/output.1
|
||||
autom4te.cache/output.2
|
||||
autom4te.cache/requests
|
||||
autom4te.cache/traces.0
|
||||
autom4te.cache/traces.1
|
||||
autom4te.cache/traces.2
|
||||
auxdir/config.guess
|
||||
auxdir/config.sub
|
||||
auxdir/install-sh
|
||||
auxdir/ltmain.sh
|
||||
configure
|
||||
doc/Makefile.in
|
||||
hotplug/Makefile.in
|
||||
m4/libtool.m4
|
||||
m4/ltoptions.m4
|
||||
m4/ltsugar.m4
|
||||
m4/ltversion.m4
|
||||
m4/lt~obsolete.m4
|
||||
ppp/Makefile.in
|
||||
xpp/Makefile.in
|
||||
xpp/oct612x/Makefile.in
|
||||
xpp/perl_modules/Makefile.in
|
||||
xpp/xtalk/Makefile.in
|
|
@ -0,0 +1 @@
|
|||
3.0 (quilt)
|
|
@ -0,0 +1,184 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
g3LstQ==
|
||||
=vz6h
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -0,0 +1,4 @@
|
|||
version=3
|
||||
opts=uversionmangle=s/\-rc/~rc/,pgpsigurlmangle=s/$/.asc/ \
|
||||
https://downloads.asterisk.org/pub/telephony/dahdi-tools/releases/dahdi-tools-(.*)\.tar\.gz\
|
||||
debian uupdate
|
|
@ -0,0 +1,19 @@
|
|||
man_MANS = \
|
||||
dahdi_cfg.8 \
|
||||
dahdi_maint.8 \
|
||||
dahdi_monitor.8 \
|
||||
dahdi_scan.8 \
|
||||
dahdi_span_assignments.8 \
|
||||
dahdi_span_types.8 \
|
||||
dahdi_test.8 \
|
||||
dahdi_tool.8 \
|
||||
dahdi_waitfor_span_assignments.8 \
|
||||
fxotune.8
|
||||
|
||||
noinst_MANS = \
|
||||
dahdi_diag.8 \
|
||||
fxstest.8 \
|
||||
patgen.8 \
|
||||
pattest.8
|
||||
|
||||
EXTRA_DIST = $(man_MANS) $(noinst_MANS)
|
|
@ -41,10 +41,8 @@ Only shutdown spans.
|
|||
|
||||
.B \-S \fISPAN
|
||||
.RS
|
||||
Only apply changes to span no. \fISPAN\fR. For a digital span (with
|
||||
a 'span=' line in the configuration file) this will do. For an analog
|
||||
span you'll have to explicitly tell dahdi_cfg the range of channels,
|
||||
using \-C .
|
||||
Only apply changes to span no. \fISPAN\fR. You also need to specify the
|
||||
range of channels in the span explicitly with \-C.
|
||||
.RE
|
||||
|
||||
.B \-f
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
dahdi_span_types \- set line modes of DAHDI spans before assignment
|
||||
.SH SYNOPSIS
|
||||
|
||||
.B dahdi_span_types [\fIoptions\fB] <list|dumpconfig|set> \fB[\fIdevpath \fB...]
|
||||
.B dahdi_span_types [\fIoptions\fB] <list|dumpconfig|compare|set> \fB[\fIdevpath \fB...]
|
||||
|
||||
.SH DESCRIPTION
|
||||
The span type (the line mode: E1/T1/J1) must be set to a span before
|
||||
|
@ -58,6 +58,16 @@ device(s) specified in the command line (or all devices, if none
|
|||
specified).
|
||||
.RE
|
||||
|
||||
.B compare
|
||||
.RS
|
||||
Compare the settings on the system to those in the configuration file.
|
||||
For each line that applies to a device on the system, print it if the
|
||||
value to be set and the active value on the system differ.
|
||||
|
||||
The exit status is 0 if there is no difference and non-zero if a
|
||||
difference was detected.
|
||||
.RE
|
||||
|
||||
.B list
|
||||
.RS
|
||||
List line modes for all spans in the system which may be set with
|
||||
|
|
|
@ -7,7 +7,7 @@ dahdi_tool \- Shows status of DAHDI interfaces
|
|||
.B dahdi_tool
|
||||
|
||||
.SH DESCRIPTION
|
||||
dahdi_tool shows the current status the DAHDI inteface cards plugged
|
||||
dahdi_tool shows the current status the DAHDI interface cards plugged
|
||||
to the computer.
|
||||
|
||||
It displays values like Current Alarms, SyncSource, Tx/Rx
|
||||
|
|
|
@ -33,7 +33,7 @@ is generated in the current directory.
|
|||
fxotune just reads the settings from fxotune.conf into the FXO modules.
|
||||
|
||||
You are advised to run fxotune on all FXO ports you have that support
|
||||
it and that are connected. Note that the tunning is affected by e.g.
|
||||
it and that are connected. Note that the tuning is affected by e.g.
|
||||
the physical parameters of the connection, and thus if it has been
|
||||
radically changed, you may need to re-run fxotune.
|
||||
|
||||
|
@ -44,7 +44,7 @@ cards and clones) do not have the hardware to support such tuning.
|
|||
The tuning process needs a clear line to do the tuning. In order to do
|
||||
that, it runs in cycles of the following: sets the line off-hook, dials
|
||||
a dial string (which should set the PSTN provider waiting for the next
|
||||
digit), and then starts tuning. It has a limited ammount of time for
|
||||
digit), and then starts tuning. It has a limited amount of time for
|
||||
tuning before the PSTN gives up and gives a busy tone. So after a while
|
||||
it hangs up and starts a new cycle.
|
||||
|
||||
|
@ -180,7 +180,7 @@ so if you stop it half-way, you may get a half-configured system. If you
|
|||
have already tuned your FXO channels and wish to test-run fxotune again,
|
||||
you are advised to backup /etc/fxotune.conf .
|
||||
|
||||
The default for \-m is 18 seconds. This asusmes that you get a clear line
|
||||
The default for \-m is 18 seconds. This assumes that you get a clear line
|
||||
for at least 18 seconds. It is advised that you test that timeout earlier
|
||||
by connecting a phone to the FXO line, dialing 4 (or whatever dial string
|
||||
you put with \-n) and see how much time of silence you have.
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#define RANDOM "/dev/urandom" /* Not genuinely random */
|
||||
/* #define RANDOM "/dev/random" */ /* Quite genuinely random */
|
||||
|
||||
int myread(int fd, char *buf, int len)
|
||||
int myread(int fd, unsigned char *buf, int len)
|
||||
{
|
||||
int sofar;
|
||||
int res;
|
||||
|
|
|
@ -107,13 +107,12 @@ static struct fasthdlc_state fs;
|
|||
|
||||
void send_packet(unsigned char *buf, int len)
|
||||
{
|
||||
int res;
|
||||
int x;
|
||||
unsigned char outbuf[BLOCK_SIZE];
|
||||
int pos=0;
|
||||
unsigned int fcs = PPP_INITFCS;
|
||||
if (hdlcmode)
|
||||
res = write(fd, buf, len + 2);
|
||||
write(fd, buf, len + 2);
|
||||
else {
|
||||
for (x=0;x<len;x++) {
|
||||
if (fasthdlc_tx_load(&fs, buf[x]))
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
nobase_dist_dahditools_SCRIPTS = \
|
||||
dahdi_handle_device \
|
||||
dahdi_span_config \
|
||||
dahdi_auto_assign_compat \
|
||||
span_config.d/10-dahdi-cfg \
|
||||
span_config.d/20-fxotune \
|
||||
span_config.d/50-asterisk \
|
||||
handle_device.d/10-span-types \
|
||||
handle_device.d/20-span-assignments \
|
||||
#
|
|
@ -22,4 +22,9 @@ devices_by_registration_time | \
|
|||
done
|
||||
|
||||
# Now handle Astribanks
|
||||
LC_ALL=C dahdi_registration -Rv on
|
||||
unmatched="`dahdi_span_assignments unmatched`"
|
||||
if [ -n "$unmatched" ]; then
|
||||
# Only if astribanks are not matched in span-assignments.conf
|
||||
# TODO: have dahdi_registration run only on "$unmatched"
|
||||
LC_ALL=C dahdi_registration -Rv on
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Run xpp_sync whenever an Astribank is connected.
|
||||
|
||||
# May be set in /etc/dahdi/init.conf
|
||||
XPP_SYNC=${XPP_SYNC:-auto}
|
||||
|
||||
case "$ACTION" in
|
||||
add) ;;
|
||||
*) exit 0 ;;
|
||||
esac
|
||||
|
||||
case "${DEVPATH##*/}" in
|
||||
astribanks:*) ;;
|
||||
*) exit 0 ;;
|
||||
esac
|
||||
|
||||
xpp_sync "$XPP_SYNC"
|
|
@ -17,6 +17,7 @@
|
|||
#XPP_FIRMWARE_DIR=/usr/share/dahdi
|
||||
#XPP_HOTPLUG_DISABLED=yes
|
||||
#XPP_HOTPLUG_DAHDI=yes
|
||||
#ASTERISK_SUPPORTS_DAHDI_HOTPLUG=yes
|
||||
|
||||
# Disable udev handling:
|
||||
#DAHDI_UDEV_DISABLE_DEVICES=yes
|
||||
|
|
|
@ -15,6 +15,8 @@ wct4xxp
|
|||
|
||||
# Digium TE435
|
||||
# Digium TE235
|
||||
# Digium TE436
|
||||
# Digium TE236
|
||||
wcte43x
|
||||
|
||||
# Digium TE120P: PCI single-port T1/E1/J1
|
||||
|
@ -51,6 +53,10 @@ wcfxo
|
|||
wctdm
|
||||
|
||||
# Digium B410P: 4 NT/TE BRI ports
|
||||
# Digium B433P: 4 NT/TE BRI ports pci-e
|
||||
# Digium B434P: 4 NT/TE BRI ports
|
||||
# Digium B233P: 2 NT/TE BRI ports pci-e
|
||||
# Digium B234P: 2 NT/TE BRI ports
|
||||
wcb4xxp
|
||||
|
||||
# Digium TC400B: G729 / G723 Transcoding Engine
|
||||
|
|
2
patgen.c
2
patgen.c
|
@ -45,7 +45,6 @@
|
|||
#define BLOCK_SIZE 2041
|
||||
#define DEVICE "/dev/dahdi/channel"
|
||||
|
||||
static const char rcsid[] = "$Id$";
|
||||
char *prog_name;
|
||||
|
||||
static void usage(void)
|
||||
|
@ -53,7 +52,6 @@ static void usage(void)
|
|||
fprintf(stderr, "Usage: %s <dahdi_chan>\n", prog_name);
|
||||
fprintf(stderr, " e.g.: %s /dev/dahdi/55\n", prog_name);
|
||||
fprintf(stderr, " %s 455\n", prog_name);
|
||||
fprintf(stderr, "%s version %s\n", prog_name, rcsid);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
|
|
@ -168,6 +168,7 @@ int main(int argc, char *argv[])
|
|||
int opt;
|
||||
int oldstyle_cmdline = 1;
|
||||
unsigned int event_count = 0;
|
||||
time_t start_time = 0;
|
||||
|
||||
/* Parse the command line arguments */
|
||||
while((opt = getopt(argc, argv, "b:s:t:r:v?h")) != -1) {
|
||||
|
@ -218,8 +219,6 @@ int main(int argc, char *argv[])
|
|||
if (oldstyle_cmdline && argc > optind +1) {
|
||||
timeout = strtoul(argv[optind+1], NULL, 10);
|
||||
}
|
||||
|
||||
time_t start_time = 0;
|
||||
|
||||
fd = channel_open(device, &bs);
|
||||
if (fd < 0)
|
||||
|
|
|
@ -44,7 +44,6 @@
|
|||
#define BLOCK_SIZE 2039
|
||||
#define DEVICE "/dev/dahdi/channel"
|
||||
|
||||
static const char rcsid[] = "$Id$";
|
||||
char *prog_name;
|
||||
|
||||
static void usage(void)
|
||||
|
@ -52,7 +51,6 @@ static void usage(void)
|
|||
fprintf(stderr, "Usage: %s <dahdi_chan>\n", prog_name);
|
||||
fprintf(stderr, " e.g.: %s /dev/dahdi/55\n", prog_name);
|
||||
fprintf(stderr, " %s 455\n", prog_name);
|
||||
fprintf(stderr, "%s version %s\n", prog_name, rcsid);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
|
29
ppp/Makefile
29
ppp/Makefile
|
@ -1,29 +0,0 @@
|
|||
#COPTS = -O2 -g
|
||||
|
||||
-include ../makeopts
|
||||
|
||||
CFLAGS += $(COPTS) -fPIC
|
||||
LDFLAGS += -shared
|
||||
|
||||
INCLUDE_DIR = $(includedir)/pppd
|
||||
|
||||
LIBDIR = $(libdir)/pppd/$(PPPD_VERSION)
|
||||
|
||||
PLUGINS := dahdi.so
|
||||
|
||||
all: $(PLUGINS)
|
||||
|
||||
%.so: %.c
|
||||
ifeq (,$(PPPD_VERSION))
|
||||
@echo "pppd version not found (in patchlevel.h)."
|
||||
@echo "Install ppp source/headers and/or ./configure --with-ppp=PATH."
|
||||
exit 1
|
||||
endif
|
||||
$(CC) -o $@ $(CFLAGS) $^ $(LDFLAGS)
|
||||
|
||||
install: $(PLUGINS)
|
||||
$(INSTALL) -d $(DESTDIR)$(LIBDIR)
|
||||
$(INSTALL) -m 0644 $? $(DESTDIR)$(LIBDIR)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.so *.a
|
|
@ -0,0 +1,7 @@
|
|||
plugindir = $(libdir)/pppd/$(PPPD_VERSION)
|
||||
plugin_LTLIBRARIES = dahdi.la
|
||||
|
||||
dahdi_la_CFLAGS = $(DAHDI_INCLUDE)
|
||||
dahdi_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
CLEANFILES = dahdi.so
|
17
tonezone.c
17
tonezone.c
|
@ -89,18 +89,20 @@ static int build_tone(void *data, size_t size, struct tone_zone_sound *t, int *c
|
|||
int firstnobang = -1;
|
||||
int freq1, freq2, time;
|
||||
int modulate = 0;
|
||||
float db = 1.0;
|
||||
float gain;
|
||||
int used = 0;
|
||||
dup = strdup(t->data);
|
||||
s = strtok(dup, ",");
|
||||
while(s && strlen(s)) {
|
||||
/* Handle optional ! which signifies don't start here*/
|
||||
if (s[0] == '!')
|
||||
if (s[0] == '!') {
|
||||
s++;
|
||||
else if (firstnobang < 0) {
|
||||
} else if (firstnobang < 0) {
|
||||
PRINT_DEBUG("First no bang: %s\n", s);
|
||||
firstnobang = *count;
|
||||
}
|
||||
|
||||
if (sscanf(s, "%d+%d/%d", &freq1, &freq2, &time) == 3) {
|
||||
/* f1+f2/time format */
|
||||
PRINT_DEBUG("f1+f2/time format: %d, %d, %d\n", freq1, freq2, time);
|
||||
|
@ -118,6 +120,15 @@ static int build_tone(void *data, size_t size, struct tone_zone_sound *t, int *c
|
|||
} else if (sscanf(s, "%d/%d", &freq1, &time) == 2) {
|
||||
PRINT_DEBUG("f1/time format: %d, %d\n", freq1, time);
|
||||
freq2 = 0;
|
||||
} else if (sscanf(s, "%d@/%d", &freq1, &time) == 2) {
|
||||
/* The "@" character has been added to enable an
|
||||
* approximately -20db tone generation of any frequency This has been done
|
||||
* primarily to generate the Australian congestion tone.
|
||||
* Example: "425/375,0/375,425@/375,0/375"
|
||||
*/
|
||||
PRINT_DEBUG("f1 reduced amplitude/time format: %d, %d\n", freq1,time);
|
||||
db = 0.3;
|
||||
freq2 = 0;
|
||||
} else if (sscanf(s, "%d", &freq1) == 1) {
|
||||
PRINT_DEBUG("f1 format: %d\n", freq1);
|
||||
firstnobang = *count;
|
||||
|
@ -137,7 +148,7 @@ static int build_tone(void *data, size_t size, struct tone_zone_sound *t, int *c
|
|||
td = data;
|
||||
|
||||
/* Bring it down -8 dbm */
|
||||
gain = pow(10.0, (LEVEL - 3.14) / 20.0) * 65536.0 / 2.0;
|
||||
gain = db*(pow(10.0, (LEVEL - 3.14) / 20.0) * 65536.0 / 2.0);
|
||||
|
||||
td->fac1 = 2.0 * cos(2.0 * M_PI * (freq1 / 8000.0)) * 32768.0;
|
||||
td->init_v2_1 = sin(-4.0 * M_PI * (freq1 / 8000.0)) * gain;
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
/*
|
||||
* version.c.in
|
||||
*/
|
||||
|
||||
const char dahdi_tools_version[] = "DAHDI Tools Version - @TOOLSVERSION@";
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# A dracut.conf(5) snippet
|
||||
# Disable loading the Astribank (xpp_usb) drivers. This is because
|
||||
# it relies on files in the root filesystem:
|
||||
# See https://issues.asterisk.org/jira/browse/DAHLIN-352
|
||||
omit_drivers+=" xpp_usb "
|
202
xpp/Makefile
202
xpp/Makefile
|
@ -1,202 +0,0 @@
|
|||
PEDANTIC = -ansi -pedantic -std=c99
|
||||
|
||||
INSTALL = install
|
||||
INSTALL_DATA = install -m 644
|
||||
|
||||
#
|
||||
# Ugly hack to find kernel directories before/after the split
|
||||
# to kernel/user-space.
|
||||
#
|
||||
# These variables should be passed to us. But until then...
|
||||
#
|
||||
DAHDI_TOOLSDIR ?= ..
|
||||
DAHDI_KERNELDIR =
|
||||
|
||||
-include $(DAHDI_TOOLSDIR)/makeopts
|
||||
|
||||
INSTALL_DATA = $(INSTALL) -m 644
|
||||
|
||||
# In 1.4 those are provided by autoconf through makeopts
|
||||
prefix ?= /usr
|
||||
datadir ?= $(prefix)/share
|
||||
mandir ?= $(datadir)/man
|
||||
sysconfdir ?= $(prefix)/etc
|
||||
udevrulesdir ?= $(sysconfdir)/udev/rules.d
|
||||
INSTALL ?= install
|
||||
|
||||
INSTALL_DATA = $(INSTALL) -m 644
|
||||
|
||||
SBINDIR = $(prefix)/sbin
|
||||
DATADIR = $(datadir)/dahdi
|
||||
MANDIR = $(mandir)/man8
|
||||
HOTPLUG_USB_DIR = $(sysconfdir)/hotplug/usb
|
||||
PERLLIBDIR := $(shell eval `perl -V:sitelib`; echo "$$sitelib")
|
||||
PERL_DIRS := $(shell cd perl_modules; find * -name '[A-Z]*' -type d| xargs)
|
||||
PERL_MODS_PAT := *.pm $(PERL_DIRS:%=%/*.pm)
|
||||
PERL_MODS := $(shell cd perl_modules; echo $(PERL_MODS_PAT))
|
||||
|
||||
# Variables that should be defined above, but need sane defaults:
|
||||
# FIXME: Are those values really sane?
|
||||
HOSTCC ?= $(CC)
|
||||
|
||||
USE_OCTASIC := yes
|
||||
OCTASIC_DIR := oct612x
|
||||
|
||||
ifneq (no,$(USE_OCTASIC))
|
||||
|
||||
OCT_OBJS = $(shell $(OCTASIC_DIR)/octasic-helper objects $(OCTASIC_DIR))
|
||||
OCT_SRCS = $(shell echo $(OCT_OBJS) | tr -s ' ' '\n' | sed 's/\.o$$/.c/g')
|
||||
OCT_HERE_OBJS = $(shell echo $(OCT_OBJS) | tr -s ' ' '\n' | sed 's,^.*/,,')
|
||||
OCT_CFLAGS = $(shell $(OCTASIC_DIR)/octasic-helper cflags $(OCTASIC_DIR))
|
||||
OCT_DEFINES = \
|
||||
-DPTR_TYPE=uint32_t \
|
||||
-DcOCT6100_INTERNAL_SUPER_ARRAY_SIZE=1024 \
|
||||
-DcOCT6100_MAX_ECHO_CHANNELS=672 \
|
||||
-DcOCT6100_MAX_MIXER_EVENTS=1344
|
||||
|
||||
ECHO_LOADER_SRC = echo_loader.c
|
||||
ECHO_LOADER = $(ECHO_LOADER_SRC:.c=.o)
|
||||
endif
|
||||
|
||||
%.8: %
|
||||
pod2man --section 8 $^ > $@ || $(RM) $@
|
||||
PERL_SCRIPTS = \
|
||||
dahdi_registration \
|
||||
xpp_sync \
|
||||
lsdahdi \
|
||||
xpp_blink \
|
||||
dahdi_genconf \
|
||||
dahdi_hardware \
|
||||
twinstar \
|
||||
#
|
||||
|
||||
PERL_MANS = $(PERL_SCRIPTS:%=%.8)
|
||||
|
||||
# List all our sources
|
||||
XUSB_SRCS = xtalk/xusb.c xtalk/xlist.c xtalk/debug.c
|
||||
XTALK_SRCS = xtalk/xtalk.c
|
||||
MPPTALK_SRCS = mpptalk.c
|
||||
ASTRIBANK_SRCS = astribank_usb.c
|
||||
ABHEXLOAD_SRCS = astribank_hexload.c hexfile.c pic_loader.c
|
||||
ABTOOL_SRCS = astribank_tool.c
|
||||
ABALLOW_SRCS = astribank_allow.c astribank_license.c
|
||||
|
||||
SRCS = \
|
||||
$(XUSB_SRCS) \
|
||||
$(XTALK_SRCS) \
|
||||
$(MPPTALK_SRCS) \
|
||||
$(ASTRIBANK_SRCS) \
|
||||
$(ABHEXLOAD_SRCS) \
|
||||
$(ABTOOL_SRCS) \
|
||||
$(ABALLOW_SRCS) \
|
||||
$(ECHO_LOADER_SRC)
|
||||
|
||||
# Derive object files from source list
|
||||
XUSB_OBJS = $(XUSB_SRCS:.c=.o)
|
||||
XTALK_OBJS = $(XTALK_SRCS:.c=.o) $(XUSB_OBJS)
|
||||
MPPTALK_OBJS = $(MPPTALK_SRCS:.c=.o) $(XTALK_OBJS)
|
||||
ASTRIBANK_OBJS = $(ASTRIBANK_SRCS:.c=.o) $(MPPTALK_OBJS)
|
||||
ABHEXLOAD_OBJS = $(ABHEXLOAD_SRCS:.c=.o) $(ASTRIBANK_OBJS) $(ECHO_LOADER) $(OCT_HERE_OBJS)
|
||||
ABTOOL_OBJS = $(ABTOOL_SRCS:.c=.o) $(ASTRIBANK_OBJS)
|
||||
ABALLOW_OBJS = $(ABALLOW_SRCS:.c=.o) $(ASTRIBANK_OBJS)
|
||||
|
||||
TARGETS = .perlcheck astribank_is_starting
|
||||
PROG_INSTALL = astribank_is_starting
|
||||
MAN_INSTALL = $(PROG_INSTALL:%=%.8)
|
||||
ifeq (1,$(PBX_USB))
|
||||
TARGETS += \
|
||||
astribank_tool \
|
||||
astribank_hexload \
|
||||
astribank_allow \
|
||||
test_parse
|
||||
PROG_INSTALL += astribank_tool astribank_hexload astribank_allow
|
||||
endif
|
||||
ifneq (,$(PERLLIBDIR))
|
||||
PROG_INSTALL += $(PERL_SCRIPTS)
|
||||
TARGETS += $(PERL_MANS)
|
||||
endif
|
||||
|
||||
all: $(TARGETS)
|
||||
|
||||
docs: $(PERL_MANS)
|
||||
|
||||
install: all
|
||||
$(INSTALL) -d $(DESTDIR)$(SBINDIR)
|
||||
$(INSTALL) $(PROG_INSTALL) $(DESTDIR)$(SBINDIR)/
|
||||
$(INSTALL) -d $(DESTDIR)$(DATADIR)
|
||||
$(INSTALL) xpp_fxloader astribank_hook $(DESTDIR)$(DATADIR)/
|
||||
$(INSTALL) waitfor_xpds $(DESTDIR)$(DATADIR)/
|
||||
$(INSTALL) -d $(DESTDIR)$(udevrulesdir)
|
||||
$(INSTALL_DATA) xpp.rules $(DESTDIR)$(udevrulesdir)/
|
||||
$(INSTALL) -d $(DESTDIR)$(MANDIR)
|
||||
$(INSTALL_DATA) $(MAN_INSTALL) $(DESTDIR)$(MANDIR)/
|
||||
$(INSTALL) -d $(DESTDIR)$(HOTPLUG_USB_DIR)
|
||||
$(INSTALL_DATA) xpp_fxloader.usermap $(DESTDIR)$(HOTPLUG_USB_DIR)/
|
||||
# for backward compatibility and for hotplug users:
|
||||
ln -sf $(DATADIR)/xpp_fxloader $(DESTDIR)$(HOTPLUG_USB_DIR)/
|
||||
ifneq (,$(PERLLIBDIR))
|
||||
$(INSTALL) -d $(DESTDIR)$(PERLLIBDIR)
|
||||
for i in $(PERL_DIRS); \
|
||||
do \
|
||||
$(INSTALL) -d "$(DESTDIR)$(PERLLIBDIR)/$$i"; \
|
||||
done
|
||||
for i in $(PERL_MODS); \
|
||||
do \
|
||||
$(INSTALL_DATA) "perl_modules/$$i" "$(DESTDIR)$(PERLLIBDIR)/$$i"; \
|
||||
done
|
||||
endif
|
||||
|
||||
CFLAGS += -I. -Ixtalk -Wall -Werror
|
||||
|
||||
astribank_hexload: $(ABHEXLOAD_OBJS)
|
||||
astribank_hexload: LIBS+=$(EXTRA_LIBS) $(USB_LIB)
|
||||
astribank_hexload: CFLAGS+=$(OCT_CFLAGS)
|
||||
|
||||
astribank_tool: $(ABTOOL_OBJS)
|
||||
astribank_tool: LIBS+=$(EXTRA_LIBS) $(USB_LIB)
|
||||
|
||||
astribank_allow: $(ABALLOW_OBJS)
|
||||
astribank_allow: LIBS+=$(EXTRA_LIBS) $(USB_LIB)
|
||||
|
||||
astribank_is_starting: astribank_is_starting.o
|
||||
astribank_is_starting: LIBS+=$(EXTRA_LIBS)
|
||||
|
||||
hex2iic: hex2iic.o iic.o hexfile.o
|
||||
|
||||
test_parse: test_parse.o hexfile.o
|
||||
test_parse: LIBS+=$(EXTRA_LIBS) $(USB_LIB)
|
||||
|
||||
ifneq (no,$(USE_OCTASIC))
|
||||
.octasic.depend: $(OCTASIC_DIR)/octasic-helper Makefile ../config.status
|
||||
$(CC) -MM $(OCT_CFLAGS) \
|
||||
`$(OCTASIC_DIR)/octasic-helper objects | \
|
||||
tr -s ' ' '\n' | \
|
||||
sed -e 's,.*,$(OCTASIC_DIR)/&,' -e 's/\.o$$/.c/'` > $@
|
||||
|
||||
-include .octasic.depend
|
||||
|
||||
$(OCT_HERE_OBJS): Makefile
|
||||
$(CC) -c $(CFLAGS) $(OCT_CFLAGS) $(OCT_DEFINES) $(OCT_SRCS)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
%: %.o
|
||||
$(CC) $(LDFLAGS) $^ $(LIBS) -o $@
|
||||
|
||||
.perlcheck: $(PERL_SCRIPTS)
|
||||
for i in $^; do perl -I./perl_modules -c $$i || exit 1; done
|
||||
touch $@
|
||||
|
||||
clean:
|
||||
$(RM) .depend .octasic.depend *.o xtalk/*.o $(OCT_HERE_OBJS) $(TARGETS)
|
||||
|
||||
.PHONY: depend
|
||||
ifeq (1,$(PBX_USB))
|
||||
depend: .depend
|
||||
.depend: *.c *.h xtalk/*.c
|
||||
@echo "Calculating dependencies"
|
||||
@if ! $(CC) $(CFLAGS) $(OCT_CFLAGS) -MM $(SRCS) > $@; then $(RM) $@; exit 1; fi
|
||||
|
||||
include .depend
|
||||
endif
|
|
@ -0,0 +1,170 @@
|
|||
|
||||
all-local: $(perl_checks)
|
||||
|
||||
SUBDIRS =
|
||||
|
||||
man_MANS =
|
||||
|
||||
|
||||
# FIXME: try to improve code, so we can use $(PEDANTIC)
|
||||
#PEDANTIC = -ansi -pedantic -std=c99
|
||||
GLOBAL_CFLAGS = -I$(srcdir) -I$(srcdir)/xtalk/include $(PEDANTIC) -Wall
|
||||
|
||||
if DAHDI_DEVMODE
|
||||
GLOBAL_CFLAGS += \
|
||||
-Werror \
|
||||
-Wunused \
|
||||
-Wundef \
|
||||
-Wmissing-format-attribute \
|
||||
-Wformat-security \
|
||||
-Wformat=2
|
||||
endif
|
||||
|
||||
if PERL
|
||||
SUBDIRS += perl_modules
|
||||
|
||||
%.8: %
|
||||
@if file "$^" | cut -d: -f2 | grep -q -iw perl; then \
|
||||
if pod2man --section 8 $^ > $@; then \
|
||||
echo " GEN $@"; \
|
||||
else \
|
||||
rm -f "$@"; \
|
||||
fi \
|
||||
fi
|
||||
|
||||
%.check: %
|
||||
@echo " CHECK $^"; \
|
||||
if ! perl -I./perl_modules -c $^ 2>/dev/null; then \
|
||||
perl -I./perl_modules -c $^; \
|
||||
fi
|
||||
@touch $@
|
||||
|
||||
perl_scripts = \
|
||||
dahdi_registration \
|
||||
xpp_sync \
|
||||
lsdahdi \
|
||||
xpp_blink \
|
||||
dahdi_genconf \
|
||||
dahdi_hardware \
|
||||
twinstar \
|
||||
#
|
||||
|
||||
perl_checks = $(perl_scripts:%=%.check)
|
||||
perl_mans = $(perl_scripts:%=%.8)
|
||||
|
||||
endif
|
||||
|
||||
dist_dahditools_SCRIPTS = xpp_fxloader astribank_hook waitfor_xpds
|
||||
udevrulesdir = @udevrulesdir@
|
||||
udevrules_DATA = xpp.rules
|
||||
|
||||
dist_sbin_SCRIPTS = $(perl_scripts)
|
||||
man_MANS += $(perl_mans)
|
||||
CLEANFILES = $(perl_checks) $(perl_mans)
|
||||
|
||||
dracutconfdir = @prefix@/lib/dracut/dracut.conf.d
|
||||
dracutconf_DATA = 50-dahdi.conf
|
||||
|
||||
if PBX_USB
|
||||
|
||||
SUBDIRS += oct612x xtalk
|
||||
|
||||
if LIBUSBX
|
||||
USB_CFLAGS = $(LIBUSBX_CFLAGS)
|
||||
USB_LIBS = $(LIBUSBX_LIBS)
|
||||
USB_NAME = libusbx
|
||||
else
|
||||
if LIBUSB
|
||||
USB_CFLAGS = $(LIBUSB_CFLAGS)
|
||||
USB_LIBS = $(LIBUSB_LIBS)
|
||||
USB_NAME = libusb
|
||||
endif
|
||||
endif
|
||||
|
||||
noinst_LTLIBRARIES = libastribank.la libecholoader.la libhexfile.la
|
||||
|
||||
libastribank_la_SOURCES = \
|
||||
astribank.c \
|
||||
astribank.h \
|
||||
mpptalk.c \
|
||||
mpptalk.h \
|
||||
astribank_license.c \
|
||||
astribank_license.h \
|
||||
#
|
||||
|
||||
libastribank_la_CFLAGS = $(GLOBAL_CFLAGS)
|
||||
libastribank_la_LIBADD = xtalk/libxtalk.la
|
||||
|
||||
if USE_OCTASIC
|
||||
libecholoader_la_SOURCES = \
|
||||
parse_span_specs.c \
|
||||
parse_span_specs.h \
|
||||
echo_loader.c \
|
||||
echo_loader.h \
|
||||
#
|
||||
|
||||
libecholoader_la_CFLAGS = $(GLOBAL_CFLAGS) $(OCTASIC_CFLAGS)
|
||||
endif
|
||||
|
||||
libhexfile_la_SOURCES = \
|
||||
hexfile.c \
|
||||
hexfile.h \
|
||||
#
|
||||
|
||||
sbin_PROGRAMS = \
|
||||
astribank_tool \
|
||||
astribank_hexload \
|
||||
astribank_allow \
|
||||
astribank_is_starting
|
||||
|
||||
check_PROGRAMS = test_parse
|
||||
test_parse_LDADD = libhexfile.la
|
||||
|
||||
astribank_tool_SOURCES = astribank_tool.c
|
||||
astribank_tool_CFLAGS = $(GLOBAL_CFLAGS)
|
||||
astribank_tool_LDFLAGS = $(USB_LIBS)
|
||||
astribank_tool_LDADD = libastribank.la
|
||||
|
||||
astribank_hexload_SOURCES = \
|
||||
astribank_hexload.c \
|
||||
pic_loader.c \
|
||||
pic_loader.h \
|
||||
#
|
||||
|
||||
astribank_hexload_CFLAGS = $(GLOBAL_CFLAGS) $(OCTASIC_CFLAGS)
|
||||
astribank_hexload_LDFLAGS = $(USB_LIBS)
|
||||
astribank_hexload_LDADD = \
|
||||
libhexfile.la \
|
||||
libastribank.la \
|
||||
libecholoader.la \
|
||||
oct612x/liboctasic.la \
|
||||
#
|
||||
|
||||
astribank_allow_CFLAGS = $(GLOBAL_CFLAGS)
|
||||
astribank_allow_LDFLAGS = $(USB_LIBS)
|
||||
astribank_allow_LDADD = libastribank.la
|
||||
|
||||
man_pages = \
|
||||
astribank_tool.8 \
|
||||
astribank_hexload.8 \
|
||||
astribank_allow.8 \
|
||||
astribank_is_starting.8
|
||||
|
||||
man_MANS += $(man_pages)
|
||||
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(man_pages) \
|
||||
$(udevrules_DATA) \
|
||||
README.Astribank \
|
||||
astribank_upgrade \
|
||||
dahdi.cgi \
|
||||
dahdi_drivers \
|
||||
genconf_parameters \
|
||||
twinstar_hook \
|
||||
twinstar_setup \
|
||||
xpp_modprobe \
|
||||
xpp_timing \
|
||||
#
|
||||
|
|
@ -47,9 +47,9 @@ Apart from the standard DAHDI build requirements, you also need:
|
|||
|
||||
* *libusb development headers* to build the Astribank firmware tools
|
||||
(astribank_tool, astribank_hexload, astribank_allow).
|
||||
This is typically the package libusb-dev on Debian (and derivatives
|
||||
like Ubuntu) or libusb-devel on RedHat (and derivatives like
|
||||
CentOS/Trixbox).
|
||||
This is typically the package libusb-1.0-0-dev on Debian (and
|
||||
derivatives such as Ubuntu) or libusbx-devel on RedHat (and derivatives
|
||||
such as CentOS).
|
||||
* *Echo Canceller Module firmware*: If you have an Astribank with an
|
||||
echo canceller module, see the following section.
|
||||
|
||||
|
@ -1257,8 +1257,8 @@ Astribanks Synchronization Source
|
|||
If there is more than one Astribank on the system, all the Astribanks
|
||||
keep their clock in sync. Optionally the Astribanks can synchronize
|
||||
their clock to the master DAHDI device (in case it is a different DAHDI
|
||||
device). Normally you just use the default init.d script or run
|
||||
explicitly:
|
||||
device). Normally it would be run automatically from the udev hooks
|
||||
run on device plug (handle_device), but you can also run it explicitly:
|
||||
|
||||
xpp_sync auto
|
||||
|
||||
|
@ -1488,6 +1488,9 @@ other side.
|
|||
current. That is: which ones are connected to an active FXS on the
|
||||
other side.
|
||||
|
||||
===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/hwid
|
||||
Prints <module type>.<module subtype>. Both are small numbers.
|
||||
|
||||
===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/offhook
|
||||
Shows ports that are (1) or are not (0) off-hook. When a channel is
|
||||
not off-hook. For BRI and E1/T1 the value is 1 if the span is in use.
|
||||
|
|
|
@ -0,0 +1,177 @@
|
|||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <xtalk/debug.h>
|
||||
#include <xtalk/xusb.h>
|
||||
#include "mpptalk.h"
|
||||
#include "astribank.h"
|
||||
|
||||
#define DBG_MASK 0x08
|
||||
|
||||
struct astribank {
|
||||
struct xusb_device *xusb_device;
|
||||
struct xusb_iface *xpp_iface;
|
||||
struct xusb_iface *mpp_iface;
|
||||
struct mpp_device *mpp;
|
||||
char *path;
|
||||
};
|
||||
|
||||
|
||||
struct astribank *astribank_new(const char *path)
|
||||
{
|
||||
struct astribank *ab;
|
||||
|
||||
ab = calloc(sizeof(*ab), 1);
|
||||
if (!ab) {
|
||||
ERR("%s: Failed allocating Astribank device\n", path);
|
||||
goto err;
|
||||
}
|
||||
ab->xusb_device = xusb_find_bypath(path);
|
||||
if (!ab->xusb_device) {
|
||||
ERR("%s: Cannot find Astribank\n", path);
|
||||
goto err;
|
||||
}
|
||||
ab->path = strdup(path);
|
||||
if (!ab->path) {
|
||||
ERR("%s: Failed allocating Astribank path\n", path);
|
||||
goto err;
|
||||
}
|
||||
return ab;
|
||||
err:
|
||||
astribank_destroy(ab);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void astribank_destroy(struct astribank *ab)
|
||||
{
|
||||
if (ab) {
|
||||
if (ab->path)
|
||||
free(ab->path);
|
||||
if (ab->xpp_iface)
|
||||
xusb_release(ab->xpp_iface);
|
||||
if (ab->mpp) {
|
||||
mpp_delete(ab->mpp); /* this also closes the underlying xusb */
|
||||
ab->mpp = NULL;
|
||||
}
|
||||
if (ab->xusb_device) {
|
||||
xusb_destroy(ab->xusb_device);
|
||||
ab->xusb_device = NULL;
|
||||
}
|
||||
free(ab);
|
||||
ab = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
struct xusb_iface *astribank_xpp_open(struct astribank *ab)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = xusb_claim(ab->xusb_device, 0, &ab->xpp_iface);
|
||||
if (ret < 0) {
|
||||
ERR("%s: Cannot claim XPP interface\n", ab->path);
|
||||
goto err;
|
||||
}
|
||||
DBG("%s: Claimed Astribank XPP interface\n", ab->path);
|
||||
return ab->xpp_iface;
|
||||
err:
|
||||
if (ab->xpp_iface)
|
||||
xusb_release(ab->xpp_iface);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct mpp_device *astribank_mpp_open(struct astribank *ab)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = xusb_claim(ab->xusb_device, 1, &ab->mpp_iface);
|
||||
if (ret < 0) {
|
||||
ERR("%s: Cannot claim MPP interface\n", ab->path);
|
||||
goto err;
|
||||
}
|
||||
DBG("%s: Claimed Astribank MPP interface\n", ab->path);
|
||||
ab->mpp = mpp_new(ab->mpp_iface);
|
||||
if (!ab->mpp) {
|
||||
ERR("Failed initializing MPP protocol\n");
|
||||
goto err;
|
||||
}
|
||||
ret = mpp_status_query(ab->mpp);
|
||||
if (ret < 0) {
|
||||
ERR("status query failed (ret=%d)\n", ret);
|
||||
goto err;
|
||||
}
|
||||
return ab->mpp;
|
||||
err:
|
||||
if (ab->mpp) {
|
||||
mpp_delete(ab->mpp); /* this also closes the underlying xusb */
|
||||
ab->mpp = NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct xusb_device *xusb_dev_of_astribank(const struct astribank *ab)
|
||||
{
|
||||
assert(ab->xusb_device);
|
||||
return ab->xusb_device;
|
||||
}
|
||||
|
||||
const char *astribank_devpath(const struct astribank *ab)
|
||||
{
|
||||
return xusb_devpath(ab->xusb_device);
|
||||
}
|
||||
|
||||
const char *astribank_serial(const struct astribank *ab)
|
||||
{
|
||||
return xusb_serial(ab->xusb_device);
|
||||
}
|
||||
|
||||
void show_astribank_info(const struct astribank *ab)
|
||||
{
|
||||
struct xusb_device *xusb_device;
|
||||
|
||||
assert(ab != NULL);
|
||||
xusb_device = ab->xusb_device;
|
||||
assert(xusb_device != NULL);
|
||||
if(verbose <= LOG_INFO) {
|
||||
xusb_showinfo(xusb_device);
|
||||
} else {
|
||||
const struct xusb_spec *spec;
|
||||
|
||||
spec = xusb_spec(xusb_device);
|
||||
printf("USB Bus/Device: [%s]\n", xusb_devpath(xusb_device));
|
||||
printf("USB Firmware Type: [%s]\n", spec->name);
|
||||
printf("USB iSerialNumber: [%s]\n", xusb_serial(xusb_device));
|
||||
printf("USB iManufacturer: [%s]\n", xusb_manufacturer(xusb_device));
|
||||
printf("USB iProduct: [%s]\n", xusb_product(xusb_device));
|
||||
}
|
||||
}
|
||||
|
||||
int astribank_send(struct astribank *ab, int interface_num, const char *buf, int len, int timeout)
|
||||
{
|
||||
struct xusb_iface *iface;
|
||||
|
||||
if (interface_num == 0)
|
||||
iface = ab->xpp_iface;
|
||||
else if (interface_num == 1)
|
||||
iface = ab->mpp_iface;
|
||||
else {
|
||||
ERR("Unknown interface number (%d)\n", interface_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
return xusb_send(iface, buf, len, timeout);
|
||||
}
|
||||
|
||||
int astribank_recv(struct astribank *ab, int interface_num, char *buf, size_t len, int timeout)
|
||||
{
|
||||
struct xusb_iface *iface;
|
||||
|
||||
if (interface_num == 0)
|
||||
iface = ab->xpp_iface;
|
||||
else if (interface_num == 1)
|
||||
iface = ab->mpp_iface;
|
||||
else {
|
||||
ERR("Unknown interface number (%d)\n", interface_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
return xusb_recv(iface, buf, len, timeout);
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef ASTRIBANK_H
|
||||
#define ASTRIBANK_H
|
||||
|
||||
#include <mpptalk.h>
|
||||
|
||||
struct astribank *astribank_new(const char *path);
|
||||
void astribank_destroy(struct astribank *ab);
|
||||
void show_astribank_info(const struct astribank *ab);
|
||||
|
||||
struct xusb_iface *astribank_xpp_open(struct astribank *ab);
|
||||
struct mpp_device *astribank_mpp_open(struct astribank *ab);
|
||||
|
||||
struct xusb_device *xusb_dev_of_astribank(const struct astribank *ab);
|
||||
const char *astribank_devpath(const struct astribank *ab);
|
||||
const char *astribank_serial(const struct astribank *ab);
|
||||
|
||||
int astribank_send(struct astribank *ab, int interface_num, const char *buf, int len, int timeout);
|
||||
int astribank_recv(struct astribank *ab, int interface_num, char *buf, size_t len, int timeout);
|
||||
|
||||
|
||||
#define AB_REPORT(report_type, astribank, fmt, ...) \
|
||||
report_type("%s [%s]: " fmt, \
|
||||
astribank_devpath(astribank), \
|
||||
astribank_serial(astribank), \
|
||||
## __VA_ARGS__)
|
||||
|
||||
#define AB_INFO(astribank, fmt, ...) \
|
||||
AB_REPORT(INFO, astribank, fmt, ## __VA_ARGS__)
|
||||
|
||||
#define AB_ERR(astribank, fmt, ...) \
|
||||
AB_REPORT(ERR, astribank, fmt, ## __VA_ARGS__)
|
||||
|
||||
#endif /* ASTRIBANK_H */
|
|
@ -31,13 +31,11 @@
|
|||
#include <sys/types.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <ctype.h>
|
||||
#include "mpp.h"
|
||||
#include <xtalk/debug.h>
|
||||
#include "mpptalk.h"
|
||||
#include <debug.h>
|
||||
#include "astribank.h"
|
||||
#include "astribank_license.h"
|
||||
|
||||
static const char rcsid[] = "$Id$";
|
||||
|
||||
#define DBG_MASK 0x80
|
||||
|
||||
static char *progname;
|
||||
|
@ -55,28 +53,11 @@ static void usage()
|
|||
exit(1);
|
||||
}
|
||||
|
||||
static int capabilities_burn(
|
||||
struct astribank_device *astribank,
|
||||
struct eeprom_table *eeprom_table,
|
||||
struct capabilities *capabilities,
|
||||
struct capkey *key)
|
||||
{
|
||||
int ret;
|
||||
|
||||
INFO("Burning capabilities\n");
|
||||
ret = mpp_caps_set(astribank, eeprom_table, capabilities, key);
|
||||
if(ret < 0) {
|
||||
ERR("Capabilities burning failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
INFO("Done\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char *devpath = NULL;
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
struct mpp_device *mpp;
|
||||
struct eeprom_table eeprom_table;
|
||||
struct capabilities caps;
|
||||
struct capkey key;
|
||||
|
@ -127,16 +108,19 @@ int main(int argc, char *argv[])
|
|||
usage();
|
||||
}
|
||||
DBG("Startup %s\n", devpath);
|
||||
if((astribank = mpp_init(devpath, 1)) == NULL) {
|
||||
ERR("Failed initializing MPP\n");
|
||||
astribank = astribank_new(devpath);
|
||||
if(!astribank) {
|
||||
ERR("Failed initializing Astribank\n");
|
||||
return 1;
|
||||
}
|
||||
if(astribank->eeprom_type != EEPROM_TYPE_LARGE) {
|
||||
mpp = astribank_mpp_open(astribank);
|
||||
ret = mpp_eeprom_type(mpp);
|
||||
if(ret != EEPROM_TYPE_LARGE) {
|
||||
ERR("Cannot use this program with astribank EEPROM type %d (need %d)\n",
|
||||
astribank->eeprom_type, EEPROM_TYPE_LARGE);
|
||||
ret, EEPROM_TYPE_LARGE);
|
||||
return 1;
|
||||
}
|
||||
ret = mpp_caps_get(astribank, &eeprom_table, &caps, &key);
|
||||
ret = mpp_caps_get(mpp, &eeprom_table, &caps, &key);
|
||||
if(ret < 0) {
|
||||
ERR("Failed to get original capabilities: %d\n", ret);
|
||||
return 1;
|
||||
|
@ -158,8 +142,13 @@ int main(int argc, char *argv[])
|
|||
return 1;
|
||||
}
|
||||
show_capabilities(&caps, stderr);
|
||||
if (capabilities_burn(astribank, &eeprom_table, &caps, &key) < 0)
|
||||
INFO("Burning capabilities\n");
|
||||
ret = mpp_caps_set(mpp, &eeprom_table, &caps, &key);
|
||||
if(ret < 0) {
|
||||
ERR("Capabilities burning failed: %d\n", ret);
|
||||
return 1;
|
||||
}
|
||||
INFO("Done\n");
|
||||
if (file != stdin)
|
||||
fclose(file);
|
||||
} else {
|
||||
|
@ -180,6 +169,6 @@ int main(int argc, char *argv[])
|
|||
if (file != stdout)
|
||||
fclose(file);
|
||||
}
|
||||
mpp_exit(astribank);
|
||||
astribank_destroy(astribank);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ astribank_hexload \- Xorcom Astribank (xpp) firmware loader
|
|||
|
||||
.B astribank_hexload \-D \fIdevice-path\fR \-p [\fIoptions\fR] \fIhexfile1 .. hexfile4\fR
|
||||
|
||||
.B astribank_hexload \-D \fIdevice-path\fR \-O [-A] [\fIoptions\fR] \fIimagefile\fR
|
||||
.B astribank_hexload \-D \fIdevice-path\fR \-O [-A] [-S \fIspan-specs\fR] [\fIoptions\fR] \fIimagefile\fR
|
||||
|
||||
.B astribank_hexload \-D \fIdevice-path\fR \-o [\fIoptions\fR]
|
||||
|
||||
|
@ -29,7 +29,7 @@ It can be used to load either an FPGA firmware or a PIC
|
|||
firmware. It is normally run by the script xpp_fxloader.
|
||||
|
||||
.SH OPTIONS
|
||||
.B \-D
|
||||
.B \-D
|
||||
.I device-path
|
||||
.RS
|
||||
Required. The device to read from/write to. This is
|
||||
|
@ -95,13 +95,38 @@ use for BRI and E1. If not set, the default mu-Law (G.711u), which is
|
|||
what you'd normally use for FXS, FXO and T1.
|
||||
.RE
|
||||
|
||||
.B \-S \fIspan-specs\fR
|
||||
.RS
|
||||
This option should only be used when loading Octasic echo canceller firmware
|
||||
and only if the first Astribank module is PRI.
|
||||
|
||||
Its goal is to allow specifying different \fIline-mode\fR (E1/T1/J1) in different
|
||||
ports of the PRI module. \fBastribank_hexload\fR use the \fIspan-specs\fR argument
|
||||
to select aLaw/uLaw for each of the PRI ports in the module.
|
||||
|
||||
The \fIspan-specs\fR is a list of items separated by whitespace or commas.
|
||||
Each item is composed of a port selector, colon and a \fIline-mode\fR specifier.
|
||||
This syntax follows the syntax of specifiers in \fB/etc/dahdi/span-types.conf\fR.
|
||||
|
||||
Examples:
|
||||
.RS
|
||||
3:E1 \- The 3'rd port is E1.
|
||||
|
||||
*:T1 \- Any unspecified port is T1 (wildcard match).
|
||||
|
||||
1:T1,2:T1,*:E1 \- First and second ports are T1, the rest are E1.
|
||||
.RE
|
||||
|
||||
If the \fB\-S\fR is not given, the PRI default is determined by the existence of the \fB\-A-fR option.
|
||||
.RE
|
||||
|
||||
.SH SEE ALSO
|
||||
fxload(8), lsusb(8), astribank_tool(8)
|
||||
|
||||
.SH AUTHOR
|
||||
This manual page was written by Tzafrir Cohen <tzafrir.cohen@xorcom.com> .
|
||||
Permission is granted to copy, distribute and/or modify this document under
|
||||
the terms of the GNU General Public License, Version 2 any
|
||||
the terms of the GNU General Public License, Version 2 any
|
||||
later version published by the Free Software Foundation.
|
||||
|
||||
On Debian systems, the complete text of the GNU General Public
|
||||
|
|
|
@ -28,17 +28,19 @@
|
|||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <debug.h>
|
||||
#include <autoconfig.h>
|
||||
#include <xtalk/debug.h>
|
||||
#include <xtalk/xusb.h>
|
||||
#include "hexfile.h"
|
||||
#include "mpptalk.h"
|
||||
#include "astribank.h"
|
||||
#include "pic_loader.h"
|
||||
#include "echo_loader.h"
|
||||
#include "astribank_usb.h"
|
||||
#include "../autoconfig.h"
|
||||
|
||||
#define DBG_MASK 0x80
|
||||
#define MAX_HEX_LINES 64000
|
||||
#define HAVE_OCTASIC 1
|
||||
#define DEF_SPAN_SPEC_FORMAT "*:%c1" /* %c: 'E' or 'T' */
|
||||
|
||||
static char *progname;
|
||||
|
||||
|
@ -50,6 +52,7 @@ static void usage()
|
|||
#if HAVE_OCTASIC
|
||||
fprintf(stderr, "\t\t[-O] # Load Octasic firmware\n");
|
||||
fprintf(stderr, "\t\t[-o] # Show Octasic version\n");
|
||||
fprintf(stderr, "\t\t[-S <pri-spec>] # Set PRI type specification string\n");
|
||||
#endif
|
||||
fprintf(stderr, "\t\t[-F] # Load FPGA firmware\n");
|
||||
fprintf(stderr, "\t\t[-p] # Load PIC firmware\n");
|
||||
|
@ -59,7 +62,7 @@ static void usage()
|
|||
exit(1);
|
||||
}
|
||||
|
||||
int handle_hexline(struct astribank_device *astribank, struct hexline *hexline)
|
||||
int handle_hexline(struct mpp_device *mpp, struct hexline *hexline)
|
||||
{
|
||||
uint16_t len;
|
||||
uint16_t offset_dummy;
|
||||
|
@ -67,7 +70,7 @@ int handle_hexline(struct astribank_device *astribank, struct hexline *hexline)
|
|||
int ret;
|
||||
|
||||
assert(hexline);
|
||||
assert(astribank);
|
||||
assert(mpp);
|
||||
if(hexline->d.content.header.tt != TT_DATA) {
|
||||
DBG("Non data record type = %d\n", hexline->d.content.header.tt);
|
||||
return 0;
|
||||
|
@ -75,14 +78,19 @@ int handle_hexline(struct astribank_device *astribank, struct hexline *hexline)
|
|||
len = hexline->d.content.header.ll;
|
||||
offset_dummy = hexline->d.content.header.offset;
|
||||
data = hexline->d.content.tt_data.data;
|
||||
if((ret = mpp_send_seg(astribank, data, offset_dummy, len)) < 0) {
|
||||
if((ret = mpp_send_seg(mpp, data, offset_dummy, len)) < 0) {
|
||||
ERR("Failed hexfile send line: %d\n", ret);
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void print_parse_errors(int level, const char *msg, ...)
|
||||
|
||||
#ifdef __GNUC__
|
||||
static void print_parse_errors(int level, const char *msg, ...) __attribute__((format(printf,2,3)));
|
||||
#endif
|
||||
|
||||
static void print_parse_errors(int level, const char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
|
@ -93,7 +101,7 @@ void print_parse_errors(int level, const char *msg, ...)
|
|||
}
|
||||
}
|
||||
|
||||
static int load_hexfile(struct astribank_device *astribank, const char *hexfile, enum dev_dest dest)
|
||||
static int load_hexfile(struct mpp_device *mpp, const char *hexfile, enum dev_dest dest)
|
||||
{
|
||||
struct hexdata *hexdata = NULL;
|
||||
int finished = 0;
|
||||
|
@ -101,19 +109,24 @@ static int load_hexfile(struct astribank_device *astribank, const char *hexfile,
|
|||
unsigned i;
|
||||
char star[] = "+\\+|+/+-";
|
||||
const char *devstr;
|
||||
struct xusb_device *xusb_device;
|
||||
struct xusb_iface *xusb_iface;
|
||||
|
||||
|
||||
parse_hexfile_set_reporting(print_parse_errors);
|
||||
if((hexdata = parse_hexfile(hexfile, MAX_HEX_LINES)) == NULL) {
|
||||
perror(hexfile);
|
||||
return -errno;
|
||||
}
|
||||
devstr = xusb_devpath(astribank->xusb);
|
||||
xusb_iface = xubs_iface_of_mpp(mpp);
|
||||
xusb_device = xusb_deviceof(xusb_iface);
|
||||
devstr = xusb_devpath(xusb_device);
|
||||
INFO("%s [%s]: Loading %s Firmware: %s (version %s)\n",
|
||||
devstr,
|
||||
xusb_serial(astribank->xusb),
|
||||
xusb_serial(xusb_device),
|
||||
dev_dest2str(dest),
|
||||
hexdata->fname, hexdata->version_info);
|
||||
if((ret = mpp_send_start(astribank, dest, hexdata->version_info)) < 0) {
|
||||
if((ret = mpp_send_start(mpp, dest, hexdata->version_info)) < 0) {
|
||||
ERR("%s: Failed hexfile send start: %d\n", devstr, ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -135,7 +148,7 @@ static int load_hexfile(struct astribank_device *astribank, const char *hexfile,
|
|||
finished = 1;
|
||||
continue;
|
||||
}
|
||||
if((ret = handle_hexline(astribank, hexline)) < 0) {
|
||||
if((ret = handle_hexline(mpp, hexline)) < 0) {
|
||||
ERR("%s: Failed hexfile sending in lineno %d (ret=%d)\n", devstr, i, ret);;
|
||||
return ret;
|
||||
}
|
||||
|
@ -144,7 +157,7 @@ static int load_hexfile(struct astribank_device *astribank, const char *hexfile,
|
|||
putchar('\n');
|
||||
fflush(stdout);
|
||||
}
|
||||
if((ret = mpp_send_end(astribank)) < 0) {
|
||||
if((ret = mpp_send_end(mpp)) < 0) {
|
||||
ERR("%s: Failed hexfile send end: %d\n", devstr, ret);
|
||||
return ret;
|
||||
}
|
||||
|
@ -164,12 +177,13 @@ int main(int argc, char *argv[])
|
|||
int opt_ecver = 0;
|
||||
#if HAVE_OCTASIC
|
||||
int opt_alaw = 0;
|
||||
const char *span_spec = NULL;
|
||||
char def_span_spec[sizeof(DEF_SPAN_SPEC_FORMAT)];
|
||||
#endif
|
||||
int opt_dest = 0;
|
||||
int opt_sum = 0;
|
||||
enum dev_dest dest = DEST_NONE;
|
||||
const char options[] = "vd:D:EFOopA";
|
||||
int iface_num;
|
||||
const char options[] = "vd:D:EFOopAS:";
|
||||
int ret;
|
||||
|
||||
progname = argv[0];
|
||||
|
@ -210,6 +224,9 @@ int main(int argc, char *argv[])
|
|||
case 'A':
|
||||
opt_alaw = 1;
|
||||
break;
|
||||
case 'S':
|
||||
span_spec = optarg;
|
||||
break;
|
||||
#endif
|
||||
case 'p':
|
||||
opt_pic = 1;
|
||||
|
@ -235,7 +252,6 @@ int main(int argc, char *argv[])
|
|||
" and -p options are mutually exclusive, if neither is used then -o should present\n");
|
||||
usage();
|
||||
}
|
||||
iface_num = (opt_dest) ? 1 : 0;
|
||||
if(!opt_pic && !opt_ecver) {
|
||||
if(optind != argc - 1) {
|
||||
ERR("Got %d hexfile names (Need exactly one hexfile)\n",
|
||||
|
@ -247,33 +263,54 @@ int main(int argc, char *argv[])
|
|||
ERR("Missing device path.\n");
|
||||
usage();
|
||||
}
|
||||
# ifdef HAVE_OCTASIC
|
||||
if (!span_spec) {
|
||||
snprintf(def_span_spec, sizeof(def_span_spec),
|
||||
DEF_SPAN_SPEC_FORMAT, opt_alaw? 'E' : 'T');
|
||||
span_spec = def_span_spec;
|
||||
}
|
||||
#endif
|
||||
if(opt_dest) {
|
||||
/*
|
||||
* MPP Interface
|
||||
*/
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
struct mpp_device *mpp;
|
||||
|
||||
if((astribank = mpp_init(devpath, iface_num)) == NULL) {
|
||||
astribank = astribank_new(devpath);
|
||||
if(!astribank) {
|
||||
ERR("%s: Opening astribank failed\n", devpath);
|
||||
return 1;
|
||||
}
|
||||
//show_astribank_info(astribank);
|
||||
if(load_hexfile(astribank, argv[optind], dest) < 0) {
|
||||
mpp = astribank_mpp_open(astribank);
|
||||
if(!mpp) {
|
||||
ERR("%s: Opening astribank XPP interface failed\n", devpath);
|
||||
return 1;
|
||||
}
|
||||
show_astribank_info(astribank);
|
||||
if(load_hexfile(mpp, argv[optind], dest) < 0) {
|
||||
ERR("%s: Loading firmware to %s failed\n", devpath, dev_dest2str(dest));
|
||||
return 1;
|
||||
}
|
||||
astribank_close(astribank, 0);
|
||||
astribank_destroy(astribank);
|
||||
} else if(opt_pic || opt_echo || opt_ecver) {
|
||||
/*
|
||||
* XPP Interface
|
||||
*/
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
struct xusb_iface *xpp_iface;
|
||||
|
||||
if((astribank = astribank_open(devpath, iface_num)) == NULL) {
|
||||
astribank = astribank_new(devpath);
|
||||
if (!astribank) {
|
||||
ERR("%s: Opening astribank failed\n", devpath);
|
||||
return 1;
|
||||
}
|
||||
//show_astribank_info(astribank);
|
||||
xpp_iface = astribank_xpp_open(astribank);
|
||||
if(!xpp_iface) {
|
||||
ERR("%s: Opening astribank XPP interface failed\n", devpath);
|
||||
return 1;
|
||||
}
|
||||
show_astribank_info(astribank);
|
||||
#if HAVE_OCTASIC
|
||||
if (opt_ecver) {
|
||||
if((ret = echo_ver(astribank)) < 0) {
|
||||
|
@ -290,13 +327,13 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
#if HAVE_OCTASIC
|
||||
} else if (opt_echo) {
|
||||
if((ret = load_echo(astribank, argv[optind], opt_alaw)) < 0) {
|
||||
if((ret = load_echo(astribank, argv[optind], opt_alaw, span_spec)) < 0) {
|
||||
ERR("%s: Loading ECHO's failed\n", devpath);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
astribank_close(astribank, 0);
|
||||
astribank_destroy(astribank);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ PATH="$dir:/usr/sbin:/sbin:/usr/bin:/bin"
|
|||
|
||||
set -e
|
||||
|
||||
LOCK="/var/lock/twinstar_startup"
|
||||
|
||||
[ -r /etc/dahdi/init.conf ] && . /etc/dahdi/init.conf
|
||||
|
||||
# For lab testing
|
||||
|
@ -32,17 +34,38 @@ if [ "$XPP_HOTPLUG_DAHDI" != yes ]; then
|
|||
fi
|
||||
|
||||
export XPPORDER_CONF="$dahdi_conf/xpp_order"
|
||||
if [ ! -r "$XPPORDER_CONF" ]; then
|
||||
(
|
||||
echo "Skip($ACTION): No '$XPPORDER_CONF'"
|
||||
echo "Removing uneeded startup semaphore"
|
||||
astribank_is_starting -v -r 2>&1
|
||||
) 2>&1 | $LOGGER
|
||||
exit 0
|
||||
fi
|
||||
export DAHDI_CFG_CMD="dahdi_cfg -c $dahdi_conf/system.conf"
|
||||
export CALLED_FROM_ATRIBANK_HOOK=yes
|
||||
|
||||
can_full_async() {
|
||||
# Can we work aynchronously:
|
||||
# - Need modern Asterisk that accept hotplug DAHDI devices.
|
||||
# - Need DAHDI with "auto_assign_spans" == 0
|
||||
if [ "$ASTERISK_SUPPORTS_DAHDI_HOTPLUG" = yes ]; then
|
||||
aas_param='/sys/module/dahdi/parameters/auto_assign_spans'
|
||||
aas=`cat "$aas_param" 2>/dev/null`
|
||||
if [ "$aas" = 0 ]; then
|
||||
return 0
|
||||
else
|
||||
$LOGGER "No async operation ($aas_param != 0)"
|
||||
fi
|
||||
else
|
||||
$LOGGER "No async operation (ASTERISK_SUPPORTS_DAHDI_HOTPLUG!=yes)"
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
check_xpporder_conf() {
|
||||
if [ ! -r "$XPPORDER_CONF" ]; then
|
||||
(
|
||||
echo "Skip($ACTION): No '$XPPORDER_CONF'"
|
||||
echo "Removing uneeded startup semaphore"
|
||||
astribank_is_starting -v -r 2>&1
|
||||
) 2>&1 | $LOGGER
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
clean_lines() {
|
||||
sed -e 's/#.*//' -e 'y/\t/ /' -e 's/^ *//' -e 's/ *$//' -e '$s/$/\n/' "$XPPORDER_CONF"
|
||||
}
|
||||
|
@ -64,10 +87,6 @@ matched_devices() {
|
|||
done
|
||||
}
|
||||
|
||||
NUM_WANTED=`clean_lines | sed '/^$/d' | wc -l`
|
||||
NUM_GOOD=`matched_devices | wc -l`
|
||||
LOCK="/var/lock/twinstar_startup"
|
||||
|
||||
# Wait until udev finished processing our requests
|
||||
# so we know the device files were actually created
|
||||
# before trying dahdi_cfg et-al.
|
||||
|
@ -75,22 +94,27 @@ wait_for_udev() {
|
|||
UDEV_SETTLE_MAX_TIME=10
|
||||
|
||||
echo "Waiting for udev to settle down..."
|
||||
if [ -x /sbin/udevsettle ]; then
|
||||
# Old system, stand-alone udevsettle command
|
||||
time /sbin/udevsettle --timeout="$UDEV_SETTLE_MAX_TIME"
|
||||
udevsettle_cmd=
|
||||
if [ -x /bin/udevadm ]; then
|
||||
udevsettle_cmd="/bin/udevadm settle"
|
||||
elif [ -x /sbin/udevadm ]; then
|
||||
# Assume modern system, udevadm has settle parameter
|
||||
if ! time /sbin/udevadm settle --timeout="$UDEV_SETTLE_MAX_TIME"
|
||||
then
|
||||
echo "udevadm failed ($?)."
|
||||
echo "Fallback to sleep $UDEV_SETTLE_MAX_TIME seconds."
|
||||
sleep "$UDEV_SETTLE_MAX_TIME"
|
||||
fi
|
||||
udevsettle_cmd="/sbin/udevadm settle"
|
||||
elif [ -x /sbin/udevsettle ]; then
|
||||
udevsettle_cmd="/sbin/udevsettle"
|
||||
else
|
||||
echo "No udevsettle/udevadm."
|
||||
echo "Fallback to sleep $UDEV_SETTLE_MAX_TIME seconds."
|
||||
sleep "$UDEV_SETTLE_MAX_TIME"
|
||||
return
|
||||
fi
|
||||
|
||||
if ! $udevsettle_cmd --timeout="$UDEV_SETTLE_MAX_TIME"
|
||||
then
|
||||
echo "udevadm failed ($?)."
|
||||
echo "Fallback to sleep $UDEV_SETTLE_MAX_TIME seconds."
|
||||
sleep "$UDEV_SETTLE_MAX_TIME"
|
||||
fi
|
||||
|
||||
sleep 1 # Wait a bit more (races)
|
||||
}
|
||||
|
||||
|
@ -110,13 +134,9 @@ start_dahdi() {
|
|||
rm -f "$LOCK"
|
||||
}
|
||||
|
||||
#echo "$0: $ACTION($XBUS_NAME)" | $LOGGER
|
||||
case "$ACTION" in
|
||||
add)
|
||||
;;
|
||||
remove)
|
||||
;;
|
||||
online)
|
||||
old_synchronous_start() {
|
||||
NUM_GOOD=`matched_devices | wc -l`
|
||||
NUM_WANTED=`clean_lines | sed '/^$/d' | wc -l`
|
||||
echo "$ACTION($XBUS_NAME): $NUM_GOOD/$NUM_WANTED from $XPPORDER_CONF" | $LOGGER
|
||||
if [ "$NUM_GOOD" -eq "$NUM_WANTED" ]; then
|
||||
(
|
||||
|
@ -142,8 +162,11 @@ online)
|
|||
fi
|
||||
) < /dev/null 2>&1 | $LOGGER &
|
||||
fi
|
||||
;;
|
||||
offline)
|
||||
}
|
||||
|
||||
old_synchronous_stop() {
|
||||
NUM_GOOD=`matched_devices | wc -l`
|
||||
NUM_WANTED=`clean_lines | sed '/^$/d' | wc -l`
|
||||
echo "$ACTION($XBUS_NAME): $NUM_GOOD/$NUM_WANTED from $XPPORDER_CONF" | $LOGGER
|
||||
if [ "$NUM_GOOD" -eq 0 ]; then
|
||||
echo "All Astribanks offline" | $LOGGER
|
||||
|
@ -152,6 +175,59 @@ offline)
|
|||
fi
|
||||
rm -f "$LOCK"
|
||||
fi
|
||||
}
|
||||
|
||||
ab_list() {
|
||||
find /sys/devices -name idVendor 2>/dev/null | \
|
||||
xargs grep -H 'e4e4' 2>/dev/null | \
|
||||
sed -e 's/idVendor.*/idProduct/' | xargs grep -H '11[3456]' | \
|
||||
sed 's,/[^/]*$,,' || :
|
||||
}
|
||||
|
||||
tws_watchdog_enable() {
|
||||
devdir="/sys$DEVPATH"
|
||||
label=`cat "$devdir/label"`
|
||||
connector=`cat "$devdir/connector"`
|
||||
xbus=`echo "$devdir" | sed 's,.*/,,'`
|
||||
prefix="${xbus}: [${label}] @${connector}"
|
||||
TWS_NOAUTOJUMPFILE="$TWS_DIR/twinstar_no_autojump"
|
||||
if [ -e "$TWS_NOAUTOJUMPFILE" ]; then
|
||||
$LOGGER "$prefix: ignore wd (found $TWS_NOAUTOJUMPFILE)"
|
||||
else
|
||||
# Re-arm Astribank watchdog
|
||||
transportdir="$devdir/transport"
|
||||
busnum=`cat "$transportdir/busnum" 2>/dev/null || :`
|
||||
devnum=`cat "$transportdir/devnum" 2>/dev/null || :`
|
||||
devaddr=`printf "%03d/%03d" "$busnum" "$devnum"`
|
||||
$LOGGER "$prefix: enabling twinstar watchdog"
|
||||
astribank_tool -D "$devaddr" -w 1 2>&1 | $LOGGER
|
||||
fi
|
||||
}
|
||||
|
||||
#echo "$0: $ACTION($XBUS_NAME)" | $LOGGER
|
||||
case "$ACTION" in
|
||||
add)
|
||||
;;
|
||||
remove)
|
||||
ab=`ab_list | wc -l`
|
||||
if [ "$ab" -eq 0 ]; then
|
||||
$LOGGER "$prefix: No more Astribanks -- remove astribank_is_starting semaphore"
|
||||
astribank_is_starting -v -r 2>&1 | $LOGGER
|
||||
fi
|
||||
;;
|
||||
online)
|
||||
if can_full_async; then
|
||||
tws_watchdog_enable
|
||||
else
|
||||
old_synchronous_start
|
||||
fi
|
||||
;;
|
||||
offline)
|
||||
if can_full_async; then
|
||||
: # Nothing to do
|
||||
else
|
||||
old_synchronous_stop
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "$0: Unknown ACTION='$ACTION'" | $LOGGER
|
||||
|
|
|
@ -83,7 +83,7 @@ Q: Why do you use a semaphore?
|
|||
A: because, unlike the filesystem, it is writable at any given time.
|
||||
|
||||
.SH BUGS
|
||||
Option ordering matter. The \fB\-v\fR and \fB\-d\fR options should preceed
|
||||
Option ordering matter. The \fB\-v\fR and \fB\-d\fR options should precede
|
||||
the actions (\fB\-a\fR, \fB\-r\fR and \fB\-w\fR).
|
||||
The \fB\-t\fItimeout\fR option should preceed the \fB\-w\fR option.
|
||||
|
||||
|
|
|
@ -125,6 +125,8 @@ static int absem_detected(void)
|
|||
if((absem = absem_get(0)) < 0) {
|
||||
if(debug)
|
||||
fprintf(stderr, "%s: absem does not exist\n", progname);
|
||||
if(verbose)
|
||||
printf("No Astribanks are initializing\n");
|
||||
return absem;
|
||||
}
|
||||
if(debug)
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <debug.h>
|
||||
#include <xtalk/debug.h>
|
||||
#include "astribank_license.h"
|
||||
|
||||
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef ASTRIBANK_ALLOW_H
|
||||
#define ASTRIBANK_ALLOW_H
|
||||
|
||||
#include "mpp.h"
|
||||
#include "mpptalk.h"
|
||||
|
||||
enum license_markers {
|
||||
LICENSE_MARKER_NONE = 0,
|
||||
|
|
|
@ -28,10 +28,10 @@
|
|||
#include <getopt.h>
|
||||
#include <sys/types.h>
|
||||
#include <arpa/inet.h>
|
||||
#include "astribank_usb.h"
|
||||
#include <xtalk/debug.h>
|
||||
#include <xtalk/xusb.h>
|
||||
#include "mpptalk.h"
|
||||
#include <debug.h>
|
||||
#include <xusb.h>
|
||||
#include "astribank.h"
|
||||
|
||||
#define DBG_MASK 0x80
|
||||
/* if enabled, adds support for resetting pre-MPP USB firmware - if we
|
||||
|
@ -72,94 +72,15 @@ static int reset_kind(const char *arg)
|
|||
if(strcasecmp(reset_kinds[i].name, arg) == 0)
|
||||
return reset_kinds[i].type_code;
|
||||
}
|
||||
ERR("Uknown reset kind '%s'\n", arg);
|
||||
ERR("Unknown reset kind '%s'\n", arg);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
static int show_hardware(struct astribank_device *astribank)
|
||||
{
|
||||
int ret;
|
||||
struct eeprom_table eeprom_table;
|
||||
struct capabilities capabilities;
|
||||
struct extrainfo extrainfo;
|
||||
|
||||
ret = mpp_caps_get(astribank, &eeprom_table, &capabilities, NULL);
|
||||
if(ret < 0)
|
||||
return ret;
|
||||
show_eeprom(&eeprom_table, stdout);
|
||||
show_astribank_status(astribank, stdout);
|
||||
if(astribank->eeprom_type == EEPROM_TYPE_LARGE) {
|
||||
show_capabilities(&capabilities, stdout);
|
||||
if(STATUS_FPGA_LOADED(astribank->status)) {
|
||||
uint8_t unit;
|
||||
uint8_t card_status;
|
||||
uint8_t card_type;
|
||||
uint8_t fpga_configuration;
|
||||
uint8_t status;
|
||||
|
||||
for(unit = 0; unit < 5; unit++) {
|
||||
ret = mpps_card_info(astribank, unit, &card_type, &card_status);
|
||||
if(ret < 0)
|
||||
return ret;
|
||||
printf("CARD %d: type=%x.%x %s\n", unit,
|
||||
((card_type >> 4) & 0xF), (card_type & 0xF),
|
||||
((card_status & 0x1) ? "PIC" : "NOPIC"));
|
||||
}
|
||||
ret = mpps_stat(astribank, unit, &fpga_configuration, &status);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
printf("FPGA: %-17s: %d\n", "Configuration num", fpga_configuration);
|
||||
printf("FPGA: %-17s: %s\n", "Watchdog Timer",
|
||||
(SER_STAT_WATCHDOG_READY(status)) ? "ready" : "expired");
|
||||
printf("FPGA: %-17s: %s\n", "XPD Alive",
|
||||
(SER_STAT_XPD_ALIVE(status)) ? "yes" : "no");
|
||||
}
|
||||
ret = mpp_extrainfo_get(astribank, &extrainfo);
|
||||
if(ret < 0)
|
||||
return ret;
|
||||
show_extrainfo(&extrainfo, stdout);
|
||||
if(CAP_EXTRA_TWINSTAR(&capabilities)) {
|
||||
twinstar_show(astribank, stdout);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef SUPPORT_OLD_RESET
|
||||
/* Try to reset a device using USB_FW.hex, up to Xorcom rev. 6885 */
|
||||
int old_reset(const char* devpath)
|
||||
{
|
||||
struct astribank_device *astribank;
|
||||
int ret;
|
||||
struct {
|
||||
uint8_t op;
|
||||
} PACKED header = {0x20}; /* PT_RESET */
|
||||
char *buf = (char*) &header;
|
||||
|
||||
/* Note that the function re-opens the connection to the Astribank
|
||||
* as any reference to the previous connection was lost when mpp_open
|
||||
* returned NULL as the astribank reference. */
|
||||
astribank = astribank_open(devpath, 1);
|
||||
if (!astribank) {
|
||||
DBG("Failed re-opening astribank device for old_reset\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
ret = xusb_send(astribank->xusb, buf, 1, 5000);
|
||||
|
||||
/* If we just had a reenumeration, we may get -ENODEV */
|
||||
if(ret < 0 && ret != -ENODEV)
|
||||
return ret;
|
||||
/* We don't astribank_close(), as it has likely been
|
||||
* reenumerated by now. */
|
||||
return 0;
|
||||
}
|
||||
#endif /* SUPPORT_OLD_RESET */
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char *devpath = NULL;
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
struct mpp_device *mpp;
|
||||
const char options[] = "vd:D:nr:p:w:Q";
|
||||
int opt_renumerate = 0;
|
||||
char *opt_port = NULL;
|
||||
|
@ -218,20 +139,12 @@ int main(int argc, char *argv[])
|
|||
usage();
|
||||
}
|
||||
DBG("Startup %s\n", devpath);
|
||||
if((astribank = mpp_init(devpath, 1)) == NULL) {
|
||||
ERR("Failed initializing MPP\n");
|
||||
#ifdef SUPPORT_OLD_RESET
|
||||
DBG("opt_reset = %s\n", opt_reset);
|
||||
if (opt_reset) {
|
||||
DBG("Trying old reset method\n");
|
||||
if ((ret = old_reset(devpath)) != 0) {
|
||||
ERR("Old reset method failed as well: %d\n", ret);
|
||||
}
|
||||
}
|
||||
#endif /* SUPPORT_OLD_RESET */
|
||||
|
||||
astribank = astribank_new(devpath);
|
||||
if(!astribank) {
|
||||
ERR("Failed initializing Astribank\n");
|
||||
return 1;
|
||||
}
|
||||
mpp = astribank_mpp_open(astribank);
|
||||
/*
|
||||
* First process reset options. We want to be able
|
||||
* to reset minimal USB firmwares even if they don't
|
||||
|
@ -244,19 +157,19 @@ int main(int argc, char *argv[])
|
|||
ERR("Bad reset kind '%s'\n", opt_reset);
|
||||
return 1;
|
||||
}
|
||||
DBG("Reseting (%s)\n", opt_reset);
|
||||
if((ret = mpp_reset(astribank, full_reset)) < 0) {
|
||||
ERR("%s Reseting astribank failed: %d\n",
|
||||
DBG("Resetting (%s)\n", opt_reset);
|
||||
if((ret = mpp_reset(mpp, full_reset)) < 0) {
|
||||
ERR("%s Resetting astribank failed: %d\n",
|
||||
(full_reset) ? "Full" : "Half", ret);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
show_astribank_info(astribank);
|
||||
if(opt_query) {
|
||||
show_hardware(astribank);
|
||||
show_hardware(mpp);
|
||||
} else if(opt_renumerate) {
|
||||
DBG("Renumerate\n");
|
||||
if((ret = mpp_renumerate(astribank)) < 0) {
|
||||
if((ret = mpp_renumerate(mpp)) < 0) {
|
||||
ERR("Renumerating astribank failed: %d\n", ret);
|
||||
}
|
||||
} else if(opt_watchdog) {
|
||||
|
@ -264,24 +177,24 @@ int main(int argc, char *argv[])
|
|||
|
||||
DBG("TWINSTAR: Setting watchdog %s-guard\n",
|
||||
(watchdogstate) ? "on" : "off");
|
||||
if((ret = mpp_tws_setwatchdog(astribank, watchdogstate)) < 0) {
|
||||
if((ret = mpp_tws_setwatchdog(mpp, watchdogstate)) < 0) {
|
||||
ERR("Failed to set watchdog to %d\n", watchdogstate);
|
||||
return 1;
|
||||
}
|
||||
} else if(opt_port) {
|
||||
int new_portnum = strtoul(opt_port, NULL, 0);
|
||||
int tws_portnum = mpp_tws_portnum(astribank);
|
||||
int tws_portnum = mpp_tws_portnum(mpp);
|
||||
char *msg = (new_portnum == tws_portnum)
|
||||
? " Same same, never mind..."
|
||||
: "";
|
||||
|
||||
DBG("TWINSTAR: Setting portnum to %d.%s\n", new_portnum, msg);
|
||||
if((ret = mpp_tws_setportnum(astribank, new_portnum)) < 0) {
|
||||
if((ret = mpp_tws_setportnum(mpp, new_portnum)) < 0) {
|
||||
ERR("Failed to set USB portnum to %d\n", new_portnum);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
out:
|
||||
mpp_exit(astribank);
|
||||
astribank_destroy(astribank);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,276 +0,0 @@
|
|||
/*
|
||||
* Written by Oron Peled <oron@actcom.co.il>
|
||||
* Copyright (C) 2008, Xorcom
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE /* for memrchr() */
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <syslog.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <xusb.h>
|
||||
#include "astribank_usb.h"
|
||||
#include <debug.h>
|
||||
|
||||
static const char rcsid[] = "$Id$";
|
||||
|
||||
#define DBG_MASK 0x01
|
||||
#define TIMEOUT 500
|
||||
|
||||
#define TYPE_ENTRY(t,p,ni,n,ne,out,in,...) \
|
||||
{ \
|
||||
.my_vendor_id = 0xe4e4, \
|
||||
.my_product_id = (p), \
|
||||
.name = #t, \
|
||||
.num_interfaces = (ni), \
|
||||
.my_interface_num = (n), \
|
||||
.num_endpoints = (ne), \
|
||||
.my_ep_in = (in), \
|
||||
.my_ep_out = (out), \
|
||||
}
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
|
||||
|
||||
static const struct xusb_spec astribank_specs[] = {
|
||||
/* OLD Firmwares */
|
||||
TYPE_ENTRY("USB-OLDFXS", 0x1131, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("FPGA-OLDFXS", 0x1132, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("USB-BRI", 0x1141, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("FPGA-BRI", 0x1142, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("USB-OLD", 0x1151, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("FPGA-OLD", 0x1152, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
|
||||
TYPE_ENTRY("USB-MULTI", 0x1161, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("FPGA-MULTI", 0x1162, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("BURNED-MULTI", 0x1164, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
TYPE_ENTRY("USB-BURN", 0x1112, 2, 1, 2, MP_EP_OUT, MP_EP_IN),
|
||||
};
|
||||
|
||||
static const struct xusb_spec astribank_pic_specs[] = {
|
||||
TYPE_ENTRY("USB_PIC", 0x1161, 2, 0, 2, XPP_EP_OUT, XPP_EP_IN),
|
||||
};
|
||||
#undef TYPE_ENTRY
|
||||
|
||||
//static int verbose = LOG_DEBUG;
|
||||
|
||||
/*
|
||||
* USB handling
|
||||
*/
|
||||
struct astribank_device *astribank_open(const char devpath[], int iface_num)
|
||||
{
|
||||
struct astribank_device *astribank = NULL;
|
||||
struct xusb *xusb;
|
||||
|
||||
DBG("devpath='%s' iface_num=%d\n", devpath, iface_num);
|
||||
if((astribank = malloc(sizeof(struct astribank_device))) == NULL) {
|
||||
ERR("Out of memory\n");
|
||||
goto fail;
|
||||
}
|
||||
memset(astribank, 0, sizeof(*astribank));
|
||||
if (iface_num) {
|
||||
xusb = xusb_find_bypath(astribank_specs, ARRAY_SIZE(astribank_specs), devpath);
|
||||
} else {
|
||||
xusb = xusb_find_bypath(astribank_pic_specs, ARRAY_SIZE(astribank_pic_specs), devpath);
|
||||
}
|
||||
if (!xusb) {
|
||||
ERR("%s: No device found\n", __func__);
|
||||
goto fail;
|
||||
}
|
||||
astribank->xusb = xusb;
|
||||
astribank->is_usb2 = (xusb_packet_size(xusb) == 512);
|
||||
astribank->my_interface_num = iface_num;
|
||||
if (xusb_claim_interface(astribank->xusb) < 0) {
|
||||
ERR("xusb_claim_interface failed\n");
|
||||
goto fail;
|
||||
}
|
||||
astribank->tx_sequenceno = 1;
|
||||
return astribank;
|
||||
fail:
|
||||
if (astribank) {
|
||||
free(astribank);
|
||||
astribank = NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* MP device handling
|
||||
*/
|
||||
void show_astribank_info(const struct astribank_device *astribank)
|
||||
{
|
||||
struct xusb *xusb;
|
||||
|
||||
assert(astribank != NULL);
|
||||
xusb = astribank->xusb;
|
||||
assert(xusb != NULL);
|
||||
if(verbose <= LOG_INFO) {
|
||||
xusb_showinfo(xusb);
|
||||
} else {
|
||||
const struct xusb_spec *spec;
|
||||
|
||||
spec = xusb_spec(xusb);
|
||||
printf("USB Bus/Device: [%s]\n", xusb_devpath(xusb));
|
||||
printf("USB Firmware Type: [%s]\n", spec->name);
|
||||
printf("USB iSerialNumber: [%s]\n", xusb_serial(xusb));
|
||||
printf("USB iManufacturer: [%s]\n", xusb_manufacturer(xusb));
|
||||
printf("USB iProduct: [%s]\n", xusb_product(xusb));
|
||||
}
|
||||
}
|
||||
|
||||
void astribank_close(struct astribank_device *astribank, int disconnected)
|
||||
{
|
||||
assert(astribank != NULL);
|
||||
if (astribank->xusb) {
|
||||
xusb_close(astribank->xusb);
|
||||
astribank->xusb = NULL;
|
||||
}
|
||||
astribank->tx_sequenceno = 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
int flush_read(struct astribank_device *astribank)
|
||||
{
|
||||
char tmpbuf[BUFSIZ];
|
||||
int ret;
|
||||
|
||||
DBG("starting...\n");
|
||||
memset(tmpbuf, 0, BUFSIZ);
|
||||
ret = recv_usb(astribank, tmpbuf, BUFSIZ, 1);
|
||||
if(ret < 0 && ret != -ETIMEDOUT) {
|
||||
ERR("ret=%d\n", ret);
|
||||
return ret;
|
||||
} else if(ret > 0) {
|
||||
DBG("Got %d bytes:\n", ret);
|
||||
dump_packet(LOG_DEBUG, DBG_MASK, __FUNCTION__, tmpbuf, ret);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int release_isvalid(uint16_t release)
|
||||
{
|
||||
uint8_t rmajor = (release >> 8) & 0xFF;
|
||||
uint8_t rminor = release & 0xFF;
|
||||
|
||||
return (rmajor > 0) &&
|
||||
(rmajor < 10) &&
|
||||
(rminor > 0) &&
|
||||
(rminor < 10);
|
||||
}
|
||||
|
||||
int label_isvalid(const char *label)
|
||||
{
|
||||
int len;
|
||||
int goodlen;
|
||||
const char GOOD_CHARS[] =
|
||||
"abcdefghijklmnopqrstuvwxyz"
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
"0123456789"
|
||||
"-_.";
|
||||
|
||||
len = strlen(label);
|
||||
goodlen = strspn(label, GOOD_CHARS);
|
||||
if(len > LABEL_SIZE) {
|
||||
ERR("Label too long (%d > %d)\n", len, LABEL_SIZE);
|
||||
return 0;
|
||||
}
|
||||
if(goodlen != len) {
|
||||
ERR("Bad character in label (pos=%d)\n", goodlen);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int eeprom_fill(struct eeprom_table *eprm,
|
||||
const char *vendor,
|
||||
const char *product,
|
||||
const char *release,
|
||||
const char *label)
|
||||
{
|
||||
uint16_t val;
|
||||
|
||||
eprm->source = 0xC0;
|
||||
eprm->config_byte = 0;
|
||||
if(vendor) {
|
||||
val = strtoul(vendor, NULL, 0);
|
||||
if(!val) {
|
||||
ERR("Invalid vendor '%s'\n",
|
||||
vendor);
|
||||
return -EINVAL;
|
||||
}
|
||||
eprm->vendor = val;
|
||||
}
|
||||
if(product) {
|
||||
val = strtoul(product, NULL, 0);
|
||||
if(!val) {
|
||||
ERR("Invalid product '%s'\n",
|
||||
product);
|
||||
return -EINVAL;
|
||||
}
|
||||
eprm->product = val;
|
||||
}
|
||||
if(release) {
|
||||
int release_major = 0;
|
||||
int release_minor = 0;
|
||||
uint16_t value;
|
||||
|
||||
if(sscanf(release, "%d.%d", &release_major, &release_minor) != 2) {
|
||||
ERR("Failed to parse release number '%s'\n", release);
|
||||
return -EINVAL;
|
||||
}
|
||||
value = (release_major << 8) | release_minor;
|
||||
DBG("Parsed release(%d): major=%d, minor=%d\n",
|
||||
value, release_major, release_minor);
|
||||
if(!release_isvalid(value)) {
|
||||
ERR("Invalid release number 0x%X\n", value);
|
||||
return -EINVAL;
|
||||
}
|
||||
eprm->release = value;
|
||||
}
|
||||
if(label) {
|
||||
/* padding */
|
||||
if(!label_isvalid(label)) {
|
||||
ERR("Invalid label '%s'\n", label);
|
||||
return -EINVAL;
|
||||
}
|
||||
memset(eprm->label, 0, LABEL_SIZE);
|
||||
memcpy(eprm->label, label, strlen(label));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int astribank_has_twinstar(struct astribank_device *astribank)
|
||||
{
|
||||
uint16_t product_series;
|
||||
|
||||
assert(astribank != NULL);
|
||||
product_series = xusb_product_id(astribank->xusb);
|
||||
product_series &= 0xFFF0;
|
||||
if(product_series == 0x1160) /* New boards */
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,113 +0,0 @@
|
|||
#ifndef ASTRIBANK_USB_H
|
||||
#define ASTRIBANK_USB_H
|
||||
/*
|
||||
* Written by Oron Peled <oron@actcom.co.il>
|
||||
* Copyright (C) 2008, Xorcom
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <xusb.h>
|
||||
#include <xtalk.h>
|
||||
#include "mpp.h"
|
||||
|
||||
/*
|
||||
* Astribank handling
|
||||
*/
|
||||
|
||||
#define PACKET_SIZE 512
|
||||
|
||||
/* USB Endpoints */
|
||||
#define MP_EP_OUT 0x04 /* Managment processor */
|
||||
#define MP_EP_IN 0x88 /* Managment processor */
|
||||
|
||||
#define XPP_EP_OUT 0x02 /* XPP */
|
||||
#define XPP_EP_IN 0x86 /* XPP */
|
||||
|
||||
/* USB firmware types */
|
||||
#define USB_11xx 0
|
||||
#define USB_FIRMWARE_II 1
|
||||
#define USB_PIC 2
|
||||
|
||||
struct interface_type {
|
||||
int type_code;
|
||||
int num_interfaces;
|
||||
int my_interface_num;
|
||||
int num_endpoints;
|
||||
int my_ep_out;
|
||||
int my_ep_in;
|
||||
char *name;
|
||||
int endpoints[4]; /* for matching */
|
||||
};
|
||||
|
||||
enum eeprom_burn_state {
|
||||
BURN_STATE_NONE = 0,
|
||||
BURN_STATE_STARTED = 1,
|
||||
BURN_STATE_ENDED = 2,
|
||||
BURN_STATE_FAILED = 3,
|
||||
};
|
||||
|
||||
struct astribank_device {
|
||||
struct xusb *xusb;
|
||||
struct xtalk_device *xtalk_dev;
|
||||
usb_dev_handle *handle;
|
||||
int my_interface_num;
|
||||
int my_ep_out;
|
||||
int my_ep_in;
|
||||
char iInterface[BUFSIZ];
|
||||
int is_usb2;
|
||||
enum eeprom_type eeprom_type;
|
||||
enum eeprom_burn_state burn_state;
|
||||
uint8_t status;
|
||||
uint8_t mpp_proto_version;
|
||||
struct eeprom_table *eeprom;
|
||||
struct firmware_versions fw_versions;
|
||||
uint16_t tx_sequenceno;
|
||||
};
|
||||
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
struct astribank_device *astribank_open(const char devpath[], int iface_num);
|
||||
void astribank_close(struct astribank_device *astribank, int disconnected);
|
||||
void show_astribank_info(const struct astribank_device *astribank);
|
||||
int send_usb(struct astribank_device *astribank, char *buf, int len, int timeout);
|
||||
int recv_usb(struct astribank_device *astribank, char *buf, size_t len, int timeout);
|
||||
int flush_read(struct astribank_device *astribank);
|
||||
int eeprom_fill(struct eeprom_table *eprm,
|
||||
const char *vendor,
|
||||
const char *product,
|
||||
const char *release,
|
||||
const char *label);
|
||||
int astribank_has_twinstar(struct astribank_device *astribank);
|
||||
int label_isvalid(const char *label);
|
||||
|
||||
#define AB_REPORT(report_type, astribank, fmt, ...) \
|
||||
report_type("%s [%s]: " fmt, \
|
||||
xusb_devpath((astribank)->xusb), \
|
||||
xusb_serial((astribank)->xusb), \
|
||||
## __VA_ARGS__)
|
||||
|
||||
#define AB_INFO(astribank, fmt, ...) \
|
||||
AB_REPORT(INFO, astribank, fmt, ## __VA_ARGS__)
|
||||
|
||||
#define AB_ERR(astribank, fmt, ...) \
|
||||
AB_REPORT(ERR, astribank, fmt, ## __VA_ARGS__)
|
||||
|
||||
#endif /* ASTRIBANK_USB_H */
|
|
@ -74,8 +74,6 @@ if(defined($on)) { # Translate to booleans
|
|||
$should_output = 0 unless $verbose;
|
||||
}
|
||||
|
||||
undef $on if $dahdi_autoreg and not $opts{'R'};
|
||||
|
||||
sub state2str($) {
|
||||
return (shift)?"on":"off";
|
||||
}
|
||||
|
@ -84,38 +82,47 @@ sub myprintf {
|
|||
printf @_ if $should_output;
|
||||
}
|
||||
|
||||
my @spans = Dahdi::spans;
|
||||
|
||||
foreach my $xbus (Dahdi::Xpp::xbuses($sorter)) {
|
||||
myprintf "%-10s\t%3s-%s\t%s\n",
|
||||
$xbus->name, $xbus->xpporder, $xbus->label, $xbus->connector;
|
||||
next unless $xbus->status eq 'CONNECTED';
|
||||
foreach my $xpd (Dahdi::Xpp::Xpd::telephony_devs($xbus->xpds())) {
|
||||
my $prev = $xpd->dahdi_registration($on);
|
||||
if(!defined($prev)) { # Failure
|
||||
printf "%s: Failed %s\n", $xpd->fqn, $!;
|
||||
next;
|
||||
}
|
||||
myprintf "\t%-10s: ", $xpd->fqn;
|
||||
if(!defined($on)) { # Query only
|
||||
my ($span) = grep { $_->name eq $xpd->fqn } @spans;
|
||||
my $spanstr = ($span) ? ("Span " . $span->num) : "";
|
||||
myprintf "%s %s\n", state2str($prev), $spanstr ;
|
||||
next;
|
||||
}
|
||||
myprintf "%3s ==> %3s\n", state2str($prev), state2str($on);
|
||||
my $prev = $xbus->dahdi_registration($on);
|
||||
if(!defined($prev)) { # Failure
|
||||
printf STDERR "%s: Failed %s\n", $xbus->name, $!;
|
||||
next;
|
||||
}
|
||||
next unless defined($on) && $on;
|
||||
my $reg_str;
|
||||
if (defined $on) {
|
||||
$reg_str = ($on) ? "registering" : "unregistering";
|
||||
} else {
|
||||
$reg_str = ($prev) ? "registered" : "unregistered";
|
||||
}
|
||||
myprintf "%-10s\t%3s-%s\t%s (%s)\n",
|
||||
$xbus->name, $xbus->xpporder, $xbus->label, $xbus->connector,
|
||||
$reg_str;
|
||||
next unless $xbus->status eq 'CONNECTED';
|
||||
# Only assign if no default assignment, or forced by '-R' option
|
||||
if (defined($on) && $on) {
|
||||
if ($opts{'R'} || ! $default_auto_assign) {
|
||||
# Emulate /etc/dahdi/assigned-spans.conf:
|
||||
# - We iterate over $xbus according to /etc/dahdi/xpp_order
|
||||
# - We "auto" assign all spans of current $xbus
|
||||
my $devpath = sprintf "/sys/bus/dahdi_devices/devices/astribanks:xbus-%02d", $xbus->num;
|
||||
my @cmd = ('dahdi_span_assignments', 'auto', $devpath);
|
||||
system @cmd;
|
||||
warn "Failed '@cmd' (status=$?)\n" if $?;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (defined($on) && $on) {
|
||||
if ($opts{'R'} || ! $default_auto_assign) {
|
||||
# Emulate /etc/dahdi/assigned-spans.conf:
|
||||
# - We iterate over $xbus according to /etc/dahdi/xpp_order
|
||||
# - We "auto" assign all spans of current $xbus
|
||||
my $devpath = sprintf "/sys/bus/dahdi_devices/devices/astribanks:xbus-%02d", $xbus->num;
|
||||
myprintf "auto-assign $devpath\n";
|
||||
my @cmd = ('dahdi_span_assignments', 'auto', $devpath);
|
||||
system @cmd;
|
||||
warn "Failed '@cmd' (status=$?)\n" if $?;
|
||||
# wait for UDEV to do its stuff
|
||||
system "dahdi_waitfor_span_assignments assigned";
|
||||
}
|
||||
}
|
||||
foreach my $xbus (Dahdi::Xpp::xbuses($sorter)) {
|
||||
foreach my $xpd (Dahdi::Xpp::Xpd::telephony_devs($xbus->xpds())) {
|
||||
my $spanno = $xpd->xpd_getattr('span');
|
||||
myprintf "\t%-10s: ", $xpd->fqn;
|
||||
my $spanstr = ($spanno) ? ("Span " . $spanno) : "unassigned";
|
||||
myprintf "%s\n", $spanstr ;
|
||||
}
|
||||
}
|
||||
myprintf "# Sorted: $sort_order\n" if defined $sort_order;
|
||||
|
|
|
@ -28,11 +28,21 @@
|
|||
#include <limits.h>
|
||||
#include <regex.h>
|
||||
#include <sys/time.h>
|
||||
#include "echo_loader.h"
|
||||
#include "debug.h"
|
||||
#include <unistd.h>
|
||||
#include <oct6100api/oct6100_api.h>
|
||||
#include <xtalk/debug.h>
|
||||
#include <xtalk/xusb.h>
|
||||
#include <astribank.h>
|
||||
#include "echo_loader.h"
|
||||
#include "parse_span_specs.h"
|
||||
|
||||
#define DBG_MASK 0x03
|
||||
#ifdef __GNUC__
|
||||
#define PACKED __attribute__((packed))
|
||||
#else
|
||||
#define PACKED
|
||||
#endif
|
||||
|
||||
#define DBG_MASK 0x10
|
||||
#define TIMEOUT 1000
|
||||
#define ECHO_MAX_CHANS 128
|
||||
#define ECHO_RIN_STREAM 0
|
||||
|
@ -52,7 +62,7 @@ static float oct_fw_load_timeout = 2.0;
|
|||
struct echo_mod {
|
||||
tPOCT6100_INSTANCE_API pApiInstance;
|
||||
UINT32 ulEchoChanHndl[256];
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
int maxchans;
|
||||
};
|
||||
|
||||
|
@ -99,9 +109,9 @@ static struct usb_buffer {
|
|||
} usb_buffer;
|
||||
|
||||
|
||||
static void usb_buffer_init(struct astribank_device *astribank, struct usb_buffer *ub)
|
||||
static void usb_buffer_init(struct astribank *astribank, struct usb_buffer *ub)
|
||||
{
|
||||
ub->max_len = xusb_packet_size(astribank->xusb);
|
||||
ub->max_len = xusb_packet_size(xusb_dev_of_astribank(astribank));
|
||||
ub->curr = 0;
|
||||
ub->min_send = INT_MAX;
|
||||
ub->max_send = 0;
|
||||
|
@ -119,7 +129,7 @@ static long usb_buffer_usec(struct usb_buffer *ub)
|
|||
(now.tv_usec - ub->start.tv_usec);
|
||||
}
|
||||
|
||||
static void usb_buffer_showstatistics(struct astribank_device *astribank, struct usb_buffer *ub)
|
||||
static void usb_buffer_showstatistics(struct astribank *astribank, struct usb_buffer *ub)
|
||||
{
|
||||
long usec;
|
||||
|
||||
|
@ -132,7 +142,7 @@ static void usb_buffer_showstatistics(struct astribank_device *astribank, struct
|
|||
usec / 1000, usec / ub->num_sends);
|
||||
}
|
||||
|
||||
static int usb_buffer_flush(struct astribank_device *astribank, struct usb_buffer *ub)
|
||||
static int usb_buffer_flush(struct astribank *astribank, struct usb_buffer *ub)
|
||||
{
|
||||
int ret;
|
||||
long t;
|
||||
|
@ -141,7 +151,7 @@ static int usb_buffer_flush(struct astribank_device *astribank, struct usb_buffe
|
|||
|
||||
if (ub->curr == 0)
|
||||
return 0;
|
||||
ret = xusb_send(astribank->xusb, ub->data, ub->curr, TIMEOUT);
|
||||
ret = astribank_send(astribank, 0, ub->data, ub->curr, TIMEOUT);
|
||||
if (ret < 0) {
|
||||
AB_ERR(astribank, "xusb_send failed: %d\n", ret);
|
||||
return ret;
|
||||
|
@ -174,7 +184,7 @@ static int usb_buffer_flush(struct astribank_device *astribank, struct usb_buffe
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int usb_buffer_append(struct astribank_device *astribank, struct usb_buffer *ub,
|
||||
static int usb_buffer_append(struct astribank *astribank, struct usb_buffer *ub,
|
||||
char *buf, int len)
|
||||
{
|
||||
if (ub->curr + len >= ub->max_len) {
|
||||
|
@ -187,7 +197,7 @@ static int usb_buffer_append(struct astribank_device *astribank, struct usb_buff
|
|||
return len;
|
||||
}
|
||||
|
||||
static int usb_buffer_send(struct astribank_device *astribank, struct usb_buffer *ub,
|
||||
static int usb_buffer_send(struct astribank *astribank, struct usb_buffer *ub,
|
||||
char *buf, int len, int timeout, int recv_answer)
|
||||
{
|
||||
int ret = 0;
|
||||
|
@ -208,7 +218,7 @@ static int usb_buffer_send(struct astribank_device *astribank, struct usb_buffer
|
|||
ret = usb_buffer_flush(astribank, ub);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = xusb_recv(astribank->xusb, buf, PACKET_SIZE, TIMEOUT);
|
||||
ret = astribank_recv(astribank, 0, buf, PACKET_SIZE, TIMEOUT);
|
||||
if (ret <= 0) {
|
||||
AB_ERR(astribank, "No USB packs to read: %s\n", strerror(-ret));
|
||||
return -EINVAL;
|
||||
|
@ -238,7 +248,7 @@ static int usb_buffer_send(struct astribank_device *astribank, struct usb_buffer
|
|||
return ret;
|
||||
}
|
||||
|
||||
int spi_send(struct astribank_device *astribank, uint16_t addr, uint16_t data, int recv_answer, int ver)
|
||||
int spi_send(struct astribank *astribank, uint16_t addr, uint16_t data, int recv_answer, int ver)
|
||||
{
|
||||
int ret;
|
||||
char buf[PACKET_SIZE];
|
||||
|
@ -271,7 +281,7 @@ int spi_send(struct astribank_device *astribank, uint16_t addr, uint16_t data, i
|
|||
return ret;
|
||||
}
|
||||
|
||||
int test_send(struct astribank_device *astribank)
|
||||
int test_send(struct astribank *astribank)
|
||||
{
|
||||
int ret;
|
||||
char buf[PACKET_SIZE];
|
||||
|
@ -299,7 +309,7 @@ int test_send(struct astribank_device *astribank)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int echo_send_data(struct astribank_device *astribank, const unsigned int addr, const unsigned int data)
|
||||
int echo_send_data(struct astribank *astribank, const unsigned int addr, const unsigned int data)
|
||||
{
|
||||
int ret;
|
||||
/* DBG("SEND: %04X -> [%04X]\n", data, addr);
|
||||
|
@ -329,7 +339,7 @@ failed:
|
|||
return ret;
|
||||
}
|
||||
|
||||
int echo_recv_data(struct astribank_device *astribank, const unsigned int addr)
|
||||
int echo_recv_data(struct astribank *astribank, const unsigned int addr)
|
||||
{
|
||||
unsigned int data = 0x00;
|
||||
int ret;
|
||||
|
@ -451,7 +461,7 @@ UINT32 Oct6100UserDriverWriteApi(tPOCT6100_WRITE_PARAMS f_pWriteParams)
|
|||
const unsigned int addr = f_pWriteParams->ulWriteAddress;
|
||||
const unsigned int data = f_pWriteParams->usWriteData;
|
||||
const struct echo_mod *echo_mod = (struct echo_mod *)(f_pWriteParams->pProcessContext);
|
||||
struct astribank_device *astribank = echo_mod->astribank;
|
||||
struct astribank *astribank = echo_mod->astribank;
|
||||
int ret;
|
||||
|
||||
ret = echo_send_data(astribank, addr, data);
|
||||
|
@ -468,7 +478,7 @@ UINT32 Oct6100UserDriverWriteSmearApi(tPOCT6100_WRITE_SMEAR_PARAMS f_pSmearParam
|
|||
unsigned int data;
|
||||
unsigned int len;
|
||||
const struct echo_mod *echo_mod;
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
unsigned int i;
|
||||
|
||||
len = f_pSmearParams->ulWriteLength;
|
||||
|
@ -494,7 +504,7 @@ UINT32 Oct6100UserDriverWriteBurstApi(tPOCT6100_WRITE_BURST_PARAMS f_pBurstParam
|
|||
unsigned int data;
|
||||
unsigned int len = f_pBurstParams->ulWriteLength;
|
||||
const struct echo_mod *echo_mod = (struct echo_mod *)f_pBurstParams->pProcessContext;
|
||||
struct astribank_device *astribank = echo_mod->astribank;
|
||||
struct astribank *astribank = echo_mod->astribank;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
|
@ -515,7 +525,7 @@ UINT32 Oct6100UserDriverReadApi(tPOCT6100_READ_PARAMS f_pReadParams)
|
|||
{
|
||||
const unsigned int addr = f_pReadParams->ulReadAddress;
|
||||
const struct echo_mod *echo_mod;
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
int ret;
|
||||
|
||||
echo_mod = (struct echo_mod *)f_pReadParams->pProcessContext;
|
||||
|
@ -534,7 +544,7 @@ UINT32 Oct6100UserDriverReadBurstApi(tPOCT6100_READ_BURST_PARAMS f_pBurstParams)
|
|||
unsigned int addr;
|
||||
unsigned int len;
|
||||
const struct echo_mod *echo_mod;
|
||||
struct astribank_device *astribank;
|
||||
struct astribank *astribank;
|
||||
unsigned int i;
|
||||
|
||||
len = f_pBurstParams->ulReadLength;
|
||||
|
@ -554,13 +564,13 @@ UINT32 Oct6100UserDriverReadBurstApi(tPOCT6100_READ_BURST_PARAMS f_pBurstParams)
|
|||
return cOCT6100_ERR_OK;
|
||||
}
|
||||
|
||||
inline int get_ver(struct astribank_device *astribank)
|
||||
inline int get_ver(struct astribank *astribank)
|
||||
{
|
||||
return spi_send(astribank, 0, 0, 1, 1);
|
||||
}
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
UINT32 init_octasic(char *filename, struct astribank_device *astribank, int is_alaw)
|
||||
UINT32 init_octasic(char *filename, struct astribank *astribank, struct span_specs *span_specs)
|
||||
{
|
||||
int cpld_ver;
|
||||
struct echo_mod *echo_mod;
|
||||
|
@ -580,6 +590,8 @@ UINT32 init_octasic(char *filename, struct astribank_device *astribank, int is_a
|
|||
/* Channel resources.*/
|
||||
tOCT6100_CHANNEL_OPEN ChannelOpen;
|
||||
UINT32 ulChanHndl;
|
||||
enum tdm_codec tdm_codec;
|
||||
int spanno;
|
||||
|
||||
if (test_send(astribank) < 0)
|
||||
return cOCT6100_ERR_FATAL;
|
||||
|
@ -729,7 +741,17 @@ UINT32 init_octasic(char *filename, struct astribank_device *astribank, int is_a
|
|||
/* Set the channel to work at the echo cancellation mode.*/
|
||||
ChannelOpen.ulEchoOperationMode = cOCT6100_ECHO_OP_MODE_NORMAL;
|
||||
|
||||
pcmLaw = (is_alaw ? cOCT6100_PCM_A_LAW: cOCT6100_PCM_U_LAW);
|
||||
spanno = nChan % 4;
|
||||
assert(spanno >= 0 && spanno < MAX_SPANNO);
|
||||
tdm_codec = span_specs->span_is_alaw[spanno];
|
||||
if (tdm_codec == TDM_CODEC_UNKNOWN) {
|
||||
AB_ERR(astribank, "Calculated bad alaw/ulaw on channel %d\n", nChan);
|
||||
return cOCT6100_ERR_FATAL;
|
||||
}
|
||||
if (nChan < 4)
|
||||
AB_INFO(astribank, "ECHO PRI port %d = %s\n", spanno+1, (tdm_codec == TDM_CODEC_ALAW) ? "alaw" : "ulaw");
|
||||
|
||||
pcmLaw = ((tdm_codec == TDM_CODEC_ALAW) ? cOCT6100_PCM_A_LAW: cOCT6100_PCM_U_LAW);
|
||||
|
||||
/* Configure the TDM interface.*/
|
||||
ChannelOpen.TdmConfig.ulRinPcmLaw = pcmLaw;
|
||||
|
@ -825,15 +847,22 @@ UINT32 init_octasic(char *filename, struct astribank_device *astribank, int is_a
|
|||
}
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
int load_echo(struct astribank_device *astribank, char *filename, int is_alaw)
|
||||
int load_echo(struct astribank *astribank, char *filename, int default_is_alaw, const char *span_spec)
|
||||
{
|
||||
int ret;
|
||||
UINT32 octasic_status;
|
||||
struct span_specs *span_specs;
|
||||
|
||||
AB_INFO(astribank, "Loading ECHOCAN Firmware: %s (%s)\n",
|
||||
filename, (is_alaw) ? "alaw" : "ulaw");
|
||||
span_specs = parse_span_specifications(span_spec, default_is_alaw);
|
||||
if (!span_specs) {
|
||||
AB_ERR(astribank, "ECHO parsing span specs failed\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
AB_INFO(astribank, "Loading ECHOCAN Firmware: %s (default %s)\n",
|
||||
filename, (default_is_alaw) ? "alaw" : "ulaw");
|
||||
usb_buffer_init(astribank, &usb_buffer);
|
||||
octasic_status = init_octasic(filename, astribank, is_alaw);
|
||||
octasic_status = init_octasic(filename, astribank, span_specs);
|
||||
free_span_specifications(span_specs);
|
||||
if (octasic_status != cOCT6100_ERR_OK) {
|
||||
AB_ERR(astribank, "ECHO %s burning failed (%08X)\n",
|
||||
filename, octasic_status);
|
||||
|
@ -848,7 +877,7 @@ int load_echo(struct astribank_device *astribank, char *filename, int is_alaw)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int echo_ver(struct astribank_device *astribank)
|
||||
int echo_ver(struct astribank *astribank)
|
||||
{
|
||||
usb_buffer_init(astribank, &usb_buffer);
|
||||
return get_ver(astribank);
|
||||
|
|
|
@ -23,10 +23,10 @@
|
|||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "astribank_usb.h"
|
||||
#include "astribank.h"
|
||||
|
||||
int spi_send(struct astribank_device *astribank, uint16_t addr, uint16_t data, int recv_answer, int ver);
|
||||
int load_echo(struct astribank_device *astribank, char *filename, int is_alaw);
|
||||
int echo_ver(struct astribank_device *astribank);
|
||||
int spi_send(struct astribank *astribank, uint16_t addr, uint16_t data, int recv_answer, int ver);
|
||||
int load_echo(struct astribank *astribank, char *filename, int is_alaw, const char *span_spec);
|
||||
int echo_ver(struct astribank *astribank);
|
||||
|
||||
#endif /* ECHO_LOADER_H */
|
||||
|
|
|
@ -28,8 +28,6 @@
|
|||
#include <ctype.h>
|
||||
#include "hexfile.h"
|
||||
|
||||
static const char rcsid[] = "$Id$";
|
||||
|
||||
static parse_hexfile_report_func_t report_func = NULL;
|
||||
|
||||
parse_hexfile_report_func_t parse_hexfile_set_reporting(parse_hexfile_report_func_t rf)
|
||||
|
|
|
@ -72,7 +72,11 @@ struct hexdata {
|
|||
|
||||
__BEGIN_DECLS
|
||||
|
||||
typedef void (*parse_hexfile_report_func_t)(int level, const char *msg, ...);
|
||||
typedef void (*parse_hexfile_report_func_t)(int level, const char *msg, ...)
|
||||
#ifdef __GNUC__
|
||||
__attribute__((format(printf,2,3)));
|
||||
#endif
|
||||
;
|
||||
|
||||
parse_hexfile_report_func_t parse_hexfile_set_reporting(parse_hexfile_report_func_t rf);
|
||||
void free_hexdata(struct hexdata *hexdata);
|
||||
|
|
202
xpp/mpp.h
202
xpp/mpp.h
|
@ -1,202 +0,0 @@
|
|||
#ifndef MPP_H
|
||||
#define MPP_H
|
||||
/*
|
||||
* Written by Oron Peled <oron@actcom.co.il>
|
||||
* Copyright (C) 2008, Xorcom
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* MPP - Managment Processor Protocol definitions
|
||||
*/
|
||||
|
||||
#include <mpptalk_defs.h>
|
||||
#include <stdint.h>
|
||||
#include <xtalk.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define PACKED __attribute__((packed))
|
||||
#else
|
||||
#error "We do not know how your compiler packs structures"
|
||||
#endif
|
||||
|
||||
#define MK_PROTO_VERSION(major, minor) (((major) << 4) | (0x0F & (minor)))
|
||||
|
||||
#define MPP_PROTOCOL_VERSION MK_PROTO_VERSION(1,4)
|
||||
#define MPP_SUPPORTED_VERSION(x) ((x) == MK_PROTO_VERSION(1,3) || (x) == MK_PROTO_VERSION(1,4))
|
||||
|
||||
/*
|
||||
* The eeprom_table is common to all eeprom types.
|
||||
*/
|
||||
#define LABEL_SIZE 8
|
||||
struct eeprom_table {
|
||||
uint8_t source; /* C0 - small eeprom, C2 - large eeprom */
|
||||
uint16_t vendor;
|
||||
uint16_t product;
|
||||
uint16_t release; /* BCD encoded release */
|
||||
uint8_t config_byte; /* Must be 0 */
|
||||
uint8_t label[LABEL_SIZE];
|
||||
} PACKED;
|
||||
|
||||
#define VERSION_LEN 6
|
||||
struct firmware_versions {
|
||||
char usb[VERSION_LEN];
|
||||
char fpga[VERSION_LEN];
|
||||
char eeprom[VERSION_LEN];
|
||||
} PACKED;
|
||||
|
||||
struct capabilities {
|
||||
uint8_t ports_fxs;
|
||||
uint8_t ports_fxo;
|
||||
uint8_t ports_bri;
|
||||
uint8_t ports_pri;
|
||||
uint8_t extra_features; /* BIT(0) - TwinStar */
|
||||
uint8_t ports_echo;
|
||||
uint8_t reserved[2];
|
||||
uint32_t timestamp;
|
||||
} PACKED;
|
||||
|
||||
#define CAP_EXTRA_TWINSTAR(c) ((c)->extra_features & 0x01)
|
||||
#define CAP_EXTRA_TWINSTAR_SET(c) do {(c)->extra_features |= 0x01;} while (0)
|
||||
#define CAP_EXTRA_TWINSTAR_CLR(c) do {(c)->extra_features &= ~0x01;} while (0)
|
||||
|
||||
#define KEYSIZE 16
|
||||
|
||||
struct capkey {
|
||||
uint8_t k[KEYSIZE];
|
||||
} PACKED;
|
||||
|
||||
struct extrainfo {
|
||||
char text[EXTRAINFO_SIZE];
|
||||
} PACKED;
|
||||
|
||||
struct mpp_header {
|
||||
uint16_t len;
|
||||
uint16_t seq;
|
||||
uint8_t op; /* MSB: 0 - to device, 1 - from device */
|
||||
} PACKED;
|
||||
|
||||
enum mpp_ser_op {
|
||||
SER_CARD_INFO_GET = 0x1,
|
||||
SER_STAT_GET = 0x3,
|
||||
/* Status bits */
|
||||
#define SER_STAT_WATCHDOG_READY(s) ((s) & 0x01)
|
||||
#define SER_STAT_XPD_ALIVE(s) ((s) & 0x02)
|
||||
};
|
||||
|
||||
/* Individual commands structure */
|
||||
|
||||
CMD_DEF(MPP, STATUS_GET);
|
||||
|
||||
|
||||
CMD_DEF(MPP, STATUS_GET_REPLY,
|
||||
uint8_t i2cs_data;
|
||||
|
||||
#define STATUS_FPGA_LOADED(x) ((x) & 0x01)
|
||||
uint8_t status; /* BIT(0) - FPGA is loaded */
|
||||
struct firmware_versions fw_versions;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, EEPROM_SET,
|
||||
struct eeprom_table data;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, CAPS_GET);
|
||||
|
||||
CMD_DEF(MPP, CAPS_GET_REPLY,
|
||||
struct eeprom_table data;
|
||||
struct capabilities capabilities;
|
||||
struct capkey key;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, CAPS_SET,
|
||||
struct eeprom_table data;
|
||||
struct capabilities capabilities;
|
||||
struct capkey key;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, EXTRAINFO_GET);
|
||||
|
||||
CMD_DEF(MPP, EXTRAINFO_GET_REPLY,
|
||||
struct extrainfo info;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, EXTRAINFO_SET,
|
||||
struct extrainfo info;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, RENUM);
|
||||
|
||||
CMD_DEF(MPP, EEPROM_BLK_RD,
|
||||
uint16_t offset;
|
||||
uint16_t len;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, EEPROM_BLK_RD_REPLY,
|
||||
uint16_t offset;
|
||||
uint8_t data[0];
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, DEV_SEND_START,
|
||||
uint8_t dest;
|
||||
char ihex_version[VERSION_LEN];
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, DEV_SEND_END);
|
||||
|
||||
CMD_DEF(MPP, DEV_SEND_SEG,
|
||||
uint16_t offset;
|
||||
uint8_t data[0];
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, RESET);
|
||||
CMD_DEF(MPP, HALF_RESET);
|
||||
|
||||
CMD_DEF(MPP, SER_SEND,
|
||||
uint8_t data[0];
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, SER_RECV,
|
||||
uint8_t data[0];
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, TWS_WD_MODE_SET,
|
||||
uint8_t wd_active;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, TWS_WD_MODE_GET);
|
||||
CMD_DEF(MPP, TWS_WD_MODE_GET_REPLY,
|
||||
uint8_t wd_active;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, TWS_PORT_SET,
|
||||
uint8_t portnum;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, TWS_PORT_GET);
|
||||
CMD_DEF(MPP, TWS_PORT_GET_REPLY,
|
||||
uint8_t portnum;
|
||||
);
|
||||
|
||||
CMD_DEF(MPP, TWS_PWR_GET);
|
||||
CMD_DEF(MPP, TWS_PWR_GET_REPLY,
|
||||
uint8_t power;
|
||||
);
|
||||
|
||||
#endif /* MPP_H */
|
771
xpp/mpptalk.c
771
xpp/mpptalk.c
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue