diff options
Diffstat (limited to 'gsm-tvoid/src/lib')
-rw-r--r-- | gsm-tvoid/src/lib/.deps/gsm.Plo | 1 | ||||
-rw-r--r-- | gsm-tvoid/src/lib/.deps/gsm_burst.Plo | 1 | ||||
-rw-r--r-- | gsm-tvoid/src/lib/.deps/gsm_burst_cf.Plo | 1 | ||||
-rw-r--r-- | gsm-tvoid/src/lib/.deps/gsm_burst_ff.Plo | 1 | ||||
-rw-r--r-- | gsm-tvoid/src/lib/Makefile | 704 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/Makefile.am | 77 | ||||
-rw-r--r-- | gsm-tvoid/src/lib/Makefile.in | 704 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm.i | 102 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm_burst.cc | 559 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm_burst.h | 147 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm_burst_cf.cc | 140 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm_burst_cf.h | 41 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm_burst_ff.cc | 106 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm_burst_ff.h | 31 | ||||
-rwxr-xr-x | gsm-tvoid/src/lib/gsm_constants.h | 126 |
15 files changed, 2741 insertions, 0 deletions
diff --git a/gsm-tvoid/src/lib/.deps/gsm.Plo b/gsm-tvoid/src/lib/.deps/gsm.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/gsm-tvoid/src/lib/.deps/gsm.Plo @@ -0,0 +1 @@ +# dummy diff --git a/gsm-tvoid/src/lib/.deps/gsm_burst.Plo b/gsm-tvoid/src/lib/.deps/gsm_burst.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/gsm-tvoid/src/lib/.deps/gsm_burst.Plo @@ -0,0 +1 @@ +# dummy diff --git a/gsm-tvoid/src/lib/.deps/gsm_burst_cf.Plo b/gsm-tvoid/src/lib/.deps/gsm_burst_cf.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/gsm-tvoid/src/lib/.deps/gsm_burst_cf.Plo @@ -0,0 +1 @@ +# dummy diff --git a/gsm-tvoid/src/lib/.deps/gsm_burst_ff.Plo b/gsm-tvoid/src/lib/.deps/gsm_burst_ff.Plo new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/gsm-tvoid/src/lib/.deps/gsm_burst_ff.Plo @@ -0,0 +1 @@ +# dummy diff --git a/gsm-tvoid/src/lib/Makefile b/gsm-tvoid/src/lib/Makefile new file mode 100644 index 0000000..f19bfa1 --- /dev/null +++ b/gsm-tvoid/src/lib/Makefile @@ -0,0 +1,704 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# src/lib/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + + + +# -*- Makefile -*- +# +# Copyright 2004,2006 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + + +srcdir = . +top_srcdir = ../.. + +pkgdatadir = $(datadir)/gr-gsm +pkglibdir = $(libdir)/gr-gsm +pkgincludedir = $(includedir)/gr-gsm +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /bin/install -c +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 = i686-pc-cygwin +host_triplet = i686-pc-cygwin +target_triplet = i686-pc-cygwin +DIST_COMMON = $(grinclude_HEADERS) $(ourpython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +subdir = src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/gr_as.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) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +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 = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ + "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" +ourlibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__DEPENDENCIES_1 = +_gsm_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__gsm_la_OBJECTS = gsm.lo gsm_burst.lo gsm_burst_ff.lo \ + gsm_burst_cf.lo +_gsm_la_OBJECTS = $(am__gsm_la_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(_gsm_la_SOURCES) +DIST_SOURCES = $(_gsm_la_SOURCES) +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/fire/Desktop/tvoid/gr-gsm-0.0.2/missing --run aclocal-1.9 +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/fire/Desktop/tvoid/gr-gsm-0.0.2/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/fire/Desktop/tvoid/gr-gsm-0.0.2/missing --run autoconf +AUTOHEADER = ${SHELL} /home/fire/Desktop/tvoid/gr-gsm-0.0.2/missing --run autoheader +AUTOMAKE = ${SHELL} /home/fire/Desktop/tvoid/gr-gsm-0.0.2/missing --run automake-1.9 +AWK = gawk +BOOST_CFLAGS = -I/usr/local/include/boost-1_33_1 +CC = gcc +CCAS = $(CC) +CCASFLAGS = $(CFLAGS) +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 -Wall -Woverloaded-virtual +CXX_FOR_BUILD = g++ +CYGPATH_W = cygpath -w +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +ECHO = echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = .exe +F77 = +FFLAGS = +GNURADIO_CORE_CFLAGS = -I/usr/local/include/gnuradio +GNURADIO_CORE_INCLUDEDIR = /usr/local/include/gnuradio +GNURADIO_CORE_LIBS = -L/usr/local/lib -lgnuradio-core -lfftw3f -lm +GREP = /bin/grep +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBS = -L/usr/local/lib -lgnuradio-core -lfftw3f -lm +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LN_S = ln -s +LTLIBOBJS = +MAKEINFO = ${SHELL} /home/fire/Desktop/tvoid/gr-gsm-0.0.2/missing --run makeinfo +NO_UNDEFINED = -no-undefined +OBJDUMP = objdump +OBJEXT = o +OMNITHREAD_NT_FALSE = +OMNITHREAD_NT_TRUE = # +OMNITHREAD_POSIX_FALSE = # +OMNITHREAD_POSIX_TRUE = +PACKAGE = gr-gsm +PACKAGE_BUGREPORT = +PACKAGE_NAME = +PACKAGE_STRING = +PACKAGE_TARNAME = +PACKAGE_VERSION = +PATH_SEPARATOR = : +PKG_CONFIG = /bin/pkg-config +PTHREAD_CC = gcc +PTHREAD_CFLAGS = +PTHREAD_LIBS = +PYTHON = /bin/python +PYTHON_CPPFLAGS = -I/usr/include/python2.4 +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_LDFLAGS = -L/usr/lib/python2.4/config -lpython2.4 +PYTHON_PLATFORM = cygwin +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.4 +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/sh +STD_DEFINES_AND_INCLUDES = -I/usr/local/include/gnuradio -I/usr/local/include/boost-1_33_1 +STRIP = strip +SWIG = /bin/swig -c++ +SWIG_PYTHON_CPPFLAGS = -I/usr/include/python2.4 +SWIG_PYTHON_LIB = -lswigpy +SWIG_PYTHON_OPT = -python +VERSION = 0.0.1 +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_F77 = +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-cygwin +build_alias = +build_cpu = i686 +build_os = cygwin +build_vendor = pc +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i686-pc-cygwin +host_alias = +host_cpu = i686 +host_os = cygwin +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = /home/fire/Desktop/tvoid/gr-gsm-0.0.2/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = mkdir -p -- +oldincludedir = /usr/include +pdfdir = ${docdir} +pkgpyexecdir = ${pyexecdir}/gr-gsm +pkgpythondir = ${pythondir}/gr-gsm +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.4/site-packages +pythondir = ${prefix}/lib/python2.4/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target = i686-pc-cygwin +target_alias = +target_cpu = i686 +target_os = cygwin +target_vendor = pc + +# 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) + +# Install this stuff so that it ends up as the gnuradio.gsm module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +ourpythondir = $(grpythondir) +ourlibdir = $(grpyexecdir) +INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) +SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(SWIGGRFLAGS) +ALL_IFILES = \ + $(LOCAL_IFILES) \ + $(NON_LOCAL_IFILES) + +NON_LOCAL_IFILES = \ + $(GNURADIO_CORE_INCLUDEDIR)/swig/gnuradio.i + +LOCAL_IFILES = \ + gsm.i + + +# These files are built by SWIG. The first is the C++ glue. +# The second is the python wrapper that loads the _gsm shared library +# and knows how to call our extensions. +BUILT_SOURCES = \ + gsm.cc \ + gsm.py + + +# This gets gsm.py installed in the right place +ourpython_PYTHON = \ + gsm.py + +ourlib_LTLIBRARIES = _gsm.la + +# These are the source files that go into the shared library +_gsm_la_SOURCES = \ + gsm.cc \ + gsm_burst.cc \ + gsm_burst_ff.cc \ + gsm_burst_cf.cc + + +# magic flags +_gsm_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version + +# link the library against some comon swig runtime code and the +# c++ standard library +_gsm_la_LIBADD = \ + $(PYTHON_LDFLAGS) \ + -lstdc++ + + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gsm_burst.h \ + gsm_burst_ff.h \ + gsm_burst_cf.h \ + gsm_constants.h + + +# These swig headers get installed in ${prefix}/include/gnuradio/swig +swiginclude_HEADERS = \ + $(LOCAL_IFILES) + +MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" + @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-ourlibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + done + +clean-ourlibLTLIBRARIES: + -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) + @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_gsm.la: $(_gsm_la_OBJECTS) $(_gsm_la_DEPENDENCIES) + $(CXXLINK) -rpath $(ourlibdir) $(_gsm_la_LDFLAGS) $(_gsm_la_OBJECTS) $(_gsm_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/gsm.Plo +include ./$(DEPDIR)/gsm_burst.Plo +include ./$(DEPDIR)/gsm_burst_cf.Plo +include ./$(DEPDIR)/gsm_burst_ff.Plo + +.cc.o: + if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: + if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: + if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done +install-swigincludeHEADERS: $(swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ + $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +uninstall-swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + 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; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + 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; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + 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; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +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: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ + install-ourpythonPYTHON install-swigincludeHEADERS + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ + uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ + uninstall-swigincludeHEADERS + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-ourlibLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am \ + install-grincludeHEADERS install-info install-info-am \ + install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ + uninstall-info-am uninstall-ourlibLTLIBRARIES \ + uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS + + +gsm.cc gsm.py: $(LOCAL_IFILES) $(ALL_IFILES) + $(SWIG) $(SWIGPYTHONARGS) -module gsm -o gsm.cc $(LOCAL_IFILES) + +# Don't distribute output of swig +dist-hook: + @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done + @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# 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: diff --git a/gsm-tvoid/src/lib/Makefile.am b/gsm-tvoid/src/lib/Makefile.am new file mode 100755 index 0000000..481c588 --- /dev/null +++ b/gsm-tvoid/src/lib/Makefile.am @@ -0,0 +1,77 @@ +include $(top_srcdir)/Makefile.common + +# Install this stuff so that it ends up as the gnuradio.gsm module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio + +ourpythondir = $(grpythondir) +ourlibdir = $(grpyexecdir) + +INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) + +SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(SWIGGRFLAGS) + +ALL_IFILES = \ + $(LOCAL_IFILES) \ + $(NON_LOCAL_IFILES) + +NON_LOCAL_IFILES = \ + $(GNURADIO_CORE_INCLUDEDIR)/swig/gnuradio.i + + +LOCAL_IFILES = \ + gsm.i + +# These files are built by SWIG. The first is the C++ glue. +# The second is the python wrapper that loads the _gsm shared library +# and knows how to call our extensions. + +BUILT_SOURCES = \ + gsm.cc \ + gsm.py + +# This gets gsm.py installed in the right place +ourpython_PYTHON = \ + gsm.py + +ourlib_LTLIBRARIES = _gsm.la + +# These are the source files that go into the shared library +_gsm_la_SOURCES = \ + gsm.cc \ + gsm_burst.cc \ + gsm_burst_ff.cc \ + gsm_burst_cf.cc + + +# magic flags +_gsm_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version + +# link the library against some comon swig runtime code and the +# c++ standard library +_gsm_la_LIBADD = \ + $(PYTHON_LDFLAGS) \ + -lstdc++ + +gsm.cc gsm.py: $(LOCAL_IFILES) $(ALL_IFILES) + $(SWIG) $(SWIGPYTHONARGS) -module gsm -o gsm.cc $(LOCAL_IFILES) + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gsm_burst.h \ + gsm_burst_ff.h \ + gsm_burst_cf.h \ + gsm_constants.h + + +# These swig headers get installed in ${prefix}/include/gnuradio/swig +swiginclude_HEADERS = \ + $(LOCAL_IFILES) + + +MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc + +# Don't distribute output of swig +dist-hook: + @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done + @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done diff --git a/gsm-tvoid/src/lib/Makefile.in b/gsm-tvoid/src/lib/Makefile.in new file mode 100644 index 0000000..90eba93 --- /dev/null +++ b/gsm-tvoid/src/lib/Makefile.in @@ -0,0 +1,704 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + +@SET_MAKE@ + +# -*- Makefile -*- +# +# Copyright 2004,2006 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +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 = @build@ +host_triplet = @host@ +target_triplet = @target@ +DIST_COMMON = $(grinclude_HEADERS) $(ourpython_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(swiginclude_HEADERS) $(top_srcdir)/Makefile.common +subdir = src/lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/acx_pthread.m4 \ + $(top_srcdir)/config/gr_as.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) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +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 = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" \ + "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)" +ourlibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(ourlib_LTLIBRARIES) +am__DEPENDENCIES_1 = +_gsm_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__gsm_la_OBJECTS = gsm.lo gsm_burst.lo gsm_burst_ff.lo \ + gsm_burst_cf.lo +_gsm_la_OBJECTS = $(am__gsm_la_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(_gsm_la_SOURCES) +DIST_SOURCES = $(_gsm_la_SOURCES) +ourpythonPYTHON_INSTALL = $(INSTALL_DATA) +py_compile = $(top_srcdir)/py-compile +grincludeHEADERS_INSTALL = $(INSTALL_HEADER) +swigincludeHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(grinclude_HEADERS) $(swiginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BOOST_CFLAGS = @BOOST_CFLAGS@ +CC = @CC@ +CCAS = @CCAS@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GNURADIO_CORE_CFLAGS = @GNURADIO_CORE_CFLAGS@ +GNURADIO_CORE_INCLUDEDIR = @GNURADIO_CORE_INCLUDEDIR@ +GNURADIO_CORE_LIBS = @GNURADIO_CORE_LIBS@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +NO_UNDEFINED = @NO_UNDEFINED@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OMNITHREAD_NT_FALSE = @OMNITHREAD_NT_FALSE@ +OMNITHREAD_NT_TRUE = @OMNITHREAD_NT_TRUE@ +OMNITHREAD_POSIX_FALSE = @OMNITHREAD_POSIX_FALSE@ +OMNITHREAD_POSIX_TRUE = @OMNITHREAD_POSIX_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STD_DEFINES_AND_INCLUDES = @STD_DEFINES_AND_INCLUDES@ +STRIP = @STRIP@ +SWIG = @SWIG@ +SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ +SWIG_PYTHON_LIB = @SWIG_PYTHON_LIB@ +SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ + +# 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) + +# Install this stuff so that it ends up as the gnuradio.gsm module +# This usually ends up at: +# ${prefix}/lib/python${python_version}/site-packages/gnuradio +ourpythondir = $(grpythondir) +ourlibdir = $(grpyexecdir) +INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) +SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(SWIGGRFLAGS) +ALL_IFILES = \ + $(LOCAL_IFILES) \ + $(NON_LOCAL_IFILES) + +NON_LOCAL_IFILES = \ + $(GNURADIO_CORE_INCLUDEDIR)/swig/gnuradio.i + +LOCAL_IFILES = \ + gsm.i + + +# These files are built by SWIG. The first is the C++ glue. +# The second is the python wrapper that loads the _gsm shared library +# and knows how to call our extensions. +BUILT_SOURCES = \ + gsm.cc \ + gsm.py + + +# This gets gsm.py installed in the right place +ourpython_PYTHON = \ + gsm.py + +ourlib_LTLIBRARIES = _gsm.la + +# These are the source files that go into the shared library +_gsm_la_SOURCES = \ + gsm.cc \ + gsm_burst.cc \ + gsm_burst_ff.cc \ + gsm_burst_cf.cc + + +# magic flags +_gsm_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version + +# link the library against some comon swig runtime code and the +# c++ standard library +_gsm_la_LIBADD = \ + $(PYTHON_LDFLAGS) \ + -lstdc++ + + +# These headers get installed in ${prefix}/include/gnuradio +grinclude_HEADERS = \ + gsm_burst.h \ + gsm_burst_ff.h \ + gsm_burst_cf.h \ + gsm_constants.h + + +# These swig headers get installed in ${prefix}/include/gnuradio/swig +swiginclude_HEADERS = \ + $(LOCAL_IFILES) + +MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cc .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-ourlibLTLIBRARIES: $(ourlib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(ourlibdir)" || $(mkdir_p) "$(DESTDIR)$(ourlibdir)" + @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(ourlibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(ourlibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(ourlibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-ourlibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(ourlibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(ourlibdir)/$$p"; \ + done + +clean-ourlibLTLIBRARIES: + -test -z "$(ourlib_LTLIBRARIES)" || rm -f $(ourlib_LTLIBRARIES) + @list='$(ourlib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_gsm.la: $(_gsm_la_OBJECTS) $(_gsm_la_DEPENDENCIES) + $(CXXLINK) -rpath $(ourlibdir) $(_gsm_la_LDFLAGS) $(_gsm_la_OBJECTS) $(_gsm_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_burst.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_burst_cf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsm_burst_ff.Plo@am__quote@ + +.cc.o: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +install-ourpythonPYTHON: $(ourpython_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(ourpythondir)" || $(mkdir_p) "$(DESTDIR)$(ourpythondir)" + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + f=$(am__strip_dir) \ + dlist="$$dlist $$f"; \ + echo " $(ourpythonPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(ourpythondir)/$$f'"; \ + $(ourpythonPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(ourpythondir)/$$f"; \ + else :; fi; \ + done; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(ourpythondir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(ourpythondir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-ourpythonPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(ourpython_PYTHON)'; dlist=''; for p in $$list; do\ + f=$(am__strip_dir) \ + rm -f "$(DESTDIR)$(ourpythondir)/$$f"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}c"; \ + rm -f "$(DESTDIR)$(ourpythondir)/$${f}o"; \ + done +install-grincludeHEADERS: $(grinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(grincludedir)" || $(mkdir_p) "$(DESTDIR)$(grincludedir)" + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(grincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(grincludedir)/$$f'"; \ + $(grincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(grincludedir)/$$f"; \ + done + +uninstall-grincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(grinclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(grincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(grincludedir)/$$f"; \ + done +install-swigincludeHEADERS: $(swiginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(swigincludedir)" || $(mkdir_p) "$(DESTDIR)$(swigincludedir)" + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(swigincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(swigincludedir)/$$f'"; \ + $(swigincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(swigincludedir)/$$f"; \ + done + +uninstall-swigincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(swiginclude_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(swigincludedir)/$$f'"; \ + rm -f "$(DESTDIR)$(swigincludedir)/$$f"; \ + 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; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + 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; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + 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; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(mkdir_p) $(distdir)/../.. + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(ourlibdir)" "$(DESTDIR)$(ourpythondir)" "$(DESTDIR)$(grincludedir)" "$(DESTDIR)$(swigincludedir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +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: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-ourlibLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-grincludeHEADERS install-ourlibLTLIBRARIES \ + install-ourpythonPYTHON install-swigincludeHEADERS + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-grincludeHEADERS uninstall-info-am \ + uninstall-ourlibLTLIBRARIES uninstall-ourpythonPYTHON \ + uninstall-swigincludeHEADERS + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-ourlibLTLIBRARIES ctags dist-hook \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am \ + install-grincludeHEADERS install-info install-info-am \ + install-man install-ourlibLTLIBRARIES install-ourpythonPYTHON \ + install-strip install-swigincludeHEADERS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-grincludeHEADERS \ + uninstall-info-am uninstall-ourlibLTLIBRARIES \ + uninstall-ourpythonPYTHON uninstall-swigincludeHEADERS + + +gsm.cc gsm.py: $(LOCAL_IFILES) $(ALL_IFILES) + $(SWIG) $(SWIGPYTHONARGS) -module gsm -o gsm.cc $(LOCAL_IFILES) + +# Don't distribute output of swig +dist-hook: + @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done + @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done +# 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: diff --git a/gsm-tvoid/src/lib/gsm.i b/gsm-tvoid/src/lib/gsm.i new file mode 100755 index 0000000..cb4db43 --- /dev/null +++ b/gsm-tvoid/src/lib/gsm.i @@ -0,0 +1,102 @@ +/* -*- c++ -*- */ + +%feature("autodoc", "1"); // generate python docstrings + +%include "exception.i" +%import "gnuradio.i" // the common stuff + +%{ +#include "gnuradio_swig_bug_workaround.h" // mandatory bug fix +#include "gsm_constants.h" +#include "gsm_burst.h" +#include "gsm_burst_ff.h" +#include "gsm_burst_cf.h" +#include <stdexcept> + +%} + +// ---------------------------------------------------------------- + +#define PRINT_NOTHING 0x00000000 +#define PRINT_EVERYTHING 0x7FFFFFFF //7 for SWIG overflow check work around +#define PRINT_BITS 0x00000001 +#define PRINT_ALL_BITS 0x00000002 +#define PRINT_CORR_BITS 0x00000004 + +#define PRINT_ALL_TYPES 0x00000FF0 +#define PRINT_KNOWN 0x00000008 +#define PRINT_UNKNOWN 0x00000010 +#define PRINT_TS0 0x00000020 +#define PRINT_FCCH 0x00000040 +#define PRINT_SCH 0x00000080 +#define PRINT_DUMMY 0x00000100 +#define PRINT_NORMAL 0x00000200 + + +//Timing/clock options +#define QB_NONE 0x00000000 +#define QB_QUARTER 0x00000001 //only for internal clocked versions +#define QB_FULL04 0x00000003 +#define QB_MASK 0x0000000F + +#define CLK_CORR_TRACK 0x00000010 //adjust timing based on correlation offsets + +//EQ options +enum EQ_TYPE { + EQ_NONE, + EQ_FIXED_LINEAR, + EQ_ADAPTIVE_LINEAR, + EQ_FIXED_DFE, + EQ_ADAPTIVE_DFE, + EQ_VITERBI +}; + +class gsm_burst +{ +public: + ~gsm_burst (); + + unsigned long d_clock_options; + unsigned long d_print_options; + EQ_TYPE d_equalizer_type; + + //stats + long d_sync_loss_count; + long d_fcch_count; + long d_part_sch_count; + long d_sch_count; + long d_normal_count; + long d_dummy_count; + long d_unknown_count; + + int sync_state(); + float freq_offset(); + +protected: + gsm_burst(); +}; + +GR_SWIG_BLOCK_MAGIC(gsm,burst_ff); + +gsm_burst_ff_sptr gsm_make_burst_ff (); + +class gsm_burst_ff : public gr_block, public gsm_burst +{ +//public: +private: + gsm_burst_ff (); +}; + + +GR_SWIG_BLOCK_MAGIC(gsm,burst_cf); + +gsm_burst_cf_sptr gsm_make_burst_cf (float); + +class gsm_burst_cf : public gr_block, public gsm_burst +{ +//public: +private: + gsm_burst_cf (float); +}; + + diff --git a/gsm-tvoid/src/lib/gsm_burst.cc b/gsm-tvoid/src/lib/gsm_burst.cc new file mode 100755 index 0000000..f367de2 --- /dev/null +++ b/gsm-tvoid/src/lib/gsm_burst.cc @@ -0,0 +1,559 @@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gr_math.h> +#include <stdio.h> +#include <math.h> +#include <memory.h> +#include <gsm_burst.h> +#include <assert.h> + +gsm_burst::gsm_burst (void) : + d_bbuf_pos(0), + d_burst_start(MAX_CORR_DIST), + d_sample_count(0), + d_last_burst_s_count(0), + d_corr_pattern(0), + d_corr_pat_size(0), + d_corr_max(0.0), + d_corr_maxpos(0), + d_corr_center(0), + d_sync_state(WAIT_FCCH), + d_ts(0), + d_burst_count(0), + d_freq_offset(0.0), + d_sync_loss_count(0), + d_fcch_count(0), + d_part_sch_count(0), + d_sch_count(0), + d_normal_count(0), + d_dummy_count(0), + d_unknown_count(0), + d_clock_options(DEFAULT_CLK_OPTS), + d_print_options(0), + d_equalizer_type(EQ_FIXED_DFE) + +{ + +// M_PI = M_PI; //4.0 * atan(1.0); + + //encode sync bits + float tsync[N_SYNC_BITS]; + + for (int i=0; i < N_SYNC_BITS; i++) { + tsync[i] = 2.0*SYNC_BITS[i] - 1.0; + } + + fprintf(stdout," Sync: "); + print_bits(tsync,N_SYNC_BITS); + fprintf(stdout,"\n"); + + diff_encode(tsync,corr_sync,N_SYNC_BITS); + fprintf(stdout,"DSync: "); + print_bits(corr_sync,N_SYNC_BITS); + fprintf(stdout,"\n\n"); + + + for (int i=0; i < 10; i++) { + for (int j=0; j < N_TRAIN_BITS; j++) { + tsync[j] = 2.0*train_seq[i][j] - 1.0; + } + diff_encode(tsync,corr_train_seq[i],N_TRAIN_BITS); + + fprintf(stdout,"TSC%d: ",i); + print_bits(corr_train_seq[i],N_TRAIN_BITS); + fprintf(stdout,"\n"); + } + +} + +gsm_burst::~gsm_burst () +{ +} + +void gsm_burst::diff_encode(const float *in,float *out,int length,float lastbit) { + + for (int i=0; i < length; i++) { + out[i] = in[i] * lastbit; + lastbit=in[i]; + + } +} + +void gsm_burst::diff_decode(const float *in,float *out,int length,float lastbit) { + + for (int i=0; i < length; i++) { + out[i] = in[i] * lastbit; + lastbit = out [i]; + } +} + +void gsm_burst::print_bits(const float *data,int length) +{ + assert(data); + assert(length >= 0); + + for (int i=0; i < length; i++) + data[i] < 0 ? fprintf(stdout,"+") : fprintf(stdout,"."); + +} + +void gsm_burst::print_burst(void) +{ + int bursts_since_sch; + + int print = 0; + + //fprintf(stdout,"p=%8.8X ", d_print_options); + + if ( PRINT_EVERYTHING == d_print_options ) + print = 1; + else if ( (!d_ts) && (d_print_options & PRINT_TS0) ) + print = 1; + else if ( (DUMMY == d_burst_type) && (d_print_options & PRINT_DUMMY) ) + print = 1; + else if ( (NORMAL == d_burst_type) && (d_print_options & PRINT_NORMAL) ) + print = 1; + else if ( (SCH == d_burst_type) && (d_print_options & PRINT_SCH) ) + print = 1; + else if ( (FCCH == d_burst_type) && (d_print_options & PRINT_FCCH) ) + print = 1; + else if ( (UNKNOWN == d_burst_type) && (d_print_options & PRINT_UNKNOWN) ) + print = 1; + + if ( print && (d_print_options & PRINT_BITS) ) { + if (d_print_options & PRINT_ALL_BITS) + print_bits(d_burst_buffer,BBUF_SIZE); + else + print_bits(d_burst_buffer + d_burst_start,USEFUL_BITS); + + fprintf(stdout," "); + } + + if (print) { + + fprintf(stdout,"%d/%d/%+d/%lu/%lu ", + d_sync_state, + d_ts, + d_burst_start - MAX_CORR_DIST, + d_sample_count, + d_sample_count - d_last_burst_s_count); + + switch (d_burst_type) { + case FCCH: + fprintf(stdout,"[FCCH] foff:%g cnt:%lu",d_freq_offset,d_fcch_count); + break; + case PARTIAL_SCH: + bursts_since_sch = d_burst_count - d_last_sch; + + fprintf(stdout,"[P-SCH] cor:%.2f last:%d cnt: %lu", + d_corr_max,bursts_since_sch,d_sch_count); + break; + case SCH: + bursts_since_sch = d_burst_count - d_last_sch; + + fprintf(stdout,"[SCH] cor:%.2f last:%d cnt: %lu", + d_corr_max,bursts_since_sch,d_sch_count); + break; + case DUMMY: + fprintf(stdout,"[DUMMY] cor:%.2f",d_corr_max); + break; + case ACCESS: + fprintf(stdout,"[ACCESS]"); //We don't detect this yet + break; + case NORMAL: + fprintf(stdout,"[NORM] clr:%d cor:%.2f",d_color_code,d_corr_max); + break; + case UNKNOWN: + fprintf(stdout,"[?]"); + break; + default: + fprintf(stdout,"[oops! default]"); + break; + } + + fprintf(stdout,"\n"); + + + //print the correlation pattern for visual inspection + if ( (UNKNOWN != d_burst_type) && + (d_sync_state > WAIT_SCH_ALIGN) && + (d_print_options & PRINT_CORR_BITS) ) + { + + int pat_indent; + + if (d_print_options & PRINT_ALL_BITS) + pat_indent = d_corr_center + d_corr_maxpos; + else + pat_indent = d_corr_center - MAX_CORR_DIST; //useful bits will already be offset + + for (int i = 0; i < pat_indent; i++) + fprintf(stdout," "); + + fprintf(stdout," "); //extra space for skipped bit + print_bits(d_corr_pattern+1,d_corr_pat_size-1); //skip first bit (diff encoding) + + fprintf(stdout,"\t\toffset:%d, max: %.2f \n",d_corr_maxpos,d_corr_max); + } + + } +} + +void gsm_burst::shift_burst(int shift_bits) +{ + //fprintf(stdout,"sft:%d\n",shift_bits); + + assert(shift_bits >= 0); + assert(shift_bits < BBUF_SIZE ); + + float *p_src = d_burst_buffer + shift_bits; + float *p_dst = d_burst_buffer; + int num = BBUF_SIZE - shift_bits; + + memmove(p_dst,p_src,num * sizeof(float)); //need memmove because of overlap + + //adjust the buffer positions + d_bbuf_pos -= shift_bits; + + assert(d_bbuf_pos >= 0); +} + + +//Calculate frequency offset of an FCCH burst from the mean phase difference +//FCCH should be a constant frequency and equivalently a constant phase +//increment (pi/2) per sample. Calculate the frequency offset by the difference +//of the mean phase from pi/2. +void gsm_burst::calc_freq_offset(void) +{ + int start = d_burst_start + 10; + int end = d_burst_start + USEFUL_BITS - 10; + + float sum = 0.0; + for (int j = start; j <= end; j++) { + sum += d_burst_buffer[j]; + } + float mean = sum / ((float)USEFUL_BITS - 20.0); + + float p_off = mean - (M_PI / 2); + d_freq_offset = p_off * 1625000.0 / (12.0 * M_PI); + +} + +// This will look for a series of positive phase differences comprising +// a FCCH burst. When we find one, we calculate the frequency offset and +// adjust the burst timing so that it will be at least coarsely aligned +// for SCH detection. +// +// TODO: Adjust start pos on long hits +// very large hit counts may indicate an unmodulated carrier. +BURST_TYPE gsm_burst::get_fcch_burst(void) +{ + int hit_count = 0; + int miss_count = 0; + int start_pos = -1; + + for (int i=0; i < BBUF_SIZE; i++) { + if (d_burst_buffer[i] > 0) { + if ( ! hit_count++ ) + start_pos = i; + } else { + if (hit_count >= FCCH_HITS_NEEDED) { + break; + } else if ( ++miss_count > FCCH_MAX_MISSES ) { + start_pos = -1; + hit_count = miss_count = 0; + } + } + } + + //Do we have a match? + if ( start_pos >= 0 ) { + //Is it within range? (we know it's long enough then too) + if ( start_pos < 2*MAX_CORR_DIST ) { + d_burst_start = start_pos; + d_bbuf_pos = 0; //load buffer from start + return FCCH; + + } else { + //TODO: don't shift a tiny amount + shift_burst(start_pos - MAX_CORR_DIST); + } + } else { + //Didn't find anything + d_burst_start = MAX_CORR_DIST; + d_bbuf_pos = 0; //load buffer from start + } + + return UNKNOWN; +} + + +void gsm_burst::equalize(void) +{ + float last = 0.0; + + switch ( d_equalizer_type ) { + case EQ_FIXED_LINEAR: + //TODO: should filter w/ inverse freq response + //this is just for giggles + for (int i = 1; i < BBUF_SIZE - 1; i++) { + d_burst_buffer[i] = - 0.4 * d_burst_buffer[i-1] + 1.1 * d_burst_buffer[i] - 0.4 * d_burst_buffer[i+1]; + } + break; + case EQ_FIXED_DFE: + //TODO: allow coefficients to be options? + for (int i = 0; i < BBUF_SIZE; i++) { + d_burst_buffer[i] -= 0.4 * last; + d_burst_buffer[i] > 0.0 ? last = M_PI/2 : last = -M_PI/2; + } + break; + default: + fprintf(stdout,"!EQ"); + case EQ_NONE: + break; + } +} + +//TODO: optimize by working incrementally out from center and returning when a provided threshold is reached +float gsm_burst::correlate_pattern(const float *pattern,const int pat_size,const int center,const int distance) +{ + float corr; + + //need to save these for later printing, etc + //TODO: not much need for function params when we have the member vars + d_corr_pattern = pattern; + d_corr_pat_size = pat_size; + d_corr_max = 0.0; + d_corr_maxpos = 0; + d_corr_center = center; + + for (int j=-distance;j<=distance;j++) { + corr = 0.0; + for (int i = 1; i < pat_size; i++) { //Start a 1 to skip first bit due to diff encoding + //d_corr[j+distance] += d_burst_buffer[center+i+j] * pattern[i]; + corr += SIGNUM(d_burst_buffer[center+i+j]) * pattern[i]; //binary corr/sliced + } + corr /= pat_size - 1; //normalize, -1 for skipped first bit + if (corr > d_corr_max) { + d_corr_max = corr; + d_corr_maxpos = j; + } + } + + return d_corr_max; +} + +BURST_TYPE gsm_burst::get_sch_burst(void) +{ + BURST_TYPE type = UNKNOWN; + int tpos = 0; //default d_bbuf_pos + + equalize(); + +// if (!d_ts) { // wait for TS0 + + //correlate over a range to detect and align on the sync pattern + correlate_pattern(corr_sync,N_SYNC_BITS,MAX_CORR_DIST+SYNC_POS,20); + + if (d_corr_max > SCH_CORR_THRESHOLD) { + d_burst_start += d_corr_maxpos; + + //It's possible that we will corelate far enough out that some burst data will be lost. + // In this case we should be in aligned state, and wait until next SCH to decode it + if (d_burst_start < 0) { + //We've missed the beginning of the data, wait for the next SCH + //TODO: verify timing in this case + type = PARTIAL_SCH; + } else if (d_burst_start > 2 * MAX_CORR_DIST) { + //The rest of our data is still coming, get it... + shift_burst(d_burst_start - MAX_CORR_DIST); + d_burst_start = MAX_CORR_DIST; + tpos = d_bbuf_pos; + } else { + type = SCH; + } + } else { + d_burst_start = MAX_CORR_DIST; + } + +// } else { +// d_burst_start = MAX_CORR_DIST; +// } + + d_bbuf_pos = tpos; + + return type; +} + +BURST_TYPE gsm_burst::get_norm_burst(void) +{ + int eq = 0; + BURST_TYPE type = UNKNOWN; + + + if (!d_ts) { + // Don't equalize before checking FCCH + if ( FCCH_CORR_THRESHOLD < correlate_pattern(corr_train_seq[TS_FCCH],N_TRAIN_BITS,MAX_CORR_DIST+TRAIN_POS,0) ) { + type = FCCH; + d_burst_start = MAX_CORR_DIST; + d_corr_maxpos = 0; //we don't want to affect timing + + } else { + equalize(); + eq=1; + + //TODO: check CTS & COMPACT SYNC + if (SCH_CORR_THRESHOLD < correlate_pattern(corr_sync,N_SYNC_BITS,MAX_CORR_DIST+SYNC_POS,MAX_CORR_DIST) ) + type = SCH; + } + } + + if (UNKNOWN == type) { //no matches yet + if (!eq) equalize(); + + //Match dummy sequence + if ( NORM_CORR_THRESHOLD < correlate_pattern(corr_train_seq[TS_DUMMY],N_TRAIN_BITS,MAX_CORR_DIST+TRAIN_POS,MAX_CORR_DIST) ) { + type = DUMMY; + + } else { + //Match normal training sequences + //TODO: start with current color code + for (int i=0; i < 8; i++) { + if ( NORM_CORR_THRESHOLD < correlate_pattern(corr_train_seq[i],N_TRAIN_BITS,MAX_CORR_DIST+TRAIN_POS,MAX_CORR_DIST) ) { + type = NORMAL; + d_color_code = i; + break; + } + } + } + } + + if ( UNKNOWN == type ) { + d_burst_start = MAX_CORR_DIST; + + } else { + d_burst_start += d_corr_maxpos; + } + + return type; +} + + +int gsm_burst::get_burst(void) +{ + //TODO: should we output data while looking for FCCH? Maybe an option. + int got_burst=1; //except for the WAIT_FCCH case we always have output + d_burst_type = UNKNOWN; //default + + //begin with the assumption the the burst will be in the correct position + d_burst_start = MAX_CORR_DIST; + + //process the burst + switch (d_sync_state) { + case WAIT_FCCH: + d_ts = 0; + + if ( FCCH == ( d_burst_type = get_fcch_burst()) ) { + d_sync_state = WAIT_SCH_ALIGN; + d_bbuf_pos = 0; //load buffer from start + + } else { + got_burst = 0; + } + + break; + + case WAIT_SCH_ALIGN: + d_burst_type = get_sch_burst(); + + switch ( d_burst_type ) { + case PARTIAL_SCH: + d_sync_state = WAIT_SCH; + break; + case SCH: + d_sync_state = SYNCHRONIZED; + break; + default: + break; + } + + break; + + case WAIT_SCH: //TODO: check this case + case SYNCHRONIZED: + d_burst_type = get_norm_burst(); + d_bbuf_pos = 0; //load buffer from start + + break; + } + + //Update stats + switch (d_burst_type) { + case FCCH: + if (SYNCHRONIZED == d_sync_state) + d_burst_count++; + else + d_burst_count = 0; + + d_fcch_count++; + calc_freq_offset(); + d_ts = 0; + break; + case PARTIAL_SCH: + d_burst_count++; + d_part_sch_count++; + d_last_sch = d_burst_count; + d_ts = 0; //TODO: check this + break; + case SCH: + d_burst_count++; + d_sch_count++; + d_last_sch = d_burst_count; + d_sync_state = SYNCHRONIZED; //handle WAIT_SCH + d_ts = 0; + break; + case NORMAL: + d_burst_count++; + d_normal_count++; + break; + case DUMMY: + d_burst_count++; + d_dummy_count++; + break; + default: + case UNKNOWN: + if (SYNCHRONIZED == d_sync_state) { + d_burst_count++; + d_unknown_count++; + } + break; + } + + if (got_burst) { + //print info + print_burst(); + + //Adjust the buffer write position to align on MAX_CORR_DIST + if ( d_clock_options & CLK_CORR_TRACK ) + d_bbuf_pos += MAX_CORR_DIST - d_burst_start; + } + + //Check for loss of sync + int bursts_since_sch = d_burst_count - d_last_sch; + if (bursts_since_sch > MAX_SYNC_WAIT) { + d_sync_loss_count++; + d_sync_state = WAIT_FCCH; + d_last_sch = 0; + d_burst_count = 0; + fprintf(stdout,"====== SYNC LOST (%ld) ======\n",d_sync_loss_count); //TODO: move this to the print routine + } + + d_ts = (++d_ts)%8; //next TS + + return got_burst; +} + + diff --git a/gsm-tvoid/src/lib/gsm_burst.h b/gsm-tvoid/src/lib/gsm_burst.h new file mode 100755 index 0000000..ce727fe --- /dev/null +++ b/gsm-tvoid/src/lib/gsm_burst.h @@ -0,0 +1,147 @@ +#ifndef INCLUDED_GSM_BURST_H +#define INCLUDED_GSM_BURST_H + +//TODO: rename to gsm_burst_receiver ? use gsm_burst as encapsulation of an actual burst, incl bbuf, etc. +// need to determine what is a decoder vs. burst function. E.g. calc_freq_offset +// everything but I/O & clocking & sync_state? +// What about handling complex&diff&bin data? + +#include <gsm_constants.h> +#include <gr_math.h> + +//Console printing options +#define PRINT_NOTHING 0x00000000 +#define PRINT_EVERYTHING 0x7FFFFFFF //7 for SWIG overflow check work around +#define PRINT_BITS 0x00000001 +#define PRINT_ALL_BITS 0x00000002 +#define PRINT_CORR_BITS 0x00000004 + +#define PRINT_ALL_TYPES 0x00000FF0 +#define PRINT_KNOWN 0x00000008 +#define PRINT_UNKNOWN 0x00000010 +#define PRINT_TS0 0x00000020 +#define PRINT_FCCH 0x00000040 +#define PRINT_SCH 0x00000080 +#define PRINT_DUMMY 0x00000100 +#define PRINT_NORMAL 0x00000200 + +//Timing/clock options +#define QB_NONE 0x00000000 +#define QB_QUARTER 0x00000001 //only for internal clocked versions +#define QB_FULL04 0x00000003 +#define QB_MASK 0x0000000F + +#define CLK_CORR_TRACK 0x00000010 //adjust timing based on correlation offsets + +#define DEFAULT_CLK_OPTS ( QB_QUARTER | CLK_CORR_TRACK ) + +#define SIGNUM(x) ((x>0)-(x<0)) + +#define BBUF_SIZE TS_BITS + +// Center bursts in the TS, splitting the guard period +// +// +--+--+---...-----+--...---+----...----+--+--+ +// G T D1 TS D2 T G +// Start ^ + +#define MAX_SYNC_WAIT 176 //Bursts between SCH before reverting to WAIT_FCCH. (TODO: 88 should be max?) + +#define MAX_CORR_DIST 7 // 4 + 3 = 1/2 GUARD + TAIL +#define SCH_CORR_THRESHOLD 0.80 +#define FCCH_CORR_THRESHOLD 0.90 +#define NORM_CORR_THRESHOLD 0.80 + +#define FCCH_HITS_NEEDED (USEFUL_BITS - 4) +#define FCCH_MAX_MISSES 1 + +enum EQ_TYPE { + EQ_NONE, + EQ_FIXED_LINEAR, + EQ_ADAPTIVE_LINEAR, + EQ_FIXED_DFE, + EQ_ADAPTIVE_DFE, + EQ_VITERBI +}; + +class gsm_burst; + +class gsm_burst +{ +protected: + + gsm_burst(); + + //Burst Buffer: Storage for burst data + float d_burst_buffer[BBUF_SIZE]; + int d_bbuf_pos; //write position + int d_burst_start; //first useful bit (beginning of output) + unsigned long d_sample_count; //sample count at end (TODO:beginning) of BBUF (bit count if external clock) + unsigned long d_last_burst_s_count; //sample count from previous burst + + ///// Sync/training sequence correlation + //TODO: need all sync patterns + float corr_sync[N_SYNC_BITS]; //encoded sync bits for correlation + float corr_train_seq[10][N_TRAIN_BITS]; +// float d_corr[50]; + const float *d_corr_pattern; + int d_corr_pat_size; + float d_corr_max; + int d_corr_maxpos; + int d_corr_center; + + ///// Burst information + SYNC_STATE d_sync_state; + BURST_TYPE d_burst_type; + unsigned d_ts; //timeslot 0-7 + unsigned long d_burst_count; //Bursts received starting w/ initial FCCH reset after lost sync + unsigned long d_last_sch; //Burst count of last SCH + float d_freq_offset; + int d_color_code; + + //////// Methods + int get_burst(void); + BURST_TYPE get_fcch_burst(void); + BURST_TYPE get_sch_burst(void); + BURST_TYPE get_norm_burst(void); + + void shift_burst(int); + void calc_freq_offset(void); + void equalize(void); + float correlate_pattern(const float *,const int,const int,const int); + + void print_bits(const float *data,int length); + void print_burst(void); + + void diff_encode(const float *in,float *out,int length,float lastbit = 1.0); + void diff_decode(const float *in,float *out,int length,float lastbit = 1.0); + + +public: + ~gsm_burst (); + + ////// General Stats + //TODO: Maybe there should be a burst_stats class? + long d_sync_loss_count; + long d_fcch_count; + long d_part_sch_count; + long d_sch_count; + long d_normal_count; + long d_dummy_count; + long d_unknown_count; + + ////// Options + unsigned long d_clock_options; + unsigned long d_print_options; + EQ_TYPE d_equalizer_type; + + int sync_state() { return d_sync_state;} + float freq_offset() {return d_freq_offset;} + + //Methods + //TODO: reset state (e.g. channel change) + //void reset(void); +}; + + +#endif /* INCLUDED_GSM_BURST_H */ diff --git a/gsm-tvoid/src/lib/gsm_burst_cf.cc b/gsm-tvoid/src/lib/gsm_burst_cf.cc new file mode 100755 index 0000000..8954b3f --- /dev/null +++ b/gsm-tvoid/src/lib/gsm_burst_cf.cc @@ -0,0 +1,140 @@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gsm_burst_cf.h> +#include <gr_io_signature.h> +#include <gr_math.h> +#include <stdio.h> +#include <gri_mmse_fir_interpolator_cc.h> + +gsm_burst_cf_sptr gsm_make_burst_cf (float sample_rate) +{ + return gsm_burst_cf_sptr (new gsm_burst_cf (sample_rate)); +} + +static const int MIN_IN = 1; // minimum number of input streams +static const int MAX_IN = 1; // maximum number of input streams +static const int MIN_OUT = 1; // minimum number of output streams +static const int MAX_OUT = 1; // maximum number of output streams + +gsm_burst_cf::gsm_burst_cf (float sample_rate) : + gr_block ( "burst_cf", + gr_make_io_signature (MIN_IN, MAX_IN, sizeof (gr_complex)), + gr_make_io_signature (MIN_OUT, MAX_OUT, USEFUL_BITS * sizeof (float))), + d_clock_counter(0.0), + d_last_sample(0.0,0.0), + d_interp(new gri_mmse_fir_interpolator_cc()) + +{ + + //clocking parameters + d_sample_interval = 1.0 / sample_rate; + d_relative_sample_rate = sample_rate / GSM_SYMBOL_RATE; + + fprintf(stderr,"Sample interval : %e\n",d_sample_interval); + fprintf(stderr,"Relative sample rate : %g\n",d_relative_sample_rate); + + set_history(4); + +} + +gsm_burst_cf::~gsm_burst_cf () +{ + delete d_interp; +} + +void gsm_burst_cf::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size (); + for (unsigned i = 0; i < ninputs; i++) + ninput_items_required[i] = noutput_items * (int)ceil(d_relative_sample_rate) * BBUF_SIZE + history(); +} + + +int gsm_burst_cf::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const gr_complex *in = (const gr_complex *) input_items[0]; + float *out = (float *) output_items[0]; + + int ii=0; + int rval = 0; //default to no output + + int ninput = ninput_items[0]; + //fprintf(stderr,"#i=%d/#o=%d",n_input,noutput_items); + + int ni = ninput - d_interp->ntaps(); // interpolator need -4/+3 samples NTAPS = 8 + + while (( rval < noutput_items) && ( ii < ni ) ) { + //clock symbols + //TODO: this is very basic and can be improved. Need tracking... + //TODO: use burst_start offsets as timing feedback + //TODO: save complex samples for Viterbi EQ + if ( d_clock_counter >= GSM_SYMBOL_PERIOD) { + + d_clock_counter -= GSM_SYMBOL_PERIOD; //reset clock for next sample, keep the remainder + + float mu = 1.0 - d_clock_counter / GSM_SYMBOL_PERIOD; + gr_complex sample = d_interp->interpolate (&in[ii], mu); //FIXME: this seems noisy, make sure it is being used correctly + + gr_complex conjprod = sample * conj(d_last_sample); + float diff_angle = gr_fast_atan2f(imag(conjprod), real(conjprod)); + + d_last_sample = sample; + + assert(d_bbuf_pos <= BBUF_SIZE ); + + if (d_bbuf_pos >= 0) //could be negative offset from burst alignment. TODO: perhaps better just to add some padding to the buffer + d_burst_buffer[d_bbuf_pos] = diff_angle; + + d_bbuf_pos++; + + if ( d_bbuf_pos >= BBUF_SIZE ) { + + if (get_burst()) { + //found a burst, send to output + //ensure that output data is in range + int b = d_burst_start; + if (b < 0) + b = 0; + else if (b >= 2 * MAX_CORR_DIST) + b = 2 * MAX_CORR_DIST - 1; + + memcpy(out+rval*USEFUL_BITS, d_burst_buffer + b, USEFUL_BITS*sizeof(float)); + rval++; + + switch ( d_clock_options & QB_MASK ) { + case QB_QUARTER: //extra 1/4 bit each burst + d_clock_counter -= GSM_SYMBOL_PERIOD / 4.0; + break; + case QB_FULL04: //extra bit on timeslot 0 & 4 + if (!(d_ts%4)) + d_clock_counter -= GSM_SYMBOL_PERIOD; + break; + case QB_NONE: //don't adjust for quarter bits at all + default: + break; + } + + d_last_burst_s_count = d_sample_count; + + //fprintf(stderr,"clock: %f, pos: %d\n",d_clock_counter,d_bbuf_pos); + } + } + } + + d_clock_counter += d_sample_interval; + d_sample_count++; + ii++; + } + + //fprintf(stderr,"/ii=%d/rval=%d\n",ii,rval); + + consume_each (ii); + + return rval; +} diff --git a/gsm-tvoid/src/lib/gsm_burst_cf.h b/gsm-tvoid/src/lib/gsm_burst_cf.h new file mode 100755 index 0000000..33f61f6 --- /dev/null +++ b/gsm-tvoid/src/lib/gsm_burst_cf.h @@ -0,0 +1,41 @@ +#ifndef INCLUDED_GSM_BURST_CF_H +#define INCLUDED_GSM_BURST_CF_H + +#include <gr_block.h> +#include <gsm_burst.h> + +class gsm_burst_cf; + +typedef boost::shared_ptr<gsm_burst_cf> gsm_burst_cf_sptr; + +gsm_burst_cf_sptr gsm_make_burst_cf(float); + +class gri_mmse_fir_interpolator_cc; + +class gsm_burst_cf : public gr_block, public gsm_burst +{ +private: + + friend gsm_burst_cf_sptr gsm_make_burst_cf(float); + gsm_burst_cf(float); + + //clocking parameters + float d_relative_sample_rate; + double d_sample_interval; + double d_clock_counter; + gr_complex d_last_sample; + + gri_mmse_fir_interpolator_cc *d_interp; //sub-sample interpolator from GR + +public: + ~gsm_burst_cf (); + + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work ( int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GSM_BURST_CF_H */ diff --git a/gsm-tvoid/src/lib/gsm_burst_ff.cc b/gsm-tvoid/src/lib/gsm_burst_ff.cc new file mode 100755 index 0000000..e31b3a9 --- /dev/null +++ b/gsm-tvoid/src/lib/gsm_burst_ff.cc @@ -0,0 +1,106 @@ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gsm_burst_ff.h> +#include <gr_io_signature.h> +#include <gr_math.h> +#include <stdio.h> +#include <gri_mmse_fir_interpolator_cc.h> + +gsm_burst_ff_sptr gsm_make_burst_ff (void) +{ + return gsm_burst_ff_sptr (new gsm_burst_ff ); +} + +static const int MIN_IN = 1; // minimum number of input streams +static const int MAX_IN = 1; // maximum number of input streams +static const int MIN_OUT = 1; // minimum number of output streams +static const int MAX_OUT = 1; // maximum number of output streams + +gsm_burst_ff::gsm_burst_ff () : + gr_block ( "burst_ff", + gr_make_io_signature (MIN_IN, MAX_IN, sizeof (float)), + gr_make_io_signature (MIN_OUT, MAX_OUT, USEFUL_BITS * sizeof (float))) +{ + + set_history(1); + +} + +gsm_burst_ff::~gsm_burst_ff () +{ +} + +void gsm_burst_ff::forecast (int noutput_items, gr_vector_int &ninput_items_required) +{ + unsigned ninputs = ninput_items_required.size (); + for (unsigned i = 0; i < ninputs; i++) + ninput_items_required[i] = noutput_items * BBUF_SIZE + history(); +} + + +int gsm_burst_ff::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) +{ + const float *in = (const float *) input_items[0]; + float *out = (float *) output_items[0]; + + int ii=0; + int rval = 0; //default to no output + + int n_input = ninput_items[0]; + //fprintf(stderr,"#i=%d/#o=%d",n_input,noutput_items); + + while (( rval < noutput_items) && ( ii < n_input ) ) { + + assert(d_bbuf_pos <= BBUF_SIZE ); + + if (d_bbuf_pos >= 0) //could have been offset negative. TODO: perhaps better just to add some slack to the buffer + d_burst_buffer[d_bbuf_pos] = in[ii]; + + d_bbuf_pos++; + + if ( d_bbuf_pos >= BBUF_SIZE ) { + + if (get_burst()) { + //found a burst, send to output + + //ensure that output data is in range + int b = d_burst_start; + if (b < 0) + b = 0; + else if (b >= 2 * MAX_CORR_DIST) + b = 2 * MAX_CORR_DIST - 1; + + memcpy(out+rval*USEFUL_BITS, d_burst_buffer + b, USEFUL_BITS*sizeof(float)); + rval++; + + switch ( d_clock_options & QB_MASK ) { + case QB_QUARTER: //Can't do this in the FF version + case QB_FULL04: //extra bit on timeslot 0 & 4 + if (!(d_ts%4)) + d_bbuf_pos--; + break; + case QB_NONE: //don't adjust for quarter bits at all + default: + break; + } + + d_last_burst_s_count = d_sample_count; + + } + } + d_sample_count++; + ii++; + } + + //fprintf(stderr,"/ii=%d/rval=%d\n",ii,rval); + + consume_each (ii); + + return rval; +} diff --git a/gsm-tvoid/src/lib/gsm_burst_ff.h b/gsm-tvoid/src/lib/gsm_burst_ff.h new file mode 100755 index 0000000..c9a05f4 --- /dev/null +++ b/gsm-tvoid/src/lib/gsm_burst_ff.h @@ -0,0 +1,31 @@ +#ifndef INCLUDED_GSM_BURST_FF_H +#define INCLUDED_GSM_BURST_FF_H + +#include <gr_block.h> +#include <gsm_burst.h> + +class gsm_burst_ff; + +typedef boost::shared_ptr<gsm_burst_ff> gsm_burst_ff_sptr; + +gsm_burst_ff_sptr gsm_make_burst_ff(void); + +class gsm_burst_ff : public gr_block, public gsm_burst +{ +private: + + friend gsm_burst_ff_sptr gsm_make_burst_ff(void); + gsm_burst_ff(); + +public: + ~gsm_burst_ff (); + + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work ( int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); +}; + +#endif /* INCLUDED_GSM_BURST_FF_H */ diff --git a/gsm-tvoid/src/lib/gsm_constants.h b/gsm-tvoid/src/lib/gsm_constants.h new file mode 100755 index 0000000..3cc771e --- /dev/null +++ b/gsm-tvoid/src/lib/gsm_constants.h @@ -0,0 +1,126 @@ +#ifndef INCLUDED_GSM_CONSTANTS_H
+#define INCLUDED_GSM_CONSTANTS_H
+
+#define GSM_SYMBOL_RATE (1625000.0/6.0) //symbols per second
+#define GSM_SYMBOL_PERIOD (1.0/GSM_SYMBOL_RATE) //seconds per symbol
+
+//Burst timing
+#define TAIL_BITS 3
+#define GUARD_BITS 8 //8.25
+#define DATA_BITS 58 //size of 1 data block in normal burst
+#define N_TRAIN_BITS 26
+#define N_SYNC_BITS 64
+#define USEFUL_BITS 142 //(2*DATA_BITS + N_TRAIN_BITS )
+#define FCCH_BITS USEFUL_BITS
+
+#define TS_BITS (TAIL_BITS+USEFUL_BITS+TAIL_BITS+GUARD_BITS) //a full TS
+#define TS_PER_FRAME 8
+#define FRAME_BITS (TS_PER_FRAME * TS_BITS + 2) // +2 for extra 8*0.25 guard bits
+#define FCCH_POS TAIL_BITS
+#define SYNC_POS 39
+#define TRAIN_POS 58
+
+static const float gaussian_impulse[] = { 0.03455935, 0.39947558, 0.90323022, 0.39947558, 0.03455935};
+
+enum SYNC_STATE {
+ WAIT_FCCH,
+ WAIT_SCH_ALIGN,
+ WAIT_SCH,
+ SYNCHRONIZED
+};
+
+enum BURST_TYPE {
+ UNKNOWN,
+ FCCH,
+ PARTIAL_SCH, //successful correlation, but missing data
+ SCH,
+ CTS_SCH,
+ COMPACT_SCH,
+ NORMAL,
+ DUMMY,
+ ACCESS
+};
+
+
+static const int SYNC_BITS[] = {
+ 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+ 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1,
+ 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1
+};
+
+static const int CTS_SYNC[] = {
+ 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1,
+ 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1
+};
+
+static const int COMPACT_SYNC[] = {
+ 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1,
+ 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0,
+ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0
+};
+
+// Sync : .+...++.+..+++.++++++.++++++....++.+..+.+.+++.+.+...+..++++..+..
+// Diff Encoded Sync: .++..+.+++.+..++.....++.....+...+.+++.+++++..+++++..++.+...+.++.
+
+#define TSC0 0
+#define TSC1 1
+#define TSC2 2
+#define TSC3 3
+#define TSC4 4
+#define TSC5 5
+#define TSC6 6
+#define TSC7 7
+#define TS_FCCH 8
+#define TS_DUMMY 9
+
+static const unsigned char train_seq[10][N_TRAIN_BITS] = {
+ {0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
+ {0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
+ {0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0},
+ {0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0},
+ {0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1},
+ {0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0},
+ {1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1},
+ {1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0},
+ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, //#9 FCCH ;-)
+ {0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1} // DUMMY
+};
+
+static const unsigned char dummy_burst[] = {
+ 1, 1, 1, 1, 1, 0, 1, 1, 0, 1,
+ 1, 1, 0, 1, 1, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 1, 0, 0, 1, 1,
+ 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 0, 0,
+
+ 0, 1, 1, 1, 0, 0, 0, 1, 0, 1,
+ 1, 1, 0, 0, 0, 1, 0, 1, 1, 1,
+ 0, 0, 0, 1, 0, 1,
+
+ 0, 1, 1, 1, 0, 1, 0, 0, 1, 0,
+ 1, 0, 0, 0, 1, 1, 0, 0, 1, 1,
+ 0, 0, 1, 1, 1, 0, 0, 1, 1, 1,
+ 1, 0, 1, 0, 0, 1, 1, 1, 1, 1,
+ 0, 0, 0, 1, 0, 0, 1, 0, 1, 1,
+ 1, 1, 1, 0, 1, 0, 1, 0
+};
+
+//Diff encoded train_seq
+//TSC0: +.++.+++..+...++..++.+++..
+//TSC1: +.+++.++..++...+..++.+++..
+//TSC2: +++...+..++..+++.++...+..+
+//TSC3: +++..+...++.+++..++..+...+
+//TSC4: +..+.++++..+.++....+.++++.
+//TSC5: +++.+..++++.+....++.+..+++
+//TSC6: .+++.+....++.+..++++.+....
+//TSC7: ...++...+..++.+++..++...+.
+//TSC8: ..........................
+//TSC9: ++..+..+++..+..+++..+..+++
+
+
+#endif /* INCLUDED_GSM_CONSTANTS_H */
|