diff options
Diffstat (limited to 'python/gui')
| -rwxr-xr-x | python/gui/api.py | 56 | ||||
| -rw-r--r-- | python/gui/static/js/odr-predistortion.js | 17 | ||||
| -rw-r--r-- | python/gui/static/js/odr.js | 16 | ||||
| -rw-r--r-- | python/gui/templates/predistortion.html | 10 | 
4 files changed, 80 insertions, 19 deletions
| diff --git a/python/gui/api.py b/python/gui/api.py index ae54e8b..0d24bac 100755 --- a/python/gui/api.py +++ b/python/gui/api.py @@ -46,8 +46,10 @@ def send_error(reason=""):          return {'status' : 'error'}  class API: -    def __init__(self, mod_rc): +    def __init__(self, mod_rc, dpd_port):          self.mod_rc = mod_rc +        self.dpd_port = dpd_port +        self.dpd_rpc = yamlrpc.Socket(bind_port=0)      @cherrypy.expose      def index(self): @@ -71,38 +73,66 @@ class API:              try:                  self.mod_rc.set_param_value(params['controllable'], params['param'], params['value'])              except IOError as e: +                cherrypy.response.status = 503                  return send_error(str(e))              except ValueError as e: -                cherrypy.response.status = 400 +                cherrypy.response.status = 503                  return send_error(str(e))              return send_ok()          else:              cherrypy.response.status = 400              return send_error("POST only") +    def _wrap_dpd(self, method, data=None): +        try: +            reply = self.dpd_rpc.call_rpc_method(self.dpd_port, method, data) +            return send_ok(reply) +        except ValueError as e: +            cherrypy.response.status = 503 +            return send_error("YAML-RPC call error: {}".format(e)) +        except TimeoutError as e: +            cherrypy.response.status = 503 +            return send_error("YAML-RPC timeout: {}".format(e)) +        cherrypy.response.status = 500 +        return send_error("YAML-RPC unknown error") +      @cherrypy.expose      @cherrypy.tools.json_out() -    def trigger_capture(self, **kwargs): +    def dpd_trigger_run(self, **kwargs):          if cherrypy.request.method == 'POST': -            # TODO dpd send capture -            return send_ok() +            return self._wrap_dpd("trigger_run")          else:              cherrypy.response.status = 400              return send_error("POST only")      @cherrypy.expose      @cherrypy.tools.json_out() -    def dpd_status(self, **kwargs): -        # TODO Request DPD state -        return send_error("DPD state unknown") +    def dpd_reset(self, **kwargs): +        if cherrypy.request.method == 'POST': +            return self._wrap_dpd("reset") +        else: +            cherrypy.response.status = 400 +            return send_error("POST only")      @cherrypy.expose      @cherrypy.tools.json_out() -    def calibrate(self, **kwargs): +    def dpd_settings(self, setting: str, value: str, **kwargs):          if cherrypy.request.method == 'POST': -            # TODO dpd send capture -            return send_ok() +            data = {'setting': setting, 'value': value} +            return self._wrap_dpd("set_setting", data) +        else: +            return self._wrap_dpd("get_settings") + +    @cherrypy.expose +    @cherrypy.tools.json_out() +    def dpd_results(self, **kwargs): +        return self._wrap_dpd("get_results") + +    @cherrypy.expose +    @cherrypy.tools.json_out() +    def dpd_calibrate(self, **kwargs): +        if cherrypy.request.method == 'POST': +            return self._wrap_dpd("calibrate")          else: -            # Fetch dpd status -            return send_error("DPD calibration result unknown") +            return self._wrap_dpd("get_calibration_result") diff --git a/python/gui/static/js/odr-predistortion.js b/python/gui/static/js/odr-predistortion.js index 7a93b2b..b2f1d22 100644 --- a/python/gui/static/js/odr-predistortion.js +++ b/python/gui/static/js/odr-predistortion.js @@ -18,6 +18,21 @@  //   You should have received a copy of the GNU General Public License  //   along with ODR-DabMod.  If not, see <http://www.gnu.org/licenses/>. +function resultrefresh() { +    var jqxhr = doApiRequestGET("/api/dpd_results", function(data) { +        $('#dpdresults').text(data['summary']); +    }); + +    jqxhr.always(function() { +        setTimeout(resultrefresh, 2000); +    }); +} + +$(function(){ +    setTimeout(resultrefresh, 2000); +}); + +/*  function calibraterefresh() {      doApiRequestGET("/api/calibrate", function(data) {          var text = "Captured TX signal and feedback." + @@ -92,6 +107,8 @@ $(function(){      });  }); +*/ +  // ToolTip init  $(function(){ diff --git a/python/gui/static/js/odr.js b/python/gui/static/js/odr.js index ecb02c5..0bf7729 100644 --- a/python/gui/static/js/odr.js +++ b/python/gui/static/js/odr.js @@ -20,7 +20,7 @@  function doApiRequestGET(uri, callback) { -    $.ajax({ +    return $.ajax({          type: "GET",          url: uri,          contentType: 'application/json', @@ -32,6 +32,8 @@ function doApiRequestGET(uri, callback) {                  errorWindow.document.write(data.responseText);              }              else { +                console.log(data.responseText); +                  $.gritter.add({ title: 'API',                      text: "AJAX failed: " + data.statusText,                      image: '/fonts/warning.png', @@ -56,7 +58,7 @@ function doApiRequestGET(uri, callback) {  }  function doApiRequestPOST(uri, data, callback) { -    $.ajax({ +    return $.ajax({          type: "POST",          url: uri,          contentType: 'application/json', @@ -65,10 +67,14 @@ function doApiRequestPOST(uri, data, callback) {          error: function(data) {              if (data.status == 500) { -                var errorWindow = window.open("", "_self"); +                var windowObjectReference; +                var winFeatures = "menubar=yes,location=yes,resizable=yes,scrollbars=yes,status=yes"; +                var errorWindow = window.open("", "Error 500", winFeatures);                  errorWindow.document.write(data.responseText);              }              else { +                console.log(data.responseText); +                  $.gritter.add({                      title: 'API',                      text: "AJAX failed: " + data.statusText, @@ -100,10 +106,10 @@ function setRc(controllable, param, value, callback) {          param: param,          value: value      }; -    doApiRequestPOST("/api/parameter/", data, callback); +    return doApiRequestPOST("/api/parameter/", data, callback);  }  function getRc(callback) { -    doApiRequestGET("/api/rc_parameters", callback); +    return doApiRequestGET("/api/rc_parameters", callback);  } diff --git a/python/gui/templates/predistortion.html b/python/gui/templates/predistortion.html index 2ebf7ea..ac68537 100644 --- a/python/gui/templates/predistortion.html +++ b/python/gui/templates/predistortion.html @@ -29,6 +29,15 @@ along with ODR-DabMod.  If not, see <http://www.gnu.org/licenses/>.    <div class="container-fluid">      <div class="panel-group">        <div class="panel panel-default"> +        <div class="panel-heading">Status</div> +        <div class="panel-body"> +          <div>Current DPDCE status: +            <div class="well well-sm" id="dpdresults">N/A<div> +          </div> +        </div> +      </div> +      <!-- +      <div class="panel panel-default">          <div class="panel-heading">Calibration</div>          <div class="panel-body">            <div>Calibration needs to be done once before the PA model @@ -55,7 +64,6 @@ along with ODR-DabMod.  If not, see <http://www.gnu.org/licenses/>.          </div>        </div> -      <!--        <div class="panel panel-default">          <div class="panel-heading">Capture</div>          <div class="panel-body"> | 
