Ticket #1 - add software IMBE decoding to block.
git-svn-id: http://op25.osmocom.org/svn/trunk@174 65a5c917-d112-43f1-993d-58c26a4786be
This commit is contained in:
parent
cc64164725
commit
50bdbe2c01
|
@ -0,0 +1,882 @@
|
|||
# Makefile.in generated by automake 1.11 from Makefile.am.
|
||||
# Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
||||
# Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Copyright 2004 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of OP25
|
||||
#
|
||||
# OP25 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 3, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# OP25 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 OP25; see the file COPYING. If not, write to
|
||||
# the Free Software Foundation, Inc., 51 Franklin Street,
|
||||
# Boston, MA 02110-1301, USA.
|
||||
#
|
||||
|
||||
# -*- Makefile -*-
|
||||
#
|
||||
# Copyright 2004,2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of OP25
|
||||
#
|
||||
# OP25 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 3, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# OP25 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 OP25; see the file COPYING. If not, write to the Free
|
||||
# Software Foundation, Inc., 51 Franklin Street, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
#
|
||||
|
||||
|
||||
pkgdatadir = $(datadir)/op25
|
||||
pkgincludedir = $(includedir)/op25
|
||||
pkglibdir = $(libdir)/op25
|
||||
pkglibexecdir = $(libexecdir)/op25
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
target_triplet = x86_64-unknown-linux-gnu
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/Makefile.common $(top_srcdir)/configure AUTHORS \
|
||||
COPYING ChangeLog INSTALL NEWS config.guess config.sub depcomp \
|
||||
install-sh ltmain.sh missing py-compile
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \
|
||||
$(top_srcdir)/config/gr_boost.m4 \
|
||||
$(top_srcdir)/config/gr_gprof.m4 \
|
||||
$(top_srcdir)/config/gr_no_undefined.m4 \
|
||||
$(top_srcdir)/config/gr_omnithread.m4 \
|
||||
$(top_srcdir)/config/gr_pwin32.m4 \
|
||||
$(top_srcdir)/config/gr_python.m4 \
|
||||
$(top_srcdir)/config/gr_scripting.m4 \
|
||||
$(top_srcdir)/config/gr_swig.m4 \
|
||||
$(top_srcdir)/config/gr_x86_64.m4 \
|
||||
$(top_srcdir)/config/lf_cxx.m4 \
|
||||
$(top_srcdir)/config/lf_warnings.m4 \
|
||||
$(top_srcdir)/config/pkg.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-dvi-recursive install-exec-recursive \
|
||||
install-html-recursive install-info-recursive \
|
||||
install-pdf-recursive install-ps-recursive install-recursive \
|
||||
installcheck-recursive installdirs-recursive pdf-recursive \
|
||||
ps-recursive uninstall-recursive
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
||||
am__install_max = 40
|
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }'
|
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
|
||||
DATA = $(pkgconfig_DATA)
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
||||
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
|
||||
distdir dist dist-all distcheck
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d "$(distdir)" \
|
||||
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr "$(distdir)"; }; }
|
||||
am__relativize = \
|
||||
dir0=`pwd`; \
|
||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
||||
sed_rest='s,^[^/]*/*,,'; \
|
||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
||||
sed_butlast='s,/*[^/]*$$,,'; \
|
||||
while test -n "$$dir1"; do \
|
||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
||||
if test "$$first" != "."; then \
|
||||
if test "$$first" = ".."; then \
|
||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
||||
else \
|
||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
||||
if test "$$first2" = "$$first"; then \
|
||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
||||
else \
|
||||
dir2="../$$dir2"; \
|
||||
fi; \
|
||||
dir0="$$dir0"/"$$first"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
||||
done; \
|
||||
reldir="$$dir2"
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = ${SHELL} /home/stevie/src/op25/decoder/missing --run aclocal-1.11
|
||||
AMTAR = ${SHELL} /home/stevie/src/op25/decoder/missing --run tar
|
||||
AR = ar
|
||||
AS = as
|
||||
AUTOCONF = ${SHELL} /home/stevie/src/op25/decoder/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /home/stevie/src/op25/decoder/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /home/stevie/src/op25/decoder/missing --run automake-1.11
|
||||
AWK = mawk
|
||||
BOOST_CFLAGS =
|
||||
CC = gcc
|
||||
CCAS = gcc
|
||||
CCASDEPMODE = depmode=gcc3
|
||||
CCASFLAGS = -g -O2
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -g -O2 -pthread
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -g -O2 -Wall -Woverloaded-virtual -pthread
|
||||
CXX_FOR_BUILD = g++
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
DLLTOOL = dlltool
|
||||
DSYMUTIL =
|
||||
DUMPBIN =
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = /bin/grep -E
|
||||
EXEEXT =
|
||||
FGREP = /bin/grep -F
|
||||
GNURADIO_CORE_CFLAGS = -pthread -DOMNITHREAD_POSIX=1 -I/usr/local/include/gnuradio -I/usr/local/include
|
||||
GNURADIO_CORE_INCLUDEDIR = /usr/local/include/gnuradio
|
||||
GNURADIO_CORE_LIBS = -L/usr/local/lib -lgnuradio-core -lboost_thread-mt-d -lrt -lboost_date_time-mt-d -lgruel -lfftw3f -lgsl -lgslcblas -lm -lgromnithread
|
||||
GREP = /bin/grep
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
|
||||
LD = /usr/bin/ld -m elf_x86_64
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS = -L/usr/local/lib -lgnuradio-core -lboost_thread-mt-d -lrt -lboost_date_time-mt-d -lgruel -lfftw3f -lgsl -lgslcblas -lm -lgromnithread
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LIPO =
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS =
|
||||
MAKEINFO = ${SHELL} /home/stevie/src/op25/decoder/missing --run makeinfo
|
||||
MKDIR_P = /bin/mkdir -p
|
||||
NM = /usr/bin/nm -B
|
||||
NMEDIT =
|
||||
NO_UNDEFINED =
|
||||
OBJDUMP = objdump
|
||||
OBJEXT = o
|
||||
OTOOL =
|
||||
OTOOL64 =
|
||||
PACKAGE = op25
|
||||
PACKAGE_BUGREPORT =
|
||||
PACKAGE_NAME =
|
||||
PACKAGE_STRING =
|
||||
PACKAGE_TARNAME =
|
||||
PACKAGE_URL =
|
||||
PACKAGE_VERSION =
|
||||
PATH_SEPARATOR = :
|
||||
PKG_CONFIG = /usr/bin/pkg-config
|
||||
PTHREAD_CC = gcc
|
||||
PTHREAD_CFLAGS = -pthread
|
||||
PTHREAD_LIBS = -lrt
|
||||
PYTHON = /usr/bin/python
|
||||
PYTHON_CPPFLAGS = -I/usr/include/python2.5
|
||||
PYTHON_EXEC_PREFIX = ${exec_prefix}
|
||||
PYTHON_LDFLAGS =
|
||||
PYTHON_PLATFORM = linux2
|
||||
PYTHON_PREFIX = ${prefix}
|
||||
PYTHON_VERSION = 2.5
|
||||
RANLIB = ranlib
|
||||
RM_PROG = /bin/rm
|
||||
SED = /bin/sed
|
||||
SET_MAKE =
|
||||
SHELL = /bin/bash
|
||||
STD_DEFINES_AND_INCLUDES = -pthread -DOMNITHREAD_POSIX=1 -I/usr/local/include/gnuradio -I/usr/local/include
|
||||
STRIP = strip
|
||||
SWIG = /usr/bin/swig -c++
|
||||
SWIG_PYTHON_CPPFLAGS = -I/usr/include/python2.5
|
||||
SWIG_PYTHON_LIB = -lswigpy
|
||||
SWIG_PYTHON_OPT = -python
|
||||
VERSION = 0.0.1
|
||||
abs_builddir = /home/stevie/src/op25/decoder
|
||||
abs_srcdir = /home/stevie/src/op25/decoder
|
||||
abs_top_builddir = /home/stevie/src/op25/decoder
|
||||
abs_top_srcdir = /home/stevie/src/op25/decoder
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_DUMPBIN =
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
builddir = .
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = ${SHELL} /home/stevie/src/op25/decoder/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
lt_ECHO = echo
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = /bin/mkdir -p
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
pkgpyexecdir = ${pyexecdir}/op25
|
||||
pkgpythondir = ${pythondir}/op25
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
pyexecdir = ${exec_prefix}/lib/python2.5/site-packages
|
||||
pythondir = ${prefix}/lib/python2.5/site-packages
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
srcdir = .
|
||||
sysconfdir = ${prefix}/etc
|
||||
target = x86_64-unknown-linux-gnu
|
||||
target_alias =
|
||||
target_cpu = x86_64
|
||||
target_os = linux-gnu
|
||||
target_vendor = unknown
|
||||
top_build_prefix =
|
||||
top_builddir = .
|
||||
top_srcdir = .
|
||||
|
||||
# includes
|
||||
grincludedir = $(includedir)/gnuradio
|
||||
|
||||
# swig includes
|
||||
swigincludedir = $(grincludedir)/swig
|
||||
|
||||
# Install this stuff in the appropriate subdirectory
|
||||
# This usually ends up at:
|
||||
# ${prefix}/lib/python${python_version}/site-packages/gnuradio
|
||||
grpythondir = $(pythondir)/gnuradio
|
||||
grpyexecdir = $(pyexecdir)/gnuradio
|
||||
|
||||
# swig flags
|
||||
SWIGPYTHONFLAGS = -fvirtual -python -modern
|
||||
SWIGGRFLAGS = -I$(GNURADIO_CORE_INCLUDEDIR)/swig -I$(GNURADIO_CORE_INCLUDEDIR)
|
||||
|
||||
# Don't assume that make predefines $(RM), because BSD make does
|
||||
# not. We define it now in configure.ac using AM_PATH_PROG, but now
|
||||
# here have to add a -f to be like GNU make.
|
||||
RM = $(RM_PROG) -f
|
||||
EXTRA_DIST = configure config.h.in
|
||||
SUBDIRS = config src
|
||||
DIST_SUBDIRS = config src
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA =
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool config.lt
|
||||
install-pkgconfigDATA: $(pkgconfig_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
|
||||
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
|
||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
|
||||
done
|
||||
|
||||
uninstall-pkgconfigDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
test -n "$$files" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
$(RECURSIVE_CLEAN_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||
$(am__relativize); \
|
||||
new_distdir=$$reldir; \
|
||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
||||
$(am__relativize); \
|
||||
new_top_distdir=$$reldir; \
|
||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
||||
($(am__cd) $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$new_top_distdir" \
|
||||
distdir="$$new_distdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
am__skip_mode_fix=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzma: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lzma*) \
|
||||
unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@$(am__cd) '$(distuninstallcheck_dir)' \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(DATA) config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-pkgconfigDATA
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-pkgconfigDATA
|
||||
|
||||
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
|
||||
ctags-recursive install-am install-strip tags-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
|
||||
all all-am am--refresh check check-am clean clean-generic \
|
||||
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
|
||||
dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
|
||||
distcheck distclean distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags distcleancheck distdir \
|
||||
distuninstallcheck dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-pkgconfigDATA install-ps \
|
||||
install-ps-am install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-pkgconfigDATA
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
|
@ -1,10 +1,10 @@
|
|||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2008-01-23'
|
||||
timestamp='2009-06-10'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
|
@ -170,7 +170,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
||||
eval $set_cc_for_build
|
||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep __ELF__ >/dev/null
|
||||
| grep -q __ELF__
|
||||
then
|
||||
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
||||
# Return netbsd for either. FIX?
|
||||
|
@ -324,6 +324,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
case `/usr/bin/uname -p` in
|
||||
sparc) echo sparc-icl-nx7; exit ;;
|
||||
esac ;;
|
||||
s390x:SunOS:*:*)
|
||||
echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit ;;
|
||||
sun4H:SunOS:5.*:*)
|
||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit ;;
|
||||
|
@ -331,7 +334,20 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit ;;
|
||||
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
|
||||
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
eval $set_cc_for_build
|
||||
SUN_ARCH="i386"
|
||||
# If there is a compiler, see if it is configured for 64-bit objects.
|
||||
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
|
||||
# This test works for both compilers.
|
||||
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
|
||||
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
|
||||
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
|
||||
grep IS_64BIT_ARCH >/dev/null
|
||||
then
|
||||
SUN_ARCH="x86_64"
|
||||
fi
|
||||
fi
|
||||
echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit ;;
|
||||
sun4*:SunOS:6*:*)
|
||||
# According to config.sub, this is the proper way to canonicalize
|
||||
|
@ -640,7 +656,7 @@ EOF
|
|||
# => hppa64-hp-hpux11.23
|
||||
|
||||
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
|
||||
grep __LP64__ >/dev/null
|
||||
grep -q __LP64__
|
||||
then
|
||||
HP_ARCH="hppa2.0w"
|
||||
else
|
||||
|
@ -796,7 +812,7 @@ EOF
|
|||
x86)
|
||||
echo i586-pc-interix${UNAME_RELEASE}
|
||||
exit ;;
|
||||
EM64T | authenticamd)
|
||||
EM64T | authenticamd | genuineintel)
|
||||
echo x86_64-unknown-interix${UNAME_RELEASE}
|
||||
exit ;;
|
||||
IA64)
|
||||
|
@ -806,6 +822,9 @@ EOF
|
|||
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
||||
echo i${UNAME_MACHINE}-pc-mks
|
||||
exit ;;
|
||||
8664:Windows_NT:*)
|
||||
echo x86_64-pc-mks
|
||||
exit ;;
|
||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||
|
@ -866,40 +885,17 @@ EOF
|
|||
m68*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit ;;
|
||||
mips:Linux:*:*)
|
||||
mips:Linux:*:* | mips64:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#undef CPU
|
||||
#undef mips
|
||||
#undef mipsel
|
||||
#undef ${UNAME_MACHINE}
|
||||
#undef ${UNAME_MACHINE}el
|
||||
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||
CPU=mipsel
|
||||
CPU=${UNAME_MACHINE}el
|
||||
#else
|
||||
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||
CPU=mips
|
||||
#else
|
||||
CPU=
|
||||
#endif
|
||||
#endif
|
||||
EOF
|
||||
eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
|
||||
/^CPU/{
|
||||
s: ::g
|
||||
p
|
||||
}'`"
|
||||
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
|
||||
;;
|
||||
mips64:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#undef CPU
|
||||
#undef mips64
|
||||
#undef mips64el
|
||||
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||
CPU=mips64el
|
||||
#else
|
||||
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||
CPU=mips64
|
||||
CPU=${UNAME_MACHINE}
|
||||
#else
|
||||
CPU=
|
||||
#endif
|
||||
|
@ -931,10 +927,13 @@ EOF
|
|||
EV67) UNAME_MACHINE=alphaev67 ;;
|
||||
EV68*) UNAME_MACHINE=alphaev68 ;;
|
||||
esac
|
||||
objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
|
||||
objdump --private-headers /bin/sh | grep -q ld.so.1
|
||||
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
||||
exit ;;
|
||||
padre:Linux:*:*)
|
||||
echo sparc-unknown-linux-gnu
|
||||
exit ;;
|
||||
parisc:Linux:*:* | hppa:Linux:*:*)
|
||||
# Look for CPU level
|
||||
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
||||
|
@ -982,17 +981,6 @@ EOF
|
|||
elf32-i386)
|
||||
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
|
||||
;;
|
||||
a.out-i386-linux)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||
exit ;;
|
||||
coff-i386)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||
exit ;;
|
||||
"")
|
||||
# Either a pre-BFD a.out linker (linux-gnuoldld) or
|
||||
# one that does not give us useful --help.
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
|
||||
exit ;;
|
||||
esac
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
eval $set_cc_for_build
|
||||
|
@ -1058,7 +1046,7 @@ EOF
|
|||
i*86:syllable:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-syllable
|
||||
exit ;;
|
||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit ;;
|
||||
i*86:*DOS:*:*)
|
||||
|
@ -1102,8 +1090,11 @@ EOF
|
|||
pc:*:*:*)
|
||||
# Left here for compatibility:
|
||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||
# the processor, so we play safe by assuming i386.
|
||||
echo i386-pc-msdosdjgpp
|
||||
# the processor, so we play safe by assuming i586.
|
||||
# Note: whatever this is, it MUST be the same as what config.sub
|
||||
# prints for the "djgpp" host, or else GDB configury will decide that
|
||||
# this is a cross-build.
|
||||
echo i586-pc-msdosdjgpp
|
||||
exit ;;
|
||||
Intel:Mach:3*:*)
|
||||
echo i386-pc-mach3
|
||||
|
@ -1141,6 +1132,16 @@ EOF
|
|||
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& { echo i486-ncr-sysv4; exit; } ;;
|
||||
NCR*:*:4.2:* | MPRAS*:*:4.2:*)
|
||||
OS_REL='.3'
|
||||
test -r /etc/.relid \
|
||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& { echo i486-ncr-sysv4.3${OS_REL}; exit; }
|
||||
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
|
||||
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; }
|
||||
/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
|
||||
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
|
||||
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
|
||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||
exit ;;
|
||||
|
@ -1153,7 +1154,7 @@ EOF
|
|||
rs6000:LynxOS:2.*:*)
|
||||
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||
exit ;;
|
||||
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
|
||||
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
|
||||
echo powerpc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit ;;
|
||||
SM[BE]S:UNIX_SV:*:*)
|
||||
|
@ -1216,6 +1217,9 @@ EOF
|
|||
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
|
||||
echo i586-pc-beos
|
||||
exit ;;
|
||||
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
|
||||
echo i586-pc-haiku
|
||||
exit ;;
|
||||
SX-4:SUPER-UX:*:*)
|
||||
echo sx4-nec-superux${UNAME_RELEASE}
|
||||
exit ;;
|
||||
|
@ -1324,6 +1328,9 @@ EOF
|
|||
i*86:rdos:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-rdos
|
||||
exit ;;
|
||||
i*86:AROS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-aros
|
||||
exit ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#! /bin/sh
|
||||
# Configuration validation subroutine script.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2008-01-16'
|
||||
timestamp='2009-06-11'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
|
@ -122,6 +122,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
|||
case $maybe_os in
|
||||
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
||||
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
||||
kopensolaris*-gnu* | \
|
||||
storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
|
@ -152,6 +153,9 @@ case $os in
|
|||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
-bluegene*)
|
||||
os=-cnk
|
||||
;;
|
||||
-sim | -cisco | -oki | -wec | -winbond)
|
||||
os=
|
||||
basic_machine=$1
|
||||
|
@ -249,13 +253,16 @@ case $basic_machine in
|
|||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k | iq2000 \
|
||||
| lm32 \
|
||||
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
||||
| maxq | mb | microblaze | mcore | mep \
|
||||
| maxq | mb | microblaze | mcore | mep | metag \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
| mips64 | mips64el \
|
||||
| mips64vr | mips64vrel \
|
||||
| mips64octeon | mips64octeonel \
|
||||
| mips64orion | mips64orionel \
|
||||
| mips64r5900 | mips64r5900el \
|
||||
| mips64vr | mips64vrel \
|
||||
| mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr4300 | mips64vr4300el \
|
||||
| mips64vr5000 | mips64vr5000el \
|
||||
|
@ -268,6 +275,7 @@ case $basic_machine in
|
|||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mn10200 | mn10300 \
|
||||
| moxie \
|
||||
| mt \
|
||||
| msp430 \
|
||||
| nios | nios2 \
|
||||
|
@ -277,7 +285,7 @@ case $basic_machine in
|
|||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| pyramid \
|
||||
| score \
|
||||
| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh64 | sh64le \
|
||||
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
|
||||
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
|
||||
|
@ -286,7 +294,7 @@ case $basic_machine in
|
|||
| v850 | v850e \
|
||||
| we32k \
|
||||
| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||
| z8k)
|
||||
| z8k | z80)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
m6811 | m68hc11 | m6812 | m68hc12)
|
||||
|
@ -329,14 +337,17 @@ case $basic_machine in
|
|||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| ip2k-* | iq2000-* \
|
||||
| lm32-* \
|
||||
| m32c-* | m32r-* | m32rle-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | maxq-* | mcore-* \
|
||||
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
|
||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||
| mips16-* \
|
||||
| mips64-* | mips64el-* \
|
||||
| mips64vr-* | mips64vrel-* \
|
||||
| mips64octeon-* | mips64octeonel-* \
|
||||
| mips64orion-* | mips64orionel-* \
|
||||
| mips64r5900-* | mips64r5900el-* \
|
||||
| mips64vr-* | mips64vrel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* \
|
||||
| mips64vr5000-* | mips64vr5000el-* \
|
||||
|
@ -358,20 +369,20 @@ case $basic_machine in
|
|||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| pyramid-* \
|
||||
| romp-* | rs6000-* \
|
||||
| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
||||
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
||||
| sparclite-* \
|
||||
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
|
||||
| tron-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||
| xstormy16-* | xtensa*-* \
|
||||
| ymp-* \
|
||||
| z8k-*)
|
||||
| z8k-* | z80-*)
|
||||
;;
|
||||
# Recognize the basic CPU types without company name, with glob match.
|
||||
xtensa*)
|
||||
|
@ -439,6 +450,10 @@ case $basic_machine in
|
|||
basic_machine=m68k-apollo
|
||||
os=-bsd
|
||||
;;
|
||||
aros)
|
||||
basic_machine=i386-pc
|
||||
os=-aros
|
||||
;;
|
||||
aux)
|
||||
basic_machine=m68k-apple
|
||||
os=-aux
|
||||
|
@ -455,10 +470,18 @@ case $basic_machine in
|
|||
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
os=-linux
|
||||
;;
|
||||
bluegene*)
|
||||
basic_machine=powerpc-ibm
|
||||
os=-cnk
|
||||
;;
|
||||
c90)
|
||||
basic_machine=c90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
cegcc)
|
||||
basic_machine=arm-unknown
|
||||
os=-cegcc
|
||||
;;
|
||||
convex-c1)
|
||||
basic_machine=c1-convex
|
||||
os=-bsd
|
||||
|
@ -526,6 +549,10 @@ case $basic_machine in
|
|||
basic_machine=m88k-motorola
|
||||
os=-sysv3
|
||||
;;
|
||||
dicos)
|
||||
basic_machine=i686-pc
|
||||
os=-dicos
|
||||
;;
|
||||
djgpp)
|
||||
basic_machine=i586-pc
|
||||
os=-msdosdjgpp
|
||||
|
@ -1128,6 +1155,10 @@ case $basic_machine in
|
|||
basic_machine=z8k-unknown
|
||||
os=-sim
|
||||
;;
|
||||
z80-*-coff)
|
||||
basic_machine=z80-unknown
|
||||
os=-sim
|
||||
;;
|
||||
none)
|
||||
basic_machine=none-none
|
||||
os=-none
|
||||
|
@ -1166,7 +1197,7 @@ case $basic_machine in
|
|||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||
sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||
basic_machine=sh-unknown
|
||||
;;
|
||||
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
|
||||
|
@ -1236,10 +1267,11 @@ case $os in
|
|||
# Each alternative MUST END IN A *, to match a version number.
|
||||
# -sysv* is not here because it comes later, after sysvr4.
|
||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||
| -kopensolaris* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* \
|
||||
| -aos* | -aros* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||
|
@ -1248,7 +1280,7 @@ case $os in
|
|||
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -chorusos* | -chorusrdb* \
|
||||
| -chorusos* | -chorusrdb* | -cegcc* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
||||
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
|
@ -1388,6 +1420,9 @@ case $os in
|
|||
-zvmoe)
|
||||
os=-zvmoe
|
||||
;;
|
||||
-dicos*)
|
||||
os=-dicos
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
|
@ -1585,7 +1620,7 @@ case $basic_machine in
|
|||
-sunos*)
|
||||
vendor=sun
|
||||
;;
|
||||
-aix*)
|
||||
-cnk*|-aix*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-beos*)
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
#!/usr/bin/make
|
||||
#
|
||||
|
||||
CDEBUG = -g
|
||||
CPPFLAGS = $(CDEBUG) $(CDEFS)
|
||||
CXXFLAGS = -I.
|
||||
LIBS =
|
||||
LDFLAGS =
|
||||
|
||||
SRCFILES = *.cc
|
||||
DEPFILES = .*.d
|
||||
OBJFILES = *.o
|
||||
|
||||
SRCS = $(wildcard $(SRCFILES))
|
||||
DEPS = $(SRCS:%.cc=.%.d)
|
||||
OBJS = $(SRCS:%.cc=%.o)
|
||||
AOUT = imbe
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
.%.d: %.cc
|
||||
$(SHELL) -ec '$(CXX) -MM $(CPPFLAGS) $(CXXFLAGS) $< | sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; [ -s $@ ] || rm -f $@'
|
||||
|
||||
$(AOUT): $(LIBS) $(OBJS)
|
||||
$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(AOUT) $(OBJFILES) $(DEPFILES) *~
|
||||
|
||||
include $(DEPS)
|
189
imbe/golay.cc
189
imbe/golay.cc
|
@ -1,189 +0,0 @@
|
|||
#include "golay.h"
|
||||
|
||||
uint32_t
|
||||
golay_24_encode(uint32_t code_word_in)
|
||||
{
|
||||
static const uint32_t encoding[12] = {
|
||||
040006165,
|
||||
020003073,
|
||||
010007550,
|
||||
04003664,
|
||||
02001732,
|
||||
01006631,
|
||||
0403315,
|
||||
0201547,
|
||||
0106706,
|
||||
045227,
|
||||
024476,
|
||||
014353
|
||||
};
|
||||
|
||||
uint32_t code_word_out = 0;
|
||||
for(uint16_t i = 0; i < 12; i++) {
|
||||
uint32_t temp_word = code_word_in & (1 << (11 - i));
|
||||
if(temp_word >= 1) {
|
||||
code_word_out = code_word_out ^ encoding[i];
|
||||
}
|
||||
}
|
||||
return(code_word_out);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
golay_23_encode(uint32_t code_word_in)
|
||||
{
|
||||
return golay_24_encode(code_word_in) >> 1;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
golay_23_syndrome(uint32_t pattern)
|
||||
{
|
||||
uint32_t aux = 0x400000;
|
||||
while(pattern & 0xFFFFF800) {
|
||||
while((aux & pattern) == 0) {
|
||||
aux >>= 1;
|
||||
}
|
||||
pattern ^= (aux >> 11) * 0xC75;
|
||||
}
|
||||
return pattern;
|
||||
}
|
||||
|
||||
size_t
|
||||
golay_23_decode(uint32_t& cw)
|
||||
{
|
||||
static const uint32_t decoding[2048] = {
|
||||
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 147459,
|
||||
1, 2, 2, 3, 2, 3, 3, 4268035, 2, 3, 3, 1574915, 3, 2097155, 294915, 4099,
|
||||
1, 2, 2, 3, 2, 3, 3, 147459, 2, 3, 3, 147459, 3, 147459, 147459, 147458,
|
||||
2, 3, 3, 32771, 3, 2051, 3149827, 786435, 3, 274435, 4194307, 2162691, 589827, 5275651, 10243, 147459,
|
||||
1, 2, 2, 3, 2, 3, 3, 2621443, 2, 3, 3, 8195, 3, 1118211, 294915, 4196355,
|
||||
2, 3, 3, 135171, 3, 2051, 294915, 1064963, 3, 4210691, 294915, 2162691, 294915, 663555, 294914, 294915,
|
||||
2, 3, 3, 5505027, 3, 2051, 65539, 45059, 3, 557059, 6147, 2162691, 6299651, 262147, 1572867, 147459,
|
||||
3, 2051, 548867, 2162691, 2051, 2050, 4325379, 2051, 1179651, 2162691, 2162691, 2162690, 20483, 2051, 294915, 2162691,
|
||||
1, 2, 2, 3, 2, 3, 3, 2621443, 2, 3, 3, 327683, 3, 43011, 5242883, 4099,
|
||||
2, 3, 3, 32771, 3, 1441795, 18435, 4099, 3, 4210691, 2236419, 4099, 589827, 4099, 4099, 4098,
|
||||
2, 3, 3, 32771, 3, 4198403, 270339, 1116163, 3, 3145731, 6147, 4726787, 589827, 262147, 2129923, 147459,
|
||||
3, 32771, 32771, 32770, 589827, 2121731, 4325379, 32771, 589827, 133123, 1327107, 32771, 589826, 589827, 589827, 4099,
|
||||
2, 3, 3, 2621443, 3, 2621443, 2621443, 2621442, 3, 4210691, 6147, 1212419, 131075, 262147, 90115, 2621443,
|
||||
3, 4210691, 1114115, 272387, 12291, 98307, 4325379, 2621443, 4210691, 4210690, 524291, 4210691, 3147779, 4210691, 294915, 4099,
|
||||
3, 204803, 6147, 16387, 1097731, 262147, 4325379, 2621443, 6147, 262147, 6146, 6147, 262147, 262146, 6147, 262147,
|
||||
2359299, 1576963, 4325379, 32771, 4325379, 2051, 4325378, 4325379, 40963, 4210691, 6147, 2162691, 589827, 262147, 4325379, 1056771,
|
||||
1, 2, 2, 3, 2, 3, 3, 268291, 2, 3, 3, 8195, 3, 2097155, 5242883, 622595,
|
||||
2, 3, 3, 32771, 3, 2097155, 655363, 1064963, 3, 2097155, 86019, 4587523, 2097155, 2097154, 10243, 2097155,
|
||||
2, 3, 3, 32771, 3, 1581059, 65539, 6291459, 3, 4261891, 2883587, 1052675, 36867, 262147, 10243, 147459,
|
||||
3, 32771, 32771, 32770, 4472835, 200707, 10243, 32771, 1179651, 540675, 10243, 32771, 10243, 2097155, 10242, 10243,
|
||||
2, 3, 3, 8195, 3, 4358147, 65539, 1064963, 3, 8195, 8195, 8194, 542723, 262147, 2232323, 8195,
|
||||
3, 851971, 6293507, 1064963, 12291, 1064963, 1064963, 1064962, 1179651, 38915, 524291, 8195, 4259843, 2097155, 294915, 1064963,
|
||||
3, 2117635, 65539, 657411, 65539, 262147, 65538, 65539, 1179651, 262147, 4243459, 8195, 262147, 262146, 65539, 262147,
|
||||
1179651, 4202499, 266243, 32771, 2654211, 2051, 65539, 1064963, 1179650, 1179651, 1179651, 2162691, 1179651, 262147, 10243, 4722691,
|
||||
2, 3, 3, 32771, 3, 81923, 5242883, 139267, 3, 659459, 5242883, 2115587, 5242883, 262147, 5242882, 5242883,
|
||||
3, 32771, 32771, 32770, 12291, 4720643, 2424835, 32771, 264195, 1122307, 524291, 32771, 180227, 2097155, 5242883, 4099,
|
||||
3, 32771, 32771, 32770, 2230275, 262147, 544771, 32771, 24579, 262147, 196611, 32771, 262147, 262146, 5242883, 262147,
|
||||
32771, 32770, 32770, 32769, 1048579, 32771, 32771, 32770, 6295555, 32771, 32771, 32770, 589827, 262147, 10243, 32771,
|
||||
3, 1050627, 409603, 4263939, 12291, 262147, 34819, 2621443, 2195459, 262147, 524291, 8195, 262147, 262146, 5242883, 262147,
|
||||
12291, 2228227, 524291, 32771, 12290, 12291, 12291, 1064963, 524291, 4210691, 524290, 524291, 12291, 262147, 524291, 198659,
|
||||
4718595, 262147, 3153923, 32771, 262147, 262146, 65539, 262147, 262147, 262146, 6147, 262147, 262146, 262145, 262147, 262146,
|
||||
83971, 32771, 32771, 32770, 12291, 262147, 4325379, 32771, 1179651, 262147, 524291, 32771, 262147, 262146, 2113539, 262147,
|
||||
1, 2, 2, 3, 2, 3, 3, 1081347, 2, 3, 3, 327683, 3, 2097155, 536579, 4196355,
|
||||
2, 3, 3, 135171, 3, 2097155, 18435, 786435, 3, 2097155, 4194307, 57347, 2097155, 2097154, 1245187, 2097155,
|
||||
2, 3, 3, 2107395, 3, 4198403, 65539, 786435, 3, 557059, 4194307, 1052675, 1312771, 73731, 2129923, 147459,
|
||||
3, 1130499, 4194307, 786435, 172035, 786435, 786435, 786434, 4194307, 133123, 4194306, 4194307, 20483, 2097155, 4194307, 786435,
|
||||
2, 3, 3, 135171, 3, 286723, 65539, 4196355, 3, 557059, 3162115, 4196355, 131075, 4196355, 4196355, 4196354,
|
||||
3, 135171, 135171, 135170, 5767171, 98307, 2105347, 135171, 75779, 1310723, 524291, 135171, 20483, 2097155, 294915, 4196355,
|
||||
3, 557059, 65539, 16387, 65539, 3276803, 65538, 65539, 557059, 557058, 401411, 557059, 20483, 557059, 65539, 4196355,
|
||||
2359299, 4202499, 1083395, 135171, 20483, 2051, 65539, 786435, 20483, 557059, 4194307, 2162691, 20482, 20483, 20483, 1056771,
|
||||
2, 3, 3, 327683, 3, 4198403, 18435, 139267, 3, 327683, 327683, 327682, 131075, 1589251, 2129923, 327683,
|
||||
3, 532483, 18435, 7340035, 18435, 98307, 18434, 18435, 1085443, 133123, 524291, 327683, 4464643, 2097155, 18435, 4099,
|
||||
3, 4198403, 1703939, 16387, 4198403, 4198402, 2129923, 4198403, 24579, 133123, 2129923, 327683, 2129923, 4198403, 2129922, 2129923,
|
||||
2359299, 133123, 77827, 32771, 1048579, 4198403, 18435, 786435, 133123, 133122, 4194307, 133123, 589827, 133123, 2129923, 1056771,
|
||||
3, 1050627, 4235267, 16387, 131075, 98307, 1314819, 2621443, 131075, 2109443, 524291, 327683, 131074, 131075, 131075, 4196355,
|
||||
2359299, 98307, 524291, 135171, 98307, 98306, 18435, 98307, 524291, 4210691, 524290, 524291, 131075, 98307, 524291, 1056771,
|
||||
2359299, 16387, 16387, 16386, 534531, 4198403, 65539, 16387, 5308419, 557059, 6147, 16387, 131075, 262147, 2129923, 1056771,
|
||||
2359298, 2359299, 2359299, 16387, 2359299, 98307, 4325379, 1056771, 2359299, 133123, 524291, 1056771, 20483, 1056771, 1056771, 1056770,
|
||||
2, 3, 3, 4734979, 3, 2097155, 65539, 139267, 3, 2097155, 165891, 1052675, 2097155, 2097154, 278531, 2097155,
|
||||
3, 2097155, 1318915, 67587, 2097155, 2097154, 4231171, 2097155, 2097155, 2097154, 524291, 2097155, 2097154, 2097153, 2097155, 2097154,
|
||||
3, 393219, 65539, 1052675, 65539, 51203, 65538, 65539, 24579, 1052675, 1052675, 1052674, 4849667, 2097155, 65539, 1052675,
|
||||
530435, 4202499, 2244611, 32771, 1048579, 2097155, 65539, 786435, 360451, 2097155, 4194307, 1052675, 2097155, 2097154, 10243, 2097155,
|
||||
3, 1050627, 65539, 2392067, 65539, 528387, 65538, 65539, 4460547, 212995, 524291, 8195, 1089539, 2097155, 65539, 4196355,
|
||||
49155, 4202499, 524291, 135171, 395267, 2097155, 65539, 1064963, 524291, 2097155, 524290, 524291, 2097155, 2097154, 524291, 2097155,
|
||||
65539, 4202499, 65538, 65539, 65538, 65539, 65537, 65538, 2099203, 557059, 65539, 1052675, 65539, 262147, 65538, 65539,
|
||||
4202499, 4202498, 65539, 4202499, 65539, 4202499, 65538, 65539, 1179651, 4202499, 524291, 280579, 20483, 2097155, 65539, 163843,
|
||||
3, 1050627, 2101251, 139267, 819203, 139267, 139267, 139266, 24579, 4227075, 524291, 327683, 71683, 2097155, 5242883, 139267,
|
||||
4390915, 282627, 524291, 32771, 1048579, 2097155, 18435, 139267, 524291, 2097155, 524290, 524291, 2097155, 2097154, 524291, 2097155,
|
||||
24579, 2686979, 4458499, 32771, 1048579, 4198403, 65539, 139267, 24578, 24579, 24579, 1052675, 24579, 262147, 2129923, 526339,
|
||||
1048579, 32771, 32771, 32770, 1048578, 1048579, 1048579, 32771, 24579, 133123, 524291, 32771, 1048579, 2097155, 397315, 4276227,
|
||||
1050627, 1050626, 524291, 1050627, 6307843, 1050627, 65539, 139267, 524291, 1050627, 524290, 524291, 131075, 262147, 524291, 53251,
|
||||
524291, 1050627, 524290, 524291, 12291, 98307, 524291, 4456451, 524290, 524291, 524289, 524290, 524291, 2097155, 524290, 524291,
|
||||
167939, 1050627, 65539, 16387, 65539, 262147, 65538, 65539, 24579, 262147, 524291, 6422531, 262147, 262146, 65539, 262147,
|
||||
2359299, 4202499, 524291, 32771, 1048579, 671747, 65539, 2103299, 524291, 69635, 524290, 524291, 4229123, 262147, 524291, 1056771,
|
||||
1, 2, 2, 3, 2, 3, 3, 1081347, 2, 3, 3, 8195, 3, 4980739, 2164739, 4099,
|
||||
2, 3, 3, 2375683, 3, 2051, 655363, 4099, 3, 229379, 4194307, 4099, 1073155, 4099, 4099, 4098,
|
||||
2, 3, 3, 593923, 3, 2051, 270339, 6291459, 3, 3145731, 4194307, 296963, 36867, 73731, 1572867, 147459,
|
||||
3, 2051, 4194307, 1187843, 2051, 2050, 114691, 2051, 4194307, 540675, 4194306, 4194307, 2490371, 2051, 4194307, 4099,
|
||||
2, 3, 3, 8195, 3, 2051, 4214787, 458755, 3, 8195, 8195, 8194, 131075, 2146307, 1572867, 8195,
|
||||
3, 2051, 1114115, 4751363, 2051, 2050, 2105347, 2051, 2625539, 1310723, 149507, 8195, 4259843, 2051, 294915, 4099,
|
||||
3, 2051, 2260995, 16387, 2051, 2050, 1572867, 2051, 344067, 4329475, 1572867, 8195, 1572867, 2051, 1572866, 1572867,
|
||||
2051, 2050, 266243, 2051, 2050, 2049, 2051, 2050, 40963, 2051, 4194307, 2162691, 2051, 2050, 1572867, 2051,
|
||||
2, 3, 3, 4327427, 3, 81923, 270339, 4099, 3, 3145731, 573443, 4099, 131075, 4099, 4099, 4098,
|
||||
3, 532483, 1114115, 4099, 6324227, 4099, 4099, 4098, 264195, 4099, 4099, 4098, 4099, 4098, 4098, 4097,
|
||||
3, 3145731, 270339, 16387, 270339, 688131, 270338, 270339, 3145731, 3145730, 196611, 3145731, 4212739, 3145731, 270339, 4099,
|
||||
151555, 4521987, 2623491, 32771, 1048579, 2051, 270339, 4099, 40963, 3145731, 4194307, 4099, 589827, 4099, 4099, 4098,
|
||||
3, 299011, 1114115, 16387, 131075, 5251075, 34819, 2621443, 131075, 591875, 6553603, 8195, 131074, 131075, 131075, 4099,
|
||||
1114115, 2228227, 1114114, 1114115, 802819, 2051, 1114115, 4099, 40963, 4210691, 1114115, 4099, 131075, 4099, 4099, 4098,
|
||||
4718595, 16387, 16387, 16386, 2166787, 2051, 270339, 16387, 40963, 3145731, 6147, 16387, 131075, 262147, 1572867, 4292611,
|
||||
40963, 2051, 1114115, 16387, 2051, 2050, 4325379, 2051, 40962, 40963, 40963, 917507, 40963, 2051, 2113539, 4099,
|
||||
2, 3, 3, 8195, 3, 81923, 655363, 6291459, 3, 8195, 8195, 8194, 36867, 1181699, 278531, 8195,
|
||||
3, 5246979, 655363, 67587, 655363, 303107, 655362, 655363, 264195, 540675, 3178499, 8195, 4259843, 2097155, 655363, 4099,
|
||||
3, 393219, 1067011, 6291459, 36867, 6291459, 6291459, 6291458, 36867, 540675, 196611, 8195, 36866, 36867, 36867, 6291459,
|
||||
2170883, 540675, 266243, 32771, 1048579, 2051, 655363, 6291459, 540675, 540674, 4194307, 540675, 36867, 540675, 10243, 1376259,
|
||||
3, 8195, 8195, 8194, 3407875, 528387, 34819, 8195, 8195, 8194, 8194, 8193, 4259843, 8195, 8195, 8194,
|
||||
49155, 2228227, 266243, 8195, 4259843, 2051, 655363, 1064963, 4259843, 8195, 8195, 8194, 4259842, 4259843, 4259843, 8195,
|
||||
4718595, 1146883, 266243, 8195, 155651, 2051, 65539, 6291459, 2099203, 8195, 8195, 8194, 36867, 262147, 1572867, 8195,
|
||||
266243, 2051, 266242, 266243, 2051, 2050, 266243, 2051, 1179651, 540675, 266243, 8195, 4259843, 2051, 2113539, 163843,
|
||||
3, 81923, 2101251, 1835011, 81923, 81922, 34819, 81923, 264195, 4227075, 196611, 8195, 2629635, 81923, 5242883, 4099,
|
||||
264195, 2228227, 4218883, 32771, 1048579, 81923, 655363, 4099, 264194, 264195, 264195, 4099, 264195, 4099, 4099, 4098,
|
||||
4718595, 14339, 196611, 32771, 1048579, 81923, 270339, 6291459, 196611, 3145731, 196610, 196611, 36867, 262147, 196611, 526339,
|
||||
1048579, 32771, 32771, 32770, 1048578, 1048579, 1048579, 32771, 264195, 540675, 196611, 32771, 1048579, 4333571, 2113539, 4099,
|
||||
4718595, 2228227, 34819, 8195, 34819, 81923, 34818, 34819, 1069059, 8195, 8195, 8194, 131075, 262147, 34819, 8195,
|
||||
2228227, 2228226, 1114115, 2228227, 12291, 2228227, 34819, 4456451, 264195, 2228227, 524291, 8195, 4259843, 1605635, 2113539, 4099,
|
||||
4718594, 4718595, 4718595, 16387, 4718595, 262147, 34819, 1183747, 4718595, 262147, 196611, 8195, 262147, 262146, 2113539, 262147,
|
||||
4718595, 2228227, 266243, 32771, 1048579, 2051, 2113539, 598019, 40963, 69635, 2113539, 5244931, 2113539, 262147, 2113538, 2113539,
|
||||
2, 3, 3, 1081347, 3, 1081347, 1081347, 1081346, 3, 22531, 4194307, 2752515, 131075, 73731, 278531, 1081347,
|
||||
3, 532483, 4194307, 67587, 331779, 4341763, 2105347, 1081347, 4194307, 1310723, 4194306, 4194307, 559107, 2097155, 4194307, 4099,
|
||||
3, 393219, 4194307, 16387, 2637827, 73731, 137219, 1081347, 4194307, 73731, 4194306, 4194307, 73731, 73730, 4194307, 73731,
|
||||
4194307, 2134019, 4194306, 4194307, 1048579, 2051, 4194307, 786435, 4194306, 4194307, 4194305, 4194306, 4194307, 73731, 4194306, 4194307,
|
||||
3, 6356995, 788483, 16387, 131075, 528387, 2105347, 1081347, 131075, 1310723, 102403, 8195, 131074, 131075, 131075, 4196355,
|
||||
49155, 1310723, 2105347, 135171, 2105347, 2051, 2105346, 2105347, 1310723, 1310722, 4194307, 1310723, 131075, 1310723, 2105347, 606211,
|
||||
1060867, 16387, 16387, 16386, 4489219, 2051, 65539, 16387, 2099203, 557059, 4194307, 16387, 131075, 73731, 1572867, 2363395,
|
||||
720899, 2051, 4194307, 16387, 2051, 2050, 2105347, 2051, 4194307, 1310723, 4194306, 4194307, 20483, 2051, 4194307, 163843,
|
||||
3, 532483, 2101251, 16387, 131075, 2361347, 4784131, 1081347, 131075, 4227075, 1058819, 327683, 131074, 131075, 131075, 4099,
|
||||
532483, 532482, 425987, 532483, 1048579, 532483, 18435, 4099, 2179075, 532483, 4194307, 4099, 131075, 4099, 4099, 4098,
|
||||
100355, 16387, 16387, 16386, 1048579, 4198403, 270339, 16387, 790531, 3145731, 4194307, 16387, 131075, 73731, 2129923, 526339,
|
||||
1048579, 532483, 4194307, 16387, 1048578, 1048579, 1048579, 2293763, 4194307, 133123, 4194306, 4194307, 1048579, 311299, 4194307, 4099,
|
||||
131075, 16387, 16387, 16386, 131074, 131075, 131075, 16387, 131074, 131075, 131075, 16387, 131073, 131074, 131074, 131075,
|
||||
4200451, 532483, 1114115, 16387, 131075, 98307, 2105347, 4456451, 131075, 1310723, 524291, 2131971, 131074, 131075, 131075, 4099,
|
||||
16387, 16386, 16386, 16385, 131075, 16387, 16387, 16386, 131075, 16387, 16387, 16386, 131074, 131075, 131075, 16387,
|
||||
2359299, 16387, 16387, 16386, 1048579, 2051, 561155, 16387, 40963, 69635, 4194307, 16387, 131075, 6815747, 329731, 1056771,
|
||||
3, 393219, 2101251, 67587, 4204547, 528387, 278531, 1081347, 1638403, 4227075, 278531, 8195, 278531, 2097155, 278530, 278531,
|
||||
49155, 67587, 67587, 67586, 1048579, 2097155, 655363, 67587, 143363, 2097155, 4194307, 67587, 2097155, 2097154, 278531, 2097155,
|
||||
393219, 393218, 565251, 393219, 1048579, 393219, 65539, 6291459, 2099203, 393219, 4194307, 1052675, 36867, 73731, 278531, 526339,
|
||||
1048579, 393219, 4194307, 67587, 1048578, 1048579, 1048579, 28675, 4194307, 540675, 4194306, 4194307, 1048579, 2097155, 4194307, 163843,
|
||||
49155, 528387, 5373955, 8195, 528387, 528386, 65539, 528387, 2099203, 8195, 8195, 8194, 131075, 528387, 278531, 8195,
|
||||
49154, 49155, 49155, 67587, 49155, 528387, 2105347, 4456451, 49155, 1310723, 524291, 8195, 4259843, 2097155, 1054723, 163843,
|
||||
2099203, 393219, 65539, 16387, 65539, 528387, 65538, 65539, 2099202, 2099203, 2099203, 8195, 2099203, 5259267, 65539, 163843,
|
||||
49155, 4202499, 266243, 3670019, 1048579, 2051, 65539, 163843, 2099203, 69635, 4194307, 163843, 794627, 163843, 163843, 163842,
|
||||
2101251, 4227075, 2101250, 2101251, 1048579, 81923, 2101251, 139267, 4227075, 4227074, 2101251, 4227075, 131075, 4227075, 278531, 526339,
|
||||
1048579, 532483, 2101251, 67587, 1048578, 1048579, 1048579, 4456451, 264195, 4227075, 524291, 1196035, 1048579, 2097155, 106499, 4099,
|
||||
1048579, 393219, 2101251, 16387, 1048578, 1048579, 1048579, 526339, 24579, 4227075, 196611, 526339, 1048579, 526339, 526339, 526338,
|
||||
1048578, 1048579, 1048579, 32771, 1048577, 1048578, 1048578, 1048579, 1048579, 69635, 4194307, 2367491, 1048578, 1048579, 1048579, 526339,
|
||||
335875, 1050627, 2101251, 16387, 131075, 528387, 34819, 4456451, 131075, 4227075, 524291, 8195, 131074, 131075, 131075, 3211267,
|
||||
49155, 2228227, 524291, 4456451, 1048579, 4456451, 4456451, 4456450, 524291, 69635, 524290, 524291, 131075, 26627, 524291, 4456451,
|
||||
4718595, 16387, 16387, 16386, 1048579, 2138115, 65539, 16387, 2099203, 69635, 1343491, 16387, 131075, 262147, 4206595, 526339,
|
||||
1048579, 69635, 141315, 16387, 1048578, 1048579, 1048579, 4456451, 69635, 69634, 524291, 69635, 1048579, 69635, 2113539, 163843
|
||||
};
|
||||
|
||||
cw &= 0x007fffff;
|
||||
unsigned int correction = decoding[golay_23_syndrome(cw)];
|
||||
cw ^= correction;
|
||||
cw >>= 11;
|
||||
return correction & 3;
|
||||
}
|
21
imbe/golay.h
21
imbe/golay.h
|
@ -1,21 +0,0 @@
|
|||
#ifndef INCLUDED_GOLAY_H
|
||||
#define INCLUDED_GOLAY_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <stdint.h>
|
||||
|
||||
/* APCO Golay(23,11,7) ecoder.
|
||||
*
|
||||
* \param val The 12-bit value to encode.
|
||||
* \return The encoded codeword.
|
||||
*/
|
||||
extern uint32_t golay_23_encode(uint32_t);
|
||||
|
||||
/* APCO Golay(23,11,7) decoder.
|
||||
*
|
||||
* \param cw The 23-bit codeword to decode.
|
||||
* \return The number of errors detected.
|
||||
*/
|
||||
extern size_t golay_23_decode(uint32_t& cw);
|
||||
|
||||
#endif /* INCLUDED_GOLAY_H */
|
168
imbe/hamming.cc
168
imbe/hamming.cc
|
@ -1,168 +0,0 @@
|
|||
#include "hamming.h"
|
||||
|
||||
uint16_t
|
||||
hamming_15_encode(uint16_t code_word_in)
|
||||
{
|
||||
static long int encoding[11] = {
|
||||
0x400f, 0x200e, 0x100d, 0x080c, 0x040b, 0x020a, 0x0109,
|
||||
0x0087, 0x0046, 0x0025, 0x0013
|
||||
};
|
||||
|
||||
uint16_t code_word_out = 0u;
|
||||
for(uint8_t i = 0; i < 11; ++i) {
|
||||
if(code_word_in & (1u << 10 - i)) {
|
||||
code_word_out ^= encoding[i];
|
||||
}
|
||||
}
|
||||
return code_word_out;
|
||||
}
|
||||
|
||||
size_t
|
||||
hamming_15_decode(uint16_t& cw)
|
||||
{
|
||||
static const int encoding[2048] = {
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
12, 15, 9, 10, 10, 9, 15, 12, 11, 8, 14, 13, 13, 14, 8, 11,
|
||||
5, 6, 0, 3, 3, 0, 6, 5, 2, 1, 7, 4, 4, 7, 1, 2,
|
||||
6, 5, 3, 0, 0, 3, 5, 6, 1, 2, 4, 7, 7, 4, 2, 1,
|
||||
15, 12, 10, 9, 9, 10, 12, 15, 8, 11, 13, 14, 14, 13, 11, 8,
|
||||
7, 4, 2, 1, 1, 2, 4, 7, 0, 3, 5, 6, 6, 5, 3, 0,
|
||||
14, 13, 11, 8, 8, 11, 13, 14, 9, 10, 12, 15, 15, 12, 10, 9,
|
||||
13, 14, 8, 11, 11, 8, 14, 13, 10, 9, 15, 12, 12, 15, 9, 10,
|
||||
4, 7, 1, 2, 2, 1, 7, 4, 3, 0, 6, 5, 5, 6, 0, 3,
|
||||
0, 3, 5, 6, 6, 5, 3, 0, 7, 4, 2, 1, 1, 2, 4, 7,
|
||||
9, 10, 12, 15, 15, 12, 10, 9, 14, 13, 11, 8, 8, 11, 13, 14,
|
||||
10, 9, 15, 12, 12, 15, 9, 10, 13, 14, 8, 11, 11, 8, 14, 13,
|
||||
3, 0, 6, 5, 5, 6, 0, 3, 4, 7, 1, 2, 2, 1, 7, 4,
|
||||
11, 8, 14, 13, 13, 14, 8, 11, 12, 15, 9, 10, 10, 9, 15, 12,
|
||||
2, 1, 7, 4, 4, 7, 1, 2, 5, 6, 0, 3, 3, 0, 6, 5,
|
||||
1, 2, 4, 7, 7, 4, 2, 1, 6, 5, 3, 0, 0, 3, 5, 6,
|
||||
8, 11, 13, 14, 14, 13, 11, 8, 15, 12, 10, 9, 9, 10, 12, 15
|
||||
};
|
||||
|
||||
static const int decoding[16] = {
|
||||
0, 0, 0, 1, 0, 2, 4, 8, 0, 16, 32, 64, 128, 256, 512, 1024
|
||||
};
|
||||
|
||||
size_t errs = 0;
|
||||
uint16_t par = cw & 0xf;
|
||||
cw &= 0xffff;
|
||||
cw >>= 4;
|
||||
uint16_t correction = decoding[encoding[cw] ^ par];
|
||||
if(correction) {
|
||||
cw ^= correction;
|
||||
++errs;
|
||||
}
|
||||
return errs;
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
#ifndef INCLUDED_HAMMING_H
|
||||
#define INCLUDED_HAMMING_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* APCO Hamming(15,11,3) ecoder.
|
||||
*
|
||||
* \param val The 11-bit value to encode.
|
||||
* \return The encoded codeword.
|
||||
*/
|
||||
extern uint16_t hamming_15_encode(uint16_t val);
|
||||
|
||||
/*
|
||||
* APCO Hamming(15,11,3) decoder.
|
||||
*
|
||||
* \param cw The 15-bit codeword to decode.
|
||||
* \return The number of errors detected.
|
||||
*/
|
||||
extern size_t hamming_15_decode(uint16_t& cw);
|
||||
|
||||
#endif /* INCLUDED_HAMMING_H */
|
1030
imbe/imbe_data.h
1030
imbe/imbe_data.h
File diff suppressed because it is too large
Load Diff
63
imbe/main.cc
63
imbe/main.cc
|
@ -1,63 +0,0 @@
|
|||
#include <software_imbe_decoder.h>
|
||||
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
|
||||
using namespace boost;
|
||||
|
||||
/**
|
||||
* Insert bits from an octet buffer into a voice_codeword.
|
||||
*
|
||||
* \param in The octet buffer to read from.
|
||||
* \pram begin The first bit position.
|
||||
* \param end The last bit position.
|
||||
* \param out A reference to the voice_codeword to write.
|
||||
* \return The number of octers written.
|
||||
*/
|
||||
size_t
|
||||
extract(const uint8_t *in, size_t begin, size_t end, voice_codeword& out)
|
||||
{
|
||||
size_t nof_bits = 0;
|
||||
if(begin < end) {
|
||||
nof_bits = end - begin;
|
||||
out.resize(nof_bits);
|
||||
for(size_t i = begin; i < end; ++i) {
|
||||
out[i - begin] = in[i / 8] & (1 << (7 - (i % 8)));
|
||||
}
|
||||
}
|
||||
return nof_bits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a file created by offline_imbe_decoder into an audio file.
|
||||
*/
|
||||
int
|
||||
main(int ac, char **av)
|
||||
{
|
||||
FILE *out = fopen("audio.pcm", "w");
|
||||
scoped_ptr<software_imbe_decoder> imbe(new software_imbe_decoder());
|
||||
while(--ac) {
|
||||
FILE *in = fopen(*++av, "r");
|
||||
if(in) {
|
||||
uint8_t buf[18];
|
||||
while(1 == fread(buf, sizeof(buf), 1, in)) {
|
||||
voice_codeword cw(144);
|
||||
extract(buf, 0, 144, cw);
|
||||
imbe->decode(cw);
|
||||
audio_samples *audio = imbe->audio();
|
||||
for(audio_samples::iterator i(audio->begin()); i != audio->end(); ++i) {
|
||||
float f = *i;
|
||||
fwrite(&f, sizeof(f), 1, out);
|
||||
}
|
||||
audio->clear();
|
||||
}
|
||||
fclose(in);
|
||||
} else {
|
||||
perror(*av);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
fclose(out);
|
||||
return(0);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,88 +0,0 @@
|
|||
/* -*- C++ -*- */
|
||||
|
||||
/*
|
||||
* Copyright 2008-2009 Steve Glass
|
||||
*
|
||||
* This file is part of OP25.
|
||||
*
|
||||
* OP25 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 3, or(at your option)
|
||||
* any later version.
|
||||
*
|
||||
* OP25 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 OP25; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin Street, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef INCLUDED_SOFTWARE_IMBE_DECODER_H
|
||||
#define INCLUDED_SOFTWARE_IMBE_DECODER_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
class software_imbe_decoder {
|
||||
public:
|
||||
software_imbe_decoder();
|
||||
virtual ~software_imbe_decoder();
|
||||
virtual void decode(uint8_t *buf);
|
||||
private:
|
||||
|
||||
//NOTE: Single-letter variable names are upper case only; Lower
|
||||
// case if needed is spelled. e.g. L, ell
|
||||
|
||||
// global Seq ER ?
|
||||
|
||||
int bee[58]; //Encoded Spectral Amplitudes
|
||||
float M[57][2]; //Enhanced Spectral Amplitudes
|
||||
float Mu[57][2]; //Unenhanced Spectral Amplitudes
|
||||
int vee[57][2]; //V/UV decisions
|
||||
float suv[160]; //Unvoiced samples
|
||||
float sv[160]; //Voiced samples
|
||||
float log2Mu[58][2];
|
||||
float Olduw[256];
|
||||
float psi1;
|
||||
float phi[57][2];
|
||||
|
||||
int Old;
|
||||
int New;
|
||||
int L;
|
||||
int OldL;
|
||||
float w0;
|
||||
float Oldw0;
|
||||
float Luv; //number of unvoiced spectral amplitudes
|
||||
|
||||
char sym_b[4096];
|
||||
char RxData[4096];
|
||||
int sym_bp;
|
||||
int ErFlag;
|
||||
|
||||
FILE *out;
|
||||
|
||||
uint32_t extract(const uint8_t* buf, size_t begin, size_t end);
|
||||
uint32_t pngen15(uint32_t& pn);
|
||||
uint32_t pngen23(uint32_t& pn);
|
||||
|
||||
void correct(uint8_t* A, uint32_t& u0, uint32_t& u1, uint32_t& u2, uint32_t& u3, uint32_t& u4, uint32_t& u5, uint32_t& u6, uint32_t& u7, uint32_t& E0, uint32_t& ET);
|
||||
|
||||
void decode_audio(uint8_t *);
|
||||
void decode_spectral_amplitudes(int, int );
|
||||
void decode_vuv(int );
|
||||
void adaptive_smoothing(float, float, float );
|
||||
void fft(float i[], float q[]);
|
||||
void enhance_spectral_amplitudes(float&);
|
||||
|
||||
void ifft(float i[], float q[], float[]);
|
||||
uint16_t rearrange(uint32_t u0, uint32_t u1, uint32_t u2, uint32_t u3, uint32_t u4, uint32_t u5, uint32_t u6, uint32_t u7);
|
||||
void synth_unvoiced();
|
||||
void synth_voiced();
|
||||
void unpack(uint8_t *buf, uint32_t& u0, uint32_t& u1, uint32_t& u2, uint32_t& u3, uint32_t& u4, uint32_t& u5, uint32_t& u6, uint32_t& u7, uint32_t& E0, uint32_t& ET);
|
||||
};
|
||||
|
||||
|
||||
#endif /* INCLUDED_SOFTWARE_IMBE_DECODER_H */
|
|
@ -19,10 +19,12 @@
|
|||
# Software Foundation, Inc., 51 Franklin Street, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
import os
|
||||
import pickle
|
||||
import sys
|
||||
import threading
|
||||
import wx
|
||||
import wx.html
|
||||
import wx.wizard
|
||||
|
||||
from gnuradio import audio, eng_notation, fsk4, gr, gru, op25
|
||||
|
@ -39,53 +41,98 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
# Initialize the P25 receiver
|
||||
#
|
||||
def __init__(self, frame, panel, vbox, argv):
|
||||
|
||||
stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
|
||||
|
||||
# do we have a USRP?
|
||||
try:
|
||||
self.usrp = None
|
||||
from gnuradio import usrp
|
||||
self.usrp = usrp.source_c()
|
||||
except Exception:
|
||||
ignore = True
|
||||
|
||||
# setup (read-only) attributes
|
||||
self.channel_rate = 125000
|
||||
self.channel_rate = 48000
|
||||
self.symbol_rate = 4800
|
||||
self.symbol_deviation = 600.0
|
||||
|
||||
# keep track of flow graph connections
|
||||
self.cnxns = []
|
||||
|
||||
# initialize the UI
|
||||
#
|
||||
self.__init_gui(frame, panel, vbox)
|
||||
|
||||
# command line argument parsing
|
||||
#
|
||||
parser = OptionParser(option_class=eng_option)
|
||||
parser.add_option("-i", "--input", default=None, help="input file name")
|
||||
parser.add_option("-s", "--sample-rate", type="int", default=48000, help="sound card input sample rate")
|
||||
parser.add_option("-I", "--audio-input", type="string", default="", help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
|
||||
parser.add_option("-f", "--frequency", type="eng_float", default=0.0, help="USRP center frequency", metavar="Hz")
|
||||
parser.add_option("-g", "--gain", type="eng_float", default=1.0, help="audio gain")
|
||||
parser.add_option("-d", "--decim", type="int", default=256, help="source decimation factor")
|
||||
parser.add_option("-w", "--wait", action="store_true", default=False, help="block on startup")
|
||||
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=(0, 0), help="select USRP Rx side A or B (default=A)")
|
||||
parser.add_option("-g", "--gain", type="eng_float", default=None, help="set USRP gain in dB (default is midpoint)")
|
||||
(options, args) = parser.parse_args()
|
||||
if len(args) != 0:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
# wait for gdb
|
||||
if options.wait:
|
||||
print 'Ready for GDB to attach (pid = %d)' % (os.getpid(),)
|
||||
raw_input("Press 'Enter' to continue...")
|
||||
|
||||
# configure specified data source
|
||||
#
|
||||
usrp_rate = 64000000
|
||||
if options.input:
|
||||
self.open_file(options)
|
||||
self.open_file(options.input)
|
||||
elif options.frequency:
|
||||
self._set_state("CAPTURING")
|
||||
usrp = usrp.source_c(0)
|
||||
subdev = usrp.pick_subdev(usrp, (usrp_dbid.TV_RX, usrp_dbid.TV_RX_REV_2, usrp.dbid.TV_RX_REV_3))
|
||||
usrp.set_mux(usrp.determine_rx_mux_value(usrp, subdev))
|
||||
usrp.set_decim_rate(options.decim)
|
||||
# if gain is None:
|
||||
# g = self._subdev.gain_range()
|
||||
# gain = (g[0]+g[1])/2.0
|
||||
# self._subdev.set_gain(gain)
|
||||
usrp.tune(options.frequency)
|
||||
junk = usrp.tune(usrp, 0, subdev, frequency)
|
||||
self.source = usrp
|
||||
self.spectrum.set_sample_rate(capture_rate)
|
||||
self.open_usrp(options.rx_subdev_spec, options.decim, options.gain, options.frequency, True)
|
||||
else:
|
||||
self._set_state("STOPPED")
|
||||
|
||||
# setup common flow graph elements
|
||||
#
|
||||
def __build_graph(self, source, capture_rate):
|
||||
# tell the scope the source rate
|
||||
self.spectrum.set_sample_rate(capture_rate)
|
||||
# channel filter
|
||||
self.channel_offset = 0.0
|
||||
channel_decim = capture_rate // self.channel_rate
|
||||
channel_rate = capture_rate // channel_decim
|
||||
trans_width = 12.5e3 / 2;
|
||||
trans_centre = trans_width + (trans_width / 2)
|
||||
coeffs = gr.firdes.low_pass(1.0, capture_rate, trans_centre, trans_width, gr.firdes.WIN_HANN)
|
||||
self.channel_filter = gr.freq_xlating_fir_filter_ccf(channel_decim, coeffs, -9500.0, capture_rate)
|
||||
self.set_channel_offset(0.0, 0, self.spectrum.win._units)
|
||||
# power squelch
|
||||
squelch_db = -60
|
||||
self.squelch = gr.pwr_squelch_cc(squelch_db, 1e-3, 0, True)
|
||||
self.set_squelch_threshold(squelch_db)
|
||||
# FM demodulator
|
||||
fm_demod_gain = channel_rate / (2.0 * pi * self.symbol_deviation)
|
||||
fm_demod = gr.quadrature_demod_cf(fm_demod_gain)
|
||||
# symbol filter
|
||||
symbol_decim = 1
|
||||
#symbol_coeffs = gr.firdes.root_raised_cosine(1.0, channel_rate, self.symbol_rate, 0.2, 500)
|
||||
# boxcar coefficients for "integrate and dump" filter
|
||||
samples_per_symbol = channel_rate // self.symbol_rate
|
||||
symbol_coeffs = (1.0/samples_per_symbol,)*samples_per_symbol
|
||||
symbol_filter = gr.fir_filter_fff(symbol_decim, symbol_coeffs)
|
||||
|
||||
# C4FM demodulator
|
||||
autotuneq = gr.msg_queue(2)
|
||||
self.demod_watcher = demod_watcher(autotuneq, self.adjust_channel_offset)
|
||||
demod_fsk4 = fsk4.demod_ff(autotuneq, channel_rate, self.symbol_rate)
|
||||
reverser = gr.multiply_const_ff(-1.0)
|
||||
# for now no audio output
|
||||
sink = gr.null_sink(gr.sizeof_float)
|
||||
# connect it all up
|
||||
self.__connect([[source, self.channel_filter, self.squelch, fm_demod, symbol_filter, demod_fsk4, reverser, self.p25_decoder, sink],
|
||||
[source, self.spectrum],
|
||||
[symbol_filter, self.signal_scope],
|
||||
[demod_fsk4, self.symbol_scope]])
|
||||
|
||||
# Connect up the flow graph
|
||||
#
|
||||
def __connect(self, cnxns):
|
||||
|
@ -96,7 +143,7 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
else:
|
||||
self.connect(p, b)
|
||||
p = b
|
||||
self.cnxns = cnxns
|
||||
self.cnxns.extend(cnxns)
|
||||
|
||||
# Disconnect the flow graph
|
||||
#
|
||||
|
@ -108,7 +155,7 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
else:
|
||||
self.disconnect(p, b)
|
||||
p = b
|
||||
self.cnxns = None
|
||||
self.cnxns = []
|
||||
|
||||
# initialize the UI
|
||||
#
|
||||
|
@ -118,36 +165,69 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
self.panel = panel
|
||||
self.vbox = vbox
|
||||
|
||||
# setup the "File" menu
|
||||
# setup the menu bar
|
||||
menubar = self.frame.GetMenuBar()
|
||||
|
||||
# setup the "File" menu
|
||||
file_menu = menubar.GetMenu(0)
|
||||
self.file_capture = file_menu.Insert(0, wx.ID_NEW, u'&New Capture...\tCtrl-C', 'Capture from USRP', wx.ITEM_NORMAL)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_file_capture, self.file_capture)
|
||||
# self.file_open = file_menu.Insert(1, wx.ID_OPEN, u'&Open...\tCtrl-O', 'Open file', wx.ITEM_NORMAL)
|
||||
self.file_new = file_menu.Insert(0, wx.ID_NEW)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_file_new, self.file_new)
|
||||
self.file_open = file_menu.Insert(1, wx.ID_OPEN)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_file_open, self.file_open)
|
||||
file_menu.InsertSeparator(2)
|
||||
self.file_properties = file_menu.Insert(3, wx.ID_PROPERTIES, u'Properties...\tAlt-Enter', 'File properties.', wx.ITEM_NORMAL)
|
||||
self.file_properties = file_menu.Insert(3, wx.ID_PROPERTIES)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_file_properties, self.file_properties)
|
||||
file_menu.InsertSeparator(4)
|
||||
self.file_close = file_menu.Insert(5, wx.ID_CLOSE, u'Close\tCtrl-W', 'Close file', wx.ITEM_NORMAL)
|
||||
self.file_close = file_menu.Insert(5, wx.ID_CLOSE)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_file_close, self.file_close)
|
||||
|
||||
# setup the "Edit" menu
|
||||
edit_menu = wx.Menu()
|
||||
self.edit_undo = edit_menu.Insert(0, wx.ID_UNDO)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_undo, self.edit_undo)
|
||||
self.edit_redo = edit_menu.Insert(1, wx.ID_REDO)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_redo, self.edit_redo)
|
||||
edit_menu.InsertSeparator(2)
|
||||
self.edit_cut = edit_menu.Insert(3, wx.ID_CUT)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_cut, self.edit_cut)
|
||||
self.edit_copy = edit_menu.Insert(4, wx.ID_COPY)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_copy, self.edit_copy)
|
||||
self.edit_paste = edit_menu.Insert(5, wx.ID_PASTE)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_paste, self.edit_paste)
|
||||
self.edit_delete = edit_menu.Insert(6, wx.ID_DELETE)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_delete, self.edit_delete)
|
||||
edit_menu.InsertSeparator(7)
|
||||
self.edit_select_all = edit_menu.Insert(8, wx.ID_SELECTALL)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_select_all, self.edit_select_all)
|
||||
edit_menu.InsertSeparator(9)
|
||||
self.edit_prefs = edit_menu.Insert(10, wx.ID_PREFERENCES)
|
||||
self.frame.Bind(wx.EVT_MENU, self._on_edit_prefs, self.edit_prefs)
|
||||
menubar.Append(edit_menu, "&Edit"); # ToDo use wx.ID_EDIT stuff
|
||||
|
||||
# setup the toolbar
|
||||
if False:
|
||||
toolbar = wx.ToolBar(frame, -1, style = wx.TB_DOCKABLE | wx.TB_HORIZONTAL)
|
||||
frame.SetToolBar(toolbar)
|
||||
if True:
|
||||
self.toolbar = wx.ToolBar(frame, -1, style = wx.TB_DOCKABLE | wx.TB_HORIZONTAL)
|
||||
frame.SetToolBar(self.toolbar)
|
||||
icon_size = wx.Size(24, 24)
|
||||
new_icon = wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, icon_size)
|
||||
self.toolbar_capture = toolbar.AddSimpleTool(wx.ID_NEW, new_icon, u"New Capture")
|
||||
toolbar_new = self.toolbar.AddSimpleTool(wx.ID_NEW, new_icon, "New Capture")
|
||||
open_icon = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, icon_size)
|
||||
self.toolbar_open = toolbar.AddSimpleTool(wx.ID_OPEN, open_icon, u"Open")
|
||||
toolbar_open = self.toolbar.AddSimpleTool(wx.ID_OPEN, open_icon, "Open")
|
||||
#
|
||||
# self.toolbar.AddSeparator()
|
||||
# self.gain_control = wx.Slider(self.toolbar, 100, 50, 1, 100, style=wx.SL_HORIZONTAL)
|
||||
# slider.SetTickFreq(5, 1)
|
||||
# self.toolbar.AddControl(self.gain_control)
|
||||
#
|
||||
self.toolbar.Realize()
|
||||
else:
|
||||
self.toolbar = None
|
||||
|
||||
# setup the notebook
|
||||
self.notebook = wx.Notebook(self.panel)
|
||||
self.vbox.Add(self.notebook, 1, wx.EXPAND)
|
||||
# add spectrum scope
|
||||
self.spectrum = fftsink2.fft_sink_f(self.notebook, fft_size=512, average=True, peak_hold=True)
|
||||
self.spectrum = fftsink2.fft_sink_c(self.notebook, fft_size=512, fft_rate=2, average=True, peak_hold=True)
|
||||
self.spectrum_plotter = self.spectrum.win.plot
|
||||
self.spectrum_plotter.Bind(wx.EVT_LEFT_DOWN, self._on_spectrum_left_click)
|
||||
self.notebook.AddPage(self.spectrum.win, "RF Spectrum")
|
||||
|
@ -160,9 +240,13 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
self.symbol_plotter = self.symbol_scope.win.graph
|
||||
self.symbol_scope.win.set_format_plus()
|
||||
self.notebook.AddPage(self.symbol_scope.win, "Demodulated Symbols")
|
||||
# # ToDo: add info tab
|
||||
# # Report the TUN/TAP device name
|
||||
self.p25_decoder = op25.decoder_ff()
|
||||
# Traffic snapshot
|
||||
self.traffic = TrafficPane(self.notebook)
|
||||
self.notebook.AddPage(self.traffic, "Traffic")
|
||||
# Setup the decoder and report the TUN/TAP device name
|
||||
msgq = gr.msg_queue(2)
|
||||
self.decode_watcher = decode_watcher(msgq, self.traffic)
|
||||
self.p25_decoder = op25.decoder_ff(msgq)
|
||||
self.frame.SetStatusText("TUN/TAP: " + self.p25_decoder.device_name())
|
||||
|
||||
# read capture file properties (decimation etc.)
|
||||
|
@ -170,64 +254,92 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
def __read_file_properties(self, filename):
|
||||
f = open(filename, "r")
|
||||
self.info = pickle.load(f)
|
||||
ToDo = True
|
||||
f.close()
|
||||
|
||||
# setup to rx from file
|
||||
#
|
||||
def __set_rx_from_file(self, options):
|
||||
sample_rate = options.sample_rate
|
||||
# tell the scope the source rate
|
||||
self.spectrum.set_sample_rate(sample_rate)
|
||||
# audio input/amplifier
|
||||
audio_input = audio.source(sample_rate, options.audio_input)
|
||||
audio_gain = gr.multiply_const_ff(options.gain)
|
||||
# symbol filter
|
||||
symbol_decim = 1
|
||||
symbol_coeffs = gr.firdes.root_raised_cosine(1.0, sample_rate, self.symbol_rate, 0.2, 500)
|
||||
symbol_filter = gr.fir_filter_fff(symbol_decim, symbol_coeffs)
|
||||
# C4FM demodulator
|
||||
autotuneq = gr.msg_queue(2)
|
||||
self.demod_watcher = demod_watcher(autotuneq, self.adjust_channel_offset)
|
||||
demod_fsk4 = fsk4.demod_ff(autotuneq, sample_rate, self.symbol_rate)
|
||||
# for now no audio output
|
||||
sink = gr.null_sink(gr.sizeof_float)
|
||||
# connect it all up
|
||||
self.__connect([[audio_input, audio_gain, symbol_filter, demod_fsk4, self.p25_decoder, sink],
|
||||
[audio_gain, self.spectrum],
|
||||
[symbol_filter, self.signal_scope],
|
||||
[demod_fsk4, self.symbol_scope]])
|
||||
def __set_rx_from_file(self, filename, capture_rate):
|
||||
file = gr.file_source(gr.sizeof_gr_complex, filename, True)
|
||||
throttle = gr.throttle(gr.sizeof_gr_complex, capture_rate)
|
||||
self.__connect([[file, throttle]])
|
||||
self.__build_graph(throttle, capture_rate)
|
||||
|
||||
# setup to rx from USRP
|
||||
#
|
||||
def __set_rx_from_usrp(self, subdev_spec, decimation_rate, gain, frequency, preserve):
|
||||
from gnuradio import usrp
|
||||
# setup USRP
|
||||
self.usrp.set_decim_rate(decimation_rate)
|
||||
if subdev_spec is None:
|
||||
subdev_spec = usrp.pick_rx_subdevice(self.usrp)
|
||||
self.usrp.set_mux(usrp.determine_rx_mux_value(self.usrp, subdev_spec))
|
||||
subdev = usrp.selected_subdev(self.usrp, subdev_spec)
|
||||
capture_rate = self.usrp.adc_freq() / self.usrp.decim_rate()
|
||||
self.info["capture-rate"] = capture_rate
|
||||
if gain is None:
|
||||
g = subdev.gain_range()
|
||||
gain = float(g[0]+g[1])/2
|
||||
subdev.set_gain(gain)
|
||||
r = self.usrp.tune(0, subdev, frequency)
|
||||
if not r:
|
||||
raise RuntimeError("failed to set USRP frequency")
|
||||
# capture file
|
||||
if preserve:
|
||||
try:
|
||||
self.capture_filename = os.tmpnam()
|
||||
except RuntimeWarning:
|
||||
ignore = True
|
||||
capture_file = gr.file_sink(gr.sizeof_gr_complex, self.capture_filename)
|
||||
self.__connect([[self.usrp, capture_file]])
|
||||
else:
|
||||
self.capture_filename = None
|
||||
# everything else
|
||||
self.__build_graph(self.usrp, capture_rate)
|
||||
|
||||
# Change the UI state
|
||||
#
|
||||
def _set_state(self, new_state):
|
||||
self.state = new_state
|
||||
if "STOPPED" == self.state:
|
||||
self.file_capture.Enable(True)
|
||||
# self.toolbar_capture.Enable(True)
|
||||
# menu items
|
||||
can_capture = self.usrp is not None
|
||||
self.file_new.Enable(can_capture)
|
||||
self.file_open.Enable(True)
|
||||
# self.toolbar_open.Enable(True)
|
||||
self.file_properties.Enable(False)
|
||||
self.file_close.Enable(False)
|
||||
# toolbar
|
||||
if self.toolbar:
|
||||
self.toolbar.EnableTool(wx.ID_NEW, can_capture)
|
||||
self.toolbar.EnableTool(wx.ID_OPEN, True)
|
||||
# Visually reflect "no file"
|
||||
self.frame.SetStatusText("", 1)
|
||||
self.frame.SetStatusText("", 2)
|
||||
self.spectrum_plotter.Clear()
|
||||
self.signal_plotter.Clear()
|
||||
self.symbol_plotter.Clear()
|
||||
self.traffic.clear()
|
||||
elif "RUNNING" == self.state:
|
||||
self.file_capture.Enable(False)
|
||||
# self.toolbar_capture.Enable(False)
|
||||
# menu items
|
||||
self.file_new.Enable(False)
|
||||
self.file_open.Enable(False)
|
||||
# self.toolbar_open.Enable(False)
|
||||
self.file_properties.Enable(True)
|
||||
self.file_close.Enable(True)
|
||||
# toolbar
|
||||
if self.toolbar:
|
||||
self.toolbar.EnableTool(wx.ID_NEW, False)
|
||||
self.toolbar.EnableTool(wx.ID_OPEN, False)
|
||||
elif "CAPTURING" == self.state:
|
||||
self.file_capture.Enable(False)
|
||||
# self.toolbar_capture.Enable(False)
|
||||
# menu items
|
||||
self.file_new.Enable(False)
|
||||
self.file_open.Enable(False)
|
||||
# self.toolbar_open.Enable(False)
|
||||
self.file_properties.Enable(True)
|
||||
self.file_close.Enable(True)
|
||||
# toolbar
|
||||
if self.toolbar:
|
||||
self.toolbar.EnableTool(wx.ID_NEW, False)
|
||||
self.toolbar.EnableTool(wx.ID_OPEN, False)
|
||||
|
||||
|
||||
# Append filename to default title bar
|
||||
#
|
||||
|
@ -241,54 +353,55 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
pickle.dump(self.info, f)
|
||||
f.close()
|
||||
|
||||
# Coarse frequency tracker
|
||||
# Adjust the channel offset
|
||||
#
|
||||
def adjust_channel_offset(self, delta_hz):
|
||||
return
|
||||
max_delta_hz = 12000.0
|
||||
delta_hz *= self.symbol_deviation
|
||||
delta_hz = max(delta_hz, -max_delta_hz)
|
||||
delta_hz = min(delta_hz, max_delta_hz)
|
||||
self.channel_filter.set_center_freq(self.channel_offset - delta_hz)
|
||||
|
||||
# New capture from USRP
|
||||
#
|
||||
def _on_file_capture(self, event):
|
||||
wizard = wx.wizard.Wizard(None, -1, "New Capture from USRP")
|
||||
# ToDo: set up proper wizard pages
|
||||
page1 = wx.wizard.WizardPageSimple(wizard) # Intro - "please ensure you have plugged it in etc.", link to webpage
|
||||
page2 = wx.wizard.WizardPageSimple(wizard) # Device/Card/Rate (implies decim) - all comboboxes
|
||||
page3 = wx.wizard.WizardPageSimple(wizard) # Capture data to disk? Explain why decision needed now.
|
||||
page4 = wx.wizard.WizardPageSimple(wizard) # You are good to go...
|
||||
wx.wizard.WizardPageSimple_Chain(page1, page2)
|
||||
wx.wizard.WizardPageSimple_Chain(page2, page3)
|
||||
wx.wizard.WizardPageSimple_Chain(page3, page4)
|
||||
wizard.FitToPage(page1)
|
||||
if wizard.RunWizard(page1):
|
||||
self._set_titlebar("Unsaved capture file")
|
||||
# ToDo: scrape data,
|
||||
# ToDo: __set_rx_from_usrp(scraped data)
|
||||
# self.start()
|
||||
self._set_state("CAPTURING")
|
||||
|
||||
# Close an open file
|
||||
#
|
||||
def _on_file_close(self, event):
|
||||
self.stop()
|
||||
self.wait()
|
||||
self.__disconnect()
|
||||
# ToDo: check if capture has been logged to disk
|
||||
if "CAPTURING" == self.state:
|
||||
if "CAPTURING" == self.state and self.capture_filename:
|
||||
dialog = wx.MessageDialog(self.frame, "Save capture file before closing?", style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
|
||||
if wx.ID_YES == dialog.ShowModal():
|
||||
save_dialog = wx.FileDialog(self.frame, "Save capture file as:", wildcard="*.dat", style=wx.SAVE|wx.OVERWRITE_PROMPT)
|
||||
if save_dialog.ShowModal() == wx.ID_OK:
|
||||
path = save_dialog.GetPath()
|
||||
path = str(save_dialog.GetPath())
|
||||
save_dialog.Destroy()
|
||||
# ToDo move (link/unlink) the capture to path
|
||||
# ToDo write the info file
|
||||
|
||||
os.rename(self.capture_filename, path)
|
||||
self.__write_file_properties(path + ".info")
|
||||
else:
|
||||
os.remove(self.capture_filename)
|
||||
self.capture_filename = None
|
||||
self._set_state("STOPPED")
|
||||
|
||||
# New capture from USRP
|
||||
#
|
||||
def _on_file_new(self, event):
|
||||
# wizard = wx.wizard.Wizard(self.frame, -1, "New Capture from USRP")
|
||||
# page1 = wizard_intro_page(wizard)
|
||||
# page2 = wizard_details_page(wizard)
|
||||
# page3 = wizard_preserve_page(wizard)
|
||||
# page4 = wizard_finish_page(wizard)
|
||||
# wx.wizard.WizardPageSimple_Chain(page1, page2)
|
||||
# wx.wizard.WizardPageSimple_Chain(page2, page3)
|
||||
# wx.wizard.WizardPageSimple_Chain(page3, page4)
|
||||
# wizard.FitToPage(page1)
|
||||
# if wizard.RunWizard(page1):
|
||||
self.stop()
|
||||
self.wait()
|
||||
# ToDo: get open_usrp() arguments from wizard
|
||||
self.open_usrp((0,0), 256, None, 434.08e06, True) # Test freq
|
||||
self.start()
|
||||
|
||||
# Open an existing capture
|
||||
#
|
||||
def _on_file_open(self, event):
|
||||
|
@ -308,6 +421,47 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
# capture source, capture rate, date(?), size(?),)
|
||||
todo = True
|
||||
|
||||
# Undo the last edit
|
||||
#
|
||||
def _on_edit_undo(self, event):
|
||||
todo = True
|
||||
|
||||
# Redo the edit
|
||||
#
|
||||
def _on_edit_redo(self, event):
|
||||
todo = True
|
||||
|
||||
# Cut the current selection
|
||||
#
|
||||
def _on_edit_cut(self, event):
|
||||
todo = True
|
||||
|
||||
# Copy the current selection
|
||||
#
|
||||
def _on_edit_copy(self, event):
|
||||
todo = True
|
||||
|
||||
# Paste into the current sample
|
||||
#
|
||||
def _on_edit_paste(self, event):
|
||||
todo = True
|
||||
|
||||
# Delete the current selection
|
||||
#
|
||||
def _on_edit_delete(self, event):
|
||||
todo = True
|
||||
|
||||
# Select all
|
||||
#
|
||||
def _on_edit_select_all(self, event):
|
||||
todo = True
|
||||
|
||||
# Open the preferences dialog
|
||||
#
|
||||
def _on_edit_prefs(self, event):
|
||||
todo = True
|
||||
|
||||
|
||||
# Set channel offset and RF squelch threshold
|
||||
#
|
||||
def _on_spectrum_left_click(self, event):
|
||||
|
@ -318,7 +472,7 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
x = min(x, xmax)
|
||||
x = max(x, xmin)
|
||||
scale_factor = self.spectrum.win._scale_factor
|
||||
chan_width = 12.5e3
|
||||
chan_width = 6.25e3
|
||||
x /= scale_factor
|
||||
x += chan_width / 2
|
||||
x = (x // chan_width) * chan_width
|
||||
|
@ -327,23 +481,42 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
ymin, ymax = self.spectrum_plotter.GetYCurrentRange()
|
||||
y = min(y, ymax)
|
||||
y = max(y, ymin)
|
||||
squelch_increment = 5
|
||||
y += squelch_increment / 2
|
||||
y = (y // squelch_increment) * squelch_increment
|
||||
self.set_squelch_threshold(int(y))
|
||||
|
||||
# Open an existing capture file
|
||||
#
|
||||
def open_file(self, options):
|
||||
def open_file(self, capture_file):
|
||||
try:
|
||||
# self.__read_file_properties(capture_file + ".info")
|
||||
# capture_rate = self.info["capture-rate"]
|
||||
self.__set_rx_from_file(options)
|
||||
# self._set_titlebar(capture_file)
|
||||
self.__read_file_properties(capture_file + ".info")
|
||||
capture_rate = self.info["capture-rate"]
|
||||
self.__set_rx_from_file(capture_file, capture_rate)
|
||||
self._set_titlebar(capture_file)
|
||||
self._set_state("RUNNING")
|
||||
except:
|
||||
wx.MessageBox("Cannot open capture file.", "File Error", wx.CANCEL | wx.ICON_EXCLAMATION)
|
||||
except Exception, x:
|
||||
wx.MessageBox("Cannot open capture file: " + x.message, "File Error", wx.CANCEL | wx.ICON_EXCLAMATION)
|
||||
|
||||
# Open the USRP
|
||||
#
|
||||
def open_usrp(self, subdev_spec, decim, gain, frequency, preserve):
|
||||
try:
|
||||
self.info = {
|
||||
"capture-rate": "unknown",
|
||||
"center-freq": frequency,
|
||||
"source-dev": "USRP",
|
||||
"source-decim": decim }
|
||||
self.__set_rx_from_usrp(subdev_spec, decim, gain, frequency, preserve)
|
||||
self._set_titlebar("Capturing")
|
||||
self._set_state("CAPTURING")
|
||||
except Exception, x:
|
||||
wx.MessageBox("Cannot open USRP: " + x.message, "USRP Error", wx.CANCEL | wx.ICON_EXCLAMATION)
|
||||
|
||||
# Set the channel offset
|
||||
#
|
||||
def set_channel_offset(self, offset_hz, scale, units):
|
||||
return
|
||||
self.channel_offset = -offset_hz
|
||||
self.channel_filter.set_center_freq(self.channel_offset)
|
||||
self.frame.SetStatusText("Channel offset: " + str(offset_hz * scale) + units, 1)
|
||||
|
@ -355,6 +528,140 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
self.frame.SetStatusText("Squelch: " + str(squelch_db) + "dB", 2)
|
||||
|
||||
|
||||
# A snapshot of important fields in current traffic
|
||||
#
|
||||
class TrafficPane(wx.Panel):
|
||||
|
||||
# Initializer
|
||||
#
|
||||
def __init__(self, parent):
|
||||
|
||||
wx.Panel.__init__(self, parent)
|
||||
sizer = wx.GridBagSizer(hgap=10, vgap=10)
|
||||
self.fields = {}
|
||||
|
||||
label = wx.StaticText(self, -1, "DUID:")
|
||||
sizer.Add(label, pos=(1,1))
|
||||
field = wx.TextCtrl(self, -1, "", size=(72, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(1,2))
|
||||
self.fields["duid"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "NAC:")
|
||||
sizer.Add(label, pos=(2,1))
|
||||
field = wx.TextCtrl(self, -1, "", size=(175, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(2,2))
|
||||
self.fields["nac"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "Source:")
|
||||
sizer.Add(label, pos=(3,1))
|
||||
field = wx.TextCtrl(self, -1, "", size=(175, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(3,2))
|
||||
self.fields["source"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "Destination:")
|
||||
sizer.Add(label, pos=(4,1))
|
||||
field = wx.TextCtrl(self, -1, "", size=(175, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(4,2))
|
||||
self.fields["dest"] = field;
|
||||
|
||||
# label = wx.StaticText(self, -1, "ToDo:")
|
||||
# sizer.Add(label, pos=(5,1))
|
||||
# field = wx.TextCtrl(self, -1, "", size=(175, -1), style=wx.TE_READONLY)
|
||||
# sizer.Add(field, pos=(5,2))
|
||||
# self.fields["nid"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "MFID:")
|
||||
sizer.Add(label, pos=(1,4))
|
||||
field = wx.TextCtrl(self, -1, "", size=(175, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(1,5))
|
||||
self.fields["mfid"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "ALGID:")
|
||||
sizer.Add(label, pos=(2,4))
|
||||
field = wx.TextCtrl(self, -1, "", size=(175, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(2,5))
|
||||
self.fields["algid"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "KID:")
|
||||
sizer.Add(label, pos=(3,4))
|
||||
field = wx.TextCtrl(self, -1, "", size=(72, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(3,5))
|
||||
self.fields["kid"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "MI:")
|
||||
sizer.Add(label, pos=(4,4))
|
||||
field = wx.TextCtrl(self, -1, "", size=(216, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(4,5))
|
||||
self.fields["mi"] = field;
|
||||
|
||||
label = wx.StaticText(self, -1, "TGID:")
|
||||
sizer.Add(label, pos=(5,4))
|
||||
field = wx.TextCtrl(self, -1, "", size=(72, -1), style=wx.TE_READONLY)
|
||||
sizer.Add(field, pos=(5,5))
|
||||
self.fields["tgid"] = field;
|
||||
|
||||
self.SetSizer(sizer)
|
||||
self.Fit()
|
||||
|
||||
# Clear the field values
|
||||
#
|
||||
def clear(self):
|
||||
for v in self.fields.values():
|
||||
v.Clear()
|
||||
|
||||
# Update the field values
|
||||
#
|
||||
def update(self, field_values):
|
||||
for k,v in self.fields.items():
|
||||
f = field_values.get(k, None)
|
||||
if f:
|
||||
v.SetValue(f)
|
||||
else:
|
||||
v.SetValue("")
|
||||
|
||||
|
||||
# Introduction page for USRP capture wizard
|
||||
#
|
||||
class wizard_intro_page(wx.wizard.WizardPageSimple):
|
||||
|
||||
# Initializer
|
||||
#
|
||||
def __init__(self, parent):
|
||||
wx.wizard.WizardPageSimple.__init__(self, parent)
|
||||
html = wx.html.HtmlWindow(self)
|
||||
html.SetPage('''
|
||||
<html>
|
||||
<body>
|
||||
<h1>Capture from USRP</h1>
|
||||
<p>
|
||||
We will guide you through the process of capturing a sample from the USRP.
|
||||
Please ensure that the USRP is switched on and connected to this computer.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
''')
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
self.SetSizer(sizer)
|
||||
sizer.Add(html, 1, wx.ALIGN_CENTER | wx.EXPAND | wx.FIXED_MINSIZE)
|
||||
|
||||
|
||||
# USRP wizard details page
|
||||
#
|
||||
class wizard_details_page(wx.wizard.WizardPageSimple):
|
||||
|
||||
# Initializer
|
||||
#
|
||||
def __init__(self, parent):
|
||||
wx.wizard.WizardPageSimple.__init__(self, parent)
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
self.SetSizer(sizer)
|
||||
|
||||
# Return a tuple containing the subdev_spec, gain, frequency, decimation factor
|
||||
#
|
||||
def get_details(self):
|
||||
ToDo = True
|
||||
|
||||
|
||||
# Frequency tracker
|
||||
#
|
||||
class demod_watcher(threading.Thread):
|
||||
|
@ -374,6 +681,26 @@ class demod_watcher(threading.Thread):
|
|||
self.callback(frequency_correction)
|
||||
|
||||
|
||||
# Decoder watcher
|
||||
#
|
||||
class decode_watcher(threading.Thread):
|
||||
|
||||
def __init__(self, msgq, traffic_pane, **kwds):
|
||||
threading.Thread.__init__ (self, **kwds)
|
||||
self.setDaemon(1)
|
||||
self.msgq = msgq
|
||||
self.traffic_pane = traffic_pane
|
||||
self.keep_running = True
|
||||
self.start()
|
||||
|
||||
def run(self):
|
||||
while(self.keep_running):
|
||||
msg = self.msgq.delete_head()
|
||||
pickled_dict = msg.to_string()
|
||||
attrs = pickle.loads(pickled_dict)
|
||||
self.traffic_pane.update(attrs)
|
||||
|
||||
|
||||
# Start the receiver
|
||||
#
|
||||
if '__main__' == __name__:
|
||||
|
|
|
@ -114,18 +114,18 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
fm_demod = gr.quadrature_demod_cf(fm_demod_gain)
|
||||
# symbol filter
|
||||
symbol_decim = 1
|
||||
#symbol_coeffs = gr.firdes.root_raised_cosine(1.0, channel_rate, self.symbol_rate, 0.2, 500)
|
||||
# symbol_coeffs = gr.firdes.root_raised_cosine(1.0, channel_rate, self.symbol_rate, 0.2, 500)
|
||||
# boxcar coefficients for "integrate and dump" filter
|
||||
samples_per_symbol = channel_rate // self.symbol_rate
|
||||
symbol_coeffs = (1.0/samples_per_symbol,)*samples_per_symbol
|
||||
symbol_filter = gr.fir_filter_fff(symbol_decim, symbol_coeffs)
|
||||
|
||||
# C4FM demodulator
|
||||
autotuneq = gr.msg_queue(2)
|
||||
self.demod_watcher = demod_watcher(autotuneq, self.adjust_channel_offset)
|
||||
demod_fsk4 = fsk4.demod_ff(autotuneq, channel_rate, self.symbol_rate)
|
||||
# for now no audio output
|
||||
sink = gr.null_sink(gr.sizeof_float)
|
||||
# audio output
|
||||
sink = audio.sink(8000, "plughw:0,0") # ToDo: get device from prefs
|
||||
|
||||
# connect it all up
|
||||
self.__connect([[source, self.channel_filter, self.squelch, fm_demod, symbol_filter, demod_fsk4, self.p25_decoder, sink],
|
||||
[source, self.spectrum],
|
||||
|
@ -224,19 +224,22 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
|
||||
# setup the notebook
|
||||
self.notebook = wx.Notebook(self.panel)
|
||||
self.vbox.Add(self.notebook, 1, wx.EXPAND)
|
||||
self.vbox.Add(self.notebook, 1, wx.EXPAND)
|
||||
# add spectrum scope
|
||||
self.spectrum = fftsink2.fft_sink_c(self.notebook, fft_size=512, fft_rate=2, average=True, peak_hold=True)
|
||||
self.spectrum = fftsink2.fft_sink_c(self.notebook, fft_size=512, average=True, peak_hold=True)
|
||||
self.spectrum_plotter = self.spectrum.win.plot
|
||||
## self.spectrum_plotter = self.spectrum.win.plotter # opengl
|
||||
self.spectrum_plotter.Bind(wx.EVT_LEFT_DOWN, self._on_spectrum_left_click)
|
||||
self.notebook.AddPage(self.spectrum.win, "RF Spectrum")
|
||||
# add C4FM scope
|
||||
self.signal_scope = scopesink2.scope_sink_f(self.notebook, sample_rate = self.channel_rate, v_scale=5, t_scale=0.001)
|
||||
self.signal_plotter = self.signal_scope.win.graph
|
||||
## self.signal_plotter = self.signal_scope.win
|
||||
self.notebook.AddPage(self.signal_scope.win, "C4FM Signal")
|
||||
# add symbol scope
|
||||
self.symbol_scope = scopesink2.scope_sink_f(self.notebook, frame_decim=1, sample_rate=self.symbol_rate, v_scale=1, t_scale=0.05)
|
||||
self.symbol_plotter = self.symbol_scope.win.graph
|
||||
## self.symbol_plotter = self.symbol_scope.win
|
||||
self.symbol_scope.win.set_format_plus()
|
||||
self.notebook.AddPage(self.symbol_scope.win, "Demodulated Symbols")
|
||||
# Traffic snapshot
|
||||
|
@ -260,9 +263,12 @@ class p25_rx_block (stdgui2.std_top_block):
|
|||
#
|
||||
def __set_rx_from_file(self, filename, capture_rate):
|
||||
file = gr.file_source(gr.sizeof_gr_complex, filename, True)
|
||||
throttle = gr.throttle(gr.sizeof_gr_complex, capture_rate)
|
||||
self.__connect([[file, throttle]])
|
||||
self.__build_graph(throttle, capture_rate)
|
||||
if 0:
|
||||
throttle = gr.throttle(gr.sizeof_gr_complex, capture_rate)
|
||||
self.__connect([[file, throttle]])
|
||||
self.__build_graph(throttle, capture_rate)
|
||||
else:
|
||||
self.__build_graph(file, capture_rate)
|
||||
|
||||
# setup to rx from USRP
|
||||
#
|
||||
|
@ -695,6 +701,7 @@ class decode_watcher(threading.Thread):
|
|||
msg = self.msgq.delete_head()
|
||||
pickled_dict = msg.to_string()
|
||||
attrs = pickle.loads(pickled_dict)
|
||||
print attrs # diagnostix!
|
||||
self.traffic_pane.update(attrs)
|
||||
|
||||
|
||||
|
|
Reference in New Issue