Commit 71bc04de authored by Milosz Malczak's avatar Milosz Malczak

general: started working wth protobuf

parent 784a77dd
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.000699752010405, medium: 0.000870880391449, variance: 0.000000078894396,
Postsamples: 10 ,Best: 0.000574706122279, medium: 0.000715657649562, variance: 0.000000021941853,
Postsamples: 100 ,Best: 0.000796633074060, medium: 0.000855645583943, variance: 0.000000007345161,
Postsamples: 1000 ,Best: 0.001212270930409, medium: 0.001352803874761, variance: 0.000000071001830,
Postsamples: 10000 ,Best: 0.008507637074217, medium: 0.008918314194307, variance: 0.000000186273018,
Postsamples: 100000 ,Best: 0.077052819076926, medium: 0.084806818654761, variance: 0.000022451321747,
Number of channels: 2
Postsamples: 2 ,Best: 0.000979353906587, medium: 0.001667495351285, variance: 0.000002184598977,
Postsamples: 10 ,Best: 0.000957382842898, medium: 0.000973849790171, variance: 0.000000000561776,
Postsamples: 100 ,Best: 0.000904204091057, medium: 0.000986668281257, variance: 0.000000004887685,
Postsamples: 1000 ,Best: 0.001919277012348, medium: 0.002271785214543, variance: 0.000000097217777,
Postsamples: 10000 ,Best: 0.014062508940697, medium: 0.016334616811946, variance: 0.000005183198192,
Postsamples: 100000 ,Best: 0.127094505121931, medium: 0.140313369082287, variance: 0.000065712984712,
Number of channels: 3
Postsamples: 2 ,Best: 0.000989562133327, medium: 0.001972282538190, variance: 0.000004003346484,
Postsamples: 10 ,Best: 0.000949912937358, medium: 0.001003691181540, variance: 0.000000004304056,
Postsamples: 100 ,Best: 0.001056814100593, medium: 0.001154696615413, variance: 0.000000006557673,
Postsamples: 1000 ,Best: 0.003262714948505, medium: 0.003482741396874, variance: 0.000000054666562,
Postsamples: 10000 ,Best: 0.016703329049051, medium: 0.020956255542114, variance: 0.000007532301176,
Postsamples: 100000 ,Best: 0.176507315831259, medium: 0.189107479620725, variance: 0.000054821688547,
Number of channels: 4
Postsamples: 2 ,Best: 0.000976121984422, medium: 0.002046334976330, variance: 0.000004225421494,
Postsamples: 10 ,Best: 0.000974427908659, medium: 0.001050267741084, variance: 0.000000002634227,
Postsamples: 100 ,Best: 0.001019340008497, medium: 0.001301964977756, variance: 0.000000056893749,
Postsamples: 1000 ,Best: 0.003618754912168, medium: 0.004157170793042, variance: 0.000000280731827,
Postsamples: 10000 ,Best: 0.024532406125218, medium: 0.025559303862974, variance: 0.000000598471703,
Postsamples: 100000 ,Best: 0.207999641075730, medium: 0.232270292798057, variance: 0.000184389680147,
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():
......
......@@ -27,8 +27,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()
......
......@@ -31,7 +31,7 @@ class OscilloscopeMethods(unittest.TestCase):
server_handler = None
server_expose = None
ADCs = {'ADC1': [8000, 1], 'ADC2': [8001, 2]}
delay = 0.4
delay = 1
return_queue = None
GUI_name = None
......
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