diff --git a/grc/CMakeLists.txt b/grc/CMakeLists.txt
index 1d2e419..427bf5d 100644
--- a/grc/CMakeLists.txt
+++ b/grc/CMakeLists.txt
@@ -28,5 +28,7 @@ install(FILES
satnogs_ax25_decoder_b.xml
satnogs_udp_msg_source.xml
satnogs_debug_msg_source.xml
- satnogs_frame_encoder.xml DESTINATION share/gnuradio/grc/blocks
+ satnogs_tcp_rigctl_msg_source.xml
+ satnogs_frame_encoder.xml
+ satnogs_doppler_correction_cc.xml DESTINATION share/gnuradio/grc/blocks
)
diff --git a/grc/satnogs_doppler_correction_cc.xml b/grc/satnogs_doppler_correction_cc.xml
new file mode 100644
index 0000000..084bb41
--- /dev/null
+++ b/grc/satnogs_doppler_correction_cc.xml
@@ -0,0 +1,38 @@
+
+
+ doppler_correction_cc
+ satnogs_doppler_correction_cc
+ satnogs
+ import satnogs
+ satnogs.doppler_correction_cc($target_freq)
+
+
+ ...
+ ...
+ ...
+
+
+
+
+ in
+
+
+
+
+
+
diff --git a/grc/satnogs_tcp_rigctl_msg_source.xml b/grc/satnogs_tcp_rigctl_msg_source.xml
new file mode 100644
index 0000000..8e2d886
--- /dev/null
+++ b/grc/satnogs_tcp_rigctl_msg_source.xml
@@ -0,0 +1,34 @@
+
+
+ TCP rigctl Message Source
+ satnogs_tcp_rigctl_msg_source
+ satnogs
+ import satnogs
+ satnogs.tcp_rigctl_msg_source($addr, $port, $mtu)
+
+
+ IP Address
+ addr
+ "127.0.0.1"
+ string
+
+
+
+ Listen port
+ port
+ 16886
+ int
+
+
+
+ MTU
+ mtu
+ 1500
+ int
+
+
+
+
\ No newline at end of file
diff --git a/include/satnogs/CMakeLists.txt b/include/satnogs/CMakeLists.txt
index 24138db..ae33d99 100644
--- a/include/satnogs/CMakeLists.txt
+++ b/include/satnogs/CMakeLists.txt
@@ -39,6 +39,9 @@ install(FILES
ax25_decoder_b.h
udp_msg_source.h
debug_msg_source.h
- tc_tm.h
- frame_encoder.h DESTINATION include/satnogs
+ tcp_rigctl_msg_source.h
+ frame_encoder.h
+ doppler_correction_cc.h
+ doppler_fit.h
+ freq_drift.h DESTINATION include/satnogs
)
diff --git a/include/satnogs/CMakeLists.txt.orig b/include/satnogs/CMakeLists.txt.orig
new file mode 100644
index 0000000..06fb026
--- /dev/null
+++ b/include/satnogs/CMakeLists.txt.orig
@@ -0,0 +1,49 @@
+# Copyright 2011,2012 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.
+
+########################################################################
+# Install public header files
+########################################################################
+install(FILES
+ api.h
+ ax25.h
+ config.h
+ cw_matched_filter_ff.h
+ log.h
+ morse_tree.h
+ morse.h
+ morse_decoder.h
+ morse_debug_source.h
+ clear_text_msg_sink.h
+ cw_to_symbol.h
+ afsk_decoder.h
+ sine_matched_filter_ff.h
+ utils.h
+ ax25_encoder_bf.h
+ ax25_decoder_b.h
+ udp_msg_source.h
+ debug_msg_source.h
+ tc_tm.h
+<<<<<<< HEAD
+ frame_encoder.h DESTINATION include/satnogs
+=======
+ tcp_rigctl_msg_source.h
+ doppler_correction_cc.h DESTINATION include/satnogs
+>>>>>>> e2426243126ea374540c7ac95c53b7ba8983a0b1
+)
diff --git a/include/satnogs/doppler_correction_cc.h b/include/satnogs/doppler_correction_cc.h
new file mode 100644
index 0000000..3f130f5
--- /dev/null
+++ b/include/satnogs/doppler_correction_cc.h
@@ -0,0 +1,66 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef INCLUDED_SATNOGS_DOPPLER_CORRECTION_CC_H
+#define INCLUDED_SATNOGS_DOPPLER_CORRECTION_CC_H
+
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ /*!
+ * \brief This block corrects the doppler effect between the ground
+ * station and the satellite. It takes the imput stream in baseband
+ * and applies proper corrections to keep the carrier at the desired
+ * frequency. To achieve that it uses messages containing the absolute
+ * predicted frequency of the satellite from software like Gpredict.
+ *
+ * \ingroup satnogs
+ *
+ */
+ class SATNOGS_API doppler_correction_cc : virtual public gr::sync_block
+ {
+ public:
+ typedef boost::shared_ptr sptr;
+
+ /*!
+ * The doppler correction block. The input is the complex signal at
+ * baseband as it comes from the SDR device. The message input \p freq
+ * received periodically messages containing the predicted absolute
+ * frequency of the satellite at the moment of the
+ * @param target_freq the absolute frequency of the satellite
+ * @param sampling_rate the sampling rate of the signal
+ * @param corrections_per_sec the number of the corrections every second
+ * that the block should perform
+ */
+ static sptr
+ make (double target_freq, double sampling_rate,
+ size_t corrections_per_sec = 1000);
+ };
+
+ } // namespace satnogs
+} // namespace gr
+
+#endif /* INCLUDED_SATNOGS_DOPPLER_CORRECTION_CC_H */
+
diff --git a/include/satnogs/doppler_fit.h b/include/satnogs/doppler_fit.h
new file mode 100644
index 0000000..d290761
--- /dev/null
+++ b/include/satnogs/doppler_fit.h
@@ -0,0 +1,54 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef INCLUDED_SATNOGS_DOPPLER_FIT_H
+#define INCLUDED_SATNOGS_DOPPLER_FIT_H
+
+#include
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ /*!
+ * \brief Doppler frequency polynomial fitting tool
+ * \ingroup satnogs
+ */
+ class SATNOGS_API doppler_fit
+ {
+ public:
+ doppler_fit (size_t degree);
+ ~doppler_fit ();
+
+ void fit(std::deque drifts);
+
+ private:
+ const size_t d_degree;
+ std::vector d_coeff;
+ };
+
+ } // namespace satnogs
+} // namespace gr
+
+#endif /* INCLUDED_SATNOGS_DOPPLER_FIT_H */
+
diff --git a/include/satnogs/frame_encoder.h b/include/satnogs/frame_encoder.h
index 117f419..82582ca 100644
--- a/include/satnogs/frame_encoder.h
+++ b/include/satnogs/frame_encoder.h
@@ -1,681 +1,23 @@
/* -*- c++ -*- */
-/* GNU GENERAL PUBLIC LICENSE
- * Version 3, 29 June 2007
- *
- * Copyright (C) 2007 Free Software Foundation, Inc.
- * Everyone is permitted to copy and distribute verbatim copies
- * of this license document, but changing it is not allowed.
- *
- * Preamble
- *
- * The GNU General Public License is a free, copyleft license for
- * software and other kinds of works.
- *
- * The licenses for most software and other practical works are designed
- * to take away your freedom to share and change the works. By contrast,
- * the GNU General Public License is intended to guarantee your freedom to
- * share and change all versions of a program--to make sure it remains free
- * software for all its users. We, the Free Software Foundation, use the
- * GNU General Public License for most of our software; it applies also to
- * any other work released this way by its authors. You can apply it to
- * your programs, too.
- *
- * When we speak of free software, we are referring to freedom, not
- * price. Our General Public Licenses are designed to make sure that you
- * have the freedom to distribute copies of free software (and charge for
- * them if you wish), that you receive source code or can get it if you
- * want it, that you can change the software or use pieces of it in new
- * free programs, and that you know you can do these things.
- *
- * To protect your rights, we need to prevent others from denying you
- * these rights or asking you to surrender the rights. Therefore, you have
- * certain responsibilities if you distribute copies of the software, or if
- * you modify it: responsibilities to respect the freedom of others.
- *
- * For example, if you distribute copies of such a program, whether
- * gratis or for a fee, you must pass on to the recipients the same
- * freedoms that you received. You must make sure that they, too, receive
- * or can get the source code. And you must show them these terms so they
- * know their rights.
- *
- * Developers that use the GNU GPL protect your rights with two steps:
- * (1) assert copyright on the software, and (2) offer you this License
- * giving you legal permission to copy, distribute and/or modify it.
- *
- * For the developers' and authors' protection, the GPL clearly explains
- * that there is no warranty for this free software. For both users' and
- * authors' sake, the GPL requires that modified versions be marked as
- * changed, so that their problems will not be attributed erroneously to
- * authors of previous versions.
- *
- * Some devices are designed to deny users access to install or run
- * modified versions of the software inside them, although the manufacturer
- * can do so. This is fundamentally incompatible with the aim of
- * protecting users' freedom to change the software. The systematic
- * pattern of such abuse occurs in the area of products for individuals to
- * use, which is precisely where it is most unacceptable. Therefore, we
- * have designed this version of the GPL to prohibit the practice for those
- * products. If such problems arise substantially in other domains, we
- * stand ready to extend this provision to those domains in future versions
- * of the GPL, as needed to protect the freedom of users.
- *
- * Finally, every program is threatened constantly by software patents.
- * States should not allow patents to restrict development and use of
- * software on general-purpose computers, but in those that do, we wish to
- * avoid the special danger that patents applied to a free program could
- * make it effectively proprietary. To prevent this, the GPL assures that
- * patents cannot be used to render the program non-free.
- *
- * The precise terms and conditions for copying, distribution and
- * modification follow.
- *
- * TERMS AND CONDITIONS
- *
- * 0. Definitions.
- *
- * "This License" refers to version 3 of the GNU General Public License.
- *
- * "Copyright" also means copyright-like laws that apply to other kinds of
- * works, such as semiconductor masks.
- *
- * "The Program" refers to any copyrightable work licensed under this
- * License. Each licensee is addressed as "you". "Licensees" and
- * "recipients" may be individuals or organizations.
- *
- * To "modify" a work means to copy from or adapt all or part of the work
- * in a fashion requiring copyright permission, other than the making of an
- * exact copy. The resulting work is called a "modified version" of the
- * earlier work or a work "based on" the earlier work.
- *
- * A "covered work" means either the unmodified Program or a work based
- * on the Program.
- *
- * To "propagate" a work means to do anything with it that, without
- * permission, would make you directly or secondarily liable for
- * infringement under applicable copyright law, except executing it on a
- * computer or modifying a private copy. Propagation includes copying,
- * distribution (with or without modification), making available to the
- * public, and in some countries other activities as well.
- *
- * To "convey" a work means any kind of propagation that enables other
- * parties to make or receive copies. Mere interaction with a user through
- * a computer network, with no transfer of a copy, is not conveying.
- *
- * An interactive user interface displays "Appropriate Legal Notices"
- * to the extent that it includes a convenient and prominently visible
- * feature that (1) displays an appropriate copyright notice, and (2)
- * tells the user that there is no warranty for the work (except to the
- * extent that warranties are provided), that licensees may convey the
- * work under this License, and how to view a copy of this License. If
- * the interface presents a list of user commands or options, such as a
- * menu, a prominent item in the list meets this criterion.
- *
- * 1. Source Code.
- *
- * The "source code" for a work means the preferred form of the work
- * for making modifications to it. "Object code" means any non-source
- * form of a work.
- *
- * A "Standard Interface" means an interface that either is an official
- * standard defined by a recognized standards body, or, in the case of
- * interfaces specified for a particular programming language, one that
- * is widely used among developers working in that language.
- *
- * The "System Libraries" of an executable work include anything, other
- * than the work as a whole, that (a) is included in the normal form of
- * packaging a Major Component, but which is not part of that Major
- * Component, and (b) serves only to enable use of the work with that
- * Major Component, or to implement a Standard Interface for which an
- * implementation is available to the public in source code form. A
- * "Major Component", in this context, means a major essential component
- * (kernel, window system, and so on) of the specific operating system
- * (if any) on which the executable work runs, or a compiler used to
- * produce the work, or an object code interpreter used to run it.
- *
- * The "Corresponding Source" for a work in object code form means all
- * the source code needed to generate, install, and (for an executable
- * work) run the object code and to modify the work, including scripts to
- * control those activities. However, it does not include the work's
- * System Libraries, or general-purpose tools or generally available free
- * programs which are used unmodified in performing those activities but
- * which are not part of the work. For example, Corresponding Source
- * includes interface definition files associated with source files for
- * the work, and the source code for shared libraries and dynamically
- * linked subprograms that the work is specifically designed to require,
- * such as by intimate data communication or control flow between those
- * subprograms and other parts of the work.
- *
- * The Corresponding Source need not include anything that users
- * can regenerate automatically from other parts of the Corresponding
- * Source.
- *
- * The Corresponding Source for a work in source code form is that
- * same work.
- *
- * 2. Basic Permissions.
- *
- * All rights granted under this License are granted for the term of
- * copyright on the Program, and are irrevocable provided the stated
- * conditions are met. This License explicitly affirms your unlimited
- * permission to run the unmodified Program. The output from running a
- * covered work is covered by this License only if the output, given its
- * content, constitutes a covered work. This License acknowledges your
- * rights of fair use or other equivalent, as provided by copyright law.
- *
- * You may make, run and propagate covered works that you do not
- * convey, without conditions so long as your license otherwise remains
- * in force. You may convey covered works to others for the sole purpose
- * of having them make modifications exclusively for you, or provide you
- * with facilities for running those works, provided that you comply with
- * the terms of this License in conveying all material for which you do
- * not control copyright. Those thus making or running the covered works
- * for you must do so exclusively on your behalf, under your direction
- * and control, on terms that prohibit them from making any copies of
- * your copyrighted material outside their relationship with you.
- *
- * Conveying under any other circumstances is permitted solely under
- * the conditions stated below. Sublicensing is not allowed; section 10
- * makes it unnecessary.
- *
- * 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
- *
- * No covered work shall be deemed part of an effective technological
- * measure under any applicable law fulfilling obligations under article
- * 11 of the WIPO copyright treaty adopted on 20 December 1996, or
- * similar laws prohibiting or restricting circumvention of such
- * measures.
- *
- * When you convey a covered work, you waive any legal power to forbid
- * circumvention of technological measures to the extent such circumvention
- * is effected by exercising rights under this License with respect to
- * the covered work, and you disclaim any intention to limit operation or
- * modification of the work as a means of enforcing, against the work's
- * users, your or third parties' legal rights to forbid circumvention of
- * technological measures.
- *
- * 4. Conveying Verbatim Copies.
- *
- * You may convey verbatim copies of the Program's source code as you
- * receive it, in any medium, provided that you conspicuously and
- * appropriately publish on each copy an appropriate copyright notice;
- * keep intact all notices stating that this License and any
- * non-permissive terms added in accord with section 7 apply to the code;
- * keep intact all notices of the absence of any warranty; and give all
- * recipients a copy of this License along with the Program.
- *
- * You may charge any price or no price for each copy that you convey,
- * and you may offer support or warranty protection for a fee.
- *
- * 5. Conveying Modified Source Versions.
- *
- * You may convey a work based on the Program, or the modifications to
- * produce it from the Program, in the form of source code under the
- * terms of section 4, provided that you also meet all of these conditions:
- *
- * a) The work must carry prominent notices stating that you modified
- * it, and giving a relevant date.
- *
- * b) The work must carry prominent notices stating that it is
- * released under this License and any conditions added under section
- * 7. This requirement modifies the requirement in section 4 to
- * "keep intact all notices".
- *
- * c) You must license the entire work, as a whole, under this
- * License to anyone who comes into possession of a copy. This
- * License will therefore apply, along with any applicable section 7
- * additional terms, to the whole of the work, and all its parts,
- * regardless of how they are packaged. This License gives no
- * permission to license the work in any other way, but it does not
- * invalidate such permission if you have separately received it.
- *
- * d) If the work has interactive user interfaces, each must display
- * Appropriate Legal Notices; however, if the Program has interactive
- * interfaces that do not display Appropriate Legal Notices, your
- * work need not make them do so.
- *
- * A compilation of a covered work with other separate and independent
- * works, which are not by their nature extensions of the covered work,
- * and which are not combined with it such as to form a larger program,
- * in or on a volume of a storage or distribution medium, is called an
- * "aggregate" if the compilation and its resulting copyright are not
- * used to limit the access or legal rights of the compilation's users
- * beyond what the individual works permit. Inclusion of a covered work
- * in an aggregate does not cause this License to apply to the other
- * parts of the aggregate.
- *
- * 6. Conveying Non-Source Forms.
- *
- * You may convey a covered work in object code form under the terms
- * of sections 4 and 5, provided that you also convey the
- * machine-readable Corresponding Source under the terms of this License,
- * in one of these ways:
- *
- * a) Convey the object code in, or embodied in, a physical product
- * (including a physical distribution medium), accompanied by the
- * Corresponding Source fixed on a durable physical medium
- * customarily used for software interchange.
- *
- * b) Convey the object code in, or embodied in, a physical product
- * (including a physical distribution medium), accompanied by a
- * written offer, valid for at least three years and valid for as
- * long as you offer spare parts or customer support for that product
- * model, to give anyone who possesses the object code either (1) a
- * copy of the Corresponding Source for all the software in the
- * product that is covered by this License, on a durable physical
- * medium customarily used for software interchange, for a price no
- * more than your reasonable cost of physically performing this
- * conveying of source, or (2) access to copy the
- * Corresponding Source from a network server at no charge.
- *
- * c) Convey individual copies of the object code with a copy of the
- * written offer to provide the Corresponding Source. This
- * alternative is allowed only occasionally and noncommercially, and
- * only if you received the object code with such an offer, in accord
- * with subsection 6b.
- *
- * d) Convey the object code by offering access from a designated
- * place (gratis or for a charge), and offer equivalent access to the
- * Corresponding Source in the same way through the same place at no
- * further charge. You need not require recipients to copy the
- * Corresponding Source along with the object code. If the place to
- * copy the object code is a network server, the Corresponding Source
- * may be on a different server (operated by you or a third party)
- * that supports equivalent copying facilities, provided you maintain
- * clear directions next to the object code saying where to find the
- * Corresponding Source. Regardless of what server hosts the
- * Corresponding Source, you remain obligated to ensure that it is
- * available for as long as needed to satisfy these requirements.
- *
- * e) Convey the object code using peer-to-peer transmission, provided
- * you inform other peers where the object code and Corresponding
- * Source of the work are being offered to the general public at no
- * charge under subsection 6d.
- *
- * A separable portion of the object code, whose source code is excluded
- * from the Corresponding Source as a System Library, need not be
- * included in conveying the object code work.
- *
- * A "User Product" is either (1) a "consumer product", which means any
- * tangible personal property which is normally used for personal, family,
- * or household purposes, or (2) anything designed or sold for incorporation
- * into a dwelling. In determining whether a product is a consumer product,
- * doubtful cases shall be resolved in favor of coverage. For a particular
- * product received by a particular user, "normally used" refers to a
- * typical or common use of that class of product, regardless of the status
- * of the particular user or of the way in which the particular user
- * actually uses, or expects or is expected to use, the product. A product
- * is a consumer product regardless of whether the product has substantial
- * commercial, industrial or non-consumer uses, unless such uses represent
- * the only significant mode of use of the product.
- *
- * "Installation Information" for a User Product means any methods,
- * procedures, authorization keys, or other information required to install
- * and execute modified versions of a covered work in that User Product from
- * a modified version of its Corresponding Source. The information must
- * suffice to ensure that the continued functioning of the modified object
- * code is in no case prevented or interfered with solely because
- * modification has been made.
- *
- * If you convey an object code work under this section in, or with, or
- * specifically for use in, a User Product, and the conveying occurs as
- * part of a transaction in which the right of possession and use of the
- * User Product is transferred to the recipient in perpetuity or for a
- * fixed term (regardless of how the transaction is characterized), the
- * Corresponding Source conveyed under this section must be accompanied
- * by the Installation Information. But this requirement does not apply
- * if neither you nor any third party retains the ability to install
- * modified object code on the User Product (for example, the work has
- * been installed in ROM).
- *
- * The requirement to provide Installation Information does not include a
- * requirement to continue to provide support service, warranty, or updates
- * for a work that has been modified or installed by the recipient, or for
- * the User Product in which it has been modified or installed. Access to a
- * network may be denied when the modification itself materially and
- * adversely affects the operation of the network or violates the rules and
- * protocols for communication across the network.
- *
- * Corresponding Source conveyed, and Installation Information provided,
- * in accord with this section must be in a format that is publicly
- * documented (and with an implementation available to the public in
- * source code form), and must require no special password or key for
- * unpacking, reading or copying.
- *
- * 7. Additional Terms.
- *
- * "Additional permissions" are terms that supplement the terms of this
- * License by making exceptions from one or more of its conditions.
- * Additional permissions that are applicable to the entire Program shall
- * be treated as though they were included in this License, to the extent
- * that they are valid under applicable law. If additional permissions
- * apply only to part of the Program, that part may be used separately
- * under those permissions, but the entire Program remains governed by
- * this License without regard to the additional permissions.
- *
- * When you convey a copy of a covered work, you may at your option
- * remove any additional permissions from that copy, or from any part of
- * it. (Additional permissions may be written to require their own
- * removal in certain cases when you modify the work.) You may place
- * additional permissions on material, added by you to a covered work,
- * for which you have or can give appropriate copyright permission.
- *
- * Notwithstanding any other provision of this License, for material you
- * add to a covered work, you may (if authorized by the copyright holders of
- * that material) supplement the terms of this License with terms:
- *
- * a) Disclaiming warranty or limiting liability differently from the
- * terms of sections 15 and 16 of this License; or
- *
- * b) Requiring preservation of specified reasonable legal notices or
- * author attributions in that material or in the Appropriate Legal
- * Notices displayed by works containing it; or
- *
- * c) Prohibiting misrepresentation of the origin of that material, or
- * requiring that modified versions of such material be marked in
- * reasonable ways as different from the original version; or
- *
- * d) Limiting the use for publicity purposes of names of licensors or
- * authors of the material; or
- *
- * e) Declining to grant rights under trademark law for use of some
- * trade names, trademarks, or service marks; or
- *
- * f) Requiring indemnification of licensors and authors of that
- * material by anyone who conveys the material (or modified versions of
- * it) with contractual assumptions of liability to the recipient, for
- * any liability that these contractual assumptions directly impose on
- * those licensors and authors.
- *
- * All other non-permissive additional terms are considered "further
- * restrictions" within the meaning of section 10. If the Program as you
- * received it, or any part of it, contains a notice stating that it is
- * governed by this License along with a term that is a further
- * restriction, you may remove that term. If a license document contains
- * a further restriction but permits relicensing or conveying under this
- * License, you may add to a covered work material governed by the terms
- * of that license document, provided that the further restriction does
- * not survive such relicensing or conveying.
- *
- * If you add terms to a covered work in accord with this section, you
- * must place, in the relevant source files, a statement of the
- * additional terms that apply to those files, or a notice indicating
- * where to find the applicable terms.
- *
- * Additional terms, permissive or non-permissive, may be stated in the
- * form of a separately written license, or stated as exceptions;
- * the above requirements apply either way.
- *
- * 8. Termination.
- *
- * You may not propagate or modify a covered work except as expressly
- * provided under this License. Any attempt otherwise to propagate or
- * modify it is void, and will automatically terminate your rights under
- * this License (including any patent licenses granted under the third
- * paragraph of section 11).
- *
- * However, if you cease all violation of this License, then your
- * license from a particular copyright holder is reinstated (a)
- * provisionally, unless and until the copyright holder explicitly and
- * finally terminates your license, and (b) permanently, if the copyright
- * holder fails to notify you of the violation by some reasonable means
- * prior to 60 days after the cessation.
- *
- * Moreover, your license from a particular copyright holder is
- * reinstated permanently if the copyright holder notifies you of the
- * violation by some reasonable means, this is the first time you have
- * received notice of violation of this License (for any work) from that
- * copyright holder, and you cure the violation prior to 30 days after
- * your receipt of the notice.
- *
- * Termination of your rights under this section does not terminate the
- * licenses of parties who have received copies or rights from you under
- * this License. If your rights have been terminated and not permanently
- * reinstated, you do not qualify to receive new licenses for the same
- * material under section 10.
- *
- * 9. Acceptance Not Required for Having Copies.
- *
- * You are not required to accept this License in order to receive or
- * run a copy of the Program. Ancillary propagation of a covered work
- * occurring solely as a consequence of using peer-to-peer transmission
- * to receive a copy likewise does not require acceptance. However,
- * nothing other than this License grants you permission to propagate or
- * modify any covered work. These actions infringe copyright if you do
- * not accept this License. Therefore, by modifying or propagating a
- * covered work, you indicate your acceptance of this License to do so.
- *
- * 10. Automatic Licensing of Downstream Recipients.
- *
- * Each time you convey a covered work, the recipient automatically
- * receives a license from the original licensors, to run, modify and
- * propagate that work, subject to this License. You are not responsible
- * for enforcing compliance by third parties with this License.
- *
- * An "entity transaction" is a transaction transferring control of an
- * organization, or substantially all assets of one, or subdividing an
- * organization, or merging organizations. If propagation of a covered
- * work results from an entity transaction, each party to that
- * transaction who receives a copy of the work also receives whatever
- * licenses to the work the party's predecessor in interest had or could
- * give under the previous paragraph, plus a right to possession of the
- * Corresponding Source of the work from the predecessor in interest, if
- * the predecessor has it or can get it with reasonable efforts.
- *
- * You may not impose any further restrictions on the exercise of the
- * rights granted or affirmed under this License. For example, you may
- * not impose a license fee, royalty, or other charge for exercise of
- * rights granted under this License, and you may not initiate litigation
- * (including a cross-claim or counterclaim in a lawsuit) alleging that
- * any patent claim is infringed by making, using, selling, offering for
- * sale, or importing the Program or any portion of it.
- *
- * 11. Patents.
- *
- * A "contributor" is a copyright holder who authorizes use under this
- * License of the Program or a work on which the Program is based. The
- * work thus licensed is called the contributor's "contributor version".
- *
- * A contributor's "essential patent claims" are all patent claims
- * owned or controlled by the contributor, whether already acquired or
- * hereafter acquired, that would be infringed by some manner, permitted
- * by this License, of making, using, or selling its contributor version,
- * but do not include claims that would be infringed only as a
- * consequence of further modification of the contributor version. For
- * purposes of this definition, "control" includes the right to grant
- * patent sublicenses in a manner consistent with the requirements of
- * this License.
- *
- * Each contributor grants you a non-exclusive, worldwide, royalty-free
- * patent license under the contributor's essential patent claims, to
- * make, use, sell, offer for sale, import and otherwise run, modify and
- * propagate the contents of its contributor version.
- *
- * In the following three paragraphs, a "patent license" is any express
- * agreement or commitment, however denominated, not to enforce a patent
- * (such as an express permission to practice a patent or covenant not to
- * sue for patent infringement). To "grant" such a patent license to a
- * party means to make such an agreement or commitment not to enforce a
- * patent against the party.
- *
- * If you convey a covered work, knowingly relying on a patent license,
- * and the Corresponding Source of the work is not available for anyone
- * to copy, free of charge and under the terms of this License, through a
- * publicly available network server or other readily accessible means,
- * then you must either (1) cause the Corresponding Source to be so
- * available, or (2) arrange to deprive yourself of the benefit of the
- * patent license for this particular work, or (3) arrange, in a manner
- * consistent with the requirements of this License, to extend the patent
- * license to downstream recipients. "Knowingly relying" means you have
- * actual knowledge that, but for the patent license, your conveying the
- * covered work in a country, or your recipient's use of the covered work
- * in a country, would infringe one or more identifiable patents in that
- * country that you have reason to believe are valid.
- *
- * If, pursuant to or in connection with a single transaction or
- * arrangement, you convey, or propagate by procuring conveyance of, a
- * covered work, and grant a patent license to some of the parties
- * receiving the covered work authorizing them to use, propagate, modify
- * or convey a specific copy of the covered work, then the patent license
- * you grant is automatically extended to all recipients of the covered
- * work and works based on it.
- *
- * A patent license is "discriminatory" if it does not include within
- * the scope of its coverage, prohibits the exercise of, or is
- * conditioned on the non-exercise of one or more of the rights that are
- * specifically granted under this License. You may not convey a covered
- * work if you are a party to an arrangement with a third party that is
- * in the business of distributing software, under which you make payment
- * to the third party based on the extent of your activity of conveying
- * the work, and under which the third party grants, to any of the
- * parties who would receive the covered work from you, a discriminatory
- * patent license (a) in connection with copies of the covered work
- * conveyed by you (or copies made from those copies), or (b) primarily
- * for and in connection with specific products or compilations that
- * contain the covered work, unless you entered into that arrangement,
- * or that patent license was granted, prior to 28 March 2007.
- *
- * Nothing in this License shall be construed as excluding or limiting
- * any implied license or other defenses to infringement that may
- * otherwise be available to you under applicable patent law.
- *
- * 12. No Surrender of Others' Freedom.
- *
- * If conditions are imposed on you (whether by court order, agreement or
- * otherwise) that contradict the conditions of this License, they do not
- * excuse you from the conditions of this License. If you cannot convey a
- * covered work so as to satisfy simultaneously your obligations under this
- * License and any other pertinent obligations, then as a consequence you may
- * not convey it at all. For example, if you agree to terms that obligate you
- * to collect a royalty for further conveying from those to whom you convey
- * the Program, the only way you could satisfy both those terms and this
- * License would be to refrain entirely from conveying the Program.
- *
- * 13. Use with the GNU Affero General Public License.
- *
- * Notwithstanding any other provision of this License, you have
- * permission to link or combine any covered work with a work licensed
- * under version 3 of the GNU Affero General Public License into a single
- * combined work, and to convey the resulting work. The terms of this
- * License will continue to apply to the part which is the covered work,
- * but the special requirements of the GNU Affero General Public License,
- * section 13, concerning interaction through a network will apply to the
- * combination as such.
- *
- * 14. Revised Versions of this License.
- *
- * The Free Software Foundation may publish revised and/or new versions of
- * the GNU General Public License from time to time. Such new versions will
- * be similar in spirit to the present version, but may differ in detail to
- * address new problems or concerns.
- *
- * Each version is given a distinguishing version number. If the
- * Program specifies that a certain numbered version of the GNU General
- * Public License "or any later version" applies to it, you have the
- * option of following the terms and conditions either of that numbered
- * version or of any later version published by the Free Software
- * Foundation. If the Program does not specify a version number of the
- * GNU General Public License, you may choose any version ever published
- * by the Free Software Foundation.
- *
- * If the Program specifies that a proxy can decide which future
- * versions of the GNU General Public License can be used, that proxy's
- * public statement of acceptance of a version permanently authorizes you
- * to choose that version for the Program.
- *
- * Later license versions may give you additional or different
- * permissions. However, no additional obligations are imposed on any
- * author or copyright holder as a result of your choosing to follow a
- * later version.
- *
- * 15. Disclaimer of Warranty.
- *
- * THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- * APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- * HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
- * OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
- * IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
- * ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- *
- * 16. Limitation of Liability.
- *
- * IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
- * WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
- * THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
- * GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
- * USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- * DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
- * PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
- * EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGES.
- *
- * 17. Interpretation of Sections 15 and 16.
- *
- * If the disclaimer of warranty and limitation of liability provided
- * above cannot be given local legal effect according to their terms,
- * reviewing courts shall apply local law that most closely approximates
- * an absolute waiver of all civil liability in connection with the
- * Program, unless a warranty or assumption of liability accompanies a
- * copy of the Program in return for a fee.
- *
- * END OF TERMS AND CONDITIONS
- *
- * How to Apply These Terms to Your New Programs
- *
- * If you develop a new program, and you want it to be of the greatest
- * possible use to the public, the best way to achieve this is to make it
- * free software which everyone can redistribute and change under these terms.
- *
- * To do so, attach the following notices to the program. It is safest
- * to attach them to the start of each source file to most effectively
- * state the exclusion of warranty; and each file should have at least
- * the "copyright" line and a pointer to where the full notice is found.
- *
- * {one line to give the program's name and a brief idea of what it does.}
- * Copyright (C) {year} {name of author}
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * Also add information on how to contact you by electronic and paper mail.
- *
- * If the program does terminal interaction, make it output a short
- * notice like this when it starts in an interactive mode:
- *
- * {project} Copyright (C) {year} {fullname}
- * This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- * This is free software, and you are welcome to redistribute it
- * under certain conditions; type `show c' for details.
- *
- * The hypothetical commands `show w' and `show c' should show the appropriate
- * parts of the General Public License. Of course, your program's commands
- * might be different; for a GUI interface, you would use an "about box".
- *
- * You should also get your employer (if you work as a programmer) or school,
- * if any, to sign a "copyright disclaimer" for the program, if necessary.
- * For more information on this, and how to apply and follow the GNU GPL, see
- * .
- *
- * The GNU General Public License does not permit incorporating your program
- * into proprietary programs. If your program is a subroutine library, you
- * may consider it more useful to permit linking proprietary applications with
- * the library. If this is what you want to do, use the GNU Lesser General
- * Public License instead of this License. But first, please read
- * .
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
-
#ifndef INCLUDED_SATNOGS_FRAME_ENCODER_H
#define INCLUDED_SATNOGS_FRAME_ENCODER_H
diff --git a/include/satnogs/freq_drift.h b/include/satnogs/freq_drift.h
new file mode 100644
index 0000000..f5edd19
--- /dev/null
+++ b/include/satnogs/freq_drift.h
@@ -0,0 +1,60 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef INCLUDED_SATNOGS_FREQ_DRIFT_H
+#define INCLUDED_SATNOGS_FREQ_DRIFT_H
+
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ /*!
+ * \brief Class that specifies the frequency drift at a given time.
+ * The time is measured in samples.
+ * \ingroup satnogs
+ */
+ class SATNOGS_API freq_drift
+ {
+ public:
+ freq_drift (uint64_t x, double y);
+ ~freq_drift ();
+ double
+ get_freq_drift () const;
+ void
+ set_freq_drift (double freqDrift);
+ uint64_t
+ get_x () const;
+ void
+ set_x (uint64_t x);
+
+ private:
+ uint64_t d_x;
+ double d_freq_drift;
+ };
+
+ } // namespace satnogs
+} // namespace gr
+
+#endif /* INCLUDED_SATNOGS_FREQ_DRIFT_H */
+
diff --git a/include/satnogs/tc_tm.h b/include/satnogs/tc_tm.h
index 6196f53..2d67b94 100644
--- a/include/satnogs/tc_tm.h
+++ b/include/satnogs/tc_tm.h
@@ -133,12 +133,12 @@ namespace gr
*/
typedef enum
{
- R_OBC_PKT_ILLEGAL_APPID = 0, //!< R_OBC_PKT_ILLEGAL_APPID illegal application ID
+ R_OBC_PKT_ILLEGAL_APPID = 0, //!< R_OBC_PKT_ILLEGAL_APPID illegal application ID
R_OBC_PKT_INV_LEN = 1, //!< R_OBC_PKT_INV_LEN invalid length
R_OBC_PKT_INC_CRC = 2, //!< R_OBC_PKT_INC_CRC incorrect CRC
R_OBC_PKT_ILLEGAL_PKT_TP = 3, //!< R_OBC_PKT_ILLEGAL_PKT_TP
R_OBC_PKT_ILLEGAL_PKT_STP = 4, //!< R_OBC_PKT_ILLEGAL_PKT_STP
- R_OBC_PKT_ILLEGAL_APP_DATA = 5,//!< R_OBC_PKT_ILLEGAL_APP_DATA
+ R_OBC_PKT_ILLEGAL_APP_DATA = 5, //!< R_OBC_PKT_ILLEGAL_APP_DATA
R_OBC_OK = 6, //!< R_OBC_OK All ok
R_OBC_ERROR = 7, //!< R_OBC_ERROR an error occured
R_OBC_EOT = 8, //!< R_OBC_EOT End-of-transfer
@@ -174,33 +174,217 @@ namespace gr
uint16_t dest_id;
uint8_t *data; /* variable data, this should be fixed array */
- uint8_t padding; /* x bits, padding for word alligment */
+ uint8_t padding; /* x bits, padding for word alligment */
uint16_t crc; /* CRC or checksum, mission specific*/
} tc_tm_pkt;
- extern const uint8_t services_verification_TC_TM[MAX_SERVICES][MAX_SUBTYPES][2];
- extern const uint8_t app_id_verification[MAX_APP_ID];
- extern const uint8_t services_verification_OBC_TC[MAX_SERVICES][MAX_SUBTYPES];
- extern OBC_ret_state_t
- verification_pack_pkt_api (uint8_t *buf, tc_tm_pkt *pkt,
- uint16_t *buf_pointer);
- extern OBC_ret_state_t
- hk_pack_pkt_api (uint8_t *buf, tc_tm_pkt *pkt, uint16_t *buf_pointer);
+ const uint8_t services_verification_TC_TM[MAX_SERVICES][MAX_SUBTYPES][2];
+ const uint8_t app_id_verification[MAX_APP_ID];
+ const uint8_t services_verification_OBC_TC[MAX_SERVICES][MAX_SUBTYPES];
- uint8_t
- checkSum (const uint8_t *data, uint16_t size);
+ extern OBC_ret_state_t
+ verification_pack_pkt_api (uint8_t *buf, tc_tm_pkt *pkt,
+ uint16_t *buf_pointer);
+ extern OBC_ret_state_t
+ hk_pack_pkt_api (uint8_t *buf, tc_tm_pkt *pkt, uint16_t *buf_pointer);
- OBC_ret_state_t
- unpack_pkt (const uint8_t *buf, tc_tm_pkt *pkt, const uint16_t size);
- OBC_ret_state_t
- pack_pkt (uint8_t *buf, tc_tm_pkt *pkt, uint16_t *size);
+ static inline uint8_t
+ ecss_tm_checksum (const uint8_t *data, uint16_t size)
+ {
+ uint8_t CRC = 0;
+ for (int i = 0; i <= size; i++) {
+ CRC = CRC ^ data[i];
+ }
+ return CRC;
+ }
- OBC_ret_state_t
- crt_pkt (tc_tm_pkt *pkt, uint16_t app_id, uint8_t type, uint8_t ack,
- uint8_t ser_type, uint8_t ser_subtype, uint16_t dest_id);
+ /*Must check for endianess*/
+ static inline OBC_ret_state_t
+ ecss_tm_unpack_pkt (const uint8_t *buf, tc_tm_pkt *pkt, const uint16_t size)
+ {
+ union _cnv cnv;
+ uint8_t tmp_crc[2];
+
+ uint8_t ver, dfield_hdr, ccsds_sec_hdr, tc_pus;
+
+ tmp_crc[0] = buf[size - 1];
+ tmp_crc[1] = ecss_tm_checksum (buf, size - 2);
+
+ ver = buf[0] >> 5;
+
+ pkt->type = (buf[0] >> 4) & 0x01;
+ dfield_hdr = (buf[0] >> 3) & 0x01;
+
+ cnv.cnv8[0] = buf[1];
+ cnv.cnv8[1] = 0x07 & buf[0];
+ pkt->app_id = cnv.cnv16[0];
+
+ pkt->seq_flags = buf[2] >> 6;
+
+ cnv.cnv8[0] = buf[3];
+ cnv.cnv8[1] = buf[2] & 0x3F;
+ pkt->seq_count = cnv.cnv16[0];
+
+ cnv.cnv8[0] = buf[4];
+ cnv.cnv8[1] = buf[5];
+ pkt->len = cnv.cnv16[0];
+
+ ccsds_sec_hdr = buf[6] >> 7;
+
+ tc_pus = buf[6] >> 4;
+
+ pkt->ack = 0x04 & buf[6];
+
+ pkt->ser_type = buf[7];
+ pkt->ser_subtype = buf[8];
+ pkt->dest_id = buf[9];
+
+ if (app_id_verification[pkt->app_id] != 1) {
+ return R_OBC_PKT_ILLEGAL_APPID;
+ }
+
+ if (pkt->len != size - 7) {
+ return R_OBC_PKT_INV_LEN;
+ }
+
+ if (tmp_crc[0] != tmp_crc[1]) {
+ return R_OBC_PKT_INC_CRC;
+ }
+
+ if (services_verification_TC_TM[pkt->ser_type][pkt->ser_subtype][pkt->type]
+ != 1) {
+ return R_OBC_PKT_ILLEGAL_PKT_TP;
+ }
+
+ if (ver != 0) {
+ return R_OBC_ERROR;
+ }
+
+ if (tc_pus != 1) {
+ return R_OBC_ERROR;
+ }
+
+ if (ccsds_sec_hdr != 0) {
+ return R_OBC_ERROR;
+ }
+
+ if (pkt->type != TC && pkt->type != TM) {
+ return R_OBC_ERROR;
+ }
+
+ if (dfield_hdr != 1) {
+ return R_OBC_ERROR;
+ }
+
+ if (pkt->ack != TC_ACK_NO || pkt->ack != TC_ACK_ACC
+ || pkt->ack != TC_ACK_EXE_COMP) {
+ return R_OBC_ERROR;
+ }
+
+ for (int i = 0; i < pkt->len - 4; i++) {
+ pkt->data[i] = buf[10 + i];
+ }
+
+ return R_OBC_OK;
+ }
+
+ /**
+ * Packs a TC packet into a byte buffer
+ * @param buf buffer to store the data to be sent
+ * @param pkt the data to be stored in the buffer
+ * @param size size of the array
+ * @return appropriate error code or R_OBC_OK if all operation succeed
+ */
+ static inline OBC_ret_state_t
+ ecss_tm_pack_pkt (uint8_t *buf, tc_tm_pkt *pkt, uint16_t *size)
+ {
+
+ union _cnv cnv;
+ uint8_t buf_pointer;
+
+ cnv.cnv16[0] = pkt->app_id;
+
+ buf[0] = ( ECSS_VER_NUMBER << 5 | pkt->type << 4
+ | ECSS_DATA_FIELD_HDR_FLG << 3 | cnv.cnv8[1]);
+ buf[1] = cnv.cnv8[0];
+
+ cnv.cnv16[0] = pkt->seq_count;
+ buf[2] = (pkt->seq_flags << 6 | cnv.cnv8[1]);
+ buf[3] = cnv.cnv8[0];
+
+ /* TYPE = 0 TM, TYPE = 1 TC*/
+ if (pkt->type == TM) {
+ buf[6] = ECSS_PUS_VER << 4;
+ }
+ else if (pkt->type == TC) {
+ buf[6] = ( ECSS_SEC_HDR_FIELD_FLG << 7 | ECSS_PUS_VER << 4 | pkt->ack);
+ }
+ else {
+ return R_OBC_ERROR;
+ }
+
+ buf[7] = pkt->ser_type;
+ buf[8] = pkt->ser_subtype;
+ buf[9] = pkt->dest_id; /*source or destination*/
+
+ buf_pointer = 10;
+
+ if (pkt->ser_type == TC_VERIFICATION_SERVICE) {
+ //cnv.cnv16[0] = tc_pkt_id;
+ //cnv.cnv16[1] = tc_pkt_seq_ctrl;
+
+ /*verification_pack_pkt_api (buf, pkt, &buf_pointer);*/
+
+ }
+ else if (pkt->ser_type == TC_HOUSEKEEPING_SERVICE) {
+
+ /*hk_pack_pkt_api (buf, pkt, &buf_pointer);*/
+
+ }
+ else if (pkt->ser_type == TC_FUNCTION_MANAGEMENT_SERVICE
+ && pkt->ser_subtype == 1) {
+
+ buf[10] = pkt->data[0];
+
+ buf[11] = pkt->data[1];
+ buf[12] = pkt->data[2];
+ buf[13] = pkt->data[3];
+ buf[14] = pkt->data[4];
+
+ buf_pointer += 5;
+
+ }
+ else {
+ return R_OBC_ERROR;
+ }
+
+ /*check if this is correct*/
+ cnv.cnv16[0] = buf_pointer - 6;
+ buf[4] = cnv.cnv8[0];
+ buf[5] = cnv.cnv8[1];
+
+ buf[buf_pointer] = ecss_tm_checksum (buf, buf_pointer - 1);
+ *size = buf_pointer;
+ return R_OBC_OK;
+ }
+
+ static inline OBC_ret_state_t
+ ecss_tm_crt_pkt (tc_tm_pkt *pkt, uint16_t app_id, uint8_t type, uint8_t ack,
+ uint8_t ser_type, uint8_t ser_subtype, uint16_t dest_id)
+ {
+
+ pkt->type = type;
+ pkt->app_id = app_id;
+ pkt->dest_id = dest_id;
+
+ pkt->ser_type = ser_type;
+ pkt->ser_subtype = ser_subtype;
+
+ return R_OBC_OK;
+ }
} // namespace satnogs
} // namespace gr
diff --git a/include/satnogs/tcp_rigctl_msg_source.h b/include/satnogs/tcp_rigctl_msg_source.h
new file mode 100644
index 0000000..4aaa54f
--- /dev/null
+++ b/include/satnogs/tcp_rigctl_msg_source.h
@@ -0,0 +1,60 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef INCLUDED_SATNOGS_TCP_RIGCTL_MSG_SOURCE_H
+#define INCLUDED_SATNOGS_TCP_RIGCTL_MSG_SOURCE_H
+
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ /*!
+ * \brief Block that accepts TCP messages with rigctl commands. Depending
+ * the command contents this block produces an appropriate PMT message
+ * to control other blocks in the flowgraph
+ * \ingroup satnogs
+ *
+ */
+ class SATNOGS_API tcp_rigctl_msg_source : virtual public gr::block
+ {
+ public:
+ typedef boost::shared_ptr sptr;
+
+
+ /**
+ * Rigctl TCP command accepter
+ * @param addr the address of the interface to listen at
+ * @param port the TCP port to listen for TCP connections
+ * @param mtu the maximum MTU
+ * @return
+ */
+ static sptr
+ make (const std::string& addr, uint16_t port, size_t mtu = 1500);
+ };
+
+ } // namespace satnogs
+} // namespace gr
+
+#endif /* INCLUDED_SATNOGS_TCP_RIGCTL_MSG_SOURCE_H */
+
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 1b132b0..6ee4c92 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -37,8 +37,11 @@ list(APPEND satnogs_sources
ax25_decoder_b_impl.cc
udp_msg_source_impl.cc
debug_msg_source_impl.cc
- tc_tm.cc
- frame_encoder_impl.cc )
+ tcp_rigctl_msg_source_impl.cc
+ doppler_correction_cc_impl.cc
+ frame_encoder_impl.cc
+ doppler_fit.cc
+ freq_drift.cc )
set(satnogs_sources "${satnogs_sources}" PARENT_SCOPE)
if(NOT satnogs_sources)
diff --git a/lib/doppler_correction_cc_impl.cc b/lib/doppler_correction_cc_impl.cc
new file mode 100644
index 0000000..35c082e
--- /dev/null
+++ b/lib/doppler_correction_cc_impl.cc
@@ -0,0 +1,138 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include "doppler_correction_cc_impl.h"
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ doppler_correction_cc::sptr
+ doppler_correction_cc::make (double target_freq, double sampling_rate,
+ size_t corrections_per_sec)
+ {
+ return gnuradio::get_initial_sptr (
+ new doppler_correction_cc_impl (target_freq, sampling_rate,
+ corrections_per_sec));
+ }
+
+ /*
+ * The private constructor
+ */
+ doppler_correction_cc_impl::doppler_correction_cc_impl (
+ double target_freq, double sampling_rate, size_t corrections_per_sec) :
+ gr::sync_block ("doppler_correction_cc",
+ gr::io_signature::make (1, 1, sizeof(gr_complex)),
+ gr::io_signature::make (1, 1, sizeof(gr_complex))),
+ d_target_freq (target_freq),
+ d_samp_rate (sampling_rate),
+ d_update_period (sampling_rate / (double) corrections_per_sec),
+ d_est_thrhld(7),
+ d_freq_diff (0.0),
+ d_have_est(false),
+ d_freq_est_num(0)
+ {
+ message_port_register_in (pmt::mp ("freq"));
+ message_port_register_in (pmt::mp ("reset"));
+ /*
+ * Set the maximum number of samples to be equivalent of half a second.
+ * With this way we are sure that at least one frequency message
+ * per second will be processed.
+ *
+ * This is taken into consideration due to the fact that the work()
+ * and the input message handler are not reentrant.
+ */
+ set_max_noutput_items (d_samp_rate / 2.0);
+
+ set_msg_handler(pmt::mp("freq"),
+ boost::bind(&doppler_correction_cc_impl::new_freq,
+ this, _1));
+ set_msg_handler(pmt::mp("reset"),
+ boost::bind(&doppler_correction_cc_impl::reset,
+ this, _1));
+ }
+
+ void
+ doppler_correction_cc_impl::new_freq (pmt::pmt_t msg)
+ {
+ boost::mutex::scoped_lock lock (d_mutex);
+ double new_freq;
+ new_freq = pmt::to_double(msg);
+ d_freq_diff = d_target_freq - new_freq;
+ if(!d_have_est){
+ d_freq_est_num++;
+ if(d_freq_est_num > d_est_thrhld - 1){
+ d_have_est = true;
+ }
+ d_doppler_freqs.push_back(d_freq_diff);
+ }
+ else{
+ d_doppler_freqs.pop_front();
+ d_doppler_freqs.push_back(d_freq_diff);
+ }
+ }
+
+ void
+ doppler_correction_cc_impl::reset (pmt::pmt_t msg)
+ {
+ boost::mutex::scoped_lock lock (d_mutex);
+ d_doppler_freqs.clear();
+ d_freq_est_num = 0;
+ d_have_est = false;
+ }
+
+ /*
+ * Our virtual destructor.
+ */
+ doppler_correction_cc_impl::~doppler_correction_cc_impl ()
+ {
+ }
+
+ int
+ doppler_correction_cc_impl::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+ {
+ const gr_complex *in = (const gr_complex *) input_items[0];
+ gr_complex *out = (gr_complex *) output_items[0];
+
+ /*
+ * If we do not have an estimation yet, just copy the input to the output.
+ * Otherwise perform Doppler correction, using the fitted curve indicating
+ * the frequency drift.
+ */
+ if(d_have_est){
+ }
+ else{
+ memcpy(out, in, noutput_items * sizeof(gr_complex));
+ }
+
+ return noutput_items;
+ }
+
+ } /* namespace satnogs */
+} /* namespace gr */
+
diff --git a/lib/doppler_correction_cc_impl.h b/lib/doppler_correction_cc_impl.h
new file mode 100644
index 0000000..646df73
--- /dev/null
+++ b/lib/doppler_correction_cc_impl.h
@@ -0,0 +1,67 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef INCLUDED_SATNOGS_DOPPLER_CORRECTION_CC_IMPL_H
+#define INCLUDED_SATNOGS_DOPPLER_CORRECTION_CC_IMPL_H
+
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ class doppler_correction_cc_impl : public doppler_correction_cc
+ {
+ private:
+ const double d_target_freq;
+ const double d_samp_rate;
+ const double d_update_period;
+ const size_t d_est_thrhld;
+
+ double d_freq_diff;
+ bool d_have_est;
+ size_t d_freq_est_num;
+ std::deque d_doppler_freqs;
+ boost::mutex d_mutex;
+
+ void
+ new_freq (pmt::pmt_t msg);
+
+ void
+ reset (pmt::pmt_t msg);
+
+ public:
+ doppler_correction_cc_impl (double target_freq, double sampling_rate,
+ size_t corrections_per_sec);
+ ~doppler_correction_cc_impl ();
+
+ // Where all the action really happens
+ int
+ work (int noutput_items, gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+ };
+
+ } // namespace satnogs
+} // namespace gr
+
+#endif /* INCLUDED_SATNOGS_DOPPLER_CORRECTION_CC_IMPL_H */
+
diff --git a/lib/doppler_fit.cc b/lib/doppler_fit.cc
new file mode 100644
index 0000000..e875ab2
--- /dev/null
+++ b/lib/doppler_fit.cc
@@ -0,0 +1,94 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ /**
+ * Creates a polynomial fitting routine.
+ * @param degree the degree of the polynomial
+ */
+ doppler_fit::doppler_fit (size_t degree) :
+ d_degree(degree)
+ {
+ }
+
+ doppler_fit::~doppler_fit ()
+ {
+ }
+
+ void
+ doppler_fit::fit (std::deque drifts)
+ {
+ size_t i;
+ size_t j;
+ size_t s;
+ size_t singular;
+ double val;
+ s = drifts.size();
+
+ boost::numeric::ublas::matrix x_matrix(s, d_degree+1);
+ boost::numeric::ublas::matrix y_matrix(s, 1);
+
+ for(i = 0; i < s; i++){
+ y_matrix(i, 0) = drifts[i].get_freq_drift();
+ }
+
+ for(i = 0; i < s; i++){
+ val = 1.0;
+ for(j = 0; j < d_degree + 1; j++) {
+ x_matrix(i, j) = val;
+ val *= drifts[i].get_x();
+ }
+ }
+
+ /* Transpose the matrix with the x values */
+ boost::numeric::ublas::matrix tx_matrix (
+ boost::numeric::ublas::trans (x_matrix));
+
+ boost::numeric::ublas::matrix txx_matrix (
+ boost::numeric::ublas::prec_prod(tx_matrix, x_matrix));
+
+ boost::numeric::ublas::matrix txy_matrix (
+ boost::numeric::ublas::prec_prod(tx_matrix, y_matrix));
+
+ boost::numeric::ublas::permutation_matrix perm(txx_matrix.size1());
+ singular = boost::numeric::ublas::lu_factorize(txx_matrix, perm);
+ BOOST_ASSERT( singular == 0 );
+
+ boost::numeric::ublas::lu_substitute(txx_matrix, perm, txy_matrix);
+ d_coeff = std::vector (txy_matrix.data().begin(),
+ txy_matrix.data().end());
+ }
+
+ } /* namespace satnogs */
+} /* namespace gr */
+
diff --git a/lib/frame_encoder_impl.cc b/lib/frame_encoder_impl.cc
index f710ca6..4c52252 100644
--- a/lib/frame_encoder_impl.cc
+++ b/lib/frame_encoder_impl.cc
@@ -1,678 +1,21 @@
/* -*- c++ -*- */
-/* GNU GENERAL PUBLIC LICENSE
- * Version 3, 29 June 2007
- *
- * Copyright (C) 2007 Free Software Foundation, Inc.
- * Everyone is permitted to copy and distribute verbatim copies
- * of this license document, but changing it is not allowed.
- *
- * Preamble
- *
- * The GNU General Public License is a free, copyleft license for
- * software and other kinds of works.
- *
- * The licenses for most software and other practical works are designed
- * to take away your freedom to share and change the works. By contrast,
- * the GNU General Public License is intended to guarantee your freedom to
- * share and change all versions of a program--to make sure it remains free
- * software for all its users. We, the Free Software Foundation, use the
- * GNU General Public License for most of our software; it applies also to
- * any other work released this way by its authors. You can apply it to
- * your programs, too.
- *
- * When we speak of free software, we are referring to freedom, not
- * price. Our General Public Licenses are designed to make sure that you
- * have the freedom to distribute copies of free software (and charge for
- * them if you wish), that you receive source code or can get it if you
- * want it, that you can change the software or use pieces of it in new
- * free programs, and that you know you can do these things.
- *
- * To protect your rights, we need to prevent others from denying you
- * these rights or asking you to surrender the rights. Therefore, you have
- * certain responsibilities if you distribute copies of the software, or if
- * you modify it: responsibilities to respect the freedom of others.
- *
- * For example, if you distribute copies of such a program, whether
- * gratis or for a fee, you must pass on to the recipients the same
- * freedoms that you received. You must make sure that they, too, receive
- * or can get the source code. And you must show them these terms so they
- * know their rights.
- *
- * Developers that use the GNU GPL protect your rights with two steps:
- * (1) assert copyright on the software, and (2) offer you this License
- * giving you legal permission to copy, distribute and/or modify it.
- *
- * For the developers' and authors' protection, the GPL clearly explains
- * that there is no warranty for this free software. For both users' and
- * authors' sake, the GPL requires that modified versions be marked as
- * changed, so that their problems will not be attributed erroneously to
- * authors of previous versions.
- *
- * Some devices are designed to deny users access to install or run
- * modified versions of the software inside them, although the manufacturer
- * can do so. This is fundamentally incompatible with the aim of
- * protecting users' freedom to change the software. The systematic
- * pattern of such abuse occurs in the area of products for individuals to
- * use, which is precisely where it is most unacceptable. Therefore, we
- * have designed this version of the GPL to prohibit the practice for those
- * products. If such problems arise substantially in other domains, we
- * stand ready to extend this provision to those domains in future versions
- * of the GPL, as needed to protect the freedom of users.
- *
- * Finally, every program is threatened constantly by software patents.
- * States should not allow patents to restrict development and use of
- * software on general-purpose computers, but in those that do, we wish to
- * avoid the special danger that patents applied to a free program could
- * make it effectively proprietary. To prevent this, the GPL assures that
- * patents cannot be used to render the program non-free.
- *
- * The precise terms and conditions for copying, distribution and
- * modification follow.
- *
- * TERMS AND CONDITIONS
- *
- * 0. Definitions.
- *
- * "This License" refers to version 3 of the GNU General Public License.
- *
- * "Copyright" also means copyright-like laws that apply to other kinds of
- * works, such as semiconductor masks.
- *
- * "The Program" refers to any copyrightable work licensed under this
- * License. Each licensee is addressed as "you". "Licensees" and
- * "recipients" may be individuals or organizations.
- *
- * To "modify" a work means to copy from or adapt all or part of the work
- * in a fashion requiring copyright permission, other than the making of an
- * exact copy. The resulting work is called a "modified version" of the
- * earlier work or a work "based on" the earlier work.
- *
- * A "covered work" means either the unmodified Program or a work based
- * on the Program.
- *
- * To "propagate" a work means to do anything with it that, without
- * permission, would make you directly or secondarily liable for
- * infringement under applicable copyright law, except executing it on a
- * computer or modifying a private copy. Propagation includes copying,
- * distribution (with or without modification), making available to the
- * public, and in some countries other activities as well.
- *
- * To "convey" a work means any kind of propagation that enables other
- * parties to make or receive copies. Mere interaction with a user through
- * a computer network, with no transfer of a copy, is not conveying.
- *
- * An interactive user interface displays "Appropriate Legal Notices"
- * to the extent that it includes a convenient and prominently visible
- * feature that (1) displays an appropriate copyright notice, and (2)
- * tells the user that there is no warranty for the work (except to the
- * extent that warranties are provided), that licensees may convey the
- * work under this License, and how to view a copy of this License. If
- * the interface presents a list of user commands or options, such as a
- * menu, a prominent item in the list meets this criterion.
- *
- * 1. Source Code.
- *
- * The "source code" for a work means the preferred form of the work
- * for making modifications to it. "Object code" means any non-source
- * form of a work.
- *
- * A "Standard Interface" means an interface that either is an official
- * standard defined by a recognized standards body, or, in the case of
- * interfaces specified for a particular programming language, one that
- * is widely used among developers working in that language.
- *
- * The "System Libraries" of an executable work include anything, other
- * than the work as a whole, that (a) is included in the normal form of
- * packaging a Major Component, but which is not part of that Major
- * Component, and (b) serves only to enable use of the work with that
- * Major Component, or to implement a Standard Interface for which an
- * implementation is available to the public in source code form. A
- * "Major Component", in this context, means a major essential component
- * (kernel, window system, and so on) of the specific operating system
- * (if any) on which the executable work runs, or a compiler used to
- * produce the work, or an object code interpreter used to run it.
- *
- * The "Corresponding Source" for a work in object code form means all
- * the source code needed to generate, install, and (for an executable
- * work) run the object code and to modify the work, including scripts to
- * control those activities. However, it does not include the work's
- * System Libraries, or general-purpose tools or generally available free
- * programs which are used unmodified in performing those activities but
- * which are not part of the work. For example, Corresponding Source
- * includes interface definition files associated with source files for
- * the work, and the source code for shared libraries and dynamically
- * linked subprograms that the work is specifically designed to require,
- * such as by intimate data communication or control flow between those
- * subprograms and other parts of the work.
- *
- * The Corresponding Source need not include anything that users
- * can regenerate automatically from other parts of the Corresponding
- * Source.
- *
- * The Corresponding Source for a work in source code form is that
- * same work.
- *
- * 2. Basic Permissions.
- *
- * All rights granted under this License are granted for the term of
- * copyright on the Program, and are irrevocable provided the stated
- * conditions are met. This License explicitly affirms your unlimited
- * permission to run the unmodified Program. The output from running a
- * covered work is covered by this License only if the output, given its
- * content, constitutes a covered work. This License acknowledges your
- * rights of fair use or other equivalent, as provided by copyright law.
- *
- * You may make, run and propagate covered works that you do not
- * convey, without conditions so long as your license otherwise remains
- * in force. You may convey covered works to others for the sole purpose
- * of having them make modifications exclusively for you, or provide you
- * with facilities for running those works, provided that you comply with
- * the terms of this License in conveying all material for which you do
- * not control copyright. Those thus making or running the covered works
- * for you must do so exclusively on your behalf, under your direction
- * and control, on terms that prohibit them from making any copies of
- * your copyrighted material outside their relationship with you.
- *
- * Conveying under any other circumstances is permitted solely under
- * the conditions stated below. Sublicensing is not allowed; section 10
- * makes it unnecessary.
- *
- * 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
- *
- * No covered work shall be deemed part of an effective technological
- * measure under any applicable law fulfilling obligations under article
- * 11 of the WIPO copyright treaty adopted on 20 December 1996, or
- * similar laws prohibiting or restricting circumvention of such
- * measures.
- *
- * When you convey a covered work, you waive any legal power to forbid
- * circumvention of technological measures to the extent such circumvention
- * is effected by exercising rights under this License with respect to
- * the covered work, and you disclaim any intention to limit operation or
- * modification of the work as a means of enforcing, against the work's
- * users, your or third parties' legal rights to forbid circumvention of
- * technological measures.
- *
- * 4. Conveying Verbatim Copies.
- *
- * You may convey verbatim copies of the Program's source code as you
- * receive it, in any medium, provided that you conspicuously and
- * appropriately publish on each copy an appropriate copyright notice;
- * keep intact all notices stating that this License and any
- * non-permissive terms added in accord with section 7 apply to the code;
- * keep intact all notices of the absence of any warranty; and give all
- * recipients a copy of this License along with the Program.
- *
- * You may charge any price or no price for each copy that you convey,
- * and you may offer support or warranty protection for a fee.
- *
- * 5. Conveying Modified Source Versions.
- *
- * You may convey a work based on the Program, or the modifications to
- * produce it from the Program, in the form of source code under the
- * terms of section 4, provided that you also meet all of these conditions:
- *
- * a) The work must carry prominent notices stating that you modified
- * it, and giving a relevant date.
- *
- * b) The work must carry prominent notices stating that it is
- * released under this License and any conditions added under section
- * 7. This requirement modifies the requirement in section 4 to
- * "keep intact all notices".
- *
- * c) You must license the entire work, as a whole, under this
- * License to anyone who comes into possession of a copy. This
- * License will therefore apply, along with any applicable section 7
- * additional terms, to the whole of the work, and all its parts,
- * regardless of how they are packaged. This License gives no
- * permission to license the work in any other way, but it does not
- * invalidate such permission if you have separately received it.
- *
- * d) If the work has interactive user interfaces, each must display
- * Appropriate Legal Notices; however, if the Program has interactive
- * interfaces that do not display Appropriate Legal Notices, your
- * work need not make them do so.
- *
- * A compilation of a covered work with other separate and independent
- * works, which are not by their nature extensions of the covered work,
- * and which are not combined with it such as to form a larger program,
- * in or on a volume of a storage or distribution medium, is called an
- * "aggregate" if the compilation and its resulting copyright are not
- * used to limit the access or legal rights of the compilation's users
- * beyond what the individual works permit. Inclusion of a covered work
- * in an aggregate does not cause this License to apply to the other
- * parts of the aggregate.
- *
- * 6. Conveying Non-Source Forms.
- *
- * You may convey a covered work in object code form under the terms
- * of sections 4 and 5, provided that you also convey the
- * machine-readable Corresponding Source under the terms of this License,
- * in one of these ways:
- *
- * a) Convey the object code in, or embodied in, a physical product
- * (including a physical distribution medium), accompanied by the
- * Corresponding Source fixed on a durable physical medium
- * customarily used for software interchange.
- *
- * b) Convey the object code in, or embodied in, a physical product
- * (including a physical distribution medium), accompanied by a
- * written offer, valid for at least three years and valid for as
- * long as you offer spare parts or customer support for that product
- * model, to give anyone who possesses the object code either (1) a
- * copy of the Corresponding Source for all the software in the
- * product that is covered by this License, on a durable physical
- * medium customarily used for software interchange, for a price no
- * more than your reasonable cost of physically performing this
- * conveying of source, or (2) access to copy the
- * Corresponding Source from a network server at no charge.
- *
- * c) Convey individual copies of the object code with a copy of the
- * written offer to provide the Corresponding Source. This
- * alternative is allowed only occasionally and noncommercially, and
- * only if you received the object code with such an offer, in accord
- * with subsection 6b.
- *
- * d) Convey the object code by offering access from a designated
- * place (gratis or for a charge), and offer equivalent access to the
- * Corresponding Source in the same way through the same place at no
- * further charge. You need not require recipients to copy the
- * Corresponding Source along with the object code. If the place to
- * copy the object code is a network server, the Corresponding Source
- * may be on a different server (operated by you or a third party)
- * that supports equivalent copying facilities, provided you maintain
- * clear directions next to the object code saying where to find the
- * Corresponding Source. Regardless of what server hosts the
- * Corresponding Source, you remain obligated to ensure that it is
- * available for as long as needed to satisfy these requirements.
- *
- * e) Convey the object code using peer-to-peer transmission, provided
- * you inform other peers where the object code and Corresponding
- * Source of the work are being offered to the general public at no
- * charge under subsection 6d.
- *
- * A separable portion of the object code, whose source code is excluded
- * from the Corresponding Source as a System Library, need not be
- * included in conveying the object code work.
- *
- * A "User Product" is either (1) a "consumer product", which means any
- * tangible personal property which is normally used for personal, family,
- * or household purposes, or (2) anything designed or sold for incorporation
- * into a dwelling. In determining whether a product is a consumer product,
- * doubtful cases shall be resolved in favor of coverage. For a particular
- * product received by a particular user, "normally used" refers to a
- * typical or common use of that class of product, regardless of the status
- * of the particular user or of the way in which the particular user
- * actually uses, or expects or is expected to use, the product. A product
- * is a consumer product regardless of whether the product has substantial
- * commercial, industrial or non-consumer uses, unless such uses represent
- * the only significant mode of use of the product.
- *
- * "Installation Information" for a User Product means any methods,
- * procedures, authorization keys, or other information required to install
- * and execute modified versions of a covered work in that User Product from
- * a modified version of its Corresponding Source. The information must
- * suffice to ensure that the continued functioning of the modified object
- * code is in no case prevented or interfered with solely because
- * modification has been made.
- *
- * If you convey an object code work under this section in, or with, or
- * specifically for use in, a User Product, and the conveying occurs as
- * part of a transaction in which the right of possession and use of the
- * User Product is transferred to the recipient in perpetuity or for a
- * fixed term (regardless of how the transaction is characterized), the
- * Corresponding Source conveyed under this section must be accompanied
- * by the Installation Information. But this requirement does not apply
- * if neither you nor any third party retains the ability to install
- * modified object code on the User Product (for example, the work has
- * been installed in ROM).
- *
- * The requirement to provide Installation Information does not include a
- * requirement to continue to provide support service, warranty, or updates
- * for a work that has been modified or installed by the recipient, or for
- * the User Product in which it has been modified or installed. Access to a
- * network may be denied when the modification itself materially and
- * adversely affects the operation of the network or violates the rules and
- * protocols for communication across the network.
- *
- * Corresponding Source conveyed, and Installation Information provided,
- * in accord with this section must be in a format that is publicly
- * documented (and with an implementation available to the public in
- * source code form), and must require no special password or key for
- * unpacking, reading or copying.
- *
- * 7. Additional Terms.
- *
- * "Additional permissions" are terms that supplement the terms of this
- * License by making exceptions from one or more of its conditions.
- * Additional permissions that are applicable to the entire Program shall
- * be treated as though they were included in this License, to the extent
- * that they are valid under applicable law. If additional permissions
- * apply only to part of the Program, that part may be used separately
- * under those permissions, but the entire Program remains governed by
- * this License without regard to the additional permissions.
- *
- * When you convey a copy of a covered work, you may at your option
- * remove any additional permissions from that copy, or from any part of
- * it. (Additional permissions may be written to require their own
- * removal in certain cases when you modify the work.) You may place
- * additional permissions on material, added by you to a covered work,
- * for which you have or can give appropriate copyright permission.
- *
- * Notwithstanding any other provision of this License, for material you
- * add to a covered work, you may (if authorized by the copyright holders of
- * that material) supplement the terms of this License with terms:
- *
- * a) Disclaiming warranty or limiting liability differently from the
- * terms of sections 15 and 16 of this License; or
- *
- * b) Requiring preservation of specified reasonable legal notices or
- * author attributions in that material or in the Appropriate Legal
- * Notices displayed by works containing it; or
- *
- * c) Prohibiting misrepresentation of the origin of that material, or
- * requiring that modified versions of such material be marked in
- * reasonable ways as different from the original version; or
- *
- * d) Limiting the use for publicity purposes of names of licensors or
- * authors of the material; or
- *
- * e) Declining to grant rights under trademark law for use of some
- * trade names, trademarks, or service marks; or
- *
- * f) Requiring indemnification of licensors and authors of that
- * material by anyone who conveys the material (or modified versions of
- * it) with contractual assumptions of liability to the recipient, for
- * any liability that these contractual assumptions directly impose on
- * those licensors and authors.
- *
- * All other non-permissive additional terms are considered "further
- * restrictions" within the meaning of section 10. If the Program as you
- * received it, or any part of it, contains a notice stating that it is
- * governed by this License along with a term that is a further
- * restriction, you may remove that term. If a license document contains
- * a further restriction but permits relicensing or conveying under this
- * License, you may add to a covered work material governed by the terms
- * of that license document, provided that the further restriction does
- * not survive such relicensing or conveying.
- *
- * If you add terms to a covered work in accord with this section, you
- * must place, in the relevant source files, a statement of the
- * additional terms that apply to those files, or a notice indicating
- * where to find the applicable terms.
- *
- * Additional terms, permissive or non-permissive, may be stated in the
- * form of a separately written license, or stated as exceptions;
- * the above requirements apply either way.
- *
- * 8. Termination.
- *
- * You may not propagate or modify a covered work except as expressly
- * provided under this License. Any attempt otherwise to propagate or
- * modify it is void, and will automatically terminate your rights under
- * this License (including any patent licenses granted under the third
- * paragraph of section 11).
- *
- * However, if you cease all violation of this License, then your
- * license from a particular copyright holder is reinstated (a)
- * provisionally, unless and until the copyright holder explicitly and
- * finally terminates your license, and (b) permanently, if the copyright
- * holder fails to notify you of the violation by some reasonable means
- * prior to 60 days after the cessation.
- *
- * Moreover, your license from a particular copyright holder is
- * reinstated permanently if the copyright holder notifies you of the
- * violation by some reasonable means, this is the first time you have
- * received notice of violation of this License (for any work) from that
- * copyright holder, and you cure the violation prior to 30 days after
- * your receipt of the notice.
- *
- * Termination of your rights under this section does not terminate the
- * licenses of parties who have received copies or rights from you under
- * this License. If your rights have been terminated and not permanently
- * reinstated, you do not qualify to receive new licenses for the same
- * material under section 10.
- *
- * 9. Acceptance Not Required for Having Copies.
- *
- * You are not required to accept this License in order to receive or
- * run a copy of the Program. Ancillary propagation of a covered work
- * occurring solely as a consequence of using peer-to-peer transmission
- * to receive a copy likewise does not require acceptance. However,
- * nothing other than this License grants you permission to propagate or
- * modify any covered work. These actions infringe copyright if you do
- * not accept this License. Therefore, by modifying or propagating a
- * covered work, you indicate your acceptance of this License to do so.
- *
- * 10. Automatic Licensing of Downstream Recipients.
- *
- * Each time you convey a covered work, the recipient automatically
- * receives a license from the original licensors, to run, modify and
- * propagate that work, subject to this License. You are not responsible
- * for enforcing compliance by third parties with this License.
- *
- * An "entity transaction" is a transaction transferring control of an
- * organization, or substantially all assets of one, or subdividing an
- * organization, or merging organizations. If propagation of a covered
- * work results from an entity transaction, each party to that
- * transaction who receives a copy of the work also receives whatever
- * licenses to the work the party's predecessor in interest had or could
- * give under the previous paragraph, plus a right to possession of the
- * Corresponding Source of the work from the predecessor in interest, if
- * the predecessor has it or can get it with reasonable efforts.
- *
- * You may not impose any further restrictions on the exercise of the
- * rights granted or affirmed under this License. For example, you may
- * not impose a license fee, royalty, or other charge for exercise of
- * rights granted under this License, and you may not initiate litigation
- * (including a cross-claim or counterclaim in a lawsuit) alleging that
- * any patent claim is infringed by making, using, selling, offering for
- * sale, or importing the Program or any portion of it.
- *
- * 11. Patents.
- *
- * A "contributor" is a copyright holder who authorizes use under this
- * License of the Program or a work on which the Program is based. The
- * work thus licensed is called the contributor's "contributor version".
- *
- * A contributor's "essential patent claims" are all patent claims
- * owned or controlled by the contributor, whether already acquired or
- * hereafter acquired, that would be infringed by some manner, permitted
- * by this License, of making, using, or selling its contributor version,
- * but do not include claims that would be infringed only as a
- * consequence of further modification of the contributor version. For
- * purposes of this definition, "control" includes the right to grant
- * patent sublicenses in a manner consistent with the requirements of
- * this License.
- *
- * Each contributor grants you a non-exclusive, worldwide, royalty-free
- * patent license under the contributor's essential patent claims, to
- * make, use, sell, offer for sale, import and otherwise run, modify and
- * propagate the contents of its contributor version.
- *
- * In the following three paragraphs, a "patent license" is any express
- * agreement or commitment, however denominated, not to enforce a patent
- * (such as an express permission to practice a patent or covenant not to
- * sue for patent infringement). To "grant" such a patent license to a
- * party means to make such an agreement or commitment not to enforce a
- * patent against the party.
- *
- * If you convey a covered work, knowingly relying on a patent license,
- * and the Corresponding Source of the work is not available for anyone
- * to copy, free of charge and under the terms of this License, through a
- * publicly available network server or other readily accessible means,
- * then you must either (1) cause the Corresponding Source to be so
- * available, or (2) arrange to deprive yourself of the benefit of the
- * patent license for this particular work, or (3) arrange, in a manner
- * consistent with the requirements of this License, to extend the patent
- * license to downstream recipients. "Knowingly relying" means you have
- * actual knowledge that, but for the patent license, your conveying the
- * covered work in a country, or your recipient's use of the covered work
- * in a country, would infringe one or more identifiable patents in that
- * country that you have reason to believe are valid.
- *
- * If, pursuant to or in connection with a single transaction or
- * arrangement, you convey, or propagate by procuring conveyance of, a
- * covered work, and grant a patent license to some of the parties
- * receiving the covered work authorizing them to use, propagate, modify
- * or convey a specific copy of the covered work, then the patent license
- * you grant is automatically extended to all recipients of the covered
- * work and works based on it.
- *
- * A patent license is "discriminatory" if it does not include within
- * the scope of its coverage, prohibits the exercise of, or is
- * conditioned on the non-exercise of one or more of the rights that are
- * specifically granted under this License. You may not convey a covered
- * work if you are a party to an arrangement with a third party that is
- * in the business of distributing software, under which you make payment
- * to the third party based on the extent of your activity of conveying
- * the work, and under which the third party grants, to any of the
- * parties who would receive the covered work from you, a discriminatory
- * patent license (a) in connection with copies of the covered work
- * conveyed by you (or copies made from those copies), or (b) primarily
- * for and in connection with specific products or compilations that
- * contain the covered work, unless you entered into that arrangement,
- * or that patent license was granted, prior to 28 March 2007.
- *
- * Nothing in this License shall be construed as excluding or limiting
- * any implied license or other defenses to infringement that may
- * otherwise be available to you under applicable patent law.
- *
- * 12. No Surrender of Others' Freedom.
- *
- * If conditions are imposed on you (whether by court order, agreement or
- * otherwise) that contradict the conditions of this License, they do not
- * excuse you from the conditions of this License. If you cannot convey a
- * covered work so as to satisfy simultaneously your obligations under this
- * License and any other pertinent obligations, then as a consequence you may
- * not convey it at all. For example, if you agree to terms that obligate you
- * to collect a royalty for further conveying from those to whom you convey
- * the Program, the only way you could satisfy both those terms and this
- * License would be to refrain entirely from conveying the Program.
- *
- * 13. Use with the GNU Affero General Public License.
- *
- * Notwithstanding any other provision of this License, you have
- * permission to link or combine any covered work with a work licensed
- * under version 3 of the GNU Affero General Public License into a single
- * combined work, and to convey the resulting work. The terms of this
- * License will continue to apply to the part which is the covered work,
- * but the special requirements of the GNU Affero General Public License,
- * section 13, concerning interaction through a network will apply to the
- * combination as such.
- *
- * 14. Revised Versions of this License.
- *
- * The Free Software Foundation may publish revised and/or new versions of
- * the GNU General Public License from time to time. Such new versions will
- * be similar in spirit to the present version, but may differ in detail to
- * address new problems or concerns.
- *
- * Each version is given a distinguishing version number. If the
- * Program specifies that a certain numbered version of the GNU General
- * Public License "or any later version" applies to it, you have the
- * option of following the terms and conditions either of that numbered
- * version or of any later version published by the Free Software
- * Foundation. If the Program does not specify a version number of the
- * GNU General Public License, you may choose any version ever published
- * by the Free Software Foundation.
- *
- * If the Program specifies that a proxy can decide which future
- * versions of the GNU General Public License can be used, that proxy's
- * public statement of acceptance of a version permanently authorizes you
- * to choose that version for the Program.
- *
- * Later license versions may give you additional or different
- * permissions. However, no additional obligations are imposed on any
- * author or copyright holder as a result of your choosing to follow a
- * later version.
- *
- * 15. Disclaimer of Warranty.
- *
- * THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- * APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- * HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
- * OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
- * IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
- * ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- *
- * 16. Limitation of Liability.
- *
- * IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
- * WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
- * THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
- * GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
- * USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- * DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
- * PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
- * EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGES.
- *
- * 17. Interpretation of Sections 15 and 16.
- *
- * If the disclaimer of warranty and limitation of liability provided
- * above cannot be given local legal effect according to their terms,
- * reviewing courts shall apply local law that most closely approximates
- * an absolute waiver of all civil liability in connection with the
- * Program, unless a warranty or assumption of liability accompanies a
- * copy of the Program in return for a fee.
- *
- * END OF TERMS AND CONDITIONS
- *
- * How to Apply These Terms to Your New Programs
- *
- * If you develop a new program, and you want it to be of the greatest
- * possible use to the public, the best way to achieve this is to make it
- * free software which everyone can redistribute and change under these terms.
- *
- * To do so, attach the following notices to the program. It is safest
- * to attach them to the start of each source file to most effectively
- * state the exclusion of warranty; and each file should have at least
- * the "copyright" line and a pointer to where the full notice is found.
- *
- * {one line to give the program's name and a brief idea of what it does.}
- * Copyright (C) {year} {name of author}
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * Also add information on how to contact you by electronic and paper mail.
- *
- * If the program does terminal interaction, make it output a short
- * notice like this when it starts in an interactive mode:
- *
- * {project} Copyright (C) {year} {fullname}
- * This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- * This is free software, and you are welcome to redistribute it
- * under certain conditions; type `show c' for details.
- *
- * The hypothetical commands `show w' and `show c' should show the appropriate
- * parts of the General Public License. Of course, your program's commands
- * might be different; for a GUI interface, you would use an "about box".
- *
- * You should also get your employer (if you work as a programmer) or school,
- * if any, to sign a "copyright disclaimer" for the program, if necessary.
- * For more information on this, and how to apply and follow the GNU GPL, see
- * .
- *
- * The GNU General Public License does not permit incorporating your program
- * into proprietary programs. If your program is a subroutine library, you
- * may consider it more useful to permit linking proprietary applications with
- * the library. If this is what you want to do, use the GNU Lesser General
- * Public License instead of this License. But first, please read
- * .
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
#ifdef HAVE_CONFIG_H
@@ -682,39 +25,47 @@
#include
#include "frame_encoder_impl.h"
-namespace gr {
- namespace satnogs {
+namespace gr
+{
+ namespace satnogs
+ {
frame_encoder::sptr
- frame_encoder::make(bool append_preamble, bool ecss_encap, const std::string& dest_addr, uint8_t dest_ssid, const std::string& src_addr, uint8_t src_ssid)
+ frame_encoder::make (bool append_preamble, bool ecss_encap,
+ const std::string& dest_addr, uint8_t dest_ssid,
+ const std::string& src_addr, uint8_t src_ssid)
{
- return gnuradio::get_initial_sptr
- (new frame_encoder_impl(append_preamble, ecss_encap, dest_addr, dest_ssid, src_addr, src_ssid));
+ return gnuradio::get_initial_sptr (
+ new frame_encoder_impl (append_preamble, ecss_encap, dest_addr,
+ dest_ssid, src_addr, src_ssid));
}
/*
* The private constructor
*/
- frame_encoder_impl::frame_encoder_impl(bool append_preamble, bool ecss_encap, const std::string& dest_addr, uint8_t dest_ssid, const std::string& src_addr, uint8_t src_ssid)
- : gr::sync_block("frame_encoder",
- gr::io_signature::make(0, 0, 0),
- gr::io_signature::make(<+MIN_OUT+>, <+MAX_OUT+>, sizeof(<+OTYPE+>)))
- {}
+ frame_encoder_impl::frame_encoder_impl (bool append_preamble,
+ bool ecss_encap,
+ const std::string& dest_addr,
+ uint8_t dest_ssid,
+ const std::string& src_addr,
+ uint8_t src_ssid) :
+ gr::sync_block ("frame_encoder", gr::io_signature::make (0, 0, 0),
+ gr::io_signature::make (0, 0, 0))
+ {
+ }
/*
* Our virtual destructor.
*/
- frame_encoder_impl::~frame_encoder_impl()
+ frame_encoder_impl::~frame_encoder_impl ()
{
}
int
- frame_encoder_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ frame_encoder_impl::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
- <+OTYPE+> *out = (<+OTYPE+> *) output_items[0];
-
// Do <+signal processing+>
// Tell runtime system how many output items we produced.
diff --git a/lib/frame_encoder_impl.h b/lib/frame_encoder_impl.h
index f7095a6..1cd079a 100644
--- a/lib/frame_encoder_impl.h
+++ b/lib/frame_encoder_impl.h
@@ -1,678 +1,21 @@
/* -*- c++ -*- */
-/* GNU GENERAL PUBLIC LICENSE
- * Version 3, 29 June 2007
- *
- * Copyright (C) 2007 Free Software Foundation, Inc.
- * Everyone is permitted to copy and distribute verbatim copies
- * of this license document, but changing it is not allowed.
- *
- * Preamble
- *
- * The GNU General Public License is a free, copyleft license for
- * software and other kinds of works.
- *
- * The licenses for most software and other practical works are designed
- * to take away your freedom to share and change the works. By contrast,
- * the GNU General Public License is intended to guarantee your freedom to
- * share and change all versions of a program--to make sure it remains free
- * software for all its users. We, the Free Software Foundation, use the
- * GNU General Public License for most of our software; it applies also to
- * any other work released this way by its authors. You can apply it to
- * your programs, too.
- *
- * When we speak of free software, we are referring to freedom, not
- * price. Our General Public Licenses are designed to make sure that you
- * have the freedom to distribute copies of free software (and charge for
- * them if you wish), that you receive source code or can get it if you
- * want it, that you can change the software or use pieces of it in new
- * free programs, and that you know you can do these things.
- *
- * To protect your rights, we need to prevent others from denying you
- * these rights or asking you to surrender the rights. Therefore, you have
- * certain responsibilities if you distribute copies of the software, or if
- * you modify it: responsibilities to respect the freedom of others.
- *
- * For example, if you distribute copies of such a program, whether
- * gratis or for a fee, you must pass on to the recipients the same
- * freedoms that you received. You must make sure that they, too, receive
- * or can get the source code. And you must show them these terms so they
- * know their rights.
- *
- * Developers that use the GNU GPL protect your rights with two steps:
- * (1) assert copyright on the software, and (2) offer you this License
- * giving you legal permission to copy, distribute and/or modify it.
- *
- * For the developers' and authors' protection, the GPL clearly explains
- * that there is no warranty for this free software. For both users' and
- * authors' sake, the GPL requires that modified versions be marked as
- * changed, so that their problems will not be attributed erroneously to
- * authors of previous versions.
- *
- * Some devices are designed to deny users access to install or run
- * modified versions of the software inside them, although the manufacturer
- * can do so. This is fundamentally incompatible with the aim of
- * protecting users' freedom to change the software. The systematic
- * pattern of such abuse occurs in the area of products for individuals to
- * use, which is precisely where it is most unacceptable. Therefore, we
- * have designed this version of the GPL to prohibit the practice for those
- * products. If such problems arise substantially in other domains, we
- * stand ready to extend this provision to those domains in future versions
- * of the GPL, as needed to protect the freedom of users.
- *
- * Finally, every program is threatened constantly by software patents.
- * States should not allow patents to restrict development and use of
- * software on general-purpose computers, but in those that do, we wish to
- * avoid the special danger that patents applied to a free program could
- * make it effectively proprietary. To prevent this, the GPL assures that
- * patents cannot be used to render the program non-free.
- *
- * The precise terms and conditions for copying, distribution and
- * modification follow.
- *
- * TERMS AND CONDITIONS
- *
- * 0. Definitions.
- *
- * "This License" refers to version 3 of the GNU General Public License.
- *
- * "Copyright" also means copyright-like laws that apply to other kinds of
- * works, such as semiconductor masks.
- *
- * "The Program" refers to any copyrightable work licensed under this
- * License. Each licensee is addressed as "you". "Licensees" and
- * "recipients" may be individuals or organizations.
- *
- * To "modify" a work means to copy from or adapt all or part of the work
- * in a fashion requiring copyright permission, other than the making of an
- * exact copy. The resulting work is called a "modified version" of the
- * earlier work or a work "based on" the earlier work.
- *
- * A "covered work" means either the unmodified Program or a work based
- * on the Program.
- *
- * To "propagate" a work means to do anything with it that, without
- * permission, would make you directly or secondarily liable for
- * infringement under applicable copyright law, except executing it on a
- * computer or modifying a private copy. Propagation includes copying,
- * distribution (with or without modification), making available to the
- * public, and in some countries other activities as well.
- *
- * To "convey" a work means any kind of propagation that enables other
- * parties to make or receive copies. Mere interaction with a user through
- * a computer network, with no transfer of a copy, is not conveying.
- *
- * An interactive user interface displays "Appropriate Legal Notices"
- * to the extent that it includes a convenient and prominently visible
- * feature that (1) displays an appropriate copyright notice, and (2)
- * tells the user that there is no warranty for the work (except to the
- * extent that warranties are provided), that licensees may convey the
- * work under this License, and how to view a copy of this License. If
- * the interface presents a list of user commands or options, such as a
- * menu, a prominent item in the list meets this criterion.
- *
- * 1. Source Code.
- *
- * The "source code" for a work means the preferred form of the work
- * for making modifications to it. "Object code" means any non-source
- * form of a work.
- *
- * A "Standard Interface" means an interface that either is an official
- * standard defined by a recognized standards body, or, in the case of
- * interfaces specified for a particular programming language, one that
- * is widely used among developers working in that language.
- *
- * The "System Libraries" of an executable work include anything, other
- * than the work as a whole, that (a) is included in the normal form of
- * packaging a Major Component, but which is not part of that Major
- * Component, and (b) serves only to enable use of the work with that
- * Major Component, or to implement a Standard Interface for which an
- * implementation is available to the public in source code form. A
- * "Major Component", in this context, means a major essential component
- * (kernel, window system, and so on) of the specific operating system
- * (if any) on which the executable work runs, or a compiler used to
- * produce the work, or an object code interpreter used to run it.
- *
- * The "Corresponding Source" for a work in object code form means all
- * the source code needed to generate, install, and (for an executable
- * work) run the object code and to modify the work, including scripts to
- * control those activities. However, it does not include the work's
- * System Libraries, or general-purpose tools or generally available free
- * programs which are used unmodified in performing those activities but
- * which are not part of the work. For example, Corresponding Source
- * includes interface definition files associated with source files for
- * the work, and the source code for shared libraries and dynamically
- * linked subprograms that the work is specifically designed to require,
- * such as by intimate data communication or control flow between those
- * subprograms and other parts of the work.
- *
- * The Corresponding Source need not include anything that users
- * can regenerate automatically from other parts of the Corresponding
- * Source.
- *
- * The Corresponding Source for a work in source code form is that
- * same work.
- *
- * 2. Basic Permissions.
- *
- * All rights granted under this License are granted for the term of
- * copyright on the Program, and are irrevocable provided the stated
- * conditions are met. This License explicitly affirms your unlimited
- * permission to run the unmodified Program. The output from running a
- * covered work is covered by this License only if the output, given its
- * content, constitutes a covered work. This License acknowledges your
- * rights of fair use or other equivalent, as provided by copyright law.
- *
- * You may make, run and propagate covered works that you do not
- * convey, without conditions so long as your license otherwise remains
- * in force. You may convey covered works to others for the sole purpose
- * of having them make modifications exclusively for you, or provide you
- * with facilities for running those works, provided that you comply with
- * the terms of this License in conveying all material for which you do
- * not control copyright. Those thus making or running the covered works
- * for you must do so exclusively on your behalf, under your direction
- * and control, on terms that prohibit them from making any copies of
- * your copyrighted material outside their relationship with you.
- *
- * Conveying under any other circumstances is permitted solely under
- * the conditions stated below. Sublicensing is not allowed; section 10
- * makes it unnecessary.
- *
- * 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
- *
- * No covered work shall be deemed part of an effective technological
- * measure under any applicable law fulfilling obligations under article
- * 11 of the WIPO copyright treaty adopted on 20 December 1996, or
- * similar laws prohibiting or restricting circumvention of such
- * measures.
- *
- * When you convey a covered work, you waive any legal power to forbid
- * circumvention of technological measures to the extent such circumvention
- * is effected by exercising rights under this License with respect to
- * the covered work, and you disclaim any intention to limit operation or
- * modification of the work as a means of enforcing, against the work's
- * users, your or third parties' legal rights to forbid circumvention of
- * technological measures.
- *
- * 4. Conveying Verbatim Copies.
- *
- * You may convey verbatim copies of the Program's source code as you
- * receive it, in any medium, provided that you conspicuously and
- * appropriately publish on each copy an appropriate copyright notice;
- * keep intact all notices stating that this License and any
- * non-permissive terms added in accord with section 7 apply to the code;
- * keep intact all notices of the absence of any warranty; and give all
- * recipients a copy of this License along with the Program.
- *
- * You may charge any price or no price for each copy that you convey,
- * and you may offer support or warranty protection for a fee.
- *
- * 5. Conveying Modified Source Versions.
- *
- * You may convey a work based on the Program, or the modifications to
- * produce it from the Program, in the form of source code under the
- * terms of section 4, provided that you also meet all of these conditions:
- *
- * a) The work must carry prominent notices stating that you modified
- * it, and giving a relevant date.
- *
- * b) The work must carry prominent notices stating that it is
- * released under this License and any conditions added under section
- * 7. This requirement modifies the requirement in section 4 to
- * "keep intact all notices".
- *
- * c) You must license the entire work, as a whole, under this
- * License to anyone who comes into possession of a copy. This
- * License will therefore apply, along with any applicable section 7
- * additional terms, to the whole of the work, and all its parts,
- * regardless of how they are packaged. This License gives no
- * permission to license the work in any other way, but it does not
- * invalidate such permission if you have separately received it.
- *
- * d) If the work has interactive user interfaces, each must display
- * Appropriate Legal Notices; however, if the Program has interactive
- * interfaces that do not display Appropriate Legal Notices, your
- * work need not make them do so.
- *
- * A compilation of a covered work with other separate and independent
- * works, which are not by their nature extensions of the covered work,
- * and which are not combined with it such as to form a larger program,
- * in or on a volume of a storage or distribution medium, is called an
- * "aggregate" if the compilation and its resulting copyright are not
- * used to limit the access or legal rights of the compilation's users
- * beyond what the individual works permit. Inclusion of a covered work
- * in an aggregate does not cause this License to apply to the other
- * parts of the aggregate.
- *
- * 6. Conveying Non-Source Forms.
- *
- * You may convey a covered work in object code form under the terms
- * of sections 4 and 5, provided that you also convey the
- * machine-readable Corresponding Source under the terms of this License,
- * in one of these ways:
- *
- * a) Convey the object code in, or embodied in, a physical product
- * (including a physical distribution medium), accompanied by the
- * Corresponding Source fixed on a durable physical medium
- * customarily used for software interchange.
- *
- * b) Convey the object code in, or embodied in, a physical product
- * (including a physical distribution medium), accompanied by a
- * written offer, valid for at least three years and valid for as
- * long as you offer spare parts or customer support for that product
- * model, to give anyone who possesses the object code either (1) a
- * copy of the Corresponding Source for all the software in the
- * product that is covered by this License, on a durable physical
- * medium customarily used for software interchange, for a price no
- * more than your reasonable cost of physically performing this
- * conveying of source, or (2) access to copy the
- * Corresponding Source from a network server at no charge.
- *
- * c) Convey individual copies of the object code with a copy of the
- * written offer to provide the Corresponding Source. This
- * alternative is allowed only occasionally and noncommercially, and
- * only if you received the object code with such an offer, in accord
- * with subsection 6b.
- *
- * d) Convey the object code by offering access from a designated
- * place (gratis or for a charge), and offer equivalent access to the
- * Corresponding Source in the same way through the same place at no
- * further charge. You need not require recipients to copy the
- * Corresponding Source along with the object code. If the place to
- * copy the object code is a network server, the Corresponding Source
- * may be on a different server (operated by you or a third party)
- * that supports equivalent copying facilities, provided you maintain
- * clear directions next to the object code saying where to find the
- * Corresponding Source. Regardless of what server hosts the
- * Corresponding Source, you remain obligated to ensure that it is
- * available for as long as needed to satisfy these requirements.
- *
- * e) Convey the object code using peer-to-peer transmission, provided
- * you inform other peers where the object code and Corresponding
- * Source of the work are being offered to the general public at no
- * charge under subsection 6d.
- *
- * A separable portion of the object code, whose source code is excluded
- * from the Corresponding Source as a System Library, need not be
- * included in conveying the object code work.
- *
- * A "User Product" is either (1) a "consumer product", which means any
- * tangible personal property which is normally used for personal, family,
- * or household purposes, or (2) anything designed or sold for incorporation
- * into a dwelling. In determining whether a product is a consumer product,
- * doubtful cases shall be resolved in favor of coverage. For a particular
- * product received by a particular user, "normally used" refers to a
- * typical or common use of that class of product, regardless of the status
- * of the particular user or of the way in which the particular user
- * actually uses, or expects or is expected to use, the product. A product
- * is a consumer product regardless of whether the product has substantial
- * commercial, industrial or non-consumer uses, unless such uses represent
- * the only significant mode of use of the product.
- *
- * "Installation Information" for a User Product means any methods,
- * procedures, authorization keys, or other information required to install
- * and execute modified versions of a covered work in that User Product from
- * a modified version of its Corresponding Source. The information must
- * suffice to ensure that the continued functioning of the modified object
- * code is in no case prevented or interfered with solely because
- * modification has been made.
- *
- * If you convey an object code work under this section in, or with, or
- * specifically for use in, a User Product, and the conveying occurs as
- * part of a transaction in which the right of possession and use of the
- * User Product is transferred to the recipient in perpetuity or for a
- * fixed term (regardless of how the transaction is characterized), the
- * Corresponding Source conveyed under this section must be accompanied
- * by the Installation Information. But this requirement does not apply
- * if neither you nor any third party retains the ability to install
- * modified object code on the User Product (for example, the work has
- * been installed in ROM).
- *
- * The requirement to provide Installation Information does not include a
- * requirement to continue to provide support service, warranty, or updates
- * for a work that has been modified or installed by the recipient, or for
- * the User Product in which it has been modified or installed. Access to a
- * network may be denied when the modification itself materially and
- * adversely affects the operation of the network or violates the rules and
- * protocols for communication across the network.
- *
- * Corresponding Source conveyed, and Installation Information provided,
- * in accord with this section must be in a format that is publicly
- * documented (and with an implementation available to the public in
- * source code form), and must require no special password or key for
- * unpacking, reading or copying.
- *
- * 7. Additional Terms.
- *
- * "Additional permissions" are terms that supplement the terms of this
- * License by making exceptions from one or more of its conditions.
- * Additional permissions that are applicable to the entire Program shall
- * be treated as though they were included in this License, to the extent
- * that they are valid under applicable law. If additional permissions
- * apply only to part of the Program, that part may be used separately
- * under those permissions, but the entire Program remains governed by
- * this License without regard to the additional permissions.
- *
- * When you convey a copy of a covered work, you may at your option
- * remove any additional permissions from that copy, or from any part of
- * it. (Additional permissions may be written to require their own
- * removal in certain cases when you modify the work.) You may place
- * additional permissions on material, added by you to a covered work,
- * for which you have or can give appropriate copyright permission.
- *
- * Notwithstanding any other provision of this License, for material you
- * add to a covered work, you may (if authorized by the copyright holders of
- * that material) supplement the terms of this License with terms:
- *
- * a) Disclaiming warranty or limiting liability differently from the
- * terms of sections 15 and 16 of this License; or
- *
- * b) Requiring preservation of specified reasonable legal notices or
- * author attributions in that material or in the Appropriate Legal
- * Notices displayed by works containing it; or
- *
- * c) Prohibiting misrepresentation of the origin of that material, or
- * requiring that modified versions of such material be marked in
- * reasonable ways as different from the original version; or
- *
- * d) Limiting the use for publicity purposes of names of licensors or
- * authors of the material; or
- *
- * e) Declining to grant rights under trademark law for use of some
- * trade names, trademarks, or service marks; or
- *
- * f) Requiring indemnification of licensors and authors of that
- * material by anyone who conveys the material (or modified versions of
- * it) with contractual assumptions of liability to the recipient, for
- * any liability that these contractual assumptions directly impose on
- * those licensors and authors.
- *
- * All other non-permissive additional terms are considered "further
- * restrictions" within the meaning of section 10. If the Program as you
- * received it, or any part of it, contains a notice stating that it is
- * governed by this License along with a term that is a further
- * restriction, you may remove that term. If a license document contains
- * a further restriction but permits relicensing or conveying under this
- * License, you may add to a covered work material governed by the terms
- * of that license document, provided that the further restriction does
- * not survive such relicensing or conveying.
- *
- * If you add terms to a covered work in accord with this section, you
- * must place, in the relevant source files, a statement of the
- * additional terms that apply to those files, or a notice indicating
- * where to find the applicable terms.
- *
- * Additional terms, permissive or non-permissive, may be stated in the
- * form of a separately written license, or stated as exceptions;
- * the above requirements apply either way.
- *
- * 8. Termination.
- *
- * You may not propagate or modify a covered work except as expressly
- * provided under this License. Any attempt otherwise to propagate or
- * modify it is void, and will automatically terminate your rights under
- * this License (including any patent licenses granted under the third
- * paragraph of section 11).
- *
- * However, if you cease all violation of this License, then your
- * license from a particular copyright holder is reinstated (a)
- * provisionally, unless and until the copyright holder explicitly and
- * finally terminates your license, and (b) permanently, if the copyright
- * holder fails to notify you of the violation by some reasonable means
- * prior to 60 days after the cessation.
- *
- * Moreover, your license from a particular copyright holder is
- * reinstated permanently if the copyright holder notifies you of the
- * violation by some reasonable means, this is the first time you have
- * received notice of violation of this License (for any work) from that
- * copyright holder, and you cure the violation prior to 30 days after
- * your receipt of the notice.
- *
- * Termination of your rights under this section does not terminate the
- * licenses of parties who have received copies or rights from you under
- * this License. If your rights have been terminated and not permanently
- * reinstated, you do not qualify to receive new licenses for the same
- * material under section 10.
- *
- * 9. Acceptance Not Required for Having Copies.
- *
- * You are not required to accept this License in order to receive or
- * run a copy of the Program. Ancillary propagation of a covered work
- * occurring solely as a consequence of using peer-to-peer transmission
- * to receive a copy likewise does not require acceptance. However,
- * nothing other than this License grants you permission to propagate or
- * modify any covered work. These actions infringe copyright if you do
- * not accept this License. Therefore, by modifying or propagating a
- * covered work, you indicate your acceptance of this License to do so.
- *
- * 10. Automatic Licensing of Downstream Recipients.
- *
- * Each time you convey a covered work, the recipient automatically
- * receives a license from the original licensors, to run, modify and
- * propagate that work, subject to this License. You are not responsible
- * for enforcing compliance by third parties with this License.
- *
- * An "entity transaction" is a transaction transferring control of an
- * organization, or substantially all assets of one, or subdividing an
- * organization, or merging organizations. If propagation of a covered
- * work results from an entity transaction, each party to that
- * transaction who receives a copy of the work also receives whatever
- * licenses to the work the party's predecessor in interest had or could
- * give under the previous paragraph, plus a right to possession of the
- * Corresponding Source of the work from the predecessor in interest, if
- * the predecessor has it or can get it with reasonable efforts.
- *
- * You may not impose any further restrictions on the exercise of the
- * rights granted or affirmed under this License. For example, you may
- * not impose a license fee, royalty, or other charge for exercise of
- * rights granted under this License, and you may not initiate litigation
- * (including a cross-claim or counterclaim in a lawsuit) alleging that
- * any patent claim is infringed by making, using, selling, offering for
- * sale, or importing the Program or any portion of it.
- *
- * 11. Patents.
- *
- * A "contributor" is a copyright holder who authorizes use under this
- * License of the Program or a work on which the Program is based. The
- * work thus licensed is called the contributor's "contributor version".
- *
- * A contributor's "essential patent claims" are all patent claims
- * owned or controlled by the contributor, whether already acquired or
- * hereafter acquired, that would be infringed by some manner, permitted
- * by this License, of making, using, or selling its contributor version,
- * but do not include claims that would be infringed only as a
- * consequence of further modification of the contributor version. For
- * purposes of this definition, "control" includes the right to grant
- * patent sublicenses in a manner consistent with the requirements of
- * this License.
- *
- * Each contributor grants you a non-exclusive, worldwide, royalty-free
- * patent license under the contributor's essential patent claims, to
- * make, use, sell, offer for sale, import and otherwise run, modify and
- * propagate the contents of its contributor version.
- *
- * In the following three paragraphs, a "patent license" is any express
- * agreement or commitment, however denominated, not to enforce a patent
- * (such as an express permission to practice a patent or covenant not to
- * sue for patent infringement). To "grant" such a patent license to a
- * party means to make such an agreement or commitment not to enforce a
- * patent against the party.
- *
- * If you convey a covered work, knowingly relying on a patent license,
- * and the Corresponding Source of the work is not available for anyone
- * to copy, free of charge and under the terms of this License, through a
- * publicly available network server or other readily accessible means,
- * then you must either (1) cause the Corresponding Source to be so
- * available, or (2) arrange to deprive yourself of the benefit of the
- * patent license for this particular work, or (3) arrange, in a manner
- * consistent with the requirements of this License, to extend the patent
- * license to downstream recipients. "Knowingly relying" means you have
- * actual knowledge that, but for the patent license, your conveying the
- * covered work in a country, or your recipient's use of the covered work
- * in a country, would infringe one or more identifiable patents in that
- * country that you have reason to believe are valid.
- *
- * If, pursuant to or in connection with a single transaction or
- * arrangement, you convey, or propagate by procuring conveyance of, a
- * covered work, and grant a patent license to some of the parties
- * receiving the covered work authorizing them to use, propagate, modify
- * or convey a specific copy of the covered work, then the patent license
- * you grant is automatically extended to all recipients of the covered
- * work and works based on it.
- *
- * A patent license is "discriminatory" if it does not include within
- * the scope of its coverage, prohibits the exercise of, or is
- * conditioned on the non-exercise of one or more of the rights that are
- * specifically granted under this License. You may not convey a covered
- * work if you are a party to an arrangement with a third party that is
- * in the business of distributing software, under which you make payment
- * to the third party based on the extent of your activity of conveying
- * the work, and under which the third party grants, to any of the
- * parties who would receive the covered work from you, a discriminatory
- * patent license (a) in connection with copies of the covered work
- * conveyed by you (or copies made from those copies), or (b) primarily
- * for and in connection with specific products or compilations that
- * contain the covered work, unless you entered into that arrangement,
- * or that patent license was granted, prior to 28 March 2007.
- *
- * Nothing in this License shall be construed as excluding or limiting
- * any implied license or other defenses to infringement that may
- * otherwise be available to you under applicable patent law.
- *
- * 12. No Surrender of Others' Freedom.
- *
- * If conditions are imposed on you (whether by court order, agreement or
- * otherwise) that contradict the conditions of this License, they do not
- * excuse you from the conditions of this License. If you cannot convey a
- * covered work so as to satisfy simultaneously your obligations under this
- * License and any other pertinent obligations, then as a consequence you may
- * not convey it at all. For example, if you agree to terms that obligate you
- * to collect a royalty for further conveying from those to whom you convey
- * the Program, the only way you could satisfy both those terms and this
- * License would be to refrain entirely from conveying the Program.
- *
- * 13. Use with the GNU Affero General Public License.
- *
- * Notwithstanding any other provision of this License, you have
- * permission to link or combine any covered work with a work licensed
- * under version 3 of the GNU Affero General Public License into a single
- * combined work, and to convey the resulting work. The terms of this
- * License will continue to apply to the part which is the covered work,
- * but the special requirements of the GNU Affero General Public License,
- * section 13, concerning interaction through a network will apply to the
- * combination as such.
- *
- * 14. Revised Versions of this License.
- *
- * The Free Software Foundation may publish revised and/or new versions of
- * the GNU General Public License from time to time. Such new versions will
- * be similar in spirit to the present version, but may differ in detail to
- * address new problems or concerns.
- *
- * Each version is given a distinguishing version number. If the
- * Program specifies that a certain numbered version of the GNU General
- * Public License "or any later version" applies to it, you have the
- * option of following the terms and conditions either of that numbered
- * version or of any later version published by the Free Software
- * Foundation. If the Program does not specify a version number of the
- * GNU General Public License, you may choose any version ever published
- * by the Free Software Foundation.
- *
- * If the Program specifies that a proxy can decide which future
- * versions of the GNU General Public License can be used, that proxy's
- * public statement of acceptance of a version permanently authorizes you
- * to choose that version for the Program.
- *
- * Later license versions may give you additional or different
- * permissions. However, no additional obligations are imposed on any
- * author or copyright holder as a result of your choosing to follow a
- * later version.
- *
- * 15. Disclaimer of Warranty.
- *
- * THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- * APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
- * HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
- * OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
- * IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
- * ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- *
- * 16. Limitation of Liability.
- *
- * IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
- * WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
- * THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
- * GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
- * USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- * DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
- * PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
- * EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGES.
- *
- * 17. Interpretation of Sections 15 and 16.
- *
- * If the disclaimer of warranty and limitation of liability provided
- * above cannot be given local legal effect according to their terms,
- * reviewing courts shall apply local law that most closely approximates
- * an absolute waiver of all civil liability in connection with the
- * Program, unless a warranty or assumption of liability accompanies a
- * copy of the Program in return for a fee.
- *
- * END OF TERMS AND CONDITIONS
- *
- * How to Apply These Terms to Your New Programs
- *
- * If you develop a new program, and you want it to be of the greatest
- * possible use to the public, the best way to achieve this is to make it
- * free software which everyone can redistribute and change under these terms.
- *
- * To do so, attach the following notices to the program. It is safest
- * to attach them to the start of each source file to most effectively
- * state the exclusion of warranty; and each file should have at least
- * the "copyright" line and a pointer to where the full notice is found.
- *
- * {one line to give the program's name and a brief idea of what it does.}
- * Copyright (C) {year} {name of author}
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * Also add information on how to contact you by electronic and paper mail.
- *
- * If the program does terminal interaction, make it output a short
- * notice like this when it starts in an interactive mode:
- *
- * {project} Copyright (C) {year} {fullname}
- * This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- * This is free software, and you are welcome to redistribute it
- * under certain conditions; type `show c' for details.
- *
- * The hypothetical commands `show w' and `show c' should show the appropriate
- * parts of the General Public License. Of course, your program's commands
- * might be different; for a GUI interface, you would use an "about box".
- *
- * You should also get your employer (if you work as a programmer) or school,
- * if any, to sign a "copyright disclaimer" for the program, if necessary.
- * For more information on this, and how to apply and follow the GNU GPL, see
- * .
- *
- * The GNU General Public License does not permit incorporating your program
- * into proprietary programs. If your program is a subroutine library, you
- * may consider it more useful to permit linking proprietary applications with
- * the library. If this is what you want to do, use the GNU Lesser General
- * Public License instead of this License. But first, please read
- * .
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
#ifndef INCLUDED_SATNOGS_FRAME_ENCODER_IMPL_H
@@ -680,22 +23,26 @@
#include
-namespace gr {
- namespace satnogs {
+namespace gr
+{
+ namespace satnogs
+ {
class frame_encoder_impl : public frame_encoder
{
- private:
+ private:
// Nothing to declare in this block.
- public:
- frame_encoder_impl(bool append_preamble, bool ecss_encap, const std::string& dest_addr, uint8_t dest_ssid, const std::string& src_addr, uint8_t src_ssid);
- ~frame_encoder_impl();
+ public:
+ frame_encoder_impl (bool append_preamble, bool ecss_encap,
+ const std::string& dest_addr, uint8_t dest_ssid,
+ const std::string& src_addr, uint8_t src_ssid);
+ ~frame_encoder_impl ();
// Where all the action really happens
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ int
+ work (int noutput_items, gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
};
} // namespace satnogs
diff --git a/lib/freq_drift.cc b/lib/freq_drift.cc
new file mode 100644
index 0000000..e755734
--- /dev/null
+++ b/lib/freq_drift.cc
@@ -0,0 +1,69 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ freq_drift::freq_drift (uint64_t x, double y) :
+ d_x (x),
+ d_freq_drift (y)
+ {
+ }
+
+ freq_drift::~freq_drift ()
+ {
+ }
+
+ double
+ freq_drift::get_freq_drift () const
+ {
+ return d_freq_drift;
+ }
+
+ void
+ freq_drift::set_freq_drift (double freq_drift)
+ {
+ d_freq_drift = freq_drift;
+ }
+
+ uint64_t
+ freq_drift::get_x () const
+ {
+ return d_x;
+ }
+
+ void
+ freq_drift::set_x (uint64_t x)
+ {
+ d_x = x;
+ }
+
+ } /* namespace satnogs */
+} /* namespace gr */
+
diff --git a/lib/tc_tm.cc b/lib/tc_tm.cc
deleted file mode 100644
index a1ca5c9..0000000
--- a/lib/tc_tm.cc
+++ /dev/null
@@ -1,230 +0,0 @@
-/* -*- c++ -*- */
-/*
- * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
- *
- * Copyright (C) 2016, Libre Space Foundation
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include
-#include
-
-namespace gr
-{
- namespace satnogs
- {
-
- uint8_t
- checkSum (const uint8_t *data, uint16_t size)
- {
- uint8_t CRC = 0;
- for (int i = 0; i <= size; i++) {
- CRC = CRC ^ data[i];
- }
- return CRC;
- }
-
- /*Must check for endianess*/
- OBC_ret_state_t
- unpack_pkt (const uint8_t *buf, tc_tm_pkt *pkt, const uint16_t size)
- {
- union _cnv cnv;
- uint8_t tmp_crc[2];
-
- uint8_t ver, dfield_hdr, ccsds_sec_hdr, tc_pus;
-
- tmp_crc[0] = buf[size - 1];
- tmp_crc[1] = checkSum (buf, size - 2);
-
- ver = buf[0] >> 5;
-
- pkt->type = (buf[0] >> 4) & 0x01;
- dfield_hdr = (buf[0] >> 3) & 0x01;
-
- cnv.cnv8[0] = buf[1];
- cnv.cnv8[1] = 0x07 & buf[0];
- pkt->app_id = cnv.cnv16[0];
-
- pkt->seq_flags = buf[2] >> 6;
-
- cnv.cnv8[0] = buf[3];
- cnv.cnv8[1] = buf[2] & 0x3F;
- pkt->seq_count = cnv.cnv16[0];
-
- cnv.cnv8[0] = buf[4];
- cnv.cnv8[1] = buf[5];
- pkt->len = cnv.cnv16[0];
-
- ccsds_sec_hdr = buf[6] >> 7;
-
- tc_pus = buf[6] >> 4;
-
- pkt->ack = 0x04 & buf[6];
-
- pkt->ser_type = buf[7];
- pkt->ser_subtype = buf[8];
- pkt->dest_id = buf[9];
-
- if (app_id_verification[pkt->app_id] != 1) {
- return R_OBC_PKT_ILLEGAL_APPID;
- }
-
- if (pkt->len != size - 7) {
- return R_OBC_PKT_INV_LEN;
- }
-
- if (tmp_crc[0] != tmp_crc[1]) {
- return R_OBC_PKT_INC_CRC;
- }
-
- if (services_verification_TC_TM[pkt->ser_type][pkt->ser_subtype][pkt->type]
- != 1) {
- return R_OBC_PKT_ILLEGAL_PKT_TP;
- }
-
- if (ver != 0) {
- return R_OBC_ERROR;
- }
-
- if (tc_pus != 1) {
- return R_OBC_ERROR;
- }
-
- if (ccsds_sec_hdr != 0) {
- return R_OBC_ERROR;
- }
-
- if (pkt->type != TC && pkt->type != TM) {
- return R_OBC_ERROR;
- }
-
- if (dfield_hdr != 1) {
- return R_OBC_ERROR;
- }
-
- if (pkt->ack != TC_ACK_NO || pkt->ack != TC_ACK_ACC
- || pkt->ack != TC_ACK_EXE_COMP) {
- return R_OBC_ERROR;
- }
-
- for (int i = 0; i < pkt->len - 4; i++) {
- pkt->data[i] = buf[10 + i];
- }
-
- return R_OBC_OK;
- }
-
- /**
- * Packs a TC packet into a byte buffer
- * @param buf buffer to store the data to be sent
- * @param pkt the data to be stored in the buffer
- * @param size size of the array
- * @return appropriate error code or R_OBC_OK if all operation succeed
- */
- OBC_ret_state_t
- pack_pkt (uint8_t *buf, tc_tm_pkt *pkt, uint16_t *size)
- {
-
- union _cnv cnv;
- uint8_t buf_pointer;
-
- cnv.cnv16[0] = pkt->app_id;
-
- buf[0] = ( ECSS_VER_NUMBER << 5 | pkt->type << 4
- | ECSS_DATA_FIELD_HDR_FLG << 3 | cnv.cnv8[1]);
- buf[1] = cnv.cnv8[0];
-
- cnv.cnv16[0] = pkt->seq_count;
- buf[2] = (pkt->seq_flags << 6 | cnv.cnv8[1]);
- buf[3] = cnv.cnv8[0];
-
- /* TYPE = 0 TM, TYPE = 1 TC*/
- if (pkt->type == TM) {
- buf[6] = ECSS_PUS_VER << 4;
- }
- else if (pkt->type == TC) {
- buf[6] = ( ECSS_SEC_HDR_FIELD_FLG << 7 | ECSS_PUS_VER << 4 | pkt->ack);
- }
- else {
- return R_OBC_ERROR;
- }
-
- buf[7] = pkt->ser_type;
- buf[8] = pkt->ser_subtype;
- buf[9] = pkt->dest_id; /*source or destination*/
-
- buf_pointer = 10;
-
- if (pkt->ser_type == TC_VERIFICATION_SERVICE) {
- //cnv.cnv16[0] = tc_pkt_id;
- //cnv.cnv16[1] = tc_pkt_seq_ctrl;
-
- /*verification_pack_pkt_api (buf, pkt, &buf_pointer);*/
-
- }
- else if (pkt->ser_type == TC_HOUSEKEEPING_SERVICE) {
-
- /*hk_pack_pkt_api (buf, pkt, &buf_pointer);*/
-
- }
- else if (pkt->ser_type == TC_FUNCTION_MANAGEMENT_SERVICE
- && pkt->ser_subtype == 1) {
-
- buf[10] = pkt->data[0];
-
- buf[11] = pkt->data[1];
- buf[12] = pkt->data[2];
- buf[13] = pkt->data[3];
- buf[14] = pkt->data[4];
-
- buf_pointer += 5;
-
- }
- else {
- return R_OBC_ERROR;
- }
-
- /*check if this is correct*/
- cnv.cnv16[0] = buf_pointer - 6;
- buf[4] = cnv.cnv8[0];
- buf[5] = cnv.cnv8[1];
-
- buf[buf_pointer] = checkSum (buf, buf_pointer - 1);
- *size = buf_pointer;
- return R_OBC_OK;
- }
-
- OBC_ret_state_t
- crt_pkt (tc_tm_pkt *pkt, uint16_t app_id, uint8_t type, uint8_t ack,
- uint8_t ser_type, uint8_t ser_subtype, uint16_t dest_id)
- {
-
- pkt->type = type;
- pkt->app_id = app_id;
- pkt->dest_id = dest_id;
-
- pkt->ser_type = ser_type;
- pkt->ser_subtype = ser_subtype;
-
- return R_OBC_OK;
- }
-
- } /* namespace satnogs */
-} /* namespace gr */
-
diff --git a/lib/tcp_rigctl_msg_source_impl.cc b/lib/tcp_rigctl_msg_source_impl.cc
new file mode 100644
index 0000000..bbd705e
--- /dev/null
+++ b/lib/tcp_rigctl_msg_source_impl.cc
@@ -0,0 +1,192 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include
+#include "tcp_rigctl_msg_source_impl.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ tcp_rigctl_msg_source::sptr
+ tcp_rigctl_msg_source::make (const std::string& addr, uint16_t port,
+ size_t mtu)
+ {
+ return gnuradio::get_initial_sptr (
+ new tcp_rigctl_msg_source_impl (addr, port, mtu));
+ }
+
+ /*
+ * The private constructor
+ */
+ tcp_rigctl_msg_source_impl::tcp_rigctl_msg_source_impl (
+ const std::string& addr, uint16_t port, size_t mtu) :
+ gr::block ("tcp_rigctl_msg_source",
+ gr::io_signature::make (0, 0, 0),
+ gr::io_signature::make (0, 0, 0)),
+ d_iface_addr (addr),
+ d_port (port),
+ d_mtu (mtu),
+ d_running (true)
+ {
+ message_port_register_out (pmt::mp ("freq"));
+ boost::shared_ptr (
+ new boost::thread (
+ boost::bind (&tcp_rigctl_msg_source_impl::tcp_msg_accepter,
+ this)));
+ }
+
+ void
+ tcp_rigctl_msg_source_impl::tcp_msg_accepter ()
+ {
+ int sock;
+ int listen_sock;
+ struct sockaddr_in sin;
+ struct sockaddr client_addr;
+ socklen_t client_addr_len;
+ ssize_t ret;
+ uint8_t *buf;
+ double freq;
+
+ if ((listen_sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
+ perror ("opening UDP socket");
+ exit (EXIT_FAILURE);
+ }
+
+ memset (&client_addr, 0, sizeof(struct sockaddr));
+ memset (&sin, 0, sizeof(struct sockaddr_in));
+ sin.sin_family = AF_INET;
+ sin.sin_port = htons (d_port);
+ sin.sin_addr.s_addr = INADDR_ANY;
+
+ if (inet_aton (d_iface_addr.c_str (), &(sin.sin_addr)) == 0) {
+ LOG_ERROR("Wrong IP address");
+ close (listen_sock);
+ exit (EXIT_FAILURE);
+ }
+
+ if (bind (listen_sock, (struct sockaddr *) &sin,
+ sizeof(struct sockaddr_in)) == -1) {
+ perror ("TCP bind");
+ close (listen_sock);
+ exit (EXIT_FAILURE);
+ }
+
+ if (listen (listen_sock, 1000) == -1) {
+ perror ("TCP listen");
+ close (listen_sock);
+ exit (EXIT_FAILURE);
+ }
+
+ /* All good until now. Allocate buffer memory and proceed */
+ buf = new uint8_t (d_mtu);
+
+ while (d_running) {
+ sock = accept (listen_sock, &client_addr, &client_addr_len);
+ if (sock <= 0) {
+ perror ("TCP accept");
+ exit (EXIT_FAILURE);
+ }
+
+ while ((ret = recv (sock, buf, d_mtu, 0)) > 0) {
+ switch (buf[0])
+ {
+ case 'F':
+ freq = get_freq_from_buf (buf + 2);
+ /*
+ * If the frequency is different than 0, then the parsed value
+ * is valid and an appropriate message can be generated
+ *
+ * NOTE: Comparison for equality in floats is a bit tricky.
+ * But here the get_freq_from_buf() will assign a 0.0 explicitly
+ * if something goes wrong. For this reason it is safe to compare
+ * the in-equality agains 0.0.
+ */
+ if (freq != 0.0) {
+ message_port_pub (pmt::mp ("freq"), pmt::from_double (freq));
+ }
+ break;
+ default:
+ LOG_WARN("Unsupported rigctl command");
+ }
+ }
+ shutdown (sock, SHUT_RDWR);
+ close (sock);
+ }
+ close (listen_sock);
+ delete buf;
+ exit (EXIT_SUCCESS);
+ }
+
+ /**
+ * Parses the string in the \p buf trying to extract a frequency reading
+ * until the newline character
+ * @param buf the buffer containing a line with the target frequency
+ * @return the frequency converted into double
+ */
+ double
+ tcp_rigctl_msg_source_impl::get_freq_from_buf (const uint8_t* buf)
+ {
+ long int f;
+ char *end;
+ f = strtol ((char *) buf, &end, 10);
+
+ /* Check for various possible errors */
+ if ((errno == ERANGE && (f == LONG_MAX || f == LONG_MIN))
+ || (errno != 0 && f == 0)) {
+ LOG_WARN("Invalid rigctl command");
+ f = 0;
+ }
+
+ if ((char *) buf == end) {
+ LOG_WARN("Invalid rigctl command");
+ f = 0;
+ }
+
+ return (double) f;
+ }
+
+ /*
+ * Our virtual destructor.
+ */
+ tcp_rigctl_msg_source_impl::~tcp_rigctl_msg_source_impl ()
+ {
+ d_running = false;
+ d_thread->join ();
+ }
+
+ } /* namespace satnogs */
+} /* namespace gr */
+
diff --git a/lib/tcp_rigctl_msg_source_impl.h b/lib/tcp_rigctl_msg_source_impl.h
new file mode 100644
index 0000000..3c7b50b
--- /dev/null
+++ b/lib/tcp_rigctl_msg_source_impl.h
@@ -0,0 +1,56 @@
+/* -*- c++ -*- */
+/*
+ * gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
+ *
+ * Copyright (C) 2016, Libre Space Foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef INCLUDED_SATNOGS_TCP_RIGCTL_MSG_SOURCE_IMPL_H
+#define INCLUDED_SATNOGS_TCP_RIGCTL_MSG_SOURCE_IMPL_H
+
+#include
+
+namespace gr
+{
+ namespace satnogs
+ {
+
+ class tcp_rigctl_msg_source_impl : public tcp_rigctl_msg_source
+ {
+ private:
+ const std::string d_iface_addr;
+ const uint16_t d_port;
+ const size_t d_mtu;
+ bool d_running;
+ boost::shared_ptr d_thread;
+
+ void
+ tcp_msg_accepter();
+
+ double
+ get_freq_from_buf(const uint8_t *buf);
+
+ public:
+ tcp_rigctl_msg_source_impl (const std::string& addr, uint16_t port,
+ size_t mtu);
+ ~tcp_rigctl_msg_source_impl ();
+ };
+
+ } // namespace satnogs
+ } // namespace gr
+
+#endif /* INCLUDED_SATNOGS_TCP_RIGCTL_MSG_SOURCE_IMPL_H */
+
diff --git a/swig/satnogs_swig.i b/swig/satnogs_swig.i
index 4816916..192f426 100644
--- a/swig/satnogs_swig.i
+++ b/swig/satnogs_swig.i
@@ -21,7 +21,8 @@
#include "satnogs/ax25_decoder_b.h"
#include "satnogs/udp_msg_source.h"
#include "satnogs/debug_msg_source.h"
-#include "satnogs/tc_tm.h"
+#include "satnogs/tcp_rigctl_msg_source.h"
+#include "satnogs/doppler_correction_cc.h"
#include "satnogs/frame_encoder.h"
%}
@@ -49,6 +50,9 @@ GR_SWIG_BLOCK_MAGIC2(satnogs, ax25_decoder_b);
GR_SWIG_BLOCK_MAGIC2(satnogs, udp_msg_source);
%include "satnogs/debug_msg_source.h"
GR_SWIG_BLOCK_MAGIC2(satnogs, debug_msg_source);
-%include "satnogs/tc_tm.h"
+%include "satnogs/tcp_rigctl_msg_source.h"
+GR_SWIG_BLOCK_MAGIC2(satnogs, tcp_rigctl_msg_source);
%include "satnogs/frame_encoder.h"
GR_SWIG_BLOCK_MAGIC2(satnogs, frame_encoder);
+%include "satnogs/doppler_correction_cc.h"
+GR_SWIG_BLOCK_MAGIC2(satnogs, doppler_correction_cc);