diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-12-04 16:45:58 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-12-04 16:45:58 +0100 |
commit | 5cf52c74e9eb6bf8a82af4509ff3eb5106f928f9 (patch) | |
tree | a7edc1dfd2b2f4469f4dc4d760fdfa83a25fa710 /python/gui/api/__init__.py | |
parent | d5cbe10c0e2298b0e40161607a3da158249bdb82 (diff) | |
download | dabmod-5cf52c74e9eb6bf8a82af4509ff3eb5106f928f9.tar.gz dabmod-5cf52c74e9eb6bf8a82af4509ff3eb5106f928f9.tar.bz2 dabmod-5cf52c74e9eb6bf8a82af4509ff3eb5106f928f9.zip |
Rework GUI and DPDCE
Diffstat (limited to 'python/gui/api/__init__.py')
-rwxr-xr-x | python/gui/api/__init__.py | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/python/gui/api/__init__.py b/python/gui/api/__init__.py deleted file mode 100755 index 77faa10..0000000 --- a/python/gui/api/__init__.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2018 -# Matthias P. Braendli, matthias.braendli@mpb.li -# -# http://www.opendigitalradio.org -# -# This file is part of ODR-DabMod. -# -# ODR-DabMod is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# ODR-DabMod is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ODR-DabMod. If not, see <http://www.gnu.org/licenses/>. - -import cherrypy -from cherrypy.lib.httputil import parse_query_string - -import json -import urllib -import os - -import io -import datetime -import threading - -def send_ok(data=None): - if data is not None: - return {'status' : 'ok', 'data': data} - else: - return {'status': 'ok'} - -def send_error(reason=""): - if reason: - return {'status' : 'error', 'reason': reason} - else: - return {'status' : 'error'} - -class RXThread(threading.Thread): - def __init__(self, api): - super(RXThread, self).__init__() - self.api = api - self.running = False - self.daemon = True - - def cancel(self): - self.running = False - - def run(self): - self.running = True - while self.running: - if self.api.dpd_pipe.poll(1): - rx = self.api.dpd_pipe.recv() - if rx['cmd'] == "quit": - break - elif rx['cmd'] == "dpd-state": - self.api.dpd_state = rx['data'] - elif rx['cmd'] == "dpd-calibration-result": - self.api.calibration_result = rx['data'] - -class API: - def __init__(self, mod_rc, dpd_pipe): - self.mod_rc = mod_rc - self.dpd_pipe = dpd_pipe - self.dpd_state = None - self.calibration_result = None - self.receive_thread = RXThread(self) - self.receive_thread.start() - - @cherrypy.expose - def index(self): - return """This is the api area.""" - - @cherrypy.expose - @cherrypy.tools.json_out() - def rc_parameters(self): - return send_ok(self.mod_rc.get_modules()) - - @cherrypy.expose - @cherrypy.tools.json_out() - def parameter(self, **kwargs): - if cherrypy.request.method == 'POST': - cl = cherrypy.request.headers['Content-Length'] - rawbody = cherrypy.request.body.read(int(cl)) - params = json.loads(rawbody.decode()) - try: - self.mod_rc.set_param_value(params['controllable'], params['param'], params['value']) - except ValueError as e: - cherrypy.response.status = 400 - return send_error(str(e)) - return send_ok() - else: - cherrypy.response.status = 400 - return send_error("POST only") - - @cherrypy.expose - @cherrypy.tools.json_out() - def trigger_capture(self, **kwargs): - if cherrypy.request.method == 'POST': - self.dpd_pipe.send({'cmd': "dpd-capture"}) - return send_ok() - else: - cherrypy.response.status = 400 - return send_error("POST only") - - @cherrypy.expose - @cherrypy.tools.json_out() - def dpd_status(self, **kwargs): - if self.dpd_state is not None: - return send_ok(self.dpd_state) - else: - return send_error("DPD state unknown") - - @cherrypy.expose - @cherrypy.tools.json_out() - def calibrate(self, **kwargs): - if cherrypy.request.method == 'POST': - self.dpd_pipe.send({'cmd': "dpd-calibrate"}) - return send_ok() - else: - if self.calibration_result is not None: - return send_ok(self.calibration_result) - else: - return send_error("DPD calibration result unknown") - |