Commit b49888a6 authored by Milosz Malczak's avatar Milosz Malczak

Changed serialization to protobuf

parent 023116a1
Internal trigger on channel 3
Sampled signal: 100kHz sine wave Channel 3(0-3)
number of presamples = 0
number of acquisitions = 5
Number of channels: 1
Postsamples: 2 ,Best: 0.000633979914710, medium: 0.000946075376123, variance: 0.000000099162026,
Postsamples: 10 ,Best: 0.000647802837193, medium: 0.000802765646949, variance: 0.000000014182586,
Postsamples: 100 ,Best: 0.000787900062278, medium: 0.000889389775693, variance: 0.000000007365546,
Postsamples: 1000 ,Best: 0.002015376929194, medium: 0.002181492559612, variance: 0.000000035955072,
Postsamples: 10000 ,Best: 0.033366520889103, medium: 0.040128952031955, variance: 0.000014324808231,
Postsamples: 100000 ,Best: 0.080741015961394, medium: 0.083138469560072, variance: 0.000002990065997,
Number of channels: 2
Postsamples: 2 ,Best: 0.000883448868990, medium: 0.001638204185292, variance: 0.000002200146951,
Postsamples: 10 ,Best: 0.000889107817784, medium: 0.000962491706014, variance: 0.000000003973907,
Postsamples: 100 ,Best: 0.000799940899014, medium: 0.001060889009386, variance: 0.000000038004029,
Postsamples: 1000 ,Best: 0.002509825164452, medium: 0.002917002607137, variance: 0.000000130021590,
Postsamples: 10000 ,Best: 0.013368732063100, medium: 0.015742917545140, variance: 0.000002447554075,
Postsamples: 100000 ,Best: 0.128769239876419, medium: 0.135830613318831, variance: 0.000029718604762,
Number of channels: 3
Postsamples: 2 ,Best: 0.000949680106714, medium: 0.002025722060353, variance: 0.000004125948884,
Postsamples: 10 ,Best: 0.000970019958913, medium: 0.001045269798487, variance: 0.000000004030532,
Postsamples: 100 ,Best: 0.001095050014555, medium: 0.001585418684408, variance: 0.000001055187211,
Postsamples: 1000 ,Best: 0.003045155201107, medium: 0.003095481451601, variance: 0.000000003370611,
Postsamples: 10000 ,Best: 0.020646672928706, medium: 0.022097548376769, variance: 0.000001166180156,
Postsamples: 100000 ,Best: 0.160935340914875, medium: 0.178656966146082, variance: 0.000101599869790,
Number of channels: 4
Postsamples: 2 ,Best: 0.001027268124744, medium: 0.002212337823585, variance: 0.000005412744433,
Postsamples: 10 ,Best: 0.001010478008538, medium: 0.001169224316254, variance: 0.000000014455955,
Postsamples: 100 ,Best: 0.001282616052777, medium: 0.001551904063672, variance: 0.000000026084856,
Postsamples: 1000 ,Best: 0.004007722018287, medium: 0.004587752837688, variance: 0.000000714493835,
Postsamples: 10000 ,Best: 0.023665977874771, medium: 0.025389265781268, variance: 0.000002734158424,
Postsamples: 100000 ,Best: 0.201076155062765, medium: 0.223100848589092, variance: 0.000154993651400,
syntax = "proto3";
message RPC {
string function_name = 1;
Args args = 2;
}
message channel_data {
repeated int32 values= 1;
}
message channel_data2 {
repeated float values = 1;
}
message prepost {
repeated int32 value = 1;
}
message Args {
string unique_ADC_name = 11;
string addr = 10;
int32 port = 9;
int32 number_of_channels = 8;
repeated int64 timestamps = 7;
int32 presamples = 6;
int32 postsamples = 5;
map<string, channel_data> data = 4;
map<int32, channel_data2> data2 = 3;
map<int32, prepost> pre_post = 2;
map<int32, string> offsets = 1;
}
This diff is collapsed.
import json
from general.rpc_pb2 import RPC
def serialize(data):
data = json.dumps(data)
return data.encode('utf-8')
rpc = RPC()
rpc.function_name = data['function_name']
if data['function_name'] == 'update_data':
if(len(data['args']) == 4):
rpc.args.timestamps.extend(data['args'][0])
rpc.args.presamples = (data['args'][1]['presamples'])
rpc.args.postsamples = (data['args'][1]['postsamples'])
for channel_idx, channel_data in data['args'][2].items():
rpc.args.data[channel_idx].values.extend(channel_data)
rpc.args.unique_ADC_name = data['args'][3]
else:
for channel_idx, channel_data in data['args'][0].items():
rpc.args.data2[channel_idx].values.extend(channel_data)
for idx, prepost in data['args'][1].items():
rpc.args.pre_post[idx].value.extend(prepost)
for idx, offsets in data['args'][2].items():
rpc.args.offsets[idx] = offsets
elif data['function_name'] == 'register_ADC':
if(len(data['args']) == 3):
rpc.args.unique_ADC_name = data['args'][0]
rpc.args.addr = data['args'][1]
rpc.args.port = data['args'][2]
else:
rpc.args.unique_ADC_name = data['args'][0]
rpc.args.number_of_channels = data['args'][1]
elif data['function_name'] == 'unregister_ADC':
rpc.args.unique_ADC_name = data['args'][0]
data = rpc.SerializeToString()
return data
def deserialize(data):
data = data.decode('utf-8')
return json.loads(data)
rpc = RPC()
rpc.ParseFromString(data)
args = rpc.args
function_name = rpc.function_name
if function_name == 'update_data':
if args.unique_ADC_name:
timestamps = args.timestamps
pre_post = {'presamples': args.presamples,
'postsamples': args.postsamples}
data_arg = {}
for key in args.data:
data_arg[key] = args.data[key].values
unique_ADC_name = args.unique_ADC_name
args_dict = [timestamps, pre_post, data_arg, unique_ADC_name]
else:
data_arg = {}
pre_post_samples = {}
offsets = {}
for key in args.data2:
data_arg[key] = args.data2[key].values
for key in args.pre_post:
pre_post_samples[key] = args.pre_post[key].value
for key in args.offsets:
offsets[key] = args.offsets[key]
args_dict = [data_arg, pre_post_samples, offsets]
elif function_name == 'register_ADC':
if args.addr:
args_dict = [args.unique_ADC_name, args.addr, args.port]
else:
args_dict = [args.unique_ADC_name, args.number_of_channels]
elif function_name == 'unregister_ADC':
args_dict = [args.unique_ADC_name]
message = {'function_name': function_name,
'args': args_dict
}
return message
......@@ -96,7 +96,8 @@ class GUI_Class:
print('offsets: ' + str(offsets))
axis = np.array(range(-presamples, postsamples))/SAMP_FREQ
"""to be removed with xmlrpc"""
self.plot.curves[int(channel_idx)].setData(axis, channel_data)
self.plot.curves[int(channel_idx)].setData(axis,
np.array(channel_data))
def set_channel_params(self, channel_params):
for GUI_channel_idx, channel_params in channel_params.items():
......
......@@ -30,8 +30,8 @@ class ServerExposeTest():
def update_data(self, *args, **kwargs):
if plot_data:
data = args[0]
chan0 = data['0']
chan1 = data['1']
chan0 = data[0]
chan1 = data[1]
plt.plot(chan0, linewidth=0.5)
plt.plot(chan1, linewidth=0.5)
plt.show()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment