aboutsummaryrefslogtreecommitdiffstats
path: root/src/gr-fadingui/python
diff options
context:
space:
mode:
Diffstat (limited to 'src/gr-fadingui/python')
-rw-r--r--src/gr-fadingui/python/CMakeLists.txt3
-rw-r--r--src/gr-fadingui/python/__init__.py1
-rw-r--r--src/gr-fadingui/python/datasource.py52
-rw-r--r--src/gr-fadingui/python/dearpygui_sink.py41
4 files changed, 88 insertions, 9 deletions
diff --git a/src/gr-fadingui/python/CMakeLists.txt b/src/gr-fadingui/python/CMakeLists.txt
index 4ab9bbc..27b5f4b 100644
--- a/src/gr-fadingui/python/CMakeLists.txt
+++ b/src/gr-fadingui/python/CMakeLists.txt
@@ -33,7 +33,7 @@ GR_PYTHON_INSTALL(
FILES
__init__.py
datasource.py
- DESTINATION ${GR_PYTHON_DIR}/fadingui
+ dearpygui_sink.py DESTINATION ${GR_PYTHON_DIR}/fadingui
)
########################################################################
@@ -43,3 +43,4 @@ include(GrTest)
set(GR_TEST_TARGET_DEPS gnuradio-fadingui)
set(GR_TEST_PYTHON_DIRS ${CMAKE_BINARY_DIR}/swig)
+GR_ADD_TEST(qa_dearpygui_sink ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/qa_dearpygui_sink.py)
diff --git a/src/gr-fadingui/python/__init__.py b/src/gr-fadingui/python/__init__.py
index 6cfa23b..d551a71 100644
--- a/src/gr-fadingui/python/__init__.py
+++ b/src/gr-fadingui/python/__init__.py
@@ -33,5 +33,6 @@ except ImportError:
# import any pure python here
from .datasource import datasource
+from .dearpygui_sink import dearpygui_sink
#
diff --git a/src/gr-fadingui/python/datasource.py b/src/gr-fadingui/python/datasource.py
index ddce468..1914d33 100644
--- a/src/gr-fadingui/python/datasource.py
+++ b/src/gr-fadingui/python/datasource.py
@@ -19,6 +19,8 @@
# Boston, MA 02110-1301, USA.
#
+import io
+
import numpy as np
from gnuradio import gr
@@ -26,11 +28,17 @@ class datasource(gr.sync_block):
"""
Loads data from a file choosen in the graphical user interface.
"""
- def __init__(self, vec_len, sock_addr, file_list):
+
+ HEADER_LEN = 11;
+
+ def __init__(self, vec_len, header_len, sock_addr, file_list):
+ # FIXME: find a better solution
+ assert(header_len == datasource.HEADER_LEN)
+
gr.sync_block.__init__(self,
name="datasource",
in_sig=None,
- out_sig=[np.dtype('256b')])
+ out_sig=[np.dtype(f'{vec_len + header_len}b')])
# parameters
self.vec_len = vec_len
@@ -42,27 +50,55 @@ class datasource(gr.sync_block):
self.fsize = None
self.fpos = 0
+ # cache
+ self.header_cache = None
+
# TODO: make it possible to choose from UI
self.load_file(file_list[0])
def load_file(self, fname):
self.fdata = np.fromfile(fname, np.byte)
- self.fsize = len(self.data)
+ self.fsize = len(self.fdata)
- # TODO: remove
+ # TODO: remove debugging statements
print(f"datasource: loaded file size={self.fsize}, head:")
print(self.fdata[:10])
+ def make_header(self, data_size):
+ # TODO: check that data_size is not too big
+ pilot = 0x1248
+ header = f"p{pilot:04x}s{data_size:04x}d".encode("ascii")
+ arr = np.frombuffer(header, dtype=np.dtype("byte"))
+ return arr
+
def work(self, input_items, output_items):
out = output_items[0]
+ print(self.fpos)
if self.fpos + self.vec_len > self.fsize:
- # TODO: implement padding with zeroes
+ # FIXME: repair broken code below
self.fpos = 0
- return 0
+ return 0;
- out[:] = self.fdata[self.fpos:self.fpos + self.vec_len]
- self.fpos += self.vec_len
+ rest = self.fsize - self.fpos
+
+ # cannot use cached header
+ header = self.make_header(rest)
+ data = self.fdata[self.fpos:rest]
+ frame_size = datasource.HEADER_LEN + rest
+ out[:] = np.concatenate([header, data])
+
+ self.fpos = 0
+ return rest
+
+ if self.header_cache == None:
+ self.header = self.make_header(self.vec_len)
+
+ data = self.fdata[self.fpos:self.fpos + self.vec_len]
+
+ out[:] = np.concatenate([self.header, data])
+
+ self.fpos += self.vec_len
return len(output_items[0])
diff --git a/src/gr-fadingui/python/dearpygui_sink.py b/src/gr-fadingui/python/dearpygui_sink.py
new file mode 100644
index 0000000..2b8e9fb
--- /dev/null
+++ b/src/gr-fadingui/python/dearpygui_sink.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2021 Naoki Pross.
+#
+# 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 as np
+from gnuradio import gr
+
+class dearpygui_sink(gr.sync_block):
+ """
+ docstring for block dearpygui_sink
+ """
+ def __init__(self):
+ gr.sync_block.__init__(self,
+ name="dearpygui_sink",
+ in_sig=[np.complex64],
+ out_sig=None)
+
+
+ def work(self, input_items, output_items):
+ in0 = input_items[0]
+ # <+signal processing here+>
+ return len(input_items[0])
+