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])
|