aboutsummaryrefslogtreecommitdiffstats
path: root/src/gr-fadingui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gr-fadingui')
-rwxr-xr-xsrc/gr-fadingui/build.sh8
-rw-r--r--src/gr-fadingui/grc/CMakeLists.txt2
-rw-r--r--src/gr-fadingui/grc/fadingui_datasource.block.yml13
-rw-r--r--src/gr-fadingui/grc/fadingui_dearpygui_sink.block.yml38
-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
8 files changed, 144 insertions, 14 deletions
diff --git a/src/gr-fadingui/build.sh b/src/gr-fadingui/build.sh
new file mode 100755
index 0000000..29697af
--- /dev/null
+++ b/src/gr-fadingui/build.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+mkdir -p build
+cmake -DGR_PYTHON_DIR=/usr/lib/python3/dist-packages/ -GNinja -Bbuild
+ninja -C build
+
+# install to system
+sudo ninja -C build install
diff --git a/src/gr-fadingui/grc/CMakeLists.txt b/src/gr-fadingui/grc/CMakeLists.txt
index e4b2ee9..98713e8 100644
--- a/src/gr-fadingui/grc/CMakeLists.txt
+++ b/src/gr-fadingui/grc/CMakeLists.txt
@@ -19,5 +19,5 @@
# Boston, MA 02110-1301, USA.
install(FILES
fadingui_datasource.block.yml
- DESTINATION share/gnuradio/grc/blocks
+ fadingui_dearpygui_sink.block.yml DESTINATION share/gnuradio/grc/blocks
)
diff --git a/src/gr-fadingui/grc/fadingui_datasource.block.yml b/src/gr-fadingui/grc/fadingui_datasource.block.yml
index 67f0275..5f34591 100644
--- a/src/gr-fadingui/grc/fadingui_datasource.block.yml
+++ b/src/gr-fadingui/grc/fadingui_datasource.block.yml
@@ -1,10 +1,10 @@
id: fadingui_datasource
-label: UI Data Source
+label: UI Framed Data Source
category: '[fadingui]'
templates:
imports: import fadingui
- make: fadingui.datasource(vec_len=${vec_len}, sock_addr=${sock_addr}, file_list=${file_list})
+ make: fadingui.datasource(vec_len=${vec_len}, header_len=${header_len}, sock_addr=${sock_addr}, file_list=${file_list})
# Make one 'parameters' list entry for every parameter you want settable from the GUI.
# Keys include:
@@ -15,7 +15,12 @@ parameters:
- id: vec_len
label: Vector length
dtype: int
- default: 512
+ default: 501
+
+- id: header_len
+ label: Header length
+ dtype: int
+ default: 11
- id: sock_addr
label: Socket Address
@@ -40,7 +45,7 @@ outputs:
- label: out
domain: stream
dtype: byte
- vlen: ${vec_len}
+ vlen: ${ vec_len + header_len }
# 'file_format' specifies the version of the GRC yml format used in the file
# and should usually not be changed.
diff --git a/src/gr-fadingui/grc/fadingui_dearpygui_sink.block.yml b/src/gr-fadingui/grc/fadingui_dearpygui_sink.block.yml
new file mode 100644
index 0000000..3712be4
--- /dev/null
+++ b/src/gr-fadingui/grc/fadingui_dearpygui_sink.block.yml
@@ -0,0 +1,38 @@
+id: fadingui_dearpygui_sink
+label: UI Sink
+category: '[fadingui]'
+
+templates:
+ imports: import fadingui
+ make: fadingui.dearpygui_sink()
+
+# Make one 'parameters' list entry for every parameter you want settable from the GUI.
+# Keys include:
+# * id (makes the value accessible as \$keyname, e.g. in the make entry)
+# * label (label shown in the GUI)
+# * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
+parameters:
+- id: sock_addr
+ label: Socket address
+ dtype: string
+ default: udp://
+
+- id: ui_element_id
+ label: UI element ID
+ dtype: raw
+
+
+# Make one 'inputs' list entry per input and one 'outputs' list entry per output.
+# Keys include:
+# * label (an identifier for the GUI)
+# * domain (optional - stream or message. Default is stream)
+# * dtype (e.g. int, float, complex, byte, short, xxx_vector, ...)
+# * vlen (optional - data stream vector length. Default is 1)
+# * optional (optional - set to 1 for optional inputs. Default is 0)
+inputs:
+- label: in
+ dtype: complex
+
+# 'file_format' specifies the version of the GRC yml format used in the file
+# and should usually not be changed.
+file_format: 1
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])
+