9
13
from flask import url_for
10
14
from flask import redirect
11
15
from flask import send_from_directory
16
from flask import make_response
13
18
app = Flask(__name__)
19
@app.route("/property_info_json")
20
def get_property_list_json():
21
branch = request.args.get('branch')
22
if not branch is None:
27
prop_info = pcilib.get_property_list(branch)
28
return json.dumps(prop_info)
29
except Exception as e:
30
return json.dumps({'error': str(e)})
32
@app.route('/get_property_json')
33
def get_property_json():
34
prop = request.args.get('prop')
37
val = pcilib.get_property(str(prop))
38
return json.dumps({'value': val})
39
except Exception as e:
40
return json.dumps({'error': str(e)})
42
@app.route('/set_property_json')
43
def set_property_json():
44
val = request.args.get('val')
45
prop = request.args.get('prop')
48
pcilib.set_property(float(val), str(prop))
49
return json.dumps({'status': 'ok'})
50
except Exception as e:
51
return json.dumps({'error': str(e)})
54
@app.route("/registers_list_json")
55
def get_registers_list_json():
58
reg_list = pcilib.get_registers_list()
59
return json.dumps(reg_list)
60
except Exception as e:
61
return json.dumps({'error': str(e)})
63
@app.route('/read_register_json')
64
def read_register_json():
65
name = request.args.get('name')
66
bank = request.args.get('bank')
69
value = pcilib.read_register(str(name), str(bank))
70
return json.dumps({'value': value})
71
except Exception as e:
72
return json.dumps({'error': str(e)})
74
@app.route('/write_register_json')
75
def write_register_json():
76
val = request.args.get('val')
77
name = request.args.get('name')
78
bank = request.args.get('bank')
81
pcilib.write_register(float(val), str(name), str(bank))
82
return json.dumps({'status': 'ok'})
83
except Exception as e:
84
return json.dumps({'error': str(e)})
19
api_server_port = 9000
20
api_server_host = '0.0.0.0'
22
@app.route("/json/<command>")
23
def process_json_command(command):
24
headers = {'content-type': 'application/json'}
25
message = {'command': command}
27
for arg in request.args:
28
message[arg] = request.args[arg]
32
r = requests.get('http://' + api_server_host + ':' + str(api_server_port),
33
data=json.dumps(message),
35
except Exception as e:
36
return str(json.dumps({'status':'error', 'description': e}))
38
#application/octet-stream
39
response = make_response(r.content)
40
for header in r.headers:
41
response.headers[header] = r.headers[header]
87
@app.route('/set_property')
89
val = request.args.get('val')
90
prop = request.args.get('prop')
93
pcilib.set_property(float(val), str(prop))
94
return redirect(url_for('get_property_list', branch=prop))
95
except Exception as e:
98
@app.route('/write_register')
100
val = request.args.get('val')
101
name = request.args.get('name')
102
bank = request.args.get('bank')
105
pcilib.write_register(float(val), str(name), str(bank))
106
return redirect(url_for('get_register_info', name=name, bank=bank))
107
except Exception as e:
110
46
@app.route('/register_info')
111
47
def get_register_info():
112
49
name = request.args.get('name')
113
50
bank = request.args.get('bank')
118
reg_info = pcilib.get_register_info(str(name), str(bank))
119
value[name] = pcilib.read_register(str(name), str(bank))
56
r = requests.get(url_for('process_json_command',
57
command = 'get_register_info',
59
reg = name, _external = True))
60
if(r.json().get('status') == 'error'):
61
return 'Error: ' + r.json()['description']
63
reg_info = r.json()['register']
66
r = requests.get(url_for('process_json_command',
67
command = 'read_register',
69
reg = name, _external = True))
70
if(r.json().get('status') == 'error'):
71
return 'Error: ' + r.json()['description']
73
value[name] = r.json()['value']
120
74
except Exception as e:
122
77
return render_template('register_info.html',
123
78
register=reg_info,
126
81
@app.route("/registers_list")
127
82
def get_registers_list():
128
84
bank = request.args.get('bank')
129
85
if not bank is None:
134
reg_list = pcilib.get_registers_list(bank)
91
r = requests.get(url_for('process_json_command',
92
command = 'get_registers_list',
93
bank = bank, _external = True))
94
if(r.json().get('status') == 'error'):
95
return 'Error: ' + r.json()['description']
96
reg_list = r.json()['registers']
135
97
except Exception as e:
139
102
for reg in reg_list:
141
value[reg['name']] = pcilib.read_register(str(reg['name']),
104
r = requests.get(url_for('process_json_command',
105
command = 'read_register',
106
bank = str(reg['bank']),
107
reg = str(reg['name']), _external = True))
108
if(r.json().get('status') == 'error'):
109
value[reg['name']] = 'Error: ' + r.json()['description']
111
value[reg['name']] = r.json()['value']
143
113
except Exception as e:
144
value[reg['name']] = str(e)
114
value[reg['name']] = 'Error: ' + str(e)
146
117
return render_template('registers_list.html',
147
118
registers = reg_list,
148
119
render_template = render_template,
152
123
@app.route("/property_info")
153
124
def get_property_list():
154
126
branch = request.args.get('branch')
155
127
if not branch is None:
156
128
branch = str(branch)
160
prop_info = pcilib.get_property_list(branch)
133
r = requests.get(url_for('process_json_command',
134
command = 'get_property_list',
135
branch = branch, _external = True))
137
if(r.json().get('status') == 'error'):
138
return 'Error: ' + r.json()['description']
140
prop_info = r.json()['properties']
161
142
except Exception as e:
165
if (len(prop_info) == 1) and not ('childs' in (prop_info[0])['flags']):
146
for prop in prop_info:
167
branch = (prop_info[0])['path']
168
value[branch] = pcilib.get_property(branch)
149
r = requests.get(url_for('process_json_command',
150
command = 'get_property',
151
prop = path, _external = True))
152
if(r.json().get('status') == 'error'):
153
value[path] = 'Error: ' + r.json()['description']
155
value[path] = r.json()['value']
169
157
except Exception as e:
172
for prop in prop_info:
175
value[path] = pcilib.get_property(path)
176
except Exception as e:
179
160
return render_template('property_info.html',
195
176
parser.add_option("-p", "--port", action="store",
196
177
type="int", dest="port", default=5000,
197
178
help="Set server port (5000)")
198
parser.add_option("-d", "--device", action="store",
199
type="string", dest="device", default=str('/dev/fpga0'),
200
help="FPGA device (/dev/fpga0)")
201
parser.add_option("-m", "--model", action="store",
202
type="string", dest="model", default=None,
203
help="Memory model (autodetected)")
180
pcilib_group = OptionGroup(parser, "Api server",
181
"Api server options group")
182
pcilib_group.add_option("-e", "--external", action="store_true",
183
dest="external_api_server",
185
help="Dont start own api server. Use external"
187
pcilib_group.add_option("--api-server-host", action="store",
188
type="string", dest="api_server_host",
190
help="Api server ip adress (0.0.0.0)")
191
pcilib_group.add_option("--api-server-port", action="store",
192
type="int", dest="api_server_port",
194
help="Api server port (9000)")
195
pcilib_group.add_option("-d", "--device", action="store",
196
type="string", dest="device",
197
default=str('/dev/fpga0'),
198
help="FPGA device (/dev/fpga0)")
199
pcilib_group.add_option("-m", "--model", action="store",
200
type="string", dest="model", default=None,
201
help="Memory model (autodetected)")
203
parser.add_option_group(pcilib_group)
204
205
opts = parser.parse_args()[0]
206
207
HOST_NAME = '0.0.0.0'