Skip to content

Commit

Permalink
Added support for TECHNOSAT
Browse files Browse the repository at this point in the history
  • Loading branch information
daniestevez committed Mar 20, 2018
1 parent 62d939e commit 73c784a
Show file tree
Hide file tree
Showing 8 changed files with 208 additions and 7 deletions.
7 changes: 4 additions & 3 deletions README.md
Expand Up @@ -49,7 +49,7 @@ one particular satellite. You may install only the ones you're interested in.

* [gr-aausat](https://github.com/daniestevez/gr-aausat) AAUSAT-4 decoder and
telemetry parser
* [beesat-sdr](https://github.com/daniestevez/beesat-sdr) BEESAT decoder and TNC
* [beesat-sdr](https://github.com/daniestevez/beesat-sdr) BEESAT and TECHNOSAT decoder and TNC
* [gr-lilacsat](https://github.com/bg2bhc/gr-lilacsat) This only needs to be installed
if you want to submit telemetry to HIT. A complete decoder which does not use gr-lilacsat
is already included in gr-satellites.
Expand Down Expand Up @@ -156,8 +156,9 @@ telemetry packet in the terminal as soon as it receives it.
convolutional code and a (255,223) Reed-Solomon code. It also uses a CCSDS
scrambler. You must use FM mode to receive this satellite (436.330MHz).
* `beesat`
[BEESAT-1,-2 and -4](http://space.skyrocket.de/doc_sdat/beesat.htm), which
transmit 4k8 FSK telemetry in the 70cm band. They use the Mobitex-NX
[BEESAT-1,-2 and -4](http://space.skyrocket.de/doc_sdat/beesat.htm)
and [TECHNOSAT](https://directory.eoportal.org/web/eoportal/satellite-missions/t/technosat),
which transmit 4k8 FSK telemetry in the 70cm band. They use the Mobitex-NX
protocol, which includes FEC with a (12,8,3) linear code and CRC-16CCITT for
error detection. You must use FM mode to receive these satellites (435.950MHz).
* `by701`
Expand Down
103 changes: 100 additions & 3 deletions apps/beesat.grc
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<?grc format='1' created='3.7.10'?>
<?grc format='1' created='3.7.12'?>
<flow_graph>
<timestamp>Tue Apr 26 12:26:29 2016</timestamp>
<block>
Expand All @@ -22,7 +22,7 @@
</param>
<param>
<key>description</key>
<value>BEESAT decoder</value>
<value>BEESAT and TECHNOSAT decoder</value>
</param>
<param>
<key>_enabled</key>
Expand Down Expand Up @@ -72,13 +72,21 @@
<key>run</key>
<value>True</value>
</param>
<param>
<key>sizing_mode</key>
<value>fixed</value>
</param>
<param>
<key>thread_safe_setters</key>
<value></value>
</param>
<param>
<key>title</key>
<value>BEESAT decoder</value>
<value>BEESAT and TECHNOSAT decoder</value>
</param>
<param>
<key>placement</key>
<value>(0,0)</value>
</param>
</block>
<block>
Expand Down Expand Up @@ -307,6 +315,10 @@
<key>short_id</key>
<value></value>
</param>
<param>
<key>hide</key>
<value>none</value>
</param>
<param>
<key>type</key>
<value>string</value>
Expand Down Expand Up @@ -452,6 +464,10 @@
<key>short_id</key>
<value>i</value>
</param>
<param>
<key>hide</key>
<value>none</value>
</param>
<param>
<key>type</key>
<value>intx</value>
Expand Down Expand Up @@ -495,6 +511,10 @@
<key>short_id</key>
<value></value>
</param>
<param>
<key>hide</key>
<value>none</value>
</param>
<param>
<key>type</key>
<value>string</value>
Expand Down Expand Up @@ -538,6 +558,10 @@
<key>short_id</key>
<value></value>
</param>
<param>
<key>hide</key>
<value>none</value>
</param>
<param>
<key>type</key>
<value>eng_float</value>
Expand Down Expand Up @@ -581,6 +605,10 @@
<key>short_id</key>
<value></value>
</param>
<param>
<key>hide</key>
<value>none</value>
</param>
<param>
<key>type</key>
<value>eng_float</value>
Expand Down Expand Up @@ -730,6 +758,10 @@
<key>short_id</key>
<value></value>
</param>
<param>
<key>hide</key>
<value>none</value>
</param>
<param>
<key>type</key>
<value>intx</value>
Expand Down Expand Up @@ -773,6 +805,10 @@
<key>short_id</key>
<value></value>
</param>
<param>
<key>hide</key>
<value>none</value>
</param>
<param>
<key>type</key>
<value>string</value>
Expand Down Expand Up @@ -990,6 +1026,61 @@
<value>http://db.satnogs.org/api/telemetry/</value>
</param>
</block>
<block>
<key>satellites_submit</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>1</value>
</param>
<param>
<key>_coordinate</key>
<value>(872, 892)</value>
</param>
<param>
<key>_rotation</key>
<value>0</value>
</param>
<param>
<key>id</key>
<value>satellites_submit_0_0_0_0</value>
</param>
<param>
<key>latitude</key>
<value>latitude</value>
</param>
<param>
<key>longitude</key>
<value>longitude</value>
</param>
<param>
<key>noradID</key>
<value>42829</value>
</param>
<param>
<key>source</key>
<value>callsign</value>
</param>
<param>
<key>tstamp</key>
<value>recstart</value>
</param>
<param>
<key>url</key>
<value>http://db.satnogs.org/api/telemetry/</value>
</param>
</block>
<block>
<key>tnc_nx_beesat_classifier</key>
<param>
Expand Down Expand Up @@ -1128,6 +1219,12 @@
<source_key>BEESAT-4</source_key>
<sink_key>in</sink_key>
</connection>
<connection>
<source_block_id>tnc_nx_beesat_classifier_0</source_block_id>
<sink_block_id>satellites_submit_0_0_0_0</sink_block_id>
<source_key>TECHNOSAT</source_key>
<sink_key>in</sink_key>
</connection>
<connection>
<source_block_id>tnc_nx_nx_decoder_1_0</source_block_id>
<sink_block_id>satellites_print_timestamp_0</sink_block_id>
Expand Down
1 change: 1 addition & 0 deletions grc/CMakeLists.txt
Expand Up @@ -65,5 +65,6 @@ install(FILES
satellites_snet_deframer.xml
satellites_ao40_syncframe_soft.xml
satellites_ao40_deinterleaver_soft.xml
satellites_beesat_classifier.xml
DESTINATION share/gnuradio/grc/blocks
)
34 changes: 34 additions & 0 deletions grc/satellites_beesat_classifier.xml
@@ -0,0 +1,34 @@
<?xml version="1.0"?>
<block>
<name>BEESAT classifier</name>
<key>tnc_nx_beesat_classifier</key>
<category>[Satellites]/Telemetry</category>
<import>import satellites</import>
<make>satellites.beesat_classifier()</make>

<sink>
<name>in</name>
<type>message</type>
</sink>

<source>
<name>BEESAT-1</name>
<type>message</type>
<optional>1</optional>
</source>
<source>
<name>BEESAT-2</name>
<type>message</type>
<optional>1</optional>
</source>
<source>
<name>BEESAT-4</name>
<type>message</type>
<optional>1</optional>
</source>
<source>
<name>TECHNOSAT</name>
<type>message</type>
<optional>1</optional>
</source>
</block>
1 change: 1 addition & 0 deletions python/CMakeLists.txt
Expand Up @@ -79,6 +79,7 @@ GR_PYTHON_INSTALL(
snet_telemetry.py
snet_deframer.py
bch15.py
beesat_classifier.py
DESTINATION ${GR_PYTHON_DIR}/satellites
)

Expand Down
2 changes: 2 additions & 0 deletions python/__init__.py
Expand Up @@ -84,3 +84,5 @@
from picsat_telemetry_parser import picsat_telemetry_parser

from snet_deframer import snet_deframer

from beesat_classifier import beesat_classifier
65 changes: 65 additions & 0 deletions python/beesat_classifier.py
@@ -0,0 +1,65 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2016 Daniel Estévez
#
# This 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.
#
# This software 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 software; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
#

import numpy
from gnuradio import gr
import pmt
import array
import struct

class beesat_classifier(gr.basic_block):
"""
docstring for block beesat_classifier
"""
def __init__(self):
gr.basic_block.__init__(self,
name="beesat_classifier",
in_sig=[],
out_sig=[])

self.message_port_register_in(pmt.intern('in'))
self.set_msg_handler(pmt.intern('in'), self.handle_msg)
self.message_port_register_out(pmt.intern('BEESAT-1'))
self.message_port_register_out(pmt.intern('BEESAT-2'))
self.message_port_register_out(pmt.intern('BEESAT-4'))
self.message_port_register_out(pmt.intern('TECHNOSAT'))

def handle_msg(self, msg_pmt):
msg = pmt.cdr(msg_pmt)
if not pmt.is_u8vector(msg):
print "[ERROR] Received invalid message type. Expected u8vector"
return
packet = array.array("B", pmt.u8vector_elements(msg))
satellite = None
if len(packet) < 2 + 6 + 2: # 2byte header, 6byte callsign, 2byte callsign crc
return
callsign = struct.unpack("6s", packet[2:8])[0]
if callsign == 'DP0BEE':
satellite = 'BEESAT-1'
elif callsign == 'DP0BEF':
satellite = 'BEESAT-2'
elif callsign == 'DP0BEH':
satellite = 'BEESAT-4'
elif callsign == 'DP0TBA':
satellite = 'TECHNOSAT'

if satellite:
self.message_port_pub(pmt.intern(satellite), msg_pmt)
2 changes: 1 addition & 1 deletion satellite-recordings

0 comments on commit 73c784a

Please sign in to comment.