Add block for parsing the FOX slow speed telemetry frames
This commit is contained in:
parent
7e09a383d6
commit
5aae0a1b49
|
@ -3015,6 +3015,45 @@ max_modulation_freq = 3000</value>
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</param>
|
</param>
|
||||||
</block>
|
</block>
|
||||||
|
<block>
|
||||||
|
<key>satnogs_fox_telem_mm</key>
|
||||||
|
<param>
|
||||||
|
<key>alias</key>
|
||||||
|
<value></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>comment</key>
|
||||||
|
<value></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>affinity</key>
|
||||||
|
<value></value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>_enabled</key>
|
||||||
|
<value>True</value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>_coordinate</key>
|
||||||
|
<value>(535, 759)</value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>_rotation</key>
|
||||||
|
<value>180</value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>id</key>
|
||||||
|
<value>satnogs_fox_telem_mm_0</value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>maxoutbuf</key>
|
||||||
|
<value>0</value>
|
||||||
|
</param>
|
||||||
|
<param>
|
||||||
|
<key>minoutbuf</key>
|
||||||
|
<value>0</value>
|
||||||
|
</param>
|
||||||
|
</block>
|
||||||
<block>
|
<block>
|
||||||
<key>satnogs_frame_file_sink</key>
|
<key>satnogs_frame_file_sink</key>
|
||||||
<param>
|
<param>
|
||||||
|
@ -3035,7 +3074,7 @@ max_modulation_freq = 3000</value>
|
||||||
</param>
|
</param>
|
||||||
<param>
|
<param>
|
||||||
<key>_coordinate</key>
|
<key>_coordinate</key>
|
||||||
<value>(622, 761)</value>
|
<value>(279, 779)</value>
|
||||||
</param>
|
</param>
|
||||||
<param>
|
<param>
|
||||||
<key>_rotation</key>
|
<key>_rotation</key>
|
||||||
|
@ -3428,9 +3467,9 @@ max_modulation_freq = 3000</value>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
<connection>
|
||||||
<source_block_id>satnogs_ccsds_rs_decoder_mm_0</source_block_id>
|
<source_block_id>satnogs_ccsds_rs_decoder_mm_0</source_block_id>
|
||||||
<sink_block_id>satnogs_frame_file_sink_0_1_0</sink_block_id>
|
<sink_block_id>satnogs_fox_telem_mm_0</sink_block_id>
|
||||||
<source_key>pdu</source_key>
|
<source_key>pdu</source_key>
|
||||||
<sink_key>frame</sink_key>
|
<sink_key>in</sink_key>
|
||||||
</connection>
|
</connection>
|
||||||
<connection>
|
<connection>
|
||||||
<source_block_id>satnogs_coarse_doppler_correction_cc_0</source_block_id>
|
<source_block_id>satnogs_coarse_doppler_correction_cc_0</source_block_id>
|
||||||
|
@ -3444,6 +3483,12 @@ max_modulation_freq = 3000</value>
|
||||||
<source_key>pdu</source_key>
|
<source_key>pdu</source_key>
|
||||||
<sink_key>in</sink_key>
|
<sink_key>in</sink_key>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<source_block_id>satnogs_fox_telem_mm_0</source_block_id>
|
||||||
|
<sink_block_id>satnogs_frame_file_sink_0_1_0</sink_block_id>
|
||||||
|
<source_key>raw</source_key>
|
||||||
|
<sink_key>frame</sink_key>
|
||||||
|
</connection>
|
||||||
<connection>
|
<connection>
|
||||||
<source_block_id>satnogs_quad_demod_filter_ff_0</source_block_id>
|
<source_block_id>satnogs_quad_demod_filter_ff_0</source_block_id>
|
||||||
<sink_block_id>digital_binary_slicer_fb_0_0</sink_block_id>
|
<sink_block_id>digital_binary_slicer_fb_0_0</sink_block_id>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# Title: AMSAT FOX DUV Decoder
|
# Title: AMSAT FOX DUV Decoder
|
||||||
# Author: Thanos Giolias (agiolias@csd.uoc.gr), Nikos Karamolegos (karamolegkos.n@gmail.com), Manolis Surligas (surligas@gmail.com)
|
# Author: Thanos Giolias (agiolias@csd.uoc.gr), Nikos Karamolegos (karamolegkos.n@gmail.com), Manolis Surligas (surligas@gmail.com)
|
||||||
# Description: A DUV Decoder for the AMSAT FOX satellites
|
# Description: A DUV Decoder for the AMSAT FOX satellites
|
||||||
# Generated: Wed Jan 31 22:50:39 2018
|
# Generated: Fri Feb 2 11:24:35 2018
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
from gnuradio import analog
|
from gnuradio import analog
|
||||||
|
@ -69,6 +69,7 @@ class satnogs_amsat_fox_duv_decoder(gr.top_block):
|
||||||
self.satnogs_ogg_encoder_0 = satnogs.ogg_encoder(file_path, audio_samp_rate, 1.0)
|
self.satnogs_ogg_encoder_0 = satnogs.ogg_encoder(file_path, audio_samp_rate, 1.0)
|
||||||
self.satnogs_iq_sink_0 = satnogs.iq_sink(32767, iq_file_path, False, enable_iq_dump)
|
self.satnogs_iq_sink_0 = satnogs.iq_sink(32767, iq_file_path, False, enable_iq_dump)
|
||||||
self.satnogs_frame_file_sink_0_1_0 = satnogs.frame_file_sink(decoded_data_file_path, 1)
|
self.satnogs_frame_file_sink_0_1_0 = satnogs.frame_file_sink(decoded_data_file_path, 1)
|
||||||
|
self.satnogs_fox_telem_mm_0 = satnogs.fox_telem_mm()
|
||||||
self.satnogs_decoder_8b10b_0 = satnogs.decoder_8b10b('0011111010', 960)
|
self.satnogs_decoder_8b10b_0 = satnogs.decoder_8b10b('0011111010', 960)
|
||||||
|
|
||||||
self.satnogs_coarse_doppler_correction_cc_0 = satnogs.coarse_doppler_correction_cc(rx_freq, samp_rate_rx)
|
self.satnogs_coarse_doppler_correction_cc_0 = satnogs.coarse_doppler_correction_cc(rx_freq, samp_rate_rx)
|
||||||
|
@ -107,8 +108,9 @@ class satnogs_amsat_fox_duv_decoder(gr.top_block):
|
||||||
##################################################
|
##################################################
|
||||||
# Connections
|
# Connections
|
||||||
##################################################
|
##################################################
|
||||||
self.msg_connect((self.satnogs_ccsds_rs_decoder_mm_0, 'pdu'), (self.satnogs_frame_file_sink_0_1_0, 'frame'))
|
self.msg_connect((self.satnogs_ccsds_rs_decoder_mm_0, 'pdu'), (self.satnogs_fox_telem_mm_0, 'in'))
|
||||||
self.msg_connect((self.satnogs_decoder_8b10b_0, 'pdu'), (self.satnogs_ccsds_rs_decoder_mm_0, 'in'))
|
self.msg_connect((self.satnogs_decoder_8b10b_0, 'pdu'), (self.satnogs_ccsds_rs_decoder_mm_0, 'in'))
|
||||||
|
self.msg_connect((self.satnogs_fox_telem_mm_0, 'raw'), (self.satnogs_frame_file_sink_0_1_0, 'frame'))
|
||||||
self.msg_connect((self.satnogs_tcp_rigctl_msg_source_0, 'freq'), (self.satnogs_coarse_doppler_correction_cc_0, 'freq'))
|
self.msg_connect((self.satnogs_tcp_rigctl_msg_source_0, 'freq'), (self.satnogs_coarse_doppler_correction_cc_0, 'freq'))
|
||||||
self.connect((self.analog_quadrature_demod_cf_0, 0), (self.low_pass_filter_1, 0))
|
self.connect((self.analog_quadrature_demod_cf_0, 0), (self.low_pass_filter_1, 0))
|
||||||
self.connect((self.analog_quadrature_demod_cf_0, 0), (self.satnogs_ogg_encoder_0, 0))
|
self.connect((self.analog_quadrature_demod_cf_0, 0), (self.satnogs_ogg_encoder_0, 0))
|
||||||
|
|
|
@ -54,5 +54,6 @@ install(FILES
|
||||||
${enabled_blocks}
|
${enabled_blocks}
|
||||||
satnogs_quad_demod_filter_ff.xml
|
satnogs_quad_demod_filter_ff.xml
|
||||||
satnogs_decoder_8b10b.xml
|
satnogs_decoder_8b10b.xml
|
||||||
satnogs_ccsds_rs_decoder_mm.xml DESTINATION share/gnuradio/grc/blocks
|
satnogs_ccsds_rs_decoder_mm.xml
|
||||||
|
satnogs_fox_telem_mm.xml DESTINATION share/gnuradio/grc/blocks
|
||||||
)
|
)
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
<block>satnogs_upsat_transmitter</block>
|
<block>satnogs_upsat_transmitter</block>
|
||||||
<block>satnogs_qb50_deframer</block>
|
<block>satnogs_qb50_deframer</block>
|
||||||
</cat>
|
</cat>
|
||||||
|
<cat>
|
||||||
|
<name>AMSAT FOX</name>
|
||||||
|
<block>satnogs_fox_telem_mm</block>
|
||||||
|
</cat>
|
||||||
</cat>
|
</cat>
|
||||||
<block>satnogs_cw_matched_filter_ff</block>
|
<block>satnogs_cw_matched_filter_ff</block>
|
||||||
<block>satnogs_morse_decoder</block>
|
<block>satnogs_morse_decoder</block>
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<block>
|
||||||
|
<name>FOX telemetry processor</name>
|
||||||
|
<key>satnogs_fox_telem_mm</key>
|
||||||
|
<import>import satnogs</import>
|
||||||
|
<make>satnogs.fox_telem_mm()</make>
|
||||||
|
|
||||||
|
<sink>
|
||||||
|
<name>in</name>
|
||||||
|
<type>message</type>
|
||||||
|
</sink>
|
||||||
|
|
||||||
|
<source>
|
||||||
|
<name>raw</name>
|
||||||
|
<type>message</type>
|
||||||
|
</source>
|
||||||
|
</block>
|
|
@ -69,5 +69,6 @@ install(FILES
|
||||||
${HEADER_FILES}
|
${HEADER_FILES}
|
||||||
quad_demod_filter_ff.h
|
quad_demod_filter_ff.h
|
||||||
decoder_8b10b.h
|
decoder_8b10b.h
|
||||||
ccsds_rs_decoder_mm.h DESTINATION include/satnogs
|
ccsds_rs_decoder_mm.h
|
||||||
|
fox_telem_mm.h DESTINATION include/satnogs
|
||||||
)
|
)
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* -*- c++ -*- */
|
||||||
|
/*
|
||||||
|
* gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018, Libre Space Foundation <http://librespacefoundation.org/>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INCLUDED_SATNOGS_FOX_TELEM_MM_H
|
||||||
|
#define INCLUDED_SATNOGS_FOX_TELEM_MM_H
|
||||||
|
|
||||||
|
#include <satnogs/api.h>
|
||||||
|
#include <gnuradio/block.h>
|
||||||
|
|
||||||
|
namespace gr
|
||||||
|
{
|
||||||
|
namespace satnogs
|
||||||
|
{
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This block takes a AMSAT FOX telemetry frame from the CCSDS
|
||||||
|
* RS decoder, discards the pad bytes, checks if the frame is originating
|
||||||
|
* from a valid spacecraft and outputs the data to another message port.
|
||||||
|
* \ingroup satnogs
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class SATNOGS_API fox_telem_mm : virtual public gr::block
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef boost::shared_ptr<fox_telem_mm> sptr;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This block takes a AMSAT FOX telemetry frame from the CCSDS
|
||||||
|
* RS decoder, discards the pad bytes, checks if the frame is originating
|
||||||
|
* from a valid spacecraft and outputs the data to another message port.
|
||||||
|
*/
|
||||||
|
static sptr
|
||||||
|
make ();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace satnogs
|
||||||
|
} // namespace gr
|
||||||
|
|
||||||
|
#endif /* INCLUDED_SATNOGS_FOX_TELEM_MM_H */
|
||||||
|
|
|
@ -68,7 +68,8 @@ list(APPEND satnogs_sources
|
||||||
iq_sink_impl.cc
|
iq_sink_impl.cc
|
||||||
quad_demod_filter_ff_impl.cc
|
quad_demod_filter_ff_impl.cc
|
||||||
decoder_8b10b_impl.cc
|
decoder_8b10b_impl.cc
|
||||||
ccsds_rs_decoder_mm_impl.cc)
|
ccsds_rs_decoder_mm_impl.cc
|
||||||
|
fox_telem_mm_impl.cc)
|
||||||
|
|
||||||
if(${INCLUDE_DEBUG_BLOCKS})
|
if(${INCLUDE_DEBUG_BLOCKS})
|
||||||
list(APPEND satnogs_sources ${satnogs_debug_sources})
|
list(APPEND satnogs_sources ${satnogs_debug_sources})
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
/* -*- c++ -*- */
|
||||||
|
/*
|
||||||
|
* gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018, Libre Space Foundation <http://librespacefoundation.org/>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include "fox_telem_mm_impl.h"
|
||||||
|
|
||||||
|
#include <satnogs/log.h>
|
||||||
|
|
||||||
|
namespace gr {
|
||||||
|
namespace satnogs {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AMSAT FOX spacecraft IDs
|
||||||
|
*/
|
||||||
|
const uint8_t fox_telem_mm_impl::fox_id[] = {0x1, 0x2, 0x3};
|
||||||
|
|
||||||
|
fox_telem_mm::sptr
|
||||||
|
fox_telem_mm::make()
|
||||||
|
{
|
||||||
|
return gnuradio::get_initial_sptr
|
||||||
|
(new fox_telem_mm_impl());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The private constructor
|
||||||
|
*/
|
||||||
|
fox_telem_mm_impl::fox_telem_mm_impl()
|
||||||
|
: gr::block("fox_telem_mm",
|
||||||
|
gr::io_signature::make(0, 0, 0),
|
||||||
|
gr::io_signature::make(0, 0, 0)),
|
||||||
|
/* 6 header, 58 payload */
|
||||||
|
d_frame_size (6 + 58)
|
||||||
|
{
|
||||||
|
message_port_register_in (pmt::mp ("in"));
|
||||||
|
message_port_register_out (pmt::mp ("raw"));
|
||||||
|
|
||||||
|
set_msg_handler (
|
||||||
|
pmt::mp ("in"),
|
||||||
|
boost::bind (&fox_telem_mm_impl::process_frame, this, _1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
is_spacecraft_valid(uint8_t id)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < sizeof(fox_telem_mm_impl::fox_id); i++) {
|
||||||
|
if (fox_telem_mm_impl::fox_id[i] == id) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fox_telem_mm_impl::process_frame (pmt::pmt_t msg)
|
||||||
|
{
|
||||||
|
uint8_t fox_id;
|
||||||
|
const uint8_t *data = (const uint8_t *) pmt::blob_data(msg);
|
||||||
|
size_t data_len = pmt::blob_length(msg);
|
||||||
|
|
||||||
|
if(data_len != 223) {
|
||||||
|
LOG_ERROR("Invalid message");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check the spacecraft ID */
|
||||||
|
fox_id = data[0] & 0x3;
|
||||||
|
if(!is_spacecraft_valid(fox_id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
message_port_pub(pmt::mp("raw"), pmt::make_blob(data, d_frame_size));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Our virtual destructor.
|
||||||
|
*/
|
||||||
|
fox_telem_mm_impl::~fox_telem_mm_impl()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* namespace satnogs */
|
||||||
|
} /* namespace gr */
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/* -*- c++ -*- */
|
||||||
|
/*
|
||||||
|
* gr-satnogs: SatNOGS GNU Radio Out-Of-Tree Module
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018, Libre Space Foundation <http://librespacefoundation.org/>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INCLUDED_SATNOGS_FOX_TELEM_MM_IMPL_H
|
||||||
|
#define INCLUDED_SATNOGS_FOX_TELEM_MM_IMPL_H
|
||||||
|
|
||||||
|
#include <satnogs/fox_telem_mm.h>
|
||||||
|
|
||||||
|
namespace gr
|
||||||
|
{
|
||||||
|
namespace satnogs
|
||||||
|
{
|
||||||
|
|
||||||
|
class fox_telem_mm_impl : public fox_telem_mm
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
const size_t d_frame_size;
|
||||||
|
|
||||||
|
void
|
||||||
|
process_frame (pmt::pmt_t msg);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static const uint8_t fox_id[];
|
||||||
|
|
||||||
|
fox_telem_mm_impl ();
|
||||||
|
~fox_telem_mm_impl ();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace satnogs
|
||||||
|
} // namespace gr
|
||||||
|
|
||||||
|
#endif /* INCLUDED_SATNOGS_FOX_TELEM_MM_IMPL_H */
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "satnogs/quad_demod_filter_ff.h"
|
#include "satnogs/quad_demod_filter_ff.h"
|
||||||
#include "satnogs/decoder_8b10b.h"
|
#include "satnogs/decoder_8b10b.h"
|
||||||
#include "satnogs/ccsds_rs_decoder_mm.h"
|
#include "satnogs/ccsds_rs_decoder_mm.h"
|
||||||
|
#include "satnogs/fox_telem_mm.h"
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,3 +110,6 @@ GR_SWIG_BLOCK_MAGIC2(satnogs, decoder_8b10b);
|
||||||
|
|
||||||
%include "satnogs/ccsds_rs_decoder_mm.h"
|
%include "satnogs/ccsds_rs_decoder_mm.h"
|
||||||
GR_SWIG_BLOCK_MAGIC2(satnogs, ccsds_rs_decoder_mm);
|
GR_SWIG_BLOCK_MAGIC2(satnogs, ccsds_rs_decoder_mm);
|
||||||
|
|
||||||
|
%include "satnogs/fox_telem_mm.h"
|
||||||
|
GR_SWIG_BLOCK_MAGIC2(satnogs, fox_telem_mm);
|
||||||
|
|
Loading…
Reference in New Issue