diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-11-28 15:04:41 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2018-11-28 15:04:41 +0100 |
commit | 8b42d3115db2ecec9031c5d1421463b0191e055c (patch) | |
tree | 66c1a9d5864c478ca5026a681963e81db6142e0f /gui/api/__init__.py | |
parent | cfa9461f269e616d6d54658d583b37d215f35a7b (diff) | |
download | dabmod-8b42d3115db2ecec9031c5d1421463b0191e055c.tar.gz dabmod-8b42d3115db2ecec9031c5d1421463b0191e055c.tar.bz2 dabmod-8b42d3115db2ecec9031c5d1421463b0191e055c.zip |
Use multiprocessing for DPD functionality
Diffstat (limited to 'gui/api/__init__.py')
-rwxr-xr-x | gui/api/__init__.py | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/gui/api/__init__.py b/gui/api/__init__.py index 56062c3..c1d73a0 100755 --- a/gui/api/__init__.py +++ b/gui/api/__init__.py @@ -21,7 +21,6 @@ # along with ODR-DabMod. If not, see <http://www.gnu.org/licenses/>. import cherrypy -from cherrypy.process import wspbus, plugins from cherrypy.lib.httputil import parse_query_string import urllib @@ -29,6 +28,7 @@ import os import io import datetime +import threading def send_ok(data=None): if data is not None: @@ -42,26 +42,36 @@ def send_error(reason=""): else: return {'status' : 'error'} -class API(plugins.SimplePlugin): - def __init__(self, mod_rc, bus): - plugins.SimplePlugin.__init__(self, bus) +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 - - def start(self): - self.bus.subscribe("dpd-state", self.dpd_state) - self.bus.subscribe("dpd-calibration-result", self.calibration_result) - - def stop(self): - self.bus.unsubscribe("dpd-state", self.dpd_state) - self.bus.unsubscribe("dpd-calibration-result", self.calibration_result) - - def calibration_result(self, new_result): - self.calibration_result = new_result - - def dpd_state(self, new_state): - self.dpd_state = new_state + self.receive_thread = RXThread(self) + self.receive_thread.start() @cherrypy.expose def index(self): @@ -93,7 +103,7 @@ class API(plugins.SimplePlugin): @cherrypy.tools.json_out() def trigger_capture(self, **kwargs): if cherrypy.request.method == 'POST': - cherrypy.engine.publish('dpd-capture', None) + self.dpd_pipe.send({'cmd': "dpd-capture"}) return send_ok() else: cherrypy.response.status = 400 @@ -109,12 +119,13 @@ class API(plugins.SimplePlugin): @cherrypy.expose @cherrypy.tools.json_out() - def dpd_calibrate(self, **kwargs): + def calibrate(self, **kwargs): if cherrypy.request.method == 'POST': - cherrypy.engine.publish('dpd-calibrate', None) + self.dpd_pipe.send({'cmd': "dpd-calibrate"}) return send_ok() else: - if self.dpd_state is not None: + if self.calibration_result is not None: + print("cal result", repr(self.calibration_result)) return send_ok(self.calibration_result) else: return send_error("DPD calibration result unknown") |