commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r7904 - in gnuradio/trunk: . config gr-msdd6000 gr-msd


From: jcorgan
Subject: [Commit-gnuradio] r7904 - in gnuradio/trunk: . config gr-msdd6000 gr-msdd6000/doc gr-msdd6000/src gr-msdd6000/src/lib gr-msdd6000/src/python
Date: Fri, 29 Feb 2008 12:26:50 -0700 (MST)

Author: jcorgan
Date: 2008-02-29 12:26:49 -0700 (Fri, 29 Feb 2008)
New Revision: 7904

Added:
   gnuradio/trunk/config/grc_gr_msdd6000.m4
   gnuradio/trunk/gr-msdd6000/
   gnuradio/trunk/gr-msdd6000/AUTHORS
   gnuradio/trunk/gr-msdd6000/Makefile.am
   gnuradio/trunk/gr-msdd6000/doc/
   gnuradio/trunk/gr-msdd6000/doc/Softronics_Ltd_msdd6000_BlockDiagram.pdf
   gnuradio/trunk/gr-msdd6000/src/
   gnuradio/trunk/gr-msdd6000/src/Makefile.am
   gnuradio/trunk/gr-msdd6000/src/lib/
   gnuradio/trunk/gr-msdd6000/src/lib/Makefile.am
   gnuradio/trunk/gr-msdd6000/src/lib/msdd.i
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_buffer_copy_behaviors.h
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.cc
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.h
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.cc
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.h
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.cc
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.h
   gnuradio/trunk/gr-msdd6000/src/python/
   gnuradio/trunk/gr-msdd6000/src/python/Makefile.am
   gnuradio/trunk/gr-msdd6000/src/python/qa_msdd6000.py
   gnuradio/trunk/gr-msdd6000/src/python/run_tests.in
   gnuradio/trunk/gr-msdd6000/src/python/test_tcp.py
   gnuradio/trunk/gr-msdd6000/src/python/test_udp.py
Removed:
   gnuradio/trunk/gr-msdd6000/AUTHORS
   gnuradio/trunk/gr-msdd6000/Makefile.am
   gnuradio/trunk/gr-msdd6000/doc/Softronics_Ltd_msdd6000_BlockDiagram.pdf
   gnuradio/trunk/gr-msdd6000/src/
   gnuradio/trunk/gr-msdd6000/src/Makefile.am
   gnuradio/trunk/gr-msdd6000/src/lib/
   gnuradio/trunk/gr-msdd6000/src/lib/Makefile.am
   gnuradio/trunk/gr-msdd6000/src/lib/msdd.i
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_buffer_copy_behaviors.h
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.cc
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.h
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.cc
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.h
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.cc
   gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.h
   gnuradio/trunk/gr-msdd6000/src/python/Makefile.am
   gnuradio/trunk/gr-msdd6000/src/python/run_tests.in
Modified:
   gnuradio/trunk/AUTHORS
   gnuradio/trunk/config/Makefile.am
   gnuradio/trunk/configure.ac
Log:
Merged r7857:7898 from n4hy/msddLTS into trunk, with modification.  Adds 
gr-msdd6000 component, providing GNU Radio source and sink support for the 
Softronics Ltd. MSDD 6000 receiver.

Modified: gnuradio/trunk/AUTHORS
===================================================================
--- gnuradio/trunk/AUTHORS      2008-02-29 19:02:04 UTC (rev 7903)
+++ gnuradio/trunk/AUTHORS      2008-02-29 19:26:49 UTC (rev 7904)
@@ -12,3 +12,4 @@
 Johnathan Corgan <address@hidden>  Build system, ongoing stuff, release manager
 Bdale Garbee <address@hidden>           Debian release packages
 Tom Rondeau <address@hidden>          Mostly digital waveforms and a little 
bit of trouble
+Nate Goergen (UMD Student)

Modified: gnuradio/trunk/config/Makefile.am
===================================================================
--- gnuradio/trunk/config/Makefile.am   2008-02-29 19:02:04 UTC (rev 7903)
+++ gnuradio/trunk/config/Makefile.am   2008-02-29 19:26:49 UTC (rev 7904)
@@ -57,6 +57,7 @@
        gr_check_usrp.m4 \
        grc_pmt.m4 \
        grc_usrp.m4 \
+       grc_gr_msdd6000.m4 \
        gr_doxygen.m4 \
        gr_fortran.m4 \
        gr_gprof.m4 \

Copied: gnuradio/trunk/config/grc_gr_msdd6000.m4 (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/config/grc_gr_msdd6000.m4)
===================================================================
--- gnuradio/trunk/config/grc_gr_msdd6000.m4                            (rev 0)
+++ gnuradio/trunk/config/grc_gr_msdd6000.m4    2008-02-29 19:26:49 UTC (rev 
7904)
@@ -0,0 +1,38 @@
+dnl Copyright 2001,2002,2003,2004,2005,2006,2008 Free Software Foundation, Inc.
+dnl 
+dnl This file is part of GNU Radio
+dnl 
+dnl GNU Radio is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl 
+dnl GNU Radio is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl 
+dnl You should have received a copy of the GNU General Public License
+dnl along with GNU Radio; see the file COPYING.  If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street,
+dnl Boston, MA 02110-1301, USA.
+
+AC_DEFUN([GRC_GR_MSDD6000],[
+    GRC_ENABLE([gr-msdd6000])
+
+    AC_CONFIG_FILES([\
+       gr-msdd6000/Makefile \
+       gr-msdd6000/src/Makefile \
+       gr-msdd6000/src/lib/Makefile \
+       gr-msdd6000/src/python/Makefile
+       gr-msdd6000/src/python/run_tests
+    ])
+
+    dnl Don't do gr-msdd6000 if gnuradio-core skipped
+    GRC_CHECK_DEPENDENCY(gr-msdd6000, gnuradio-core)
+
+    GRC_BUILD_CONDITIONAL([gr-msdd6000],[
+        dnl run_tests is created from run_tests.in.  Make it executable.
+       AC_CONFIG_COMMANDS([run_tests_msdd6000], [chmod +x 
gr-msdd6000/src/python/run_tests])
+    ])
+])

Modified: gnuradio/trunk/configure.ac
===================================================================
--- gnuradio/trunk/configure.ac 2008-02-29 19:02:04 UTC (rev 7903)
+++ gnuradio/trunk/configure.ac 2008-02-29 19:26:49 UTC (rev 7904)
@@ -249,6 +249,7 @@
 GRC_MBLOCK                     dnl this must come after GRC_PMT
 GRC_USRP
 GRC_GR_USRP                    dnl this must come after GRC_USRP
+GRC_GR_MSDD6000
 GRC_GR_AUDIO_ALSA
 GRC_GR_AUDIO_JACK
 GRC_GR_AUDIO_OSS

Copied: gnuradio/trunk/gr-msdd6000 (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000)


Property changes on: gnuradio/trunk/gr-msdd6000
___________________________________________________________________
Name: svn:ignore
   + Makefile
Makefile.in


Deleted: gnuradio/trunk/gr-msdd6000/AUTHORS

Copied: gnuradio/trunk/gr-msdd6000/AUTHORS (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/AUTHORS)
===================================================================
--- gnuradio/trunk/gr-msdd6000/AUTHORS                          (rev 0)
+++ gnuradio/trunk/gr-msdd6000/AUTHORS  2008-02-29 19:26:49 UTC (rev 7904)
@@ -0,0 +1,3 @@
+Charles Clancy
+Nate Goergen
+n4hy (Bob McGwier)

Deleted: gnuradio/trunk/gr-msdd6000/Makefile.am

Copied: gnuradio/trunk/gr-msdd6000/Makefile.am (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/Makefile.am)
===================================================================
--- gnuradio/trunk/gr-msdd6000/Makefile.am                              (rev 0)
+++ gnuradio/trunk/gr-msdd6000/Makefile.am      2008-02-29 19:26:49 UTC (rev 
7904)
@@ -0,0 +1,25 @@
+#
+# Copyright 2008 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.
+# 
+
+include $(top_srcdir)/Makefile.common
+
+SUBDIRS = src
+

Copied: gnuradio/trunk/gr-msdd6000/doc (from rev 7898, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/doc)

Deleted: gnuradio/trunk/gr-msdd6000/doc/Softronics_Ltd_msdd6000_BlockDiagram.pdf

Copied: gnuradio/trunk/gr-msdd6000/doc/Softronics_Ltd_msdd6000_BlockDiagram.pdf 
(from rev 7898, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/doc/Softronics_Ltd_msdd6000_BlockDiagram.pdf)
===================================================================
--- gnuradio/trunk/gr-msdd6000/doc/Softronics_Ltd_msdd6000_BlockDiagram.pdf     
                        (rev 0)
+++ gnuradio/trunk/gr-msdd6000/doc/Softronics_Ltd_msdd6000_BlockDiagram.pdf     
2008-02-29 19:26:49 UTC (rev 7904)
@@ -0,0 +1,318 @@
+%PDF-1.3
+%�쏢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x��\ُ��q�H�\N��K�G�5�x>�}�y��7�O�؊��
+����_U���Β\��������꫺������,�m
�4p~����y����p�����৿n��)���1����_Sź%6��BU��`� 
f��v�������O;w�������-������o������j�n�s�ju[R!��o�)u��l����/ٸ��"�=����Hm�+$H��W
+yl��㚒G_     ��̸mIy�����ʨ%�X�3      ��e"���G���� �
�����j<����&,�aҷ�f�5�Rv����W������]���~~��L���;��俐��u)����)���QkE5=4��޾�?�����.6]]3c�SŸW7��EM�<����f$c��Z��m����&[3�)�Qk$�cO��^r�d<ǒ�J�#-⟡�?���*Z7��&v���s�\�9�C��ak����H^l�Sv.WJ��/0j�R��ω�<��
��s��K+aU�j�$��I����X�[5��EO|K����o�b�6.q}d���V,k^Q����M$�hݒr`=�2��Ξ�t���ݑyo�U��b���l,Ai8z���y�2��б�#5KS����`���3D���ՑAg��d��1�7DЕc�Lj�d�Hvb�j�-4��f�M��l�-3ۑd��X��Ÿ{Ӓ�7m�iy_��T&��=�)�a���ֹ�-���
+FVcY�����<address@hidden|�%V�������)���� =�$M_Tq�������T�>/�w?��_m+�P %�   
c�4�d>]L�E���Ҧ;�v)�)�mV#��d��uxk�l������K���qJ����2�e!�H�uEP(+���I-rv���`��l��[<�����`���1�0��!���H2��kn��d+e=�������':�J�+�4�fp��Z�/7X�.��`ѪZT�~�?���p��c�iZ=T��C���"��
 ���jy'���%�N^�qE,�����z�fuT����tE�ͿJuٟv�
:^\�7J)�M�BAr&��_�������о~hiVs��G���:x�V���8��~;N�=0�j�fu-�"�H��k���
+�M�B���m�������dQ9�>�E�_+��Y*|!�*�
P�&�l}Ɇ.�e��m�A���6D��Γ������!�"b|�L>�V(}�l�>���4�ZUJFZ_0�2����g��Mk�M��M���ٰ<�=�<�$�f�'TRB�7$�Rt���I��
 G65    �c��ceM�b��T�N}�F�����2������d���S���E'���  �_�nܒI�p�����x��&c
+v���[��<�J�p���>�ۅ,����dq�:�`#      r���U�p��]��h����ΞjW�ܙ��I�   
���%�q�8�S�諏��X�A[2��������=s��>�i)���s}��Ҡ�)address@hidden)���~�no�8���y����Ρ�h��eڈRZ����ʐ2NVN:���e�d�`($���i��I�Q#�O;�9S��Y��`૤��A�V'\��6G��a�NFd�I���xƍ�M���h��3ɥ0���>�p
�{�*2�4�p��Ǔ1ס3�V��I���U�fZ�Qĉ��eBk���v𤸍�4��a6j�
+D��%���UJAY�Іz�rea��k���mq.��:b�<�
address@hidden|�e���R[G�a/address@hidden:E3���R˶:�-d_4�%�[.���Q1�x�S.&�b7��[,�^u�
#o?��:�Xv�K��7G>�`��CQhp]dWZp򬷬+k����ad���
l�Fޜ�qh�N��$ьƭ-�0b?B����4�%����7w'LE�,A�ܻY~�5v�<k�9&Y�$ā\�V�i�w���Z�$��1�ݧ/Ӵ��{p���ú����?k-���y�p������5���2�F��+Z��sH�+{���:address@hidden:���i2���Mxϫ���/%�db��1IY�䊈N�0\d]t�m�T_vv�w&�\����,ڍ���.&��7�ºِ����"��pqֳ���4_(f\h�Qk
   1Cb��1(        j-;;�K%���0Cȣb�aR=}�h�5����%�54�K��*v�     
X����I���1 %���w�������lo�[�����c��R�o���A�ߘ���&:�rj^N��D
address@hidden)�9�u�zpvT<J��l�_
+dWi���ֆ&z�5$4��Ý8FW��a�ΒZi��y"7����������r��)mq�`����S7HϹaddress@hidden
��Z��ԯ��R���)���\u웮�6t��J�rM��چ�9     1��ؓ��tM��N"��dxԁ��J���
�Xb7�#�d5�;�,�V��B>e�s��w��V`�Ɓ���"��&qI�ӣ�+c�wBӏ�.Xk%��S��2�<:��
+3j���|��7�"[9s����TNB[$>address@hidden ��;��Gh
�+5z4[U��!g��R����kj!�f 
0�~����(����%�HL�Jj(�/@E'y�{�A#��V����AX�!��q���U������:��[��b��JbyHOd��K%��s���
+yTLgB+q�[�iܥW
+N�ƶ�;�`� ��6]|�k�0n42z7�£�퇽4z��Ó�rY���X0�>B��
�7��e˂TL� g���M�r��Ƅ|��BGZI��bۈKB�}��Mi}�E�הQ��W��9Œ
�V�QB&AX�^ȼ�xO �,�J�y
+�3�B���ǽ�[�P�'��8h5�X�6qVGB�<*���׻��y)��Ty�D>*3��
u�      ���ڑ,�0�s^c˖���c��h�R��`��W_(�<<�Z�p���-��q�Of�
)����?l�:
+p"�a�f�7��5vl�{2\qUʜz]�5�ª�xQ�u��=4'�]�l�K��N%7��
+�qo��q�M�����U���p�U1s��VL��|p���'���57A���*��]��~!p*�����7c�]�aA>EhB�|�if>ϩ���
      �3��L�+0x���'��Oh��J���_l���a����"30�`$s���H]Ta��|   s(c�l��ڛ���     
*8�ܹ*f��O����iƺ�:�Y�����Y�]��S���x�"?�����:!����Y���i4B��+
9�F�rk�T>��{�;address@hidden;*�uʽ���&�4��}v[���˂�7�t��_sq�%�  
W��Sr�M��.#�mC�RshJ�ټ5.���&��C_Z$�+��Ĕ�T�K�:�)rc�-�� �ʘ�bJn�Iu�
r[ �|pVtg���K�/���
+뷰+�a�v*�g�5hdi�����(큵n�Vҩ.G�r4U1&�C�F&�qhK
+�*��[�g���r��/&]�_f��kg�%ʬ��+�]��7��^����LJ)����ZTF�/&�������NS,6ٽ6���p�3��7�|,�K�b�l���7�H9%�k\Če���k��k��'�:�I���7���q��o���D6#�����J�vM"���7s>�
1�|��Qq֫�q^ 
+��X I�{,.�ڠ�F�dQ�EƁ�J<��>�w�i�~*���1�x�^}��A#��u��.�m+x
+��M/�YM]/���L�W*�q�$���(�gfI��i��a�K�/X����p�>B���㪄���NÍ�P:/a�5-�Y�'����}&]������/��������H=�~�3W�89�|(�����C��"T�I�/�ٹ�\U�?����`YTz�������������}\��%#�<�
+1�y�;���ƿZ5��ru��V�����ut�oi�����h'���t��!����!��!Xo�K�o:��}�]��L˥�̃��<"\�6���[�-��ƛD��w��O�O��H�7-`۾����%����5���Y�Fl
 
���$�w{~��-�{�%YkwOv4d���{��VC�v�=����#_&��,ץX#���q��tR�9zJ.�������wڕ�+O�<��(�<:�=ҥ[�'�����Kn��ET4���.���xۯȮNY[!����Ҵ-�vG��*�'��r�;�Z�4r���ǃ���n�������C����������

K��/s����i�Uc��ɱB'�2tܗ���.�烒����*�e���v�eo�����c���|;�1���8�X�����8�x\���C�i[
,1�3c����o��׽W���ŀԢ_�
+�q:~;/xC��Ĩ�7�b!D�qS�f�yA��A�^��������Uc��f�'��?0�{�[n�������
�Ts=��F}2ە+�S5-�e�J����*$�/���Dž��#t.�2$-�d�B
+��Ĕ��Mą��,6�\n�)[���,ɳ��n�J�O_ �<t��~+X�t��8����4�r+�8���M��Gb����o|?
.����){<<���)��?�<�Ӗ˯����\�p��8�tJӹ��3��`�a�G|����
+�[��l�QθpP:address@hidden@O�F2��}�����X�x����dž�;B��[���`�:�͟�G�a�sy��I2��O�
+O���8��>��l��5�W�U��(������!q�Aʚ�\k��W`��[�Z��M���܎68
+����ݨ�ڣ�tx��t�1��Wo�˺XTk%��Z�U�u�<>l�#�_��
���r�z�N�wɠo%�m<��SZ�i��gK��b�t    
����y�/LͿ%��A�&���Kp�ȹ��v��Ed���I���?���v�{֯X�6��1LO
�të��'ȎS��`-Ӿ�5������.c2׫�+2������%�ԇ�8��F����*+QYs�PW‡i����/x:ڈ����3`k��A�Ԅg�X.Sb�F���Ξ˺nN0�Ur������zk�

q��C-iO��s2<G�A?��x�B�?6b����w�I�.��ޒN^'��'��0s�Z�W}���!��ɶ���[�o>�Z=�u�u�u�ΝQ�n�m��u�����}���3�΀��N����s'�V�?\�Kt��z��S�;address@hidden:J^�x�5#\Z�bc��φn���g_�߬�9����;�)ޟjY�������������pg���_���oϾ������c�or��-V������b��8~G�N������b�����K0��-w�����2�x���_QO�l�|5z�pϿub��}��Z����A&�&����v���h�������|��|t`0��7R�7�'�SbOC05�d߫}<���?������ruJo�3��B�d#���|�wlwK^�
���
+�{ 
�X�?�݈*?赦�����_8�J�Z���CՃ�;��;=s;�4�\�́��bGSDZ���[]$�9��t�g�=䘺�i/���j�0�o
  �����%u�V��pcuk4u��{���(�=�)"jiӌji̝�>     address@hidden>c��'T��
+���6���endstream
+endobj
+6 0 obj
+5987
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 90/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/ExtGState 14 0 R
+/Font 15 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+/Rotate 90>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+14 0 obj
+<</R7
+7 0 R>>
+endobj
+15 0 obj
+<</R13
+13 0 R/R11
+11 0 R/R9
+9 0 R>>
+endobj
+16 0 obj
+<</Length1 27760/Filter/FlateDecode/Length 17 0 R>>stream
+x���   xTU�0��>��:U��)IU�2�"$$B �a��0)0����YT�
+2����D[Aі"address@hidden'��_G?1{Ų���BH2�y�������q�Ͽ��y��O"address@hidden
 ����e�R��B�DnX<{f2=-u�7�\լ�ie2�!3p��������y��e��
nZ޼dnsUp�AH]�Fi�ۍ����P��E_�8E�hH��٥']�iGϡ�q��r��؃�1�E����>����h��,�Dנ1��:address@hidden,Feh<Կ�E_0��h�$�
Ȁ���؉f��~cx=�~�oM��^��h�U��ċ�(ma�r'��~t��ى�(e��$�8����(�%z����hDף�h�0�B�!�$�c#idFp/@Oc�tZ�6�=�Ml���I�L���i�#ʃ1-D_�R<�<��������o7;���M�W&~�x
     9�!,���E������������302����D/�7�������h4�=������ 
���a�A`��0��h'���FG�1��G�}��؇��Y�~�7b$s��̣�~�]���C(p�
=��ߡ��ۘ���p=^����縇��W�[Vd�d�g���xO�����7ȍ��j����u�����=�7�wt�x0^��1܃�"�$u��l#O�_1�����Rv8{=��!ww�0S�_�
 �����1A�9�0z;P�S���������?O��A/K�F� ��
��f��7�%���b��ty�<��
�q�!����|�pL&3�iagbL's���U�v;��c��   
X�bn7�{�{�{�;�W�s�f�s�a����������x,��+%�L�=t���M���a�=�,��q.����Z<O�������
����'��0�`�aRE&��d.YG6�{�~x�7�    r����]L�        
3�1�4f:s�a��Y����üͼÜf>gza�\l��]�>��f�����n��      ����w����˧���"�i��/
��M»���f���a�t�C<��d��kq/d�c�a�aX�I�G�L��D�al�am��X�Wd>�J�o�Z�0 
U�Ԏ�Dzؗ�U�=܄=�n�&�MDς4�J��#x8�O*������i�)��*� 
�/E��^<߆��Z�.q2��:address@hidden/��`�V�O�h��s��address@hidden 
�f�����Q��|�����m�� 
���a�jt�}����t|!��/��Dppz�n�)P�1H�Ե��2Ȓb��z4
�A��Ի?K<��3qsb1�-�~����ppD'@T����}��>����_=�9�}��8?�r+���n?�k�-~ 
`{z(address@hidden"0��0�t�2���E���y LJ�f�Z�����1��3 
'�E�F'1�.��l�_�vj�3��.X�;q������
address@hidden>l'address@hidden,���8? 
pM��&��ʹ�`����'���1�c����]�[`f�Gr�:T�cx!�j�V9쪊�C���FJ�(������
��i>���r:�6�E5��A�D��X�`�d��)�i��9�ѣh:address@hidden&�Z�ʚԜ�O5�dM�RM�*PEA���P
 �Vu(Љ�Mh��=աh ֫�����z\�x0���Ձn
+��լX�ydS54�� ���+�G�dD
��B���k�#�5r�>�D���G�<�j:��=r��X����վ`0Z�?�G�͊����9�WA#�nb����wXHg����߽yK��f5��sBsf^�cfFi�0�[s�>��!
 �[G4l����l�^��͛7b�./
R?�6�d�4m����k'�7�>������        address@hidden
+
-ؼ�    �ƻ9�&�l�z��D��l��
+�*}�����}v�y��-๲���>ՒD�>�91*�G�^*�czu��x   
���(4"���4�`N��7w0�<{0T�'�*6VdaLѴYB�)|��VC��� 
��P�WW��L����7�F)�\"5(���ñ�|J"�XS�0=]Z�E'jV�P=�vftH!�?�|w��fA"�:�!��Y�v���1�DK�/�8��%�K.�7����#��;bbΥf�i�`H
;�������I��   �#77�p[;��T�|���T,f���H*F|�^
+Dy���4�`�����׉zN���3p�&�6�N�Q9��0��xPg��҃�R��
        _�zE���730^6��N��y�|EY
�͛kB���M�gv&Zg�jhs�Mvon�tqA;����j�Da� V������ix��i
]*X*'7�LF4
��˂��.PE4=�\ʥ�M�Z
��ND��ץ!Ԫ��z���݉��'^��hv'I��z<���0,>�P�w��sT=�����o���-� �΅����
+��h2�2c���nfG�j/�:��;̶b�JeB���1�P78�3����T�m/X�E#��X��w��Vpj�i
�w��I����l��ni/�$#�����άB����J��ś`K�3�!L�p3�[:N�ì�B�P�t�~P\�8A#�3ՌvCZmy�)�������*����*fFe�ψ��^�a(�5fc�d���خ:��1��5?�
+�\~�1FF���L&address@hidden
+�7�],�A�b*�aPc��߫���#g0�Z9L*G�k!��.'�b�a�6��l�����K��MP�      
�2�Q3�m��,4�h
v鑬��.�ø���\o�d�#s�[mz5w��T\y�Y�������x�&address@hidden)v�;�=������ߦ·R���a����^�N�G�T��O���c�b�!/�"address@hidden
        ��ۃ��;Ig0�G�'�,y�=\����S�/�:����K�E�M�a�/�n0����v��:�H)
+��T�
+9Ji�"A���vB�]���v�Ϸ�d����<O�+�O~՞��ܧ;r���#�cqY{��Z%��q>address@hidden
address@hidden,�+P��{��%w�_���n+��ΖŪ�`Nt^��ߦǚ�o�c`4!�R�=VI֣:p�Xn-�Vp������w�[�ݦ�,��J��
address@hidden&�h�&�  ��     �t:�&�h�!�� ��^���z���z� ��^��B
 4B
 4��t
 4��t�"�(�"�(�!�� ��H�(�"�(address@hidden@""address@hidden
+������������ z� address@hidden ��xj��td �5�ւkGa��`��[����k98
address@hidden"�C�"1���1��DL�h�6�h�6�
 ��
 �t�6�p����s��/
�7����V�Oע��p
:����}zx+ڥ���;�p5*�Õ(G�==\��"n�� �����Np{��N�co��\��j��Y�v
+{�n��#3_�����/��^��'�*Qt9
+�ݧ�k��l"�W��J�~# gKፐ�f�
|�����/������|\%�Q��%]����
�1g��$����a ��=���ߞ3�߉�&�~Z¯��������+�
ί��C�-3��Qp������t��c��ZQ����(H����ܑ��":�s� 
8Ԟ;�_%��(��A��ܳ�m����_%����G x�����=w��s��W)��g)��T8    
�MÉ��)PmB�����Z;:ʆ�~���0;���)��
+Af����Q.]x̣}x820���p�5������+�+ 
���@'��ٝx�&���*W�۫dZ��}�0F��]ٛ��B[8���a����"d��ޤw�����g5���_�_Vpʿ�?�?�?�ߘ
���k�G�0Q7�g����10��v���N}�5����?�_8J��'�-+8J1�������gwR���[�|ጰU�.�
+!!S���hU�$EYE^dE""�ޙ���T  
���.̳�g��J�O��#,4�lL-��4�ƺg��Y�عI�N,�-���㘵�N��ce�ژP?�a��F!7F6��>��'h�z5��a��_�س��h��+*ݕ�a������R~���}y4=��vRClOz4VL#��hm�vj�w3QFVw
�
]l31��H����(T;�Wj6A5�K�&GZ
��pZ
�(Y/��^�POVP�^/GV�z,��������u�:��9��.����rr�Z�n��pC(���ސ�U
+�zz�ސ���
+����Rz�J�����Oֱ�]�cσ:������a�1p����)ISh�\pM��W,p�Zg��,O��4͚���3�Ɩ��V�ք����#�/�⁡�}�呓���ͭn�
�Y�h����M��j����*hc
��ʪ)��ŕ��*�W��R������}}�>
��U��� 
7����N�y%计A��a᧑!�C�c
+8ZTPUPE���h������k�}��ө"�-���"j�T+�P�%MI%����5[J�؍F.���^�;x/�������Ǟ�˗/����R�jc��jc�&�H�j��Bހ�y
��퓤���n(� �2���q0��`u    
��o5�uxӋ�|-8�����B�^&+;2�������4�}J�vo�z�(Pf'C�R���[���e�����{pd�wѭ��p����^DD�E�0,����i�z�m4G�K�����l|���4��R��e$��%+'��/-O����u�C�
 �9xA�����y��Tj6ıq���#�\�0Gq�p
��;���������W�*!�^o`Q��d��]0�4}�l7��UxYF���`�0�eг��"�e�9�Td��}�wx�z�q��Y#*�mXd���Hހ=�Ӵ��{{�z��
 ��Lr̰s�Xha�
+����q}�r\�����~Vա}��d(address@hidden;!�tf��J��Wh�}g���Wύ녙VVl��oS_X$����߉�������DS�Y׍L0���U�Fy7�#��v�I�K�K��N�Ϸ,p.����夜$
RƐ1�H�F�-�����"��|@>�ߕ�U,�;�&nJw�VgĽKT��B31k�2�B\��:��L�I�'��K?����7�B��"܈q��iQ>��,j�
 W&/���,)T6Ȣ�����Vݷu�{'�߁_R�L�ԕ$�{����x��mxޅqp�U�o����V5�XL�b����9� 
MѤ��-`�2�}�c��Nr�!Q�02J��L��FM��gl�eY�|��m(�|�(���?��[>�5�^(�UV���O?���0):ņ��Ld�q���X#�
 
Wj3�z�|o������{�{��i#ҧxer�aw���7���2�hv�{�g�W�rgy���3���nt?�{,���=i{�E+JW���W��Kߚ~"]L����;"�D5��)J���F��<�A��L����Xh$F�v�]6N:�t�:��o>��$���xV_���q*,b_��0Y����b-ǖ�p#�%(=��n)�ch7��fR�YQ-�D���$�G��d���
 �<>��a�u��QJ��!_���KO�
<8�[�^,�A�2���HN�%{PVI��a�ay�5^�U۾�ux��h�1����~p~Ը���QN�ſK�z�usݒ���_>?�cV����J��W|�J��Z��rK��id�
��~�9�����#:���=.��.�3�WT�܉�4c��5�>�(
+vvb����B�Q��v�8
(?�]�r�!�ݕ�ČݰF�zr��>�N�^�~��#����Yް��k%>�<����l���-免��M��b���J)V��>�h��yKǞP漄�a���~����Pf�8�*K&L]�d��Z��U
cF�3��|7�|�۷�g���g|-�^\pӺ�E�:>eN�0�������ݰ�ť���_����     
��V^e��O�rc@)��c�8�x���F�W�<�d��<e�2]٭R^U$
:��WN6(2�?�y�΀h&FVa��HДn�8$��<$��� 
address@hidden,address@hidden)q�,؂ɚ��ɭ_<?ߋs�1��pݷ�H�&n��W����j�DS�Xfi�yX��i��C�d�جAKȺ�
+�+2`�j�t�6�iR�&�b����z���uH�.�b�$�4�/�D��(��S�3؝���Ȯ�{'~V�[,address@hidden/�$3��£Rb��)
 
R=Bť�K�_���K�&@-�D�:�^A��6��0����^�5��+�5��y��M����}����YG0����oߜ>c�}[7l�>H������3��������](��iC�������n��[���嘭���Mqp�,��j��G��]8��pn���Т(��v��0H�a�]�֤�RBb�N\ױcL���gaY4}M��ʌ�uFl�f�OZ=Y��O�M
+ٳ���ԎI �xH
s9:�V�:address@hidden<"z��������o�[��8�?v���� 
�4O���Nʘ\��wk����?��x~�9r��M�����k�J����J
��.Ă=�l���a;X�M1�1������4`# ���@
+
��:c�36�J~�!��.��(0hvM���1��*��SX��;
�c��ͪ�:���s����        q�ֲ�̋+�ݎ��)���>���-����^�Ed�?�&'%>c]=t�BEX9P$��#9����
y����}�}�]����S��o��k��ƛ��"hE���r�+;�O*ϸ����؝���3E]�C����lw�7���a�����XX��lf�z债d�ar/leݚ�tG��Z�H[NK��y��$�V����<P�5ŪTf�e�L
+�Is�<�?)���3c���s�Y�}���_w]�j��k��>�m�h�N���N�ZA���)�
Jm�T�\�e������x���?}��5�^�{���?_�5���i��      
MޕѩK�E��e\oz�ĉ'���x�����zr�kx���fL����wղ;n[1��{�vZ�cOq�q�a���2װZ�$>address@hidden&��V:v}�~b��p�9��B`N-ɘ�
cR$�:sI�N�D:�bζ$s^�#�����O�Y�՛��S�e�y��&�/��"�S��)�kR
e�`���X�'���ڲh篾��[�������{�\w�����?�I���.܂
'>�������M��1i�ݲ�������^���$��.$$NjRYy��O� 
,�4�k�A��V̅2���|��yr�q0*�*���"2���-�˟3��<l�fdIb     
���x�eo�8^�5o�0Y�L��9�0
�҃T���cY�D����s�f�c�bf+�(�$K��.�Z%"&Y��R�q����
%`�w���s�?aP��<�X.�3��>n{e�7
��b�+�$w��RDR"(L��ژl��ջ�����|8L]�dz���ˤn
2�⠍a���n�;xs�U2����*��_�L}=�B����������*W���U����XV
+:$>�0�i�;��ȱ�A{(3�j�l��/��o�     
_���$U�%C6�-`���h�<�u��m���"%��
address@hidden�t�,�ռ��\8��60u� ЕsG��=��A�s/
Z�٨>�J��nWfz�!/Tig��B�U���_\6�ʅܜc      
�9�md���n��x�][_16�i\�y/�*�ꩵc��a����O�n~�;�~��3�?�=�vαE$���_q��Q��H\_W|�dl?��|���L����؋Nh���6�79w��kһ̻�o)[�3�)����˹��]�(����r�#�L6'�qsۥ7���J\z�D�t��������
�҉�i.w+�4�5b��a�T�jw��<-�Z 3��MS��Ho�[�ܑ�&address@hidden';�!�4R�S����P�
+�`��t%�v��AD���?<��W�?�7��8�����?�>�◿}�m���~�|��o���.V�dݗ���_~��J��Bg��ȏ�j%y���\sٹF.�U���:8�r�
 ����6��P��Y�ͪ���K��$M�Yi�� 
address@hidden@�j�JTJ����K$Hgق)��N+U��J�0B���A�~���Φ��y����d�;8��[�FϨ��aҰ�ᴜ����ζٵ�~���&�����sp��Di�!�R��L
h�v�ȁ���[�.��r��$��&��R��_ː�2u�P�
�V
+`j(address@hidden>?�m��[�v�:���h�0z��b�������[E"�(9    
�_�ׁԘȀ�C�C�����c�oL[�UX��l|ۙ޾�dN�ctlO�ﻟbvp�1��H����S��
+�zq�q�k�O�]������,y�<o^�8�0��,M3,boaW��y���)��﫧U��(�i~o���IcgZ/Y)�Yk�l�F��F�-�Y`f����k�B��S�,
ɓ�&c�엋dF�\\��
+���W�����E������\�����΀�4h��b��
*       �)t�V���2�dMc|����{������`ܕ������O??�xd�}��9mӋx�;��93�|�f�
���[����c"�a�t������Z��r2C$9�����A<��R
+��ɉ�m]9�[�Ԕz�Ia��V�PRmk�U�!����TG'address@hidden|�Q�pT`���P���"�Ӹz����8?��5sg8����s
      �F(�z�M�1��qH��&v���\��JeU�[��h����<��w50�P�4���iY��
+�,͓*Յ���&U�Gn7��a
`BQkm��";����X���R(�;Nmi9w�Ͼ���D���\����f;address@hidden|���͚=ԃ���Z��_k"u-�0��o?�=�8t�����Yؕ��r^�0��-?��r�����KM\_��a5z����-�M`PP�##qk�#�(
+Đ&�
�ȁ!C#Rg��#jO�
�\�xI��"}%��"address@hidden;ٹ��*��_�ސ�''���i�9����V�w�-���y+
s�"address@hidden n��!C؈4T�4        
address@hidden,address@hidden,qFA(�M�b�h����1PO��ɠDD͔1P��T1�5     � 
#��A%��+u�؈{�w{i��C��%���T�<^"Y.fD       
4�YB�2����7aS'V:����d�N������49���V�Ⱶ�
+���m�f*נ"Ҡ*�Se�Q(ߪg�����Vx=j_K_K�׭�z��zv�31��J}7���&W���}�Ud�G��0
+�P����1�
�~|�X�G�������Ы��������P4�$U��E���Ibx�øD�
+�
+�EVC%�t�4��aFL� �AdDBF|���3f�������5�f�74�fC����
$��R�QI?6�4)"_!���d�� address@hidden address@hidden  
<�q2Ōư5�z؊��v�ÿ¼-~(2�P�0C�:�g�N���+ƘDC��*)��D7�z4��8B�쥐�]��"d2xz회��� � 
���\a()�M��L$;�     
��H��Y����99-��rI�0VX%l�#<��K~��y��H�*C�e�l��߷��y�����j�1Fa�?
�����5۹���+b�$�w�{���*���r��n7�2��n�otltmt��5
+V�����{��`+P$O��8s��ɪH��Z�(]KoJoNoMoK��g�I��ۆ0�fV������5/_��u��1�
��W?pm�$�ݱ��3�v�������_��ԁ�������xW|
�پ}��С�nώ���0���<�T���'�翧x���y����Z6�uٻ��(��Np�j�VL&�S�FfF�����NzQj~\�j�\ʧ]�._ҖS��3,�)�+��Z��z�M�왵}��7^|b��׍.m�;���й���{�})�4`VU�E�����7r�
 :��Qnc�*,2,2�o�m�����̋���� 
S���,��d���f�:�4�<ʼ�t���lX%���H�(m�ܕ�KN�d4�&���֙4��ę�Ѯ(address@hidden@���"EU���/������q��74�p
 T"���r�e���tZHٹ�p�A�եH���N�����"�ؙ:�rق�
+Y,?`���}����n[��ʼn%���W��{�*�Fg�?��{����O|׳�?��g���ǘ�Y
��N7rt7�����N|\���ҙ~0���,�0F��\nn�2~��,�㉐1*_c�&3Z`�g�\�7�����ҷ��ݱ3�js=�Ȅ�
  �3_
�-�-��3o�{濇����def�ʕH�V�U�3G�)sC7+�37)�3wɻ��3m�,)|&��ř)d�d�Ů)n��,v����n�>L�"H!#��>�+�3h4�bi�7���qފ�p
wc��y�U�������4�+��rs���mjl�Z��%����?�h�vR�>�
����G���%�4n   �m�J�K§`�K�.]i�|�҇>address@hidden&#�)岛:[�.~�t
��(�����1ʈ̚�.��LY���4^/}�����Ƞ��w�]NV�,jǏ���
���Ց��hڰ��g����I�m��>���`{{��z!�e��8���7O���Y
�r���/��ۛJ�����Hv���ݽ�O�cL��?Ȥ.��o�*���"�^j�Z����c�d�
�(�\^v-�oq�&�B!�k��0�z�LZ�V����\jU&4�#�*ɯ`���[}*%�*t��~ڢ6"�$>��'>�}�����o�#F�A����(H�
+BD%�����u��ݲ���s�z����S�oP�FPŅl�d4���R�;�z_��i���H�W�k�u�X� 
�)address@hidden
+{�j"���u{�l�ݺ�Ջ��n?��?XcO�M��c���8��L�B<~��mљ�^������9��cSb�H-}k��|N��t�'�
    ���QEw�o#�;���� _(Re�I\�r��P?����*2�0����̥SU����<؁,�Q�p��L��
J��e[�O��e;�A��2��'L(��������z�Z�1�����5�ml
�{/i��W��?hL�jRW:j�dP�uEI���4� ��%&����
+/��񐾿s����
+̲䯍�I���C��-�O��N��g�]³ғ�����ް?�<�m�4<��d$/vy8G��)�zf3�Y�"x�@<r�-��٫���:v�|?�Snc�e�MV�������k��qV���F�
,#r�C(�$x�!�8;��nX��
���!^�9"|-=���
+��(address@hidden(^�T��B�\2�
+/�W��|����O��J�d��!���wQ!եNKKZ2'�L��o�C�4��xj|0���&}�X�~�op�       
���2&�9;��B��h��ƥ;�c}���d�~b�yj<Ss�y��ܕ�3��]�.�k��}F�WN�����9����.��?���_�|����⁖�J���2����Gg]�"Y5���"�9rU:�wSb��Hg�����A.���&��Y*��O���;ɲ�`T��T��2=�b=������
s�~R��w    XQ      0�4�3b��Ep�     h�^J�%��3\��s�p-v1.O�ª��      
�H-���|(�L��e�����}H�&���j/L�-�ދ����/=29kNi
G�wP1���-�t�r�/kNcw��t��O��Q6�,�9�ju�w 
�B�������/;��A��O6>ylʣ?�����k'address@hidden<�����;���:��#�Դo�vOmZv 
m�ȡ�?Z�ݹC���e��ojxP�f��ϻ�5q^h(/����~�<�9�M�V�K١�P[�o$[���F��d� 
���"'��Z�3�]A�ۜ�3�~��1��F܌�7)Oze�-�z�*>ZnR���RȻ�7�h�
��y�<�<��4�l�d�~�N~,address@hidden;�_������Ӭ�177޹n�ܻ��}g����#~&����c$������|��T
+]s�N���&4��֨s�y�u��6�͞�d��U�U���    
����/�y�`�`�X�Xg�;j\h�X˜enf%�Ҽ��˼���u���z�)�t
+�EL���GL%
+��dD��l�(address@hidden(�0��AT�Ј��M���v���ꇻ��z�g{��0��T8�%¤�h�x+ 
�u����K�؁���f�-�m�����>����bg�K����'M�ϱǦ/.��K \X,address@hidden
a"�!��g,Sm���<,Iv�\
�j4�A0�a)dW?���)����{����Io��4Cz�F)F�=������(���Bk�Z��h0X�� 
�|.�k/'vf���}�ſ���~��Y�W�ܸn��
�M��\�aM�� 
Q/4������<��N����l.Њ��_v!���P�����M}��-��(�^Q���d_#�e<��z_�_7��O��*J�9͡��ph&K��x����q�ԐQ��&��
'k���DLn+յz|\b�?F���2�%�pA2t���fq�F�X�=�j�ׄY��MѝeP:�DT�1#cq��
6�5����a���S����ݭ��+�Z�<�n*��=��OWŭ0�a���J֔��a�Ū address@hidden 
�!���dU�R�d=E%h�޽I,�h�&ڽId%�D��/`���:HLI<j�q�u�ϖ��]�;�����_�/��wz���Ә;f��ˬ�rmE�y���-���ŏ�v�h|���#F,������O���I�<�"WjR�DZ���-���8��$���
 
�cxq,c�w��)6�An�/�2���C�`V����I�_:�M�������Ы.��(?�=�A��/|?����Ë7��N��ߵ~t|\=GZ�����N����
 �K^&Y��ő �_F��;uA9u�~?�Q�'ک���6M\ 
��,���Z�6�r<%�t�`Rx���Np�i���^У��R�ڰ33+����&��3n���eC��R�]Q�:qH������J�lAz�TտgA✞��7�K�"�Dt)�;�s�M2����OgM(�,
���~���:?�xn���u�q?������B�}"ȀG`�
+�۵џ��ⷶo�k�s�X=�G"Qu�m�3��Nv�;���N�=��'�=�i�4����K~ǿ,�j䖋��u"c��P6�(���`/�M�f����
+��(���n�- 
����<�{�,��$��k�:����}�%�����O�������nƁm7���C7ݴ�dn����k_�g��u�����m�=�4�7
 Ĕ�|U��Ò    O��q�9���`Z`j���d6���>c�H*�uFb�$+�~�k�^�C�*�)�J޵֝V2úֺ�z��ZU��*�
���6P$<��.��.����\�g�)�N�}X����M�TsM���w�G�װ����/���Uq}uStꨫ�N,ds�__]�̀�=���9���0�|����[���벸B;�;��sʗ{��X�(]�ׂ���+�2�~�5�\�!�v���.�PҲ�s�g���`�`�+��,�,g$_c�ԙk��3�̬ܜ2ci��"�f
        
��Y��[�5fff���L��R�*�͎���ot����P����!�����~8���X�tj�Pĩ��#~'�ĉ�%b�>��l����#�����������?.���g�T�����o3Re�^�\��sz��
 ���(��T׀S\����,�(uR�c�c'���        
N�Q���u��EXo0���#���`1[�g��bo�M�����'�����Gn~ۑ�*~2����h��ß�L{�zZ�A�zʬ�ܡ<��J滙|0Ө�����쎨�����J��H�tfvD?�J���Uln�g0����]�zM�jb��C,���a
        ��S���%.
�uiШK+-�����Ҳ����]~ݘ`]�x5�`f/��&�$5y��J����z�cI2�DF��)u=
����ج��d�V���<|uP)7ڍ�4�n�'X_�3��ԯo��n��;�`Wd��n�]qE�rS��{�7;�,��n��?��ݼ���
��i9��h�ٯ?�Å�����vK��)o>z���
�;C��yck���c��������A.�������CLcMQ��q 7�t ��f�.+�c7#      
�`tSt����s1Mt�=։�vPB�҂�>�#
R�\�P!��_ef�<7���^㨴����3M�V�V�q�;�쪝^^fA=^�vѲ���������'��qօ�i�z�CEK��� 
�z�^5.�9�1���u����1�%TZR�m!��
�i�cݳn�zu�A��v�esz�����>�/�0r�C���w��o�`���� �i.�[��SO�ә8����C"���g
�(
� V�+y�LT`x�`�?�9A�g�#�!�"h�a�Rw�d���
�+�b$aɨ�~�,�o~��4�ɬA�$B0q��Z&�;-/bP���Vq���\)��g�4K�
`4ձ
{���ݪ����]s�1�Җ:����6�o��w��t�֮~��t�����_���u.jۂ�Oƹ�q�&�M����|`����d��85N�t�����^g���
    �'�Q8Q��n>�/C���8�o��9��Ax�P��
+;��������r�"�`��/����d6*�ao�W����m�a�=�O�YaXA�d'`���R�a%둇�������!�
�+     �8V7]ɓ�~��9��fe�EDD��      
J�+�$���=�ٙar~8�J�1`�\Plȹ�t�O�N���        � έSv*=
address@hidden@n�xF��a*��.VIA}��������Ҳ�Q-)���t1�
c�k����G_�c�;������a��Yq��xL�]US|;address@hidden&^%�Ƴ6�2=;�5��׉����BS
+8�M�
���;�Dh�Y�2"z6^�hnO�~���D������ii�"�c>�+)�N�R�O^Gl-��=�Zca����_��[�=�F)�o���
 ���pjgUt8��8��Q�~�4u��sͤX*m����]�Q2�
�!�l+j��-��Pfn�n����9�C�M#�GL][?a�gx���<�N&����q�U��?)K��������x�~�,��1�
T-�'`Q&���2)3��GpY���V����k���ʅ����
�HƓAÐD7SInVU$�����5�3(��Kr�jN)'f���T;1�怹Ȭ�ךy�p�
:#�
+b      j5n�j&�pmFM�p;��B�1��cYu�E�*���%�Y�-��s��7�D�-�7���
+h�[.����q�$�#،�"eA�kIMS}ۦ�(���[d�l(7�Fp��=GQI)T�\iЁ�A%AG&�wV����&�������ᎏ�ͅ
&_�����-�7N�
�ձ�7�a�V�mɷ�Y����X~ken4.�o12�����2�^������0�H���1X�f��X��%v��ь�N)FYb�b���U5k&5b~��d���v�nE'�ڹ��:�~O�.��;�
+s��9�[�׆+���=�;>w.��$<������N~gm�/��X���acU���0!Ƃ��#�I�<�
3�ط-F6��o:S��;����o)u�������݊v�~x��|��`�7�\�����0E���R�t���|�|��5,�w��E��Tmz����:�^���g�ϬO��k{�������92�n���9��ru�����y�����=�=����o�������������������������W���$��������/8Z�t�m��c/
+7���.T2ej�ח6a�u����8;�|����k,�u���l8������â���R���Л{g��{������֍lHE.���0ؐ�Q?���`T6e
 ����BD�Jt��F!+��FY(��R���P9�|P�F� �G�U�kQ
ڂ�$J1����<R�<y��#J.ZVT�ߍ�[韹�_|�+�gЙ������?k�r������Hy"�.ES�=��8p9ঃ��r��U�w�{
!p���� 7=��m���,address@hidden:hw
�m��'����s��A���M���t�p��↔3�3ae��Y�Lʐ�桴E>��/���
s�7�'I�O��B�_���;`���}*PW�H��-�h
+endstream
+endobj
+17 0 obj
+17364
+endobj
+18 0 obj
+<</Length1 24376/Filter/FlateDecode/Length 19 0 R>>stream
+x���y|E�8\G��s�L��rLO�        BB�`$͑pDLG$&( �     
��(�(�Y�EA]�Uq�!&������uU<X��_\�̼O�Lw�������������SOuUuw�S�Y��B�QT[3!7G�
+��k�L���j:B��kܬ��0�a(8�����y���!gB�m�?_w�™���3���5c�����f#��
+�gA��N�/���g͹����f��o�q��Ӣ�N�3͙v�<y���?
+��M��̈�O��#߼��o�^_}���k�1����]������n�h�&��e�D�"��C�����.|c�srޞ�ر��؍�aڊ���E��F��[x:r"address@hidden
 
7����7����ȗh3�G�p���dt[�����J�y}�I�8<a�E�8�_���!SrO$Y�λQ<�Gŋ���P
  
z��"���Q�&�Ȋ��/��_)%M�9hZ���:�82݄.�{#OBOD4�ی�D��[�������P�Ƣ&4mBϓ���A��F��>t
+?�?��菜�]���g�+������Ț�5h>�=�����:�����h��C��hZ��C��q��� 
address@hidden(�Buh*�݅��:ԁv5�B���V���~�Ef4�t;ڎ��`�8�d�o���C���9Iw7�=�ȃ>^��|���A��ډ��?��������R|^��w���'�'����%�#!�M�N�t<�H[�Z���N��ٹ�\5����H�N���O�?�\i��y(�+�J䯑o�
address@hidden
+�Z�|�����}��9p�f����X<O�7�6� 
^��ů᷉��I�!��:r/�O�2z�䲸|������������9�����o�������EB�����O³����"�HJ$/2;r�(fo�h���)��?�����;���>AǠ�ߣ8;��D<x�J|=�
���(~?�w�N����‡��w��S�w���!�x���� 
i&��8�%�ud=y��9L�'�H/Ui*ͥ�p��at8]M�����Ԯ�n��7q=�_���>���q|:?�����{�}Ƙ��[�n��O�"':�bq��J|L����/�I�]0�,��^tɁ��h+�7�x"��ոœ
 ��J�r��5$�<�Z
+e\�a�,z�bb���o�o���eh9�n��L���w
D��&U�~
+��������Z�x0�ƒ������+H:��]-����a��k��8
�]j{%}�o�|z�b��s�rr:�}�!g�A���\Kgb/address@hidden
4ߎ��9F��W�:��{/r%�#�A�"�[�9!fh7 
R���n��I.��q��������`<�܌��qp�d���)��s�����Q�0} �     
}.<��F��T�h4�'address@hidden>���&t���N҇ 
address@hidden:tAO�V��~��E>E>|s�PdNy������d.z�şA��   
zlp��Ȍ�X�����L:�&����/�A_�Z��E�Avס� 
F�����3��OXB](l�d�D�<���E��b��'
��E/�{ġ���z����/RVZR\TX�?8/address@hidden'%z=n�3!>�aWmV�Y1ɒ(���L�j�B�-!.3m��v�6
+�]R�Ҡ���mBZ��L�uKZ����z��~�%V�rT�3P�L�Bo�L�:���
�`dZ��5���<�i\X����;�J���Z�h����VW����mSL#�F�0�D�L
+dȅ\i��a�Pld��r�6�$�*�MY���d]ь�i�C��*G&���9CxĵiׄP���-h4A#�ׄ�!�x�6�
ݧmس��N]�4OO�>mjC�Nkd����#C�E'ܿ\��#V\Z�HWW�gk�r��Z�g|å�~�66�3�^�Qղ�
+^}?��;:ºφԌ�JV�r��ӆ��Z}}L�wu�-�wx�z�
�Jm�Ć4�"1�q�Ȥm�hu���]���&g�6���6�-�1[.�̸Xg���,W]w����(maddress@hidden
5M[}����~���i�!C=�X�1�E���|(eg3�G�DB��E9t��i�T
��6�m�Cr��~?���:ut
\���o�^k�����C������$Lb5K�k.�ޒ��"b�rBHʼ�gS�q������������V=~J�V��%F�ꉿ��֗^���p��2�RcҀ���4���3��*g��
    �>��F4�D�͑Dj<
+�v��'��3{�!l?=D�m��U�Ԗ�Ѵ�������)J���9��2�/�ņ���e���U�̫)���$���^m�U]��ի�Ҵ��-��uF�^���i����z^eK��wF��K
U������g4|[^9~��WN���፶rbCx�#Z�7nK���.
!�(%KٕƮP5�� �Q�إ#�Ԩ�����N��2��
�k;I�L5���A�Qġ�+�9���}3�a�v���jֆ|nl��r��G�'��%�m��I�m�-�g�ch�qY9&zYk\vL��KYeb�Q��Ŋ%�6,��CKNPTi
���l�zB�؎S}-/�j����t��#����c��c�(�3:5f{QQ���@ 
�S3��fh^��P�v޸]�����c�j,�g
�{8
�C�Ƣ\���
K�w�t��C����<v����S�hx�h�a4t��n
�m�6z���;�"=�h�>,?�)+72�l/���0�n�#G�P�p�8��LH�6��   
\I��T�&��N�C�y����<#�y-��i��=O���B�<�g4��d��G$[��"� 
address@hidden@��0���T�G�[z"�%�h     A6H}���`
��=x]��5�%m�cwG��"address@hidden
+�VF��9�'%p�YD���;�����ϼџ9П��2����s����[�*�U�a�cxA
����(��.,0PA�G��(ʋ��(ʎ�Q�E�(rE�3��(>����E�(2G�����Xg����      D;�v&�L 
address@hidden        D;�v&�L address@hidden        
D;address@hidden(گ+�礗��d��*�x1���A�?kC+:h�v-��<address@hidden(�E�����
+��[n��`��E%9��3�8�᥸S�dN(address@hidden;쒾�8!'�U����;:����Q�!�؎�
B�
�
+��[O�ǎ���m��=hFGV2��Y�k;address@hidden:�WA��(�Б=�/��}����s�6
�A�v�~
+tr���c��<���Cv����N    
��}����^V'����|���򽚕�{e6��_���|���ҍ��jC���R�o��A1\�
+�.�~�7���3Z������vN�aߌ��|-���k�������:x
4��&��U����^<*;�      
/�����e<Q�'`=�w����2�Cɠ]����|����eW�RgÃ^�M��������b����6�}��^(����A�=Sl��S��d1^rH�d�̒I�$A�$�G����q}
 3���ʐ���3�*A�J�a�     
�D��P�&���J�՝b�.T�I�W5l���FV��U_���OH��&p����8��F���Cd%����
�$��a�����nl��
:ډ��F�\P��p��U��7IK,
�r�/��kv{l�.��E����첝]��Ck�'4��$7��Y&��XZ5A���E��Y9���jl���we+綏ll��)6ځusC;����JHc��f��v��h;�}�.�!h�~��v>��F;�v�fk�#�Al�ڤ!4�h3;
]Ҧ7�th��m�7�V�9m#k
+
+�ɠ��'����N2����k�|�I����_�dG��-�M�h���1�r��Ḻ�a���7�_n`�:o���Ч��;address@hidden
      n�X�qS��;address@hidden�ƪ��Y��ٱ*�������X�
+�vx�����7�_Z�o[��䮜=2���<�n�3;�W����Qu({Bu��m�X        
��F(�_F�Q�M�O�8?vo��fxPK��נ�ˠ���������������z�`�u��:m,��a&ß�h�s��0�X�B�B���5��M��:��_�`�up0��d��F�/����]r4�
 ��U�(ZuK��/��SK��p�1Q���$�����F<�E&�{       
#�$�/��||s����J�l���rTy�$���v�=P��F{.�<�i\�5�^��<o)���)�
�J�:&address@hidden��+y,�5��呓�C|�"
���&N8E��r��) 8�'u���o��g#P�D���f#��#� `\����q����ށ�pS\a��;� 
JK%�΂�������̴TQ�����Xu|�L�DG�I콢�v��`\���W����3������O�J�&�Z�^��N��iژ�������6'�*�����j4NnF͸Y��2Z��鏲��|'n�ɈQD��&��KW(��,
+*3�G���H$ �
+��B�nW�*֠���$�:i���A�è�Zǝ8�{��L_E�z��l?(x��wpnBMqq�%�'���on
�>�ޔ��X��x����?����g��30}�gk��µ��S�\��Ѥ���I��     o6Yl�7t3-�a�66#I�     
�rM5���3&��>h�̭:address@hidden 
݌͝������&0��vO�C=���Ҏ1������f��lS_�MQ&8�|�w���H�eM�����(address@hidden'N��[�\�
+bFqIqA�3!^���BZj�,go{�]���|�u�m���&9�S~����x��[��?�����K��LY~ݔ��ir��QuW�T���e�>�����?��~�~S��1��e�^}���R$�K�3�Y�ҽ�Z�1�&������4�
 aA4�������hUb�s�4�q=�\.�NzZz?��p��E �.�&�f��*�
1�0n��1�u��ؤt��6�6�%�Qs      
Z���Lw�ťζY0���y���Ӗ�E�t�+t5;q���4��5�=�&�&o�x#9�
)o�5�D�~�|�ޠxkn�|�!�b���Q6�HE�|'��it
+����҈�1e�7��rt�Ko�<'?�J_�ԑ��OV2���謯2���S�7�?_v�7��U$��O�|ӕ���͙����� 
�����
��W�t���ò���Hǣ�*s�u
+� 
��fr3��B�B�B�=�}�U�u�:۳�����#��W�a�L;address@hidden'�2-6��!�}M�j�3����qq~Q 
���t��[B��~�r����iLj��/pO`������o�>1���op��`�2��[���(��7
��d�H7H���:���ߑ���s~�,҄$1I�3]e)�gK��I���ҳ҇��       
f|A����p���S\N0���iN�i3晰
4A'M�Q!��fNKc�*��8���f��ZK����Y��
Y�A�'���-�D_����61�U��[R\�8����{P���LU�   
�����a��Һ������/��(�d��g���~a"\��\U6������xj��
+����Zw���&����ߍ(��O�e��*ތ��m���榛�A�����z_�r&�*s^6����(�Er��|>���#��X��
+��YZֱ,��U������|�)P&address@hidden,M¹�\�o�g��YU�fͳ�X7X�XE����qvJ7y\�t�ރ#��tT}/�\�d�~3����
+Tmym�Y�>�x��1[s[!3%�D��r&�p��l���J!��Q��(#6�n 
3-����4.���v��+W>غdm���ⱕ#���w~�6N{����?�w�lS�^�h� 
߆��{g��N/+m.ro,��$�����_Q"��Հ#�[u'�\��4�G�5�Q�cݍd
+�b^+��Xkl�6b���#yS7)4�Uz�"
�d�5����P��e�b�%�7�d|<k�zrmrK2�����Z�EK   X��ۓ����_kSp�٦��a\[֯��0/�4
�����P��r(��5�?�>�_o�Y�~�3��c�Umw|���;oy���~��G�Ÿ�����IK�?~���GAj�'Oڑ=�����%��Q��w����\o$���}G������HJ18�<���B&

�W�c͏���߷��A�Ak��gVҐ��lٖ��}'�T�Zۘ�^�I��E���&�`ܠ�b��Lr�Ӄ�ZsˤA;V��t����m����E3�޳�����v���͍���
(��/=�����b"P�5���N��zy� nP�bY':��8      
k&M)A/�'�1B<�M�r�)$�H�$S.&v&2;C��n2     
����"�e2|�njj1A�d�W4$*�%����{-�����g�R��K�w���
,@Ӊ���$���PR��@ 
���q>WQp�t���O�J'�����υ��1��u���h���p=W/address@hidden;����0
~�1����p{%^M��
+V��0�2i�w�5�^�kv9q��~����_��PkqG
+��%��
Y�F��\_;�qG��04�O�BLU\��3ң�ƕyh�RF��eE�#)O�l��{��",��X%*uy�էjI�2(e�o�Pj+U�|�x�m��oH��o��z�<ǽO����S�
   ��K%8�����m�1�P�f�#GR'h����L�$�+%�Y���~���E�}�0����
k�$}G-Z���$;�t;Fv�ڱ��4O�.��-2E�*`��;S����ʺ���cJ�\����5�5��  ����Af��Ĝ
�S���AA(����V�� <�~
+�]d�K�ѿ���?]Nڗ�޺5|�7�O��o�qA~�d��w<tv��?N;86'����u�f\���o0��ߵ�w>~ew׶�̏��.R
I>��l����'�B��!�N�'���S�xE�xB|���@
+aFx�(��r&E!T�%`r")U�?���PR�I�߬R�)��r�S:��/�l!��"���$�괖RZnV\Ԑ�ElQ-JZ���m��
    ���aH���+�]1�m��Z^���` ��A�ܨ�����
address@hidden|w����*��(p���Pt�����#F�lQ�B���ˣ��0�s�
����X���zR˷�K���>r����f�o�7�!�0��<&��Thjh�2�H�fȶ6���B��D!B=�p��)�+��i�����f"��Ehk]�ǣ���o��0X��DFk&��2bb�N$b�P��ܵ�$�����<g���&[
+       
K���a]�=��,RTQ0'�i��v����/S�[�WP�������[Y��JTI�L7I�{�j�\8#��������D� 
�c!FX"��{̲G��}�L�-4kV�*���J:e>c�`�xY$j_C��}�ו�f��c��.i���YXi�����JZ'�ˋ�k��5�*Y�en�.DK�%���0Fen��s�E�L.5�W���̔Dя�0Yf�T�
"a�9.�        �J�b��D�*/���e��G�hu��&Fìf�}�؟�|��
+^��%0e.+�)address@hidden;+�I�8҆�` ����_�j�x�S��s�p{�G�8����rK�
��y,L�,�l�&0;���T
+�*��&���6zO01k�o2��ֶ�++g��b��^���96�+.��`>�ar=��:��o�n�-k߈�.����6���  
b���
��}>���9�,�~+��y�����>��T]�
+z��l*�?�E/kI��dً�����c �N�ג����Q<Fp�Y����c�Ze��. 
��{�J���%�����h�'q��Yލ��.�[އ��}t�����Z��'�̥
+�J�R<address@hidden/>��<�>�'�I�9�����"��S����5�Pt"saF)�d�����s^;�����Ht2)Wn�.ΐ���I2y>�ϪP�����JtA;��B�C"2]%���
address@hidden;��L��F�H"��HPS�%˦��Pu�3`��]oo#���la8J�Rʖ��J����hi>�����E�ml�����]JqǗa5���kj)Vˠ�olS�p�:x#s���b����ܩ����o�O�y�oa7��B����lm��{�/��mz�L�|V\��1��;7�øcI_ƙ����H���ȋ��bW�'g�ٰ��L�ݏՄ,�Ԋ�EN�+7IOjI�I^��!P��p��aL���k!
+*O��,O����������&�0�?�ńVp���Jba!���.f���
]7N��}ѨW���tz���I�wW?��w�f7}_���h��0��-�� 
������mu�>�OM���j��㲽�e>ے��L��Rj/�֘�Xƨ����`���-�o_�XoY�>c�2u)]�.���������#�C����q_zT��9]~��HL���s��v���S
   ycG��  
1#������Ƽ_Ȋ��&eib�x8&���4���ȝ�/�V[�X����/"#z����d��62T��(��\��0��9�h����gR#���
d�x�17�m�5��gC
+f,��
�
+�p����o�2,����|we�ݻ�O.����닱�����C���r3�xg�$?��lܪ�1\����K�m��Ή��|��v�A����jO�MʖĮ�7�=����d%����<�_�F�d]�2��W�-(>�ɕ��+N��X�Rt����T����2>J�HS�,�����s�,5'x&e͵�
6S1P��,����]����_Xb�e��_�#�uٛ\�� 1��`o�� 
��U�'���9�/�Q���7���[Mm��涀�<j�������=�%�ㄹN��č�m�g�琇�<��
+��m��"�п�Fq�W���������b3�֦ [U�6E����q[
+sE��陙E��Z����r�3!�S�3�a�0`x�o�g��{b
+6���K���)˖�q�����*���������ǶUyW^_=,���k}���Xf�kQ1 
{̜�ӟx%ܻ��l�O�ElI�zA�Ԉ��)\�t���u�ɤJڟ`   
B*���<�/��u���{�WB'Y�ۘo��������"�BxDH��\�L���nW9
��F�C�����Dt/address@hidden@address@hidden/�<�{.OJ�q4:f;fyn�t�������{Ny�
+|�em����I4�*B菤��N�ԽIy���%N:��'��6͉�!grp���=Ί��4����[EN ^%��
� jFs!^?T�������u�ѯ�]~���q��͉�H_
+VS���I*u���^���g�clSm�-��� address@hidden eko˶����HUԬ�h��e�"�� 
��Ǟ���ӂX7�!�ˀ��a�(���aR��
ѥ�����],��ť�|2|*��ko��d��_ڹ��&,���߿U�;f\#����sG_6l~����~p�ӷ���ş�9a�Ъ��W>�3��.O4�"�[�����WV\;�r;��r��D�S/ML���F�Ho
 7����t?/ye�V�,�B��}6�� /�C�qAS)M(� �Æ:I��x����=��K�+ED�����.:�`p�*p
8��,`����1�z����Ji��r��I&��1YƼ���rf$���hۆy�3��V4�1]#kV����o�q����[çM��'���ZY���t��ݻ���m{7&7N\�ÍWϜ��*�i4��$���HFb
a����t[�x�i�{HbCBm�ҔMh�s:address@hidden)address@hidden
Ȁ�p;ƚ�kI7�&"���,�8EMgΚtB�ϓ�k�[Q�1>P'�7h8C�p^�`���j\aU������J��[.��Lf���3�+i~�-����|��P2��+�/��W��h?��d�|�m�
Gg�0|
+(v+p�<�"���oV:V��ˇ��+-˭�2'���D�$�ɧ�힄8�Ck����
+���N�A�c�3ITD�#��rl-l��R3M�̴,os��[%�N{R~ڲ[�#�>��>R�OK?�?J����t��
�W:H��:�MT��{4]�:��V�����c�����SKY��    ���Z    
address@hidden:��j�w�#ӣz猍�}��gac;����,�_�_�zQ`/�qE1�9!��e� 
��S��4�'�)�d�Jf�1�i�d�bc���nYS[9�   HS+�0A'�V#��0���
�2)��+9z%G����6kY�G!F܀�Q�*����’b?�b�{��Ծ<��~
P������]�4����O����<��._�����öcm���?�55δ`��w��    !��67��?)���;.F�Q8,~ 
G_P�0�����C��="����p[���9sq�ɋ����z�
g�\�PE�L��kr��,�P+H��*�j����8��q��q+v�"��%��d��\�j����   
8�9��`�w!��L2D�*ުV���t�����G!u��ăB7I/-U�Tp��對k��N��p��su�.�Z��4��'Ծ����;��rf�

��6�bz��#7�e0��e���r�ݑ=�~D��5,�Qx��܀%r�эp�|�#�i�Ɓ]I��s�?Tz�>ح���΅?щ�̹7W��{+�?���J=<��$?�j�>��pݝK�Ӯ�T�^��e�����yl���r�K<SLW�.-~~��\���֬y��SVd�C�J�J=����Y�J�J=eA>'n@>q�Ńydv�s�ԣx5������#�e'�V��I���MӍ%J�c
  �
+��g�mJQ�GQ��`6���k�Ð���+ԦhJ�B��Ze��G9��J'~MO,�~03�U�f?c���).��t��u����j[�����������2s��׶�ʹ�R�[y�ju���]����Ʋ�9
�?�F
ޥz|�87eĐ�JxU��w߿����C����3gh��M�>address@hidden|��]�t���/�����h�����%m�\Ӻzђk@>'#�u�M���-
      address@hiddens�-�[�KI�Tl.�{��*s=��w�y���3x����۳�g�xw�v�w���}x?9 
���pA��X>V?���J�ʞ�yAI�6�ծ�-&7E&�E�����)�cD˔��lQ�0k�[!$�Ե[�f=d=m�6k����r��+�v�|address@hidden
+�޽0�{�����:jc�z�q�1WO����N|K�S\�}7M��r�ڤe�O�I^6z�������#~{�~o��d�u�Ez�𖢽L��
 
y�X�����Ѵ]�(��Ȃ�)�%�#�n��o����}�>���Kz�)Βƥ��r�P,N�녥�Za�����x�Z`�(�i��h顇�az���u�)�܈�T�Z4ų�v���(��v�<���f�V��]�
 
|:�����G|D���v���z��$�:I׶�#�<�wq��\=l�t�߈fٺ`'s�!�lűH���ß�`�'�O�������ݜqЙ��n>��E�y��Q3���d��s��c�hn�4�{�[����(y�p+}��N�D_�����G�G���I�'�'�*PY�M#h]F?�?6I
     
�q�d���&�I��ba�8X�F�äz:�4��)\/Β��Z��u�:��o�1�D;�}t��_:�>������=�C�C�}���>I?ط.?�??J��L��.�me�,�x�����(&f����hэ�Q•�&address@hidden'�;|<^�Gx���}+���
 
���Yc9f!lS�ݤ���m���w��1�ž�0b��_r��\l/��'j|(1��Ax.f�;}�2Q*��WH�^i/v���`x��)~`����"b#$f!Vt����q�a�P�8I��EW<�l��[j,wR��cB�/���Y�Ӈ^�����w�M�_�)���^5��!e��q�g��F�0�6���
kr���\��.
+E��?�G�)�U���7�ۼRi]YA� 
۝¿0~[�w��;lc_���Z�SbR�AH�lm����X�Gy��$�/i����Ë��:RQT�ӒC2���'<�?j��v$^��a�=9�s�

address@hidden&+�����e��4�Y�ټɶ��l¦�-�3��9;�햝���;SB9���>address@hidden'��������}�p$�#�c���S���e�ɤ��/�'address@hidden@��EU5{|<�$&%i�)���)8;[�x�\�nOJN��\�&SZ6'b$��S�QPUuS]�=b'����I^֕����H29���w��Q&gtG6�Jc���
 n  ��`{�hw%���j2At��:ht�5j���[��,�d޶^4��        
�H{/qύϿ��-r�C-��4�%����3��P�4�����Kn|���wF�b^�+���߿p�2G��s�<��2��JOQ�
/�z��,?wzu�9qf�S.����jo\9�dE߭d�"u`A����)d�\vq�5�җ��1�`p�ߠ�h1p#����sH��X+Q�/�GE�b*w
+��}��7�}�}��U�E�K���>�۔�!�4��pŮ*a�i���p��J,��\J7eZ��#ʇV�ņ�$>+?k���mUZee�7Q�r�!�6�m�I��[=h��Cv�5��x�b6�=&G6��fFU�3kQ������9b&�����̹�
+3��K��lx���<�5�<address@hidden;Ÿޙ4lH���Z�UlJW7T�]\�x�3��ޒ�����     
_>�b��߄94#/zA/�9����G/���
/address@hidden,UY��芭�1��A�+ 
+�tA��+�QE�^Y�U8$�fa��U�TAj�3/tB���2)>address@hidden@7����� 8�>�
:��5�}����-�_[�V~J��q��5��;�_�=�F�o����v��j��dps���p8�򶣸z���?��v��5�D΅o�>j�(��?0�2�Q��L���A3�j3��G�c����h�m�m���gݧ������WI�)�I$��lq3��5�ح6L�5�l�CЉm6ME�*���0+6��N�*��l��H��
+ht�V���!p�K���jX3�*[ԫb��a��T�B���u���&�3��1��>sjm
����"�%kD{
�l�2d?�������*8������ͭk�������=��n������c��9��~q"����>��!��x�u�g޺��ϘuN<�7�To�
 address@hidden;b9iqX��<&>b�&�kE��b��9b�V�fC�6��Lr'~A�
��l�`Ā��
+X0c@"��`�&�q�H�����6���=��XD��1��D����   �/�{?!�:2*J�KX`�g#�
�԰9�v��Q7�]79��      
��'}_[��z3���>r�j�ZШ��k�z��vq�!��������[.���0���������u�Cz�����}u!r<��0Q���8y�`�i?%W�������ܧw
��c�=�^a��W�>ǽ$�����8�)�iy��)O������sk���FNhp�&/t/��KU!�Sɍ�h�ܘ 
�J�����s2��.�8��~艢pn��z��� ���7��P�YMV�G�:���*��Baddress@hidden@�b?�
[��E�)""���L��^���|p�W�aӜ���;C�'����8�:yg7�"���_�8���"�0��ܳg[O��ak�֗�؝y�ȝ˖�˂,���°�Vu���:�
�`��ŕ�d�1�����K���?
��u`�ɓ]wE��+]��Hǿ���p�{����=�-�o���xց���˄xF�B
+�|�2�ٯ7:�ꀱ-W��L�ţL���|�F��h"����������1��<A���L�*��gQ�r��B�Dd���BeZ������6
    ,��b��@&�A�
�b�+ address@hidden(�
+��/�TE3>�������,�B�|����SV��
+-�<x��n|��<엝�V7(}㳶��2SQw�|/L��k(+F^0�~�����'3~x{�}�t�K���
�=�����/��g���{� 
address@hidden<address@hidden>a��`��%0�n>J�����Fkm�/��L]����W|=�?.�S6���l�n�x��ĺ����U�x�V�h��̦b*��e�R��Z��,��
r�l)�}ƕ��AMV
+#ű�n]��m����VxE@&'�("�9��fƅ�oyp&��
�8`Q%���"���c�Rn�$��2�����<f¦ǚ��2��L��Sp�I$"��Q75s�%�i;�T= 1
��y�.�i;��D4RA(��?n��g"�>��y�e_�4�9�0���;E�Pԋ������=OS��v��>�9�`�A����\�t
        0�����*��l  �a�G��[ ڣqƦ)�9�]axw��=�����x��S}S�̾R���I� 
S��2��!h)�
+�6�ي!��<a��=�7b�      
�����F��j�fR+�*��L�E��<����j�Qq3�,�A{���ћt��#�)�ߢ4�O�LJآ2����*#�u��K�2!sh�0;�Ẑ�8
 �2�}R8      �H%��c��0��W�����Q;�Xk-Y��
+�Ǵ)�� Zǝ�eS�>��f
-W��A����_�&�d��/address@hidden
+Y~���9��ߔ)�?�WgOa'YCAM�m�|r����ł"�!N��fDOy��s���le�Y�
5Η��i=b=b�f�ɞh���u����G'LKx�y����٣¹�����k�����9�s�������?���N����8���eY/�o*�8�TO^��ꦌ�j=��;p�c��ggdU'�e�N�3�ʑ����ڌ�c�93
 ������N�T�Ay(���vT�����
+5��h�G^4
@W���
�f����Q*���Z4ՠ1h��4����`��# B'VQUUX�ws^���=���<����~}y���� 
:��*|H�[PM?p��r��c0���n����߇�^h�!�>C�B���ᝣ.a��S
������w^����������
+c�     �:�dxg(�VLFcX9�b���y4
g��gm�A��`�Ԩ�����u�B[��m��$OtB�����6���{/���$�Y$����O�`�
+endstream
+endobj
+19 0 obj
+16265
+endobj
+20 0 obj
+<</Subtype/Type1C/Filter/FlateDecode/Length 21 0 R>>stream
+x�eP]HSa�>�;g�\i
�R��ߘ#ѥA��.�rN����ζ���ڏ5���U�eI8���&      
^X�X�b]�"����8^��E������>��Az��l���*���J��T9�CiJ>�Ê'Q���Q*�(�K�%���jy��,��3o?�˞��w������^RVV��Ri6�Qg��,��wJ�h2���#r���'���BN!�q�k�s���87j��㑻Qq}
    2��Ig�EM���列����������9Y$�v.%`y�7�Ny�/��;>address@hidden@6�r�|H
���"�O�����I�
+�%��F2��蕁�d"{>�&c�I�l��q��[8��jV�S5�U���E�2^�s��ϖ�f��L-a�䰚S0pŰ1�jTN�:PUU�Ob'�yB���H�8E^&��3FM��?|oh�Vtd|hkcwC��
���������6D?`�n�����-�&^W�A�5N)2�7�
;�}��p��I�|ٚ]ǟ�~��x���r������������U��xc�>u�x��PmP�5ו)�HL����D�a��ϩ��#s��cK8���zagK��&�D�FuBi�
 �        zj����;:�fT�    �/�y�
+endstream
+endobj
+21 0 obj
+642
+endobj
+13 0 obj
+<</BaseFont/ANAPBW+TTE1CC3880t00/FontDescriptor 12 0 R/Type/Font
+/FirstChar 1/LastChar 52/Widths[ 556 556 556 556 333 556 556 556 833 722 500 
278 611 278 778
+722 611 667 667 556 333 611 556 556 556 611 611 278 611 278 722
+722 722 722 722 667 667 667 611 556 556 389 278 778 556 278 556
+556 556 1000 722 556]
+/Encoding 22 0 R/Subtype/TrueType>>
+endobj
+22 0 obj
+<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+1/three/two/five/zero/hyphen/four/six/one/M/H/z/I/F/space/O/U/T/S/P/s/t/L/seven/eight/nine/n/d/slash/b/i/A/D/C/R/B/E/V/X/o/v/e/r/period/G/J/l/a/y/c/trademark/N/x]>>
+endobj
+11 0 obj
+<</BaseFont/GCCBBY+TTE1CFF4E0t00/FontDescriptor 10 0 R/Type/Font
+/FirstChar 1/LastChar 41/Widths[ 556 556 333 556 833 722 500 278 722 611 778 
611 556 556 556
+389 333 556 278 611 278 611 722 722 556 778 722 667 611 556 667
+722 667 667 889 611 278 333 611 556 556]
+/Encoding 23 0 R/Subtype/TrueType>>
+endobj
+23 0 obj
+<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+1/three/zero/hyphen/six/M/H/z/space/D/o/w/n/c/v/e/r/t/seven/I/F/i/g/R/N/one/G/B/E/h/nine/V/C/P/S/m/p/l/f/d/k/a]>>
+endobj
+9 0 obj
+<</BaseFont/SFXIBP+Times-Roman/FontDescriptor 8 0 R/Type/Font
+/FirstChar 32/LastChar 55/Widths[
+250 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0
+500 500 500 0 0 0 0 500]
+/Encoding/WinAnsiEncoding/Subtype/Type1>>
+endobj
+12 0 obj
+<</Type/FontDescriptor/FontName/ANAPBW+TTE1CC3880t00/FontBBox[-1 -210 877 
728]/Flags 4
+/Ascent 728
+/CapHeight 728
+/Descent -210
+/ItalicAngle 0
+/StemV 131
+/MissingWidth 750
+/FontFile2 16 0 R>>
+endobj
+10 0 obj
+<</Type/FontDescriptor/FontName/GCCBBY+TTE1CFF4E0t00/FontBBox[-5 -210 878 
728]/Flags 4
+/Ascent 728
+/CapHeight 728
+/Descent -210
+/ItalicAngle 0
+/StemV 131
+/MissingWidth 750
+/FontFile2 18 0 R>>
+endobj
+8 0 obj
+<</Type/FontDescriptor/FontName/SFXIBP+Times-Roman/FontBBox[0 -14 476 
676]/Flags 4
+/Ascent 676
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 71
+/MissingWidth 250
+/CharSet(/seven/space/hyphen/zero/one/two)/FontFile3 20 0 R>>
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 8.15)
+/CreationDate(D:20070228093838)
+/ModDate(D:20070228093838)
+/Title(Microsoft Word - MSDD-6000 Simplified Block.doc)
+/Creator(PScript5.dll Version 5.2)
+/Author(Phillip  Rezin)>>endobj
+xref
+0 24
+0000000000 65535 f 
+0000006322 00000 n 
+0000043061 00000 n 
+0000006253 00000 n 
+0000006092 00000 n 
+0000000015 00000 n 
+0000006072 00000 n 
+0000006370 00000 n 
+0000042818 00000 n 
+0000042188 00000 n 
+0000042610 00000 n 
+0000041684 00000 n 
+0000042402 00000 n 
+0000041084 00000 n 
+0000006411 00000 n 
+0000006441 00000 n 
+0000006493 00000 n 
+0000023942 00000 n 
+0000023964 00000 n 
+0000040314 00000 n 
+0000040336 00000 n 
+0000041064 00000 n 
+0000041444 00000 n 
+0000041999 00000 n 
+trailer
+<< /Size 24 /Root 1 0 R /Info 2 0 R
+/ID [(��Dž��g\(��3�1��)(��Dž��g\(��3�1��)]
+>>
+startxref
+43285
+%%EOF

Copied: gnuradio/trunk/gr-msdd6000/src (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src)


Property changes on: gnuradio/trunk/gr-msdd6000/src
___________________________________________________________________
Name: svn:ignore
   + Makefile
Makefile.in


Deleted: gnuradio/trunk/gr-msdd6000/src/Makefile.am

Copied: gnuradio/trunk/gr-msdd6000/src/Makefile.am (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/Makefile.am)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/Makefile.am                          (rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/Makefile.am  2008-02-29 19:26:49 UTC (rev 
7904)
@@ -0,0 +1,22 @@
+#
+# Copyright 2004,2005,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.
+# 
+
+SUBDIRS = lib python

Copied: gnuradio/trunk/gr-msdd6000/src/lib (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib)


Property changes on: gnuradio/trunk/gr-msdd6000/src/lib
___________________________________________________________________
Name: svn:ignore
   + Makefile
Makefile.in
.libs
.deps
msdd.cc
msdd.py
*.pyc


Deleted: gnuradio/trunk/gr-msdd6000/src/lib/Makefile.am

Copied: gnuradio/trunk/gr-msdd6000/src/lib/Makefile.am (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/Makefile.am)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/Makefile.am                              
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/Makefile.am      2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,117 @@
+#
+# Copyright 2008 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.
+# 
+
+
+include $(top_srcdir)/Makefile.common
+
+# Install this stuff so that it ends up as the gnuradio.msdd module
+# This usually ends up at:
+#   ${prefix}/lib/python${python_version}/site-packages/gnuradio
+
+ourpythondir = $(grpythondir)
+ourlibdir    = $(grpyexecdir)
+
+AM_CPPFLAGS =                          \
+       $(STD_DEFINES_AND_INCLUDES)     \
+       $(PYTHON_CPPFLAGS)              \
+       $(WITH_INCLUDES)                \
+       $(CPPUNIT_INCLUDES)
+
+noinst_LTLIBRARIES = libmsdd.la
+
+libmsdd_la_SOURCES =                   \
+       msdd_source_base.cc             \
+       msdd_source_c.cc                \
+       msdd_source_s.cc
+
+# ------------------------------------------------------------------------
+#  This is the swig-ish part of the Makefile.
+#  It builds the msdd module which we'll load into python
+# ------------------------------------------------------------------------
+
+SWIGCPPPYTHONARGS = -fvirtual -python -modern $(PYTHON_CPPFLAGS) \
+       $(STD_DEFINES_AND_INCLUDES) $(WITH_SWIG_INCLUDES) $(WITH_INCLUDES)
+
+ALL_IFILES =                           \
+       $(LOCAL_IFILES)                 \
+       $(NON_LOCAL_IFILES)             
+
+NON_LOCAL_IFILES =                     \
+       $(top_srcdir)/gnuradio-core/src/lib/swig/gnuradio.i
+
+LOCAL_IFILES =                                 \
+       $(top_srcdir)/gr-msdd6000/src/lib/msdd.i                                
+
+
+# These files are built by SWIG.  The first is the C++ glue.
+# # The second is the python wrapper that loads the _msdd shared library
+# # and knows how to call our extensions.
+#
+#
+#
+swig_built_sources =                   \
+       msdd.cc                         \
+       msdd.py 
+
+# This gets msdd.py installed in the right place
+#
+ourpython_PYTHON =                     \
+       msdd.py
+
+
+ourlib_LTLIBRARIES = _msdd.la
+
+# These are the source files that go into the shared library
+_msdd_la_SOURCES =                     \
+       msdd.cc
+
+# magic flag
+_msdd_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version 
+
+# link the library against some comon swig runtime code and the 
+# c++ standard library
+
+_msdd_la_LIBADD =                      \
+       $(GNURADIO_CORE_LA)             \
+       $(PYTHON_LDFLAGS)               \
+       libmsdd.la                      \
+       -lstdc++
+
+msdd.cc msdd.py: msdd.i $(ALL_FILES)
+       $(SWIG) $(SWIGCPPPYTHONARGS) -module msdd -o msdd.cc $(LOCAL_IFILES)
+
+# These headers get installed in ${prefix}/include/gnuradio
+grinclude_HEADERS =                    \
+       msdd_buffer_copy_behaviors.h    \
+       msdd_source_base.h              \
+       msdd_source_c.h                 \
+       msdd_source_s.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

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd.i

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd.i (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd.i)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd.i                           (rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd.i   2008-02-29 19:26:49 UTC (rev 
7904)
@@ -0,0 +1,254 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+
+%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 <stdexcept>
+#include "msdd_source_s.h"
+#include "msdd_source_c.h"
+%}
+
+// ================================================================
+//                        abstract classes
+// ================================================================
+
+// ----------------------------------------------------------------
+
+class msdd_source_base : public gr_sync_block {
+
+ protected:
+  msdd_source_base (const std::string &name,
+                   gr_io_signature_sptr output_signature,
+                   int which_board,
+                   msdd_source_base::msdd_command_type_t opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error);
+
+  /*!
+   * \brief return number of msdd input bytes required to produce noutput 
items.
+   */
+  int ninput_bytes_reqd_for_noutput_items (int noutput_items) = 0;
+
+  /*!
+   * \brief number of bytes in a low-level sample
+   */
+  unsigned int sizeof_basic_sample() const;
+
+  /*!
+   * \brief convert between native msdd format and output item format
+   *
+   * \param output_items[out]   stream(s) of output items
+   * \param output_index[in]    starting index in output_items
+   * \param output_items_available[in]  number of empty items available at 
item[index]
+   * \param output_items_produced[out]  number of items produced by copy
+   * \param msdd_buffer[in]   source buffer
+   * \param msdd_buffer_length[in]  number of bytes available in \p msdd_buffer
+   * \param bytes_read[out]   number of bytes read from \p msdd_buffer
+   *
+   * The copy must consume all bytes available.  That is, \p bytes_read must 
equal
+   * \p msdd_buffer_length.
+   */
+  virtual void copy_from_msdd_buffer (gr_vector_void_star &output_items,
+                                     int output_index,
+                                     int output_items_available,
+                                     int &output_items_produced,
+                                     const void *msdd_buffer,
+                                     int msdd_buffer_length,
+                                     int &bytes_read) = 0;
+  
+  int readsock(int sockfd, unsigned char* buf, int nbytes);
+  
+  void* make_request_packet(unsigned int& size, unsigned int number_samples);
+  
+ public:
+  //! magic value used on alternate register read interfaces
+  static const int READ_FAILED = -99999;
+
+  ~msdd_source_base ();
+
+  int work (int noutput_items,
+           gr_vector_const_void_star &input_items,
+           gr_vector_void_star &output_items);
+
+  bool start();
+  bool stop();
+  
+  /*!
+   * \brief Set Programmable Gain Amplifier (PGA)
+   *
+   * \param which      which D/A [0,3]
+   * \param gain_in_db gain value (linear in dB)
+   *
+   * gain is rounded to closest setting supported by hardware.
+   * Note that DAC 0 and DAC 1 share a gain setting as do DAC 2 and DAC 3.
+   * Setting DAC 0 affects DAC 1 and vice versa.  Same with DAC 2 and DAC 3.
+   *
+   * \returns true iff sucessful.
+   *
+   * \sa pga_min(), pga_max(), pga_db_per_step()
+   */
+  bool set_pga (int which, double gain_in_db);
+
+  /*!
+   * \brief Return programmable gain amplifier gain in dB.
+   *
+   * \param which      which D/A [0,3]
+   */
+  double pga (int which) const;
+
+  /*!
+   * \brief Return minimum legal PGA gain in dB.
+   */
+  double pga_min () const;
+
+  /*!
+   * \brief Return maximum legal PGA gain in dB.
+   */
+  double pga_max () const;
+
+  /*!
+   * \brief Return hardware step size of PGA (linear in dB).
+   */
+  double pga_db_per_step () const;
+
+  /*!
+   * \brief open a socket specified by the port and ip address info
+   *
+   * Opens a socket, binds to the address, and waits for a connection
+   * over UDP. If any of these fail, the fuction retuns the error and exits.
+   */
+  bool open();
+
+  /*!
+   * \brief Close current socket.
+   *
+   * Shuts down read/write on the socket
+   */
+  bool close();
+  
+  /*!
+   * \brief Set decimator rate.  \p rate must be EVEN and in [8, 256].
+   *
+   * The final complex sample rate across the USB is
+   *   adc_freq () / decim_rate ()
+   */
+  bool set_decim_rate (unsigned int rate);
+
+  /*!
+   * \brief set the center frequency of the digital down converter.
+   *
+   * \p channel must be 0.  \p freq is the center frequency in Hz.
+   * It must be in the range [-FIXME, FIXME].  The frequency specified is
+   * quantized.  Use rx_freq to retrieve the actual value used.
+   */
+  bool set_rx_freq (int channel, double freq);
+
+  void set_verbose (bool verbose);
+
+  // ACCESSORS
+
+  unsigned int decim_rate () const;
+  double rx_freq (int channel) const;
+  int noverruns () const { return d_noverruns; }
+
+  /*!
+   * \brief return the msdd's serial number.
+   *
+   * \returns non-zero length string iff successful.
+   */
+  std::string serial_number();
+  
+  bool set_desired_packet_size (int which, unsigned long packet_size);
+
+  unsigned long desired_packet_size (int which) const;
+
+};
+
+
+// ================================================================
+//      concrete sources
+// ================================================================
+
+
+// ----------------------------------------------------------------
+
+GR_SWIG_BLOCK_MAGIC(msdd,source_s)
+
+msdd_source_s_sptr
+msdd_make_source_s (int which_board, 
+                   unsigned int decim_rate,
+                   unsigned int fft_points,
+                   double initial_rx_freq,
+                   int opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error);
+
+
+class msdd_source_s : public msdd_source_base {
+protected:
+  msdd_source_s (int which_board, 
+                unsigned int decim_rate,
+                unsigned int fft_points,
+                double initial_rx_freq,
+                int opp_mode,
+                const char *src, 
+                unsigned short port_src
+                ) throw (std::runtime_error);
+  
+  virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items);
+  
+public:
+  ~msdd_source_s ();
+};
+
+
+GR_SWIG_BLOCK_MAGIC(msdd,source_c)
+
+msdd_source_c_sptr
+msdd_make_source_c (int which_board, 
+                   int opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error);
+
+
+class msdd_source_c : public msdd_source_base {
+protected:
+  msdd_source_c (int which_board, 
+                int opp_mode,
+                const char *src, 
+                unsigned short port_src
+                ) throw (std::runtime_error);
+  
+  virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items);
+  
+public:
+  ~msdd_source_c ();
+};

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd_buffer_copy_behaviors.h

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd_buffer_copy_behaviors.h (from 
rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd_buffer_copy_behaviors.h)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd_buffer_copy_behaviors.h             
                (rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd_buffer_copy_behaviors.h     
2008-02-29 19:26:49 UTC (rev 7904)
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+#ifndef MSDD_BUFFER_COPY_BEHAVIORS_H_
+#define MSDD_BUFFER_COPY_BEHAVIORS_H_
+
+namespace msdd {
+       
+  class BufferCopyBehavior 
+  {
+  public: 
+    virtual void operator() (gr_vector_void_star &a, const void * b, unsigned 
int output_index, unsigned int nitems) = 0;
+    virtual ~BufferCopyBehavior() {};
+  };
+         
+  template <class Tin, class Tout> 
+  class BufferCopyBehaviorGeneric : public BufferCopyBehavior {
+    void operator() (gr_vector_void_star &a, const void * b, unsigned int 
output_index, unsigned int nitems) {
+      Tout     *out(&(reinterpret_cast<Tout *>(a[0]))[output_index]);  // 
sloppy
+      const Tin        *in(reinterpret_cast<const Tin *>(b)); // equisloppy
+      
+      for (unsigned int i = 0; i < nitems; ++i) {
+       out[i] = in[i];
+      }
+    }
+  };
+  
+  template <class Tin>
+  class BufferCopyBehaviorComplex : public BufferCopyBehavior {
+    void operator() (gr_vector_void_star &a, const void * b, unsigned int 
output_index, unsigned int nitems) {
+      gr_complex       *out(&(reinterpret_cast<gr_complex 
*>(a[0]))[output_index]);    // sloppy
+      const Tin        *in(reinterpret_cast<const Tin *>(b)); // equisloppy
+      
+      for (unsigned int i = 0; i < nitems; ++i) {
+       out[i] = gr_complex (in[4*i+1],in[4*i+3]);
+      }
+    }
+  };
+}
+
+#endif /*MSDD_BUFFER_COPY_BEHAVIORS_H_*/

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.cc

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.cc (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd_source_base.cc)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.cc                      
        (rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.cc      2008-02-29 
19:26:49 UTC (rev 7904)
@@ -0,0 +1,817 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+
+//#define MSDD_DEBUG_TRUE
+//#define MSDD_DEBUG2_TRUE
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <msdd_source_base.h>
+#include <gr_io_signature.h>
+#include <assert.h>
+#include <netdb.h>
+#include <omnithread.h>
+#include <stdexcept>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+#ifdef MSDD_DEBUG_TRUE
+#include <iostream>
+#define MSDD_DEBUG(x) std::cout << x << std::endl;
+#else
+#define MSDD_DEBUG(x)
+#endif
+
+
+#ifdef MSDD_DEBUG2_TRUE
+#include <iostream>
+#define MSDD_DEBUG2(x) std::cout << x << std::endl;
+#else
+#define MSDD_DEBUG2(x)
+#endif
+
+#include <iostream>
+
+namespace {
+  const int OUTPUT_MAX((1 << 15)*8);
+  const double PGA_MAX(75);
+  const double PGA_MIN(10);
+  const double PGA_STEP(.5);
+  const double DEFAULT_RX_FREQ(2.417e6);
+  const double DEFAULT_GAIN(32);
+  const msdd_source_base::msdd_fft_mode_t 
DEFAULT_FFT_MODE(msdd_source_base::MODE_MAG);
+  const msdd_source_base::msdd_fft_points_t 
DEFAULT_FFT_POINTS(msdd_source_base::S8192);
+  const msdd_source_base::msdd_decimation_t 
DEFAULT_DECIMATION_RATE(msdd_source_base::D2);
+}
+
+class msdd_source_base::Impl {
+  
+public:
+  Impl(int opp_mode) :
+    d_noverruns (0),
+    d_deci_rate (DEFAULT_DECIMATION_RATE),
+    d_rx_freq ((unsigned long) DEFAULT_RX_FREQ),
+    d_gain(DEFAULT_GAIN),
+    d_verbose (false),
+    d_updated(false),
+    d_msdd_command_type((msdd_command_type_t) opp_mode),
+    d_msdd_fft_mode(DEFAULT_FFT_MODE),
+    d_desired_sample_size(2^15),
+    d_fft_points (DEFAULT_FFT_POINTS)
+  {
+  }
+
+  int            d_noverruns;
+  msdd_decimation_t   d_deci_rate;
+  unsigned long  d_rx_freq;
+  double         d_gain;
+  bool           d_verbose;
+  bool           d_updated;  
+  msdd_command_type_t d_msdd_command_type;
+  msdd_fft_mode_t d_msdd_fft_mode;
+  unsigned long  d_desired_sample_size;
+  
+  int            d_socket;        // handle to socket
+  int            d_socket_rcv;    // handle to socket retuned in the accept 
call
+  struct in_addr d_ip_src;        // store the source IP address to use
+  unsigned short d_port_src;      // the port number to open for connections 
to this service
+  sockaddr_in    d_sockaddr_src;  // store the source sockaddr data (formatted 
IP address and port number) 
+  std::auto_ptr<unsigned char> d_temp_buff;     // hold buffer between calls
+  
+  omni_mutex    d_mutex;
+  msdd_fft_points_t   d_fft_points; 
+  
+  struct msdd_request_fft_packet {
+    msdd_command_type_t command_type;
+    int foo_x20;
+    unsigned int center_freq_mhz;
+    int offset_freq_hz;
+    int gain;
+    msdd_fft_window_type_t window_type;
+    msdd_fft_points_t fft_points;
+    msdd_decimation_t decimation;
+    msdd_fft_mode_t fft_mode;
+    int number_sets;
+  } __attribute__((__packed__));
+  
+  struct msdd_request_iq_packet {
+    msdd_command_type_t command_type;
+    int foo0x18;
+    unsigned int center_freq_mhz;
+    int offset_freq_hz;
+    int gain;
+    int number;
+    msdd_decimation_t decimation;
+    int number_sets;
+  } __attribute__((__packed__));
+
+  void make_request_fft_packet(msdd_request_fft_packet& packet);
+  
+  void make_request_iq_packet(msdd_request_iq_packet& packet, unsigned int 
number_samples);
+  
+  msdd_request_fft_packet   d_fft_request_packet; // fft request packet
+  msdd_request_iq_packet    d_iq_request_packet; // fft request packet
+};
+
+
+msdd_source_base::msdd_source_base (const std::string &name,
+                                   gr_io_signature_sptr output_signature,
+                                   int which_board,
+                                   int opp_mode,
+                                   const char *src, 
+                                   unsigned short port_src
+                                   ) throw (std::runtime_error)
+  : gr_sync_block (name,
+                  gr_make_io_signature (0, 0, 0),
+                  output_signature),
+    pimpl(new Impl(opp_mode))
+{
+  int ret (0);
+    
+  // Set up the address stucture for the source address and port numbers
+  // Get the source IP address from the host name
+  struct hostent *hsrc (gethostbyname(src));
+    
+  if(hsrc) {   // if the source was provided as a host namex
+    pimpl->d_ip_src = *(struct in_addr*)hsrc->h_addr_list[0];    
+  }
+  else { // assume it was specified as an IP address
+    if((ret=inet_aton(src, &pimpl->d_ip_src)) == 0) {            // format IP 
address
+      perror("Not a valid source IP address or host name");
+      throw std::runtime_error("can't initialize source socket");
+    }
+  }
+    
+  pimpl->d_port_src = htons(port_src);     // format port number
+  
+  pimpl->d_sockaddr_src.sin_family = AF_INET;
+  pimpl->d_sockaddr_src.sin_addr   = pimpl->d_ip_src;
+  pimpl->d_sockaddr_src.sin_port   = pimpl->d_port_src;
+  
+  pimpl->d_temp_buff.reset(new unsigned char[OUTPUT_MAX + 
+                                            
std::max(sizeof(Impl::msdd_request_iq_packet),
+                                                     
sizeof(Impl::msdd_request_fft_packet))]);   // allow it to hold up to 
payload_size bytes
+  
+  set_output_multiple (OUTPUT_MAX / output_signature->sizeof_stream_item (0));
+}
+                                     
+
+bool
+msdd_source_base::open()
+{
+  omni_mutex_lock l(pimpl->d_mutex);   // hold mutex for duration of this 
function
+  // create socket
+  MSDD_DEBUG2("MSDD: Before socket ")
+  pimpl->d_socket = socket(PF_INET, SOCK_STREAM, 0);
+  if(pimpl->d_socket == -1) {
+    perror("socket open");
+    throw std::runtime_error("can't open socket");
+  }
+
+  // Turn on reuse address
+  int opt_val (1);
+  if(setsockopt(pimpl->d_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&opt_val, 
sizeof(int)) == -1) {
+    perror("SO_REUSEADDR");
+    throw std::runtime_error("can't set socket option SO_REUSEADDR");
+  }
+
+  // Don't wait when shutting down
+  linger lngr;
+  lngr.l_onoff  = 1;
+  lngr.l_linger = 0;
+  if(setsockopt(pimpl->d_socket, SOL_SOCKET, SO_LINGER, (void*)&lngr, 
sizeof(linger)) == -1) {
+    perror("SO_LINGER");
+    throw std::runtime_error("can't set socket option SO_LINGER");
+  }
+
+  // Set a timeout on the receive function to not block indefinitely
+  // This value can (and probably should) be changed
+  //  timeval timeout;
+  //  timeout.tv_sec = 1;
+  //  timeout.tv_usec = 0;
+  //  if(setsockopt(d_socket, SOL_SOCKET, SO_RCVTIMEO, (void*)&timeout, 
sizeof(timeout)) == -1) {
+  //    perror("SO_RCVTIMEO");
+  //    throw std::runtime_error("can't set socket option SO_RCVTIMEO");
+  //  }
+
+  // bind socket to an address and port number to listen on
+  MSDD_DEBUG2("MSDD: Before socket bind to " << pimpl->d_sockaddr_src.sin_port)
+  if(::connect(pimpl->d_socket, (struct sockaddr*)&pimpl->d_sockaddr_src, 
sizeof(pimpl->d_sockaddr_src)) == -1) {
+    perror("socket bind");
+    throw std::runtime_error("can't bind socket");
+  }
+
+  MSDD_DEBUG2("MSDD: Socket open")
+  pimpl->d_updated = true;
+  return pimpl->d_socket != 0;
+}
+
+/* read n bytes from a socket descriptor */
+int 
+msdd_source_base::readsock(int sockfd, unsigned char* buf, int nbytes) {
+  int nleft (nbytes);
+  int nread (0);
+    
+  while (nleft > 0) {
+    MSDD_DEBUG2("MSDD: Before socket read: " << nleft)
+    if ((nread = ::read(sockfd, buf, nleft)) < 0) {
+      return(nread); /* error, nread < 0 */
+    } else if (nread == 0) {
+      break;
+    }
+            
+    nleft -= nread;
+    buf += nread;
+  }
+  return(nbytes - nleft);
+}
+
+bool
+msdd_source_base::close()
+{
+  omni_mutex_lock l(pimpl->d_mutex);   // hold mutex for duration of this 
function
+  
+  if (pimpl->d_socket){
+    shutdown(pimpl->d_socket, SHUT_RDWR);
+    pimpl->d_socket = 0;
+  }
+  pimpl->d_updated = true;
+  
+  return true;
+}
+
+msdd_source_base::~msdd_source_base ()
+{
+  msdd_source_base::close();
+}
+
+unsigned int
+msdd_source_base::sizeof_basic_sample() const
+{
+  switch (pimpl->d_msdd_command_type) {
+  case SAMPLES_REALTIME:
+    return 4;
+  case SAMPLES_FFT:
+    switch (pimpl->d_msdd_fft_mode) {
+    case MODE_IQ:
+    case MODE_MAG:
+      return 4;
+    case MODE_MAGDB:
+      return 1;
+    default:
+      assert (false); // bad mode
+    }
+  default:
+    assert (false); // bad mode
+  }
+}
+
+bool
+msdd_source_base::start()
+{
+  return msdd_source_base::open();
+}
+
+bool
+msdd_source_base::stop()
+{
+  return msdd_source_base::close();
+}
+
+void* 
+msdd_source_base::make_request_packet(unsigned int& size, unsigned int 
number_samples) {
+  switch (pimpl->d_msdd_command_type) {
+  case SAMPLES_REALTIME:
+    pimpl->make_request_iq_packet(pimpl->d_iq_request_packet, number_samples);
+    size = sizeof (pimpl->d_iq_request_packet);
+    return &pimpl->d_iq_request_packet;
+  case SAMPLES_FFT:
+    pimpl->make_request_fft_packet(pimpl->d_fft_request_packet);
+    size = sizeof (pimpl->d_fft_request_packet);
+    return &pimpl->d_fft_request_packet;
+  default:
+    assert (false); // bad mode
+  }
+}
+
+void 
+msdd_source_base::Impl::make_request_fft_packet(msdd_request_fft_packet& 
packet) 
+{
+  packet.command_type = SAMPLES_FFT;  // FFT samples Command
+  packet.foo_x20 = 0x20;
+  packet.center_freq_mhz = d_rx_freq;
+  packet.offset_freq_hz = 0;
+  packet.gain = (int) d_gain; // gain
+  packet.window_type = WINDOW_HANNING; // magic number
+  packet.fft_points = d_fft_points;
+  packet.decimation = d_deci_rate;
+  packet.fft_mode = MODE_MAGDB;
+  packet.number_sets = 1;
+}
+
+void 
+msdd_source_base::Impl::make_request_iq_packet(msdd_request_iq_packet& packet, 
unsigned int number_samples) 
+{
+  packet.command_type = SAMPLES_REALTIME;  // FFT samples Command
+  packet.foo0x18 = 0x18; // magic number
+  packet.center_freq_mhz = d_rx_freq;
+  packet.offset_freq_hz = 0;
+  packet.gain = (int) d_gain; // gain
+  packet.number = number_samples * 4;
+  packet.decimation = d_deci_rate;
+  packet.number_sets = 1;
+}
+
+int
+msdd_source_base::work (int noutput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items)
+{
+  int output_index (0);
+  int output_items_produced;
+  int bytes_read;
+  
+  unsigned int packet_size;
+  
+  MSDD_DEBUG("MSDD: requested items: " << noutput_items)
+  int noutput_items_desired = std::min (noutput_items, (int) 
pimpl->d_desired_sample_size);
+  MSDD_DEBUG("MSDD: desired items: " << noutput_items_desired)
+    
+  while (output_index < noutput_items_desired){
+
+    int nbytes = (pimpl->d_msdd_command_type == SAMPLES_REALTIME) ? 
+      ninput_bytes_reqd_for_noutput_items (noutput_items_desired - 
output_index) :
+      ninput_bytes_reqd_for_noutput_items (msdd_source_base::fft_points());
+    
+    void* request_packet = msdd_source_base::make_request_packet(packet_size, 
noutput_items_desired);
+    
+    nbytes = std::min (nbytes, OUTPUT_MAX);
+    MSDD_DEBUG2("MSDD: payload sizes: nbytes1: " << nbytes )
+      
+    // send request
+    int result_nbytes = ::write(pimpl->d_socket, request_packet, packet_size);
+    //assert (result_nbytes == sizeof(msdd_request_packet));
+    
+    // receive ack
+    result_nbytes = ::read (pimpl->d_socket, (unsigned char*) request_packet, 
packet_size);
+    MSDD_DEBUG2("MSDD: response: " << result_nbytes)
+    //assert (result_nbytes == sizeof(msdd_request_packet));
+    
+    // receive payload
+    result_nbytes = msdd_source_base::readsock (pimpl->d_socket, 
pimpl->d_temp_buff.get(), nbytes);
+    MSDD_DEBUG("MSDD: reading bytes: " << nbytes << " received: " << 
result_nbytes)
+    if (result_nbytes > (int) nbytes){
+      // fprintf (stderr, "msdd_source: overrun\n");
+      fputs ("uO", stderr);
+      pimpl->d_noverruns++;
+      result_nbytes = nbytes; // truncate
+    }
+    
+    if (result_nbytes < 0)     // We've got a problem.  Usually board 
unplugged or powered down.
+      return -1;               // Indicate we're done.
+
+    if (result_nbytes != nbytes){      // not really an error, but unexpected
+      fprintf (stderr, "msdd_source: short read.  Expected %d, got %d\n",
+              nbytes, result_nbytes);
+    }
+
+    copy_from_msdd_buffer (output_items,
+                          output_index,
+                          noutput_items_desired - output_index,   // 
output_items_available
+                          output_items_produced,          // [out]
+                          pimpl->d_temp_buff.get(),                            
   // usrp_buffer
+                          result_nbytes,
+                          bytes_read);                    // [out]
+    
+    output_index += output_items_produced;
+    
+    if (pimpl->d_msdd_command_type == SAMPLES_FFT) break; 
+  }
+
+  MSDD_DEBUG("MSDD: items produced: " << output_items_produced << " index: " 
<< output_index)
+  
+  //assert(false);
+  return output_index;
+}
+
+
+bool
+msdd_source_base::set_decim_rate (unsigned int rate)
+{
+  bool result (true);
+  switch (rate) {
+  case 1:
+    pimpl->d_deci_rate = D0;
+    break;
+  case 2:
+    pimpl->d_deci_rate = D1;
+    break;      
+  case 4:
+    pimpl->d_deci_rate = D2;
+    break;       
+  case 8:
+    pimpl->d_deci_rate = D3;
+    break;       
+  case 16:
+    pimpl->d_deci_rate = D4;
+    break;
+  case 32:
+    pimpl->d_deci_rate = D5;
+    break;
+  case 64:
+    pimpl->d_deci_rate = D6;
+    break;
+  case 128:
+    pimpl->d_deci_rate = D7;
+    break;
+  case 256:
+    pimpl->d_deci_rate = D8;
+    break;
+  default:
+    result = false;
+  }
+  
+  return result;
+}
+//
+//bool
+//msdd_source_base::set_nchannels (int nchan)
+//{
+//  // return d_usrp->set_nchannels (nchan);
+//     return true;
+//}
+//
+//bool
+//msdd_source_base::set_mux (int mux)
+//{
+//  return d_usrp->set_mux (mux);
+//}
+
+bool
+msdd_source_base::set_rx_freq (int channel, double freq)
+{
+  assert (channel == 0);
+  bool result (false);
+  
+  if (freq >=  30e6 && freq <= 6e9) {
+    pimpl->d_rx_freq = (unsigned long) freq / 1000000;
+    result = true;
+  }
+  
+  return result;
+}
+
+
+unsigned long
+msdd_source_base::set_fft_size (int channel, unsigned long fft_size)
+{
+  assert (channel == 1);
+  
+  switch (fft_size) {
+  case 256:        
+    pimpl->d_fft_points = S256;
+    break;
+  case 512:
+    pimpl->d_fft_points = S512;       
+    break;
+  case 1024:
+    pimpl->d_fft_points = S1024;
+    break;        
+  case 2048:
+    pimpl->d_fft_points = S2048;
+    break;        
+  case 4096:
+    pimpl->d_fft_points = S4096;
+    break;        
+  case 8192:
+    pimpl->d_fft_points = S8192;
+    break;        
+  case 16384:
+    pimpl->d_fft_points = S16384;
+    break;        
+  case 32768:
+    pimpl->d_fft_points = S32768;
+    break;        
+  }
+  
+  return msdd_source_base::fft_points();
+}
+
+//
+//long
+//msdd_source_base::fpga_master_clock_freq() const
+//{
+//  return d_usrp->fpga_master_clock_freq();
+//}
+//
+//long
+//msdd_source_base::converter_rate() const
+//{
+//  // return d_usrp->converter_rate();
+//     return 8;
+//}
+
+unsigned int
+msdd_source_base::decim_rate () const
+{
+  return 1 << pimpl->d_deci_rate;
+}
+//
+//int
+//msdd_source_base::nchannels () const
+//{
+//  return d_usrp->nchannels ();
+//}
+//
+//int
+//msdd_source_base::mux () const
+//{
+//  return d_usrp->mux ();
+//}
+
+double
+msdd_source_base::rx_freq (int channel) const
+{
+  assert (channel == 0);
+  
+  return pimpl->d_rx_freq;
+}
+
+unsigned int
+msdd_source_base::fft_points() const
+{
+  return (1 << pimpl->d_fft_points);
+}
+
+int 
+msdd_source_base::noverruns () const 
+{ 
+  return pimpl->d_noverruns; 
+}
+
+//bool
+//msdd_source_base::set_fpga_mode (int mode)
+//{
+//  return d_usrp->set_fpga_mode (mode);
+//}
+//
+//bool
+//msdd_source_base::set_ddc_phase (int channel, int phase)
+//{
+//  return d_usrp->set_ddc_phase(channel, phase);
+//}
+//
+//bool
+//msdd_source_base::set_dc_offset_cl_enable(int bits, int mask)
+//{
+//  return d_usrp->set_dc_offset_cl_enable(bits, mask);
+//}
+
+void
+msdd_source_base::set_verbose (bool verbose)
+{  
+  pimpl->d_verbose = verbose;
+}
+//
+//bool
+//msdd_source_base::write_aux_dac (int which_dboard, int which_dac, int value)
+//{
+//  return d_usrp->write_aux_dac (which_dboard, which_dac, value);
+//}
+//
+//int
+//msdd_source_base::read_aux_adc (int which_dboard, int which_adc)
+//{
+//  return d_usrp->read_aux_adc (which_dboard, which_adc);
+//}
+//
+//bool
+//msdd_source_base::write_eeprom (int i2c_addr, int eeprom_offset, const 
std::string buf)
+//{
+//  return d_usrp->write_eeprom (i2c_addr, eeprom_offset, buf);
+//}
+//
+//std::string
+//msdd_source_base::read_eeprom (int i2c_addr, int eeprom_offset, int len)
+//{
+//  return d_usrp->read_eeprom (i2c_addr, eeprom_offset, len);
+//}
+//
+//bool
+//msdd_source_base::write_i2c (int i2c_addr, const std::string buf)
+//{
+//  return d_usrp->write_i2c (i2c_addr, buf);
+//}
+//
+//std::string
+//msdd_source_base::read_i2c (int i2c_addr, int len)
+//{
+//  return d_usrp->read_i2c (i2c_addr, len);
+//}
+//
+bool
+msdd_source_base::set_pga (int which, double gain)
+{
+  if (gain >= PGA_MIN & gain <= PGA_MAX) {
+    pimpl->d_gain = gain;
+    return true;
+  }
+  return false;
+}
+
+double
+msdd_source_base::pga (int which) const
+{
+  return pimpl->d_gain;
+}
+
+double
+msdd_source_base::pga_min () const
+{
+  return PGA_MIN;
+}
+
+double
+msdd_source_base::pga_max () const
+{
+  return PGA_MAX;
+}
+
+double
+msdd_source_base::pga_db_per_step () const
+{
+  return PGA_STEP;
+}
+
+//int
+//msdd_source_base::daughterboard_id (int which) const
+//{
+//  return d_usrp->daughterboard_id (which);
+//}
+//
+//
+//bool
+//msdd_source_base::set_adc_offset (int which, int offset)
+//{
+//  return d_usrp->set_adc_offset (which, offset);
+//}
+//
+//bool
+//msdd_source_base::set_dac_offset (int which, int offset, int offset_pin)
+//{
+//  return d_usrp->set_dac_offset (which, offset, offset_pin);
+//}
+//
+//bool
+//msdd_source_base::set_adc_buffer_bypass (int which, bool bypass)
+//{
+//  return d_usrp->set_adc_buffer_bypass (which, bypass);
+//}
+
+std::string
+msdd_source_base::serial_number()
+{
+  return "SoftTronics MSDD 6000";
+}
+//
+//bool
+//msdd_source_base::_write_oe (int which_dboard, int value, int mask)
+//{
+//  return d_usrp->_write_oe (which_dboard, value, mask);
+//}
+//
+//bool
+//msdd_source_base::write_io (int which_dboard, int value, int mask)
+//{
+//  return d_usrp->write_io (which_dboard, value, mask);
+//}
+//
+//int
+//msdd_source_base::read_io (int which_dboard)
+//{
+//  return d_usrp->read_io (which_dboard);
+//}
+//
+//
+//
+//
+//// internal routines...
+//
+//bool
+//msdd_source_base::_write_fpga_reg (int regno, int value)
+//{
+//  return d_usrp->_write_fpga_reg (regno, value);
+//}
+//
+//bool
+//msdd_source_base::_write_fpga_reg_masked (int regno, int value, int mask)
+//{
+//  return d_usrp->_write_fpga_reg_masked (regno, value, mask);
+//}
+//
+//int
+//msdd_source_base::_read_fpga_reg (int regno)
+//{
+//  return d_usrp->_read_fpga_reg (regno);
+//}
+//
+//bool
+//msdd_source_base::_write_9862 (int which_codec, int regno, unsigned char 
value)
+//{
+//  return d_usrp->_write_9862 (which_codec, regno, value);
+//}
+//
+//int
+//msdd_source_base::_read_9862 (int which_codec, int regno) const
+//{
+//  return d_usrp->_read_9862 (which_codec, regno);
+//}
+//
+//bool
+//msdd_source_base::_write_spi (int optional_header, int enables,
+//                            int format, std::string buf)
+//{
+//  return d_usrp->_write_spi (optional_header, enables, format, buf);
+//}
+//
+//std::string
+//msdd_source_base::_read_spi (int optional_header, int enables, int format, 
int len)
+//{
+//  return d_usrp->_read_spi (optional_header, enables, format, len);
+//}
+//
+//bool
+//msdd_source_base::set_format(unsigned int format)
+//{
+//  return d_usrp->set_format(format);
+//}
+//
+//unsigned int
+//msdd_source_base::format() const
+//{
+//  return d_usrp->format();
+//}
+//
+//unsigned int
+//msdd_source_base::make_format(int width, int shift, bool want_q, bool 
bypass_halfband)
+//{
+//  return usrp_standard_rx::make_format(width, shift, want_q, 
bypass_halfband);
+//}
+//
+//int
+//msdd_source_base::format_width(unsigned int format)
+//{
+//  return usrp_standard_rx::format_width(format);
+//}
+//
+//int
+//msdd_source_base::format_shift(unsigned int format)
+//{
+//  return usrp_standard_rx::format_shift(format);
+//}
+//
+//bool
+//msdd_source_base::format_want_q(unsigned int format)
+//{
+//  return usrp_standard_rx::format_want_q(format);
+//}
+//
+//bool
+//msdd_source_base::format_bypass_halfband(unsigned int format)
+//{
+//  return usrp_standard_rx::format_bypass_halfband(format);
+//}
+
+bool msdd_source_base::set_desired_packet_size (int which, unsigned long 
packet_size) {
+  bool result(false);
+  
+  if (pimpl->d_desired_sample_size < 2^32) { // FIXME: find maximum sample 
request for MSDD check if greater than 
+    pimpl->d_desired_sample_size = packet_size;
+  }
+  return result;
+}
+
+unsigned long msdd_source_base::desired_packet_size (int which) const {
+  return pimpl->d_desired_sample_size;
+}

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.h

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.h (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd_source_base.h)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.h                       
        (rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_base.h       2008-02-29 
19:26:49 UTC (rev 7904)
@@ -0,0 +1,307 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+
+#ifndef INCLUDED_MSDD_SOURCE_BASE_H
+#define INCLUDED_MSDD_SOURCE_BASE_H
+#include <gr_sync_block.h>
+#include <stdexcept>
+
+/*!
+ * \brief abstract interface to MSDD 6000 Softronics module Rx path (Rev 1)
+ */
+
+class msdd_source_base : public gr_sync_block {
+public: 
+  enum msdd_command_type_t {
+    COMMAND_STATUS = 0,
+    SAMPLES_REALTIME = 1,
+    SAMPLES_FFT = 2,
+  };
+  
+  enum msdd_fft_window_type_t {
+    WINDOW_RECTANGLE = 0,
+    WINDOW_HANNING = 1,
+    WINDOW_HAMMING = 2,
+    WINDOW_BLACKMAN = 3
+  };
+  
+  enum msdd_fft_mode_t {
+    MODE_IQ=0, 
+    MODE_MAG=1, 
+    MODE_MAGDB=2
+  };
+  
+  enum msdd_decimation_t {
+    D0=0, 
+    D1=1, 
+    D2=2, 
+    D3=3, 
+    D4=4, 
+    D5=5, 
+    D6=6, 
+    D7=7, 
+    D8=8
+  };    
+  
+  enum msdd_fft_points_t {
+    S256=8, 
+    S512=9, 
+    S1024=10, 
+    S2048=11, 
+    S4096=12, 
+    S8192=13, 
+    S16384=14, 
+    S32768=15
+  };
+  
+private:
+   
+  class Impl;
+  friend class Impl;
+  std::auto_ptr<Impl> pimpl;
+
+protected:
+   
+  msdd_source_base (const std::string &name,
+                   gr_io_signature_sptr output_signature,
+                   int which_board,
+                   int opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error);
+
+  /*!
+   * \brief return number of msdd input bytes required to produce noutput 
items.
+   */
+  virtual int ninput_bytes_reqd_for_noutput_items (int noutput_items) = 0;
+
+  /*!
+   * \brief number of bytes in a low-level sample
+   */
+  unsigned int sizeof_basic_sample() const;
+
+  virtual void copy_from_msdd_buffer (gr_vector_void_star &output_items,
+                                     int output_index,
+                                     int output_items_available,
+                                     int &output_items_produced,
+                                     const void *msdd_buffer,
+                                     int msdd_buffer_length,
+                                     int &bytes_read) = 0;
+  
+  int readsock(int sockfd, unsigned char* buf, int nbytes);
+  
+  void* make_request_packet(unsigned int& size, unsigned int number_samples);
+  
+  unsigned long set_fft_size (int channel, unsigned long fft_size);
+  
+public:
+  //! magic value used on alternate register read interfaces
+  static const int READ_FAILED = -99999;
+  
+  ~msdd_source_base ();
+
+  int work (int noutput_items,
+           gr_vector_const_void_star &input_items,
+           gr_vector_void_star &output_items);
+  
+  bool start();
+  bool stop();
+
+  /*!
+   * \brief open a socket specified by the port and ip address info
+   *
+   * Opens a socket, binds to the address, and waits for a connection
+   * over UDP. If any of these fail, the fuction retuns the error and exits.
+   */
+  bool open();
+
+  /*!
+   * \brief Close current socket.
+   *
+   * Shuts down read/write on the socket
+   */
+  bool close();
+  
+  /*!
+   * \brief Set decimator rate.  \p rate must be EVEN and in [8, 256].
+   *
+   * The final complex sample rate across the USB is
+   *   adc_freq () / decim_rate ()
+   */
+  bool set_decim_rate (unsigned int rate);
+  //bool set_nchannels (int nchan);
+  //bool set_mux (int mux);
+
+  /*!
+   * \brief set the center frequency of the digital down converter.
+   *
+   * \p channel must be 0.  \p freq is the center frequency in Hz.
+   * It must be in the range [-FIXME, FIXME].  The frequency specified is
+   * quantized.  Use rx_freq to retrieve the actual value used.
+   */
+  bool set_rx_freq (int channel, double freq);
+
+  /*!
+   * \brief
+   */
+  bool set_opp_mode (int channel, msdd_command_type_t mode);
+  
+//
+//  /*!
+//   * \brief set fpga special modes
+//   */
+//  bool set_fpga_mode (int mode);
+
+  void set_verbose (bool verbose);
+//
+//  /*!
+//   * \brief Set the digital down converter phase register.
+//   *
+//   * \param channel  which ddc channel [0, 3]
+//   * \param phase    32-bit integer phase value.
+//   */
+//  bool set_ddc_phase(int channel, int phase);
+//
+  /*!
+   * \brief Set Programmable Gain Amplifier (PGA)
+   *
+   * \param which      which A/D [0,3]
+   * \param gain_in_db gain value (linear in dB)
+   *
+   * gain is rounded to closest setting supported by hardware.
+   *
+   * \returns true iff sucessful.
+   *
+   * \sa pga_min(), pga_max(), pga_db_per_step()
+   */
+  bool set_pga (int which, double gain_in_db);
+
+  /*!
+   * \brief Return programmable gain amplifier gain setting in dB.
+   *
+   * \param which      which A/D [0,3]
+   */
+  double pga (int which) const;
+
+  /*!
+   * \brief Return minimum legal PGA setting in dB.
+   */
+  double pga_min () const;
+
+  /*!
+   * \brief Return maximum legal PGA setting in dB.
+   */
+  double pga_max () const;
+
+  /*!
+   * \brief Return hardware step size of PGA (linear in dB).
+   */
+  double pga_db_per_step () const;
+
+  // ACCESSORS
+
+//  long converter_rate() const;
+
+  unsigned int decim_rate () const;
+//  int nchannels () const;
+//  int mux () const;
+  double rx_freq (int channel) const;
+  unsigned int fft_points() const;
+  int noverruns () const;
+
+  /*!
+   * \brief return the msdd's serial number.
+   *
+   * \returns non-zero length string iff successful.
+   */
+  std::string serial_number();
+
+//  /*!
+//   * \brief Enable/disable automatic DC offset removal control loop in FPGA
+//   *
+//   * \param bits  which control loops to enable
+//   * \param mask  which \p bits to pay attention to
+//   *
+//   * If the corresponding bit is set, enable the automatic DC
+//   * offset correction control loop.
+//   *
+//   * <pre>
+//   * The 4 low bits are significant:
+//   *
+//   *   ADC0 = (1 << 0)
+//   *   ADC1 = (1 << 1)
+//   *   ADC2 = (1 << 2)
+//   *   ADC3 = (1 << 3)
+//   * </pre>
+//   *
+//   * By default the control loop is enabled on all ADC's.
+//   */
+//  bool set_dc_offset_cl_enable(int bits, int mask);
+
+  /*!
+   * \brief Specify Rx data format.
+   *
+   * \param format     format specifier
+   *
+   * Rx data format control register
+   *
+   *     3                   2                   1                       
+   *   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+   *  +-----------------------------------------+-+-+---------+-------+
+   *  |          Reserved (Must be zero)        |B|Q|  WIDTH  | SHIFT |
+   *  +-----------------------------------------+-+-+---------+-------+
+   *
+   *  SHIFT specifies arithmetic right shift [0, 15]
+   *  WIDTH specifies bit-width of I & Q samples across the USB [1, 16] (not 
all valid)
+   *  Q     if set deliver both I & Q, else just I
+   *  B     if set bypass half-band filter.
+   *
+   * Right now the acceptable values are:
+   *
+   *   B  Q  WIDTH  SHIFT
+   *   0  1    16     0
+   *   0  1     8     8
+   *
+   * More valid combos to come.
+   *
+   * Default value is 0x00000300  16-bits, 0 shift, deliver both I & Q.
+   */
+//  bool set_format(unsigned int format);
+
+  /*!
+   * \brief return current format
+   */
+//  unsigned int format () const;
+//
+//  static unsigned int make_format(int width=16, int shift=0,
+//                               bool want_q=true, bool bypass_halfband=false);
+//  static int format_width(unsigned int format);
+//  static int format_shift(unsigned int format);
+//  static bool format_want_q(unsigned int format);
+//  static bool format_bypass_halfband(unsigned int format);
+
+    bool set_desired_packet_size (int which, unsigned long packet_size);
+
+    unsigned long desired_packet_size (int which) const;
+};
+
+#endif /* INCLUDED_MSDD_SOURCE_BASE_H */

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.cc

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.cc (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd_source_c.cc)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.cc                         
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.cc 2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,111 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+//#define MSDD_DEBUG2_TRUE
+
+#ifdef MSDD_DEBUG2_TRUE
+#include <iostream>
+#define MSDD_DEBUG2(x) std::cout << x << std::endl;
+#else
+#define MSDD_DEBUG2(x)
+#endif
+
+#include <msdd_source_c.h>
+#include <gr_io_signature.h>
+
+namespace {
+  static const int NBASIC_SAMPLES_PER_ITEM = 2;        // I & Q
+};
+
+msdd_source_c_sptr
+msdd_make_source_c (int which_board, 
+                   int opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error)
+{
+  return msdd_source_c_sptr (new msdd_source_c (
+                                               which_board,
+                                               opp_mode,
+                                               src,
+                                               port_src
+                                               ));
+}
+
+msdd_source_c::msdd_source_c (int which_board,
+                             int opp_mode,
+                             const char *src, 
+                             unsigned short port_src
+                             ) throw (std::runtime_error)
+  : msdd_source_base ("msdd_source_c",
+                     gr_make_io_signature (1, 1, 2 * sizeof (int)),
+                     which_board, opp_mode, src, port_src
+                     )
+{
+
+  switch (sizeof_basic_sample()) {     
+  case 4:
+         d_buffer_copy_behavior.reset(
+          new msdd::BufferCopyBehaviorComplex <short> ());
+    break;
+  default:
+    assert(false);    
+  }                              
+  
+}
+
+msdd_source_c::~msdd_source_c ()
+{
+}
+
+int
+msdd_source_c::ninput_bytes_reqd_for_noutput_items (int noutput_items)
+{
+  return noutput_items * NBASIC_SAMPLES_PER_ITEM * sizeof_basic_sample();
+}
+
+/*
+ * Copy 8 bit fft from mdss buffer into output buffer
+ */
+void
+msdd_source_c::copy_from_msdd_buffer (gr_vector_void_star &output_items,
+                                     int output_index,
+                                     int output_items_available,
+                                     int &output_items_produced,
+                                     const void *msdd_buffer,
+                                     int buffer_length,
+                                     int &bytes_read)
+{
+  unsigned nmsdd_bytes_per_item = NBASIC_SAMPLES_PER_ITEM * 
sizeof_basic_sample();
+  
+  unsigned int nitems = std::min (output_items_available,
+                                 (int)(buffer_length / nmsdd_bytes_per_item));
+  
+  (*d_buffer_copy_behavior.get())(output_items, msdd_buffer, output_index, 
nitems);
+  
+  output_items_produced = nitems;
+  bytes_read = nitems * nmsdd_bytes_per_item;
+}

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.h

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.h (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd_source_c.h)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.h                          
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_c.h  2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,79 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+
+#ifndef INCLUDED_MSDD_SOURCE_C_H
+#define INCLUDED_MSDD_SOURCE_C_H
+
+#include <msdd_source_base.h>
+#include <msdd_buffer_copy_behaviors.h>
+#include <stdexcept>
+
+class msdd_source_c;
+typedef boost::shared_ptr<msdd_source_c> msdd_source_c_sptr;
+
+// public shared_ptr constructor
+
+msdd_source_c_sptr
+msdd_make_source_c (int which_board, 
+                   int opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error);
+
+/*!
+ * \brief interface to MSDD Rx path
+ *
+ * output: 1 stream of short
+ */
+class msdd_source_c : public msdd_source_base {
+private:
+  friend msdd_source_c_sptr
+  msdd_make_source_c (int which_board, 
+                     int opp_mode,
+                     const char *src, 
+                     unsigned short port_src
+                     ) throw (std::runtime_error);
+
+  std::auto_ptr<msdd::BufferCopyBehavior> d_buffer_copy_behavior;
+
+protected:
+  msdd_source_c (int which_board, 
+                int opp_mode,
+                const char *src, 
+                unsigned short port_src
+                ) throw (std::runtime_error);
+
+  int ninput_bytes_reqd_for_noutput_items (int noutput_items);
+
+  virtual void copy_from_msdd_buffer (gr_vector_void_star &output_items,
+                                     int output_index,
+                                     int output_items_available,
+                                     int &output_items_produced,
+                                     const void *msdd_buffer,
+                                     int buffer_length,
+                                     int &bytes_read);
+
+public:
+  ~msdd_source_c ();
+};
+
+#endif /* INCLUDED_MSDD_SOURCE_C_H */

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.cc

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.cc (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd_source_s.cc)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.cc                         
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.cc 2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,130 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define MSDD_DEBUG2_TRUE
+
+#ifdef MSDD_DEBUG2_TRUE
+#include <iostream>
+#define MSDD_DEBUG2(x) std::cout << x << std::endl;
+#else
+#define MSDD_DEBUG2(x)
+#endif
+
+#include <msdd_source_s.h>
+#include <gr_io_signature.h>
+
+namespace {
+  static const int NBASIC_SAMPLES_PER_ITEM = 1;
+}
+
+msdd_source_s_sptr
+msdd_make_source_s (int which_board, 
+                   unsigned int decim_rate,
+                   unsigned int fft_points,
+                   double initial_rx_freq,
+                   int opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error)
+{
+  return msdd_source_s_sptr (new msdd_source_s (which_board,
+                                               decim_rate,
+                                               fft_points,
+                                               initial_rx_freq,
+                                               opp_mode,
+                                               src,
+                                               port_src
+                                               ));
+}
+
+
+msdd_source_s::msdd_source_s (int which_board,
+                             unsigned int decim_rate,
+                             unsigned int fft_points,
+                             double initial_rx_freq,
+                             int opp_mode,
+                             const char *src, 
+                             unsigned short port_src
+                             ) throw (std::runtime_error)
+  : msdd_source_base ("msdd_source_s",
+                     gr_make_io_signature (1, 1, sizeof (int)),
+                     which_board, opp_mode, src, port_src
+                     )
+{
+
+  switch (sizeof_basic_sample()) {
+  case 1:
+       d_buffer_copy_behavior.reset(
+        new msdd::BufferCopyBehaviorGeneric<short, unsigned char>());
+    break;
+  case 2:
+       d_buffer_copy_behavior.reset(
+               new msdd::BufferCopyBehaviorGeneric<short, float>());
+    break;
+  case 4:
+       d_buffer_copy_behavior.reset(
+               new msdd::BufferCopyBehaviorGeneric<short, int>());
+    break;
+  default:
+       assert(false);
+  }
+
+}
+
+msdd_source_s::~msdd_source_s ()
+{
+}
+
+int
+msdd_source_s::ninput_bytes_reqd_for_noutput_items (int noutput_items)
+{
+  return noutput_items * NBASIC_SAMPLES_PER_ITEM * sizeof_basic_sample();
+}
+
+void
+msdd_source_s::copy_from_msdd_buffer (gr_vector_void_star &output_items,
+                                     int output_index,
+                                     int output_items_available,
+                                     int &output_items_produced,
+                                     const void *msdd_buffer,
+                                     int buffer_length,
+                                     int &bytes_read)
+{
+  MSDD_DEBUG2("copy_from_msdd_buffer: output_index: " << output_index << " 
output_items_available: " << output_items_available << " buflen: " << 
buffer_length)
+
+   unsigned nmsdd_bytes_per_item 
+    (msdd_source_s::ninput_bytes_reqd_for_noutput_items(1));
+  
+  unsigned int nitems = std::min (output_items_available,
+                                 (int)(buffer_length / nmsdd_bytes_per_item));
+  
+  MSDD_DEBUG2("copy_from_msdd_buffer: nmsdd_bytes_per_item: " << 
nmsdd_bytes_per_item << " nitems: " << nitems)
+
+  (*d_buffer_copy_behavior.get())(output_items, msdd_buffer, output_index, 
nitems);
+
+  output_items_produced = nitems;
+  bytes_read = nitems * nmsdd_bytes_per_item;
+}

Deleted: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.h

Copied: gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.h (from rev 7884, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/lib/msdd_source_s.h)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.h                          
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/lib/msdd_source_s.h  2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,87 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2008 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 3, 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.
+ */
+
+#ifndef INCLUDED_MSDD_SOURCE_S_H
+#define INCLUDED_MSDD_SOURCE_S_H
+
+#include <msdd_source_base.h>
+#include <msdd_buffer_copy_behaviors.h>
+#include <stdexcept>
+
+class msdd_source_s;
+typedef boost::shared_ptr<msdd_source_s> msdd_source_s_sptr;
+
+// public shared_ptr constructor
+
+msdd_source_s_sptr
+msdd_make_source_s (int which_board, 
+                   unsigned int decim_rate,
+                   unsigned int fft_points,
+                   double initial_rx_freq,
+                   int opp_mode,
+                   const char *src, 
+                   unsigned short port_src
+                   ) throw (std::runtime_error);
+
+/*!
+ * \brief interface to MSDD Rx path
+ *
+ * output: 1 stream of short
+ */
+class msdd_source_s : public msdd_source_base {
+private:
+  friend msdd_source_s_sptr
+  msdd_make_source_s (int which_board, 
+                     unsigned int decim_rate,
+                     unsigned int fft_points,
+                     double initial_rx_freq,
+                     int opp_mode,
+                     const char *src, 
+                     unsigned short port_src
+                     ) throw (std::runtime_error);
+
+  std::auto_ptr<msdd::BufferCopyBehavior> d_buffer_copy_behavior;
+  
+protected:
+  msdd_source_s (int which_board, 
+                unsigned int decim_rate,
+                unsigned int fft_points,
+                double initial_rx_freq,
+                int opp_mode,
+                const char *src, 
+                unsigned short port_src
+                ) throw (std::runtime_error);
+
+  int ninput_bytes_reqd_for_noutput_items (int noutput_items);
+
+  virtual void copy_from_msdd_buffer (gr_vector_void_star &output_items,
+                                     int output_index,
+                                     int output_items_available,
+                                     int &output_items_produced,
+                                     const void *msdd_buffer,
+                                     int buffer_length,
+                                     int &bytes_read);
+public:
+  ~msdd_source_s ();
+};
+
+#endif /* INCLUDED_MSDD_SOURCE_S_H */

Copied: gnuradio/trunk/gr-msdd6000/src/python (from rev 7898, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/python)


Property changes on: gnuradio/trunk/gr-msdd6000/src/python
___________________________________________________________________
Name: svn:ignore
   + Makefile
Makefile.in
run_tests


Deleted: gnuradio/trunk/gr-msdd6000/src/python/Makefile.am

Copied: gnuradio/trunk/gr-msdd6000/src/python/Makefile.am (from rev 7898, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/python/Makefile.am)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/python/Makefile.am                           
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/python/Makefile.am   2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,48 @@
+#
+# Copyright 2008 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 3, 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.
+# 
+
+include $(top_srcdir)/Makefile.common
+
+EXAMPLE_FILES =
+
+EXTRA_DIST = run_tests.in \
+            $(EXAMPLE_FILES)
+
+ourdatadir = $(exampledir)/msdd6000
+ourdata_DATA = $(EXAMPLE_FILES)
+
+noinst_PYTHON =                        \
+       qa_msdd6000.py                  \
+       test_udp.py                     \
+       test_tcp.py
+
+TESTS =                                \
+       run_tests
+
+
+# Make example scripts with #! executable
+install-data-local: install-ourdataDATA
+       for i in `find $(ourdatadir) -type f ! -perm 755`; do \
+         if head -1 $$i | grep -q '^#!'; then \
+           chmod 755 $$i; \
+           echo "made executable: $$i"; \
+         fi; \
+       done

Added: gnuradio/trunk/gr-msdd6000/src/python/qa_msdd6000.py
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/python/qa_msdd6000.py                        
        (rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/python/qa_msdd6000.py        2008-02-29 
19:26:49 UTC (rev 7904)
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+#
+# Copyright 2008 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 3, 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.
+# 
+
+from gnuradio import gr, gr_unittest
+import msdd
+
+class qa_usrp (gr_unittest.TestCase):
+
+    def setUp (self):
+        self.tb = gr.top_block ()
+
+    def tearDown (self):
+        self.tb = None
+
+    def test_000_nop (self):
+        """Just see if we can import the module...
+       """
+        pass
+    
+if __name__ == '__main__':
+    gr_unittest.main ()


Property changes on: gnuradio/trunk/gr-msdd6000/src/python/qa_msdd6000.py
___________________________________________________________________
Name: svn:executable
   + *

Deleted: gnuradio/trunk/gr-msdd6000/src/python/run_tests.in

Copied: gnuradio/trunk/gr-msdd6000/src/python/run_tests.in (from rev 7898, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/python/run_tests.in)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/python/run_tests.in                          
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/python/run_tests.in  2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# 1st parameter is absolute path to component source directory
+# 2nd parameter is absolute path to component build directory
+# 3rd parameter is path to Python QA directory
+
address@hidden@/run_tests.sh \
+    @abs_top_srcdir@/gr-msdd6000 \
+    @abs_top_builddir@/gr-msdd6000 \
+    @srcdir@

Copied: gnuradio/trunk/gr-msdd6000/src/python/test_tcp.py (from rev 7902, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/python_test/test_tcp.py)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/python/test_tcp.py                           
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/python/test_tcp.py   2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,78 @@
+#!/usr/bin/python
+
+from socket import *
+import string
+import time
+import struct;
+import random;
+
+myport = random.randint(1025,65535);
+
+port = 10000
+host = "10.45.4.43"
+myaddr = ("10.45.1.229",myport);
+
+buf = 100000;
+
+TCPSock = socket(AF_INET,SOCK_STREAM);
+#TCPSock = socket(AF_INET,SOCK_DGRAM);
+TCPSock.bind(myaddr);
+TCPSock.connect((host,port));
+
+f_mhz = 2400;  
+f_hz = 0;      
+gain = 2;      
+window = 3;    #0=rect, 1=hanning, 2=hamming, 3=blackman
+#samples = 0xffffffff;         #8-15   fft:(returns 2^number[8-15]) 
raw:(returns number)
+samples = 2;   #8-15   fft:(returns 2^number[8-15]) raw:(returns number)
+decim = 2;     #0-8  
+#decim = decim+16;     # +16 to use 16bit instead of 32 bit 
+mode = 1;      #0=IQ, 1=MAG, 2=MAGDB
+sets = 0xffffffff;     
+#sets = 1;
+
+fft_data = struct.pack("<IIIIIIIIII", 0x02, 0x20, f_mhz, f_hz, gain,window, 
samples, decim, mode,sets);
+raw_data = struct.pack("<IIIIIIII", 0x01, 0x18, f_mhz, f_hz, gain,samples, 
decim,sets);
+stat_data = struct.pack("!II", 0x0000, 0x0000)
+
+data = raw_data;
+
+#TCPSock.sendto(data, (host,port))
+TCPSock.send(data);
+
+print "sent"
+
+
+
+count = 0;
+while(1):
+       data,addr = TCPSock.recvfrom(buf);
+       
+       print "got response"
+       
+       print "Data length: %d bytes."%(len(data));
+       if(len(data)==12):
+               a,b,c = struct.unpack("!III",data);
+               print "%x,%x,%x"%(a,b,c);
+
+       datavector = [];
+
+       for d in data:
+               a = struct.unpack("<b",d);
+               datavector.append(a);
+
+       print datavector;
+               
+       count = count + 1;
+       
+       if(count > 1):
+               sets = 3;
+               raw_data_2 = struct.pack("<IIIIIIII", 0x01, 0x18, f_mhz, f_hz, 
gain,samples, decim,sets);
+               TCPSock.send(raw_data_2);
+               
+               
+               
+TCPSock.close();
+
+
+

Copied: gnuradio/trunk/gr-msdd6000/src/python/test_udp.py (from rev 7902, 
gnuradio/branches/developers/n4hy/msddLTS/gr-msdd6000/src/python_test/test_udp.py)
===================================================================
--- gnuradio/trunk/gr-msdd6000/src/python/test_udp.py                           
(rev 0)
+++ gnuradio/trunk/gr-msdd6000/src/python/test_udp.py   2008-02-29 19:26:49 UTC 
(rev 7904)
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+
+from socket import *
+import string
+import time
+import struct;
+
+
+port = 10001
+host = "10.45.4.43"
+
+myaddr = ("10.45.1.229",10000);
+
+buf = 1024;
+
+UDPSock = socket(AF_INET,SOCK_DGRAM);
+UDPSock.bind(myaddr);
+
+f_mhz = 2400;
+f_hz = 1;
+gain = 3;
+samples = 512;
+decim = 2;
+sets = 16;
+
+
+req_data = struct.pack("<IIIIIIIIII", 0x0001, 0x0002, f_mhz, f_hz, gain, 
samples, decim, sets);
+data = struct.pack("<II", 0x0000, 0x0000);
+
+
+
+UDPSock.sendto(stat_data, (host,port))
+
+
+print "sent"
+
+data,addr = UDPSock.recvfrom(buf);
+print "got response"
+
+





reply via email to

[Prev in Thread] Current Thread [Next in Thread]