summaryrefslogtreecommitdiff
path: root/gsm-tvoid/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'gsm-tvoid/src/lib')
-rw-r--r--gsm-tvoid/src/lib/.deps/gsm.Plo1
-rw-r--r--gsm-tvoid/src/lib/.deps/gsm_burst.Plo1
-rw-r--r--gsm-tvoid/src/lib/.deps/gsm_burst_cf.Plo1
-rw-r--r--gsm-tvoid/src/lib/.deps/gsm_burst_ff.Plo1
-rw-r--r--gsm-tvoid/src/lib/Makefile704
-rwxr-xr-xgsm-tvoid/src/lib/Makefile.am77
-rw-r--r--gsm-tvoid/src/lib/Makefile.in704
-rwxr-xr-xgsm-tvoid/src/lib/gsm.i102
-rwxr-xr-xgsm-tvoid/src/lib/gsm_burst.cc559
-rwxr-xr-xgsm-tvoid/src/lib/gsm_burst.h147
-rwxr-xr-xgsm-tvoid/src/lib/gsm_burst_cf.cc140
-rwxr-xr-xgsm-tvoid/src/lib/gsm_burst_cf.h41
-rwxr-xr-xgsm-tvoid/src/lib/gsm_burst_ff.cc106
-rwxr-xr-xgsm-tvoid/src/lib/gsm_burst_ff.h31
-rwxr-xr-xgsm-tvoid/src/lib/gsm_constants.h126
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 */
personal git repositories of Harald Welte. Your mileage may vary