From 2d02a9787d3bbd7320f23a3c65ee8e8ed0369c1e Mon Sep 17 00:00:00 2001
From: Nao Pross <np@0hm.ch>
Date: Fri, 3 Dec 2021 22:19:57 +0100
Subject: Replace DearPyGui Sink with Network Sink

---
 src/gr-fadingui/python/CMakeLists.txt    |  4 +--
 src/gr-fadingui/python/__init__.py       |  3 +-
 src/gr-fadingui/python/dearpygui_sink.py | 36 -------------------
 src/gr-fadingui/python/netsink.py        | 59 ++++++++++++++++++++++++++++++++
 4 files changed, 63 insertions(+), 39 deletions(-)
 delete mode 100644 src/gr-fadingui/python/dearpygui_sink.py
 create mode 100644 src/gr-fadingui/python/netsink.py

(limited to 'src/gr-fadingui/python')

diff --git a/src/gr-fadingui/python/CMakeLists.txt b/src/gr-fadingui/python/CMakeLists.txt
index e04eb5b..bf484cc 100644
--- a/src/gr-fadingui/python/CMakeLists.txt
+++ b/src/gr-fadingui/python/CMakeLists.txt
@@ -34,11 +34,11 @@ GR_PYTHON_INSTALL(
     __init__.py
     logger.py
     datasource.py
-    dearpygui_sink.py
     deframer.py
     frame_obj.py
     multipath_fading.py
-    ber.py DESTINATION ${GR_PYTHON_DIR}/fadingui
+    ber.py
+    netsink.py DESTINATION ${GR_PYTHON_DIR}/fadingui
 )
 
 ########################################################################
diff --git a/src/gr-fadingui/python/__init__.py b/src/gr-fadingui/python/__init__.py
index 9fe45d5..56dbdd3 100644
--- a/src/gr-fadingui/python/__init__.py
+++ b/src/gr-fadingui/python/__init__.py
@@ -33,11 +33,12 @@ except ImportError:
 
 # import any pure python here
 from .datasource import datasource
-from .dearpygui_sink import dearpygui_sink
+
 
 from .deframer import deframer
 from .frame_obj import frame_obj
 from .multipath_fading import multipath_fading
 from .ber import ber
+from .netsink import netsink
 
 #
diff --git a/src/gr-fadingui/python/dearpygui_sink.py b/src/gr-fadingui/python/dearpygui_sink.py
deleted file mode 100644
index 6153611..0000000
--- a/src/gr-fadingui/python/dearpygui_sink.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Copyright 2021 Naoki Pross.
-
-import socket
-from urllib.parse import urlparse
-
-import numpy as np
-from gnuradio import gr
-
-class dearpygui_sink(gr.sync_block):
-    """
-    DearPyGUI Sink
-    """
-    def __init__(self, sock_addr, ui_element_id):
-        gr.sync_block.__init__(self,
-            name="dearpygui_sink",
-            in_sig=[np.complex64],
-            out_sig=None)
-
-        # sockets
-        self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-        self.srv = urlparse(sock_addr)
-
-    def send(self, value):
-        data = value.tobytes()
-        sent = self.socket.sendto(data, (self.srv.hostname, self.srv.port))
-
-        return len(data) == sent
-
-    def work(self, input_items, output_items):
-        in0 = input_items[0]
-        self.send(in0)
-        return len(input_items[0])
-
diff --git a/src/gr-fadingui/python/netsink.py b/src/gr-fadingui/python/netsink.py
new file mode 100644
index 0000000..9df81f5
--- /dev/null
+++ b/src/gr-fadingui/python/netsink.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2021 Sara Cinzia Halter, Naoki Pross.
+
+import socket
+from urllib.parse import urlparse
+
+import numpy as np
+from gnuradio import gr
+
+class netsink(gr.sync_block):
+    """
+    Sink that sends the data over the network using UDP.
+    Keep in mind that is quite slow.
+    """
+    def __init__(self, address, dtype, vlen):
+        gr.sync_block.__init__(self,
+            name="Network Sink",
+            in_sig=[],
+            out_sig=None)
+
+        # Create a socket and parse remote machine url
+        self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        self.url = urlparse(sock_addr)
+        self.srv = (self.srv.hostname, self.srv.port)
+
+    def send(self, data):
+        """
+        Send the data to self.srv
+
+        @param data Data as python bytes
+        @return Number of bytes that were actually sent
+        """
+        assert type(data) == bytes
+        return self.socket.sendto(data, self.srv)
+
+    def encode(self, data):
+        """
+        Encode the data into a dead simple format
+
+        @param data Array like type
+        @return Bytes of ASCII encoded comma separated string of numbers
+        """
+        # no data (what are you doing?)
+        if not data:
+            return bytes()
+
+        values = "[" + ",".join(map(str, data)) + "]"
+        return bytes(values, "ascii")
+
+    def work(self, input_items, output_items):
+        inp = input_items[0]
+
+        # TODO: Check that inp has a reasonable size
+        self.send(self.encode(inp))
+
+        return len(input_items[0])
+
-- 
cgit v1.2.1