63 changes: 0 additions & 63 deletions python/bindings/fixedlen_tagger_python.cc

This file was deleted.

2 changes: 0 additions & 2 deletions python/bindings/python_bindings.cc
Expand Up @@ -28,7 +28,6 @@ void bind_decode_rs(py::module& m);
void bind_descrambler308(py::module& m);
void bind_distributed_syncframe_soft(py::module& m);
void bind_encode_rs(py::module& m);
void bind_fixedlen_tagger(py::module& m);
void bind_lilacsat1_demux(py::module& m);
void bind_matrix_deinterleaver_soft(py::module& m);
void bind_nrzi_decode(py::module& m);
Expand Down Expand Up @@ -76,7 +75,6 @@ PYBIND11_MODULE(satellites_python, m)
bind_descrambler308(m);
bind_distributed_syncframe_soft(m);
bind_encode_rs(m);
bind_fixedlen_tagger(m);
bind_lilacsat1_demux(m);
bind_matrix_deinterleaver_soft(m);
bind_nrzi_decode(m);
Expand Down
77 changes: 77 additions & 0 deletions python/fixedlen_tagger.py
@@ -0,0 +1,77 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Copyright 2017 Daniel Estevez <daniel@destevez.net>
#
# This file is part of gr-satellites
#
# SPDX-License-Identifier: GPL-3.0-or-later
#

import numpy
from gnuradio import gr
import pmt

import collections

class fixedlen_tagger(gr.basic_block):
"""
docstring for block fixedlen_tagger
"""
def __init__(self, syncword_tag, packetlen_tag, packet_len, stream_type):
gr.basic_block.__init__(self,
name="fixedlen_tagger",
in_sig=[stream_type],
out_sig=[stream_type])
self.syncword_tag = pmt.string_to_symbol(syncword_tag)
self.packetlen_tag = pmt.string_to_symbol(packetlen_tag)
self.packet_len = packet_len
self.stream = collections.deque(maxlen=packet_len - 1)
self.maxtag = -1
self.data = []
self.tags = []
self.tags_to_write = []
self.written = 0
self.really_written = 0

def try_to_flush(self, out): # try to send as much items as we have in buffer
len_write = min(len(self.data), len(out))
out[:len_write] = self.data[:len_write]
self.data = self.data[len_write:]
self.really_written += len_write

for tag in self.tags_to_write[:]: # modifying self.tags_to_write during the loop could disturb the loop control, so we copy it
if tag < self.really_written:
self.tags_to_write.remove(tag)
self.add_item_tag(0, tag, self.packetlen_tag, pmt.from_long(self.packet_len))

return len_write

def general_work(self, input_items, output_items):
inp = input_items[0]
out = output_items[0]

if self.data:
# write as much as possible without consuming input
return self.try_to_flush(out)

window = list(self.stream) + inp.tolist()

alltags = self.get_tags_in_range(0, self.maxtag + 1, self.nitems_read(0) + len(inp), self.syncword_tag)
for tag in alltags:
if tag.offset not in self.tags:
self.maxtag = max(self.maxtag, tag.offset)
self.tags.append(tag.offset)
for tag in self.tags[:]: # modifying self.tags during the loop could disturb the loop control, so we copy it
if (tag >= self.nitems_read(0) - len(self.stream)) and (tag < self.nitems_read(0) + len(inp) - self.packet_len + 1):
self.tags.remove(tag)
start = tag - self.nitems_read(0) + len(self.stream)
packet = window[start : start + self.packet_len]
self.data += packet
self.tags_to_write.append(self.written)
self.written += self.packet_len

self.stream.extend(inp.tolist())

self.consume(0, len(inp))
return self.try_to_flush(out)
2 changes: 1 addition & 1 deletion python/hier/sync_to_pdu.py
Expand Up @@ -40,7 +40,7 @@ def __init__(self, packlen=0, sync="00011010110011111111110000011101", threshold
##################################################
# Blocks
##################################################
self.satellites_fixedlen_tagger_0_0_0 = satellites.fixedlen_tagger(gr.sizeof_char, 'syncword', 'packet_len', packlen)
self.satellites_fixedlen_tagger_0_0_0 = satellites.fixedlen_tagger('syncword', 'packet_len', packlen, numpy.byte)
self.digital_correlate_access_code_tag_bb_0_0_0 = digital.correlate_access_code_tag_bb(sync, threshold, 'syncword')
self.blocks_tagged_stream_to_pdu_0_0_0 = blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')

Expand Down
2 changes: 1 addition & 1 deletion python/hier/sync_to_pdu_packed.py
Expand Up @@ -40,7 +40,7 @@ def __init__(self, packlen=0, sync="00011010110011111111110000011101", threshold
##################################################
# Blocks
##################################################
self.satellites_fixedlen_tagger_0_0_0 = satellites.fixedlen_tagger(gr.sizeof_char, 'syncword', 'packet_len', packlen*8)
self.satellites_fixedlen_tagger_0_0_0 = satellites.fixedlen_tagger('syncword', 'packet_len', packlen*8, numpy.byte)
self.digital_correlate_access_code_tag_bb_0_0_0 = digital.correlate_access_code_tag_bb(sync, threshold, 'syncword')
self.blocks_unpacked_to_packed_xx_0 = blocks.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST)
self.blocks_tagged_stream_to_pdu_0_0_0 = blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')
Expand Down
2 changes: 1 addition & 1 deletion python/hier/sync_to_pdu_soft.py
Expand Up @@ -40,7 +40,7 @@ def __init__(self, packlen=0, sync="00011010110011111111110000011101", threshold
##################################################
# Blocks
##################################################
self.satellites_fixedlen_tagger_0_0_0 = satellites.fixedlen_tagger(gr.sizeof_float, 'syncword', 'packet_len', packlen)
self.satellites_fixedlen_tagger_0_0_0 = satellites.fixedlen_tagger('syncword', 'packet_len', packlen, numpy.float32)
self.digital_correlate_access_code_tag_bb_0_0_0 = digital.correlate_access_code_tag_ff(sync, threshold, 'syncword')
self.blocks_tagged_stream_to_pdu_0_0_0 = blocks.tagged_stream_to_pdu(blocks.float_t, 'packet_len')

Expand Down
4 changes: 2 additions & 2 deletions python/qa_fixedlen_tagger.py
Expand Up @@ -37,8 +37,8 @@ def setUp(self):
self.tag2pdu = blocks.tagged_stream_to_pdu(blocks.byte_t,
self.packetlen_tag)
self.debug = blocks.message_debug()
self.tagger = fixedlen_tagger(gr.sizeof_char, self.syncword_tag, self.packetlen_tag,
self.packet_len)
self.tagger = fixedlen_tagger(self.syncword_tag, self.packetlen_tag,
self.packet_len, np.byte)
self.tb = gr.top_block()
self.tb.connect(self.source, self.tagger, self.tag2pdu)
self.tb.msg_connect((self.tag2pdu, 'pdus'), (self.debug, 'store'))
Expand Down