aboutsummaryrefslogtreecommitdiffstats
path: root/src/gr-fadingui/python/netsink.py
blob: 9df81f545ad0cd78e4f5c4ed0b7e06f367d84ae4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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])