From 02c160b34b052700c5204a56a92aae499704800b Mon Sep 17 00:00:00 2001 From: Tatiana Leon Date: Tue, 17 May 2022 12:53:07 +0200 Subject: [PATCH] connectcore-demo-example: dashboard: implement set audio volume https://onedigi.atlassian.net/browse/DEL-7742 Signed-off-by: Tatiana Leon --- connectcore-demo-example/demoserver.py | 57 +++++++++++++++++++ .../static/js/dashboard.js | 5 +- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/connectcore-demo-example/demoserver.py b/connectcore-demo-example/demoserver.py index 4f35840..bf7d690 100755 --- a/connectcore-demo-example/demoserver.py +++ b/connectcore-demo-example/demoserver.py @@ -168,6 +168,32 @@ class RequestHandler(http.server.SimpleHTTPRequestHandler): return self.wfile.write("{}".encode(encoding="utf_8")) + elif re.search("/ajax/set_audio_volume", self.path) is not None: + # Set the response headers. + self._set_headers(200) + + # Get the JSON data. + data = self.rfile.read(int(self.headers["Content-Length"])) + value = json.loads(data.decode("utf-8")).get("value", None) + + log.debug("Set audio volume to %s", value) + + if value is None or value > 100 or value < 0: + error = "Invalid volume value" + log.error("Error setting audio volume to '%s%%': %s", value, error) + self.wfile.write(json.dumps({"error": error}).encode(encoding="utf_8")) + return + + vol, error = set_audio_volume(value) + + # Send the JSON value. + if error: + log.error("Error setting audio volume to '%s%%': %s", value, error) + self.wfile.write(json.dumps({"error": error}).encode(encoding="utf_8")) + return + + # Send the JSON value. + self.wfile.write(json.dumps({"value": vol}).encode(encoding="utf_8")) elif re.search("/ajax/fs_list_directory", self.path) is not None: # Set the response headers. self._set_headers(200) @@ -699,6 +725,37 @@ def get_led_by_alias(alias): return led_loc.split(",") +def set_audio_volume(value): + """ + Configures the audio volume. + + Args: + value (Integer): Volume to set in percentage. + + Returns: + Tuple (Integer, String): Current volume value and error string if fails. + """ + res = exec_cmd("amixer set Headphone %d%%" % value) + if res[0] != 0: + return -1, res[1] + + tmp = res[1].split("Front Right:") + if len(tmp) < 1: + return -1, "Unable to get current volume" + + m = re.search("\[(.+?)%\]", tmp[1]) + if not m: + return -1, "Unable to get current volume" + + if len(m.groups()) < 1: + return -1, "Unable to get current volume" + + try: + return int(m.group(1)), "" + except ValueError: + return -1, "Unable to get current volume" + + def read_proc_file(path): """ Gets contents of a proc file. diff --git a/connectcore-demo-example/static/js/dashboard.js b/connectcore-demo-example/static/js/dashboard.js index 31c60d2..7ba13ad 100644 --- a/connectcore-demo-example/static/js/dashboard.js +++ b/connectcore-demo-example/static/js/dashboard.js @@ -910,7 +910,10 @@ function processSetAudioVolumeResponse(response) { audioSlider.setValue(volume); } else { // Save new volume value. - volume = audioSlider.getValue(); + volume = response["value"]; + if (volume == null) + volume = audioSlider.getValue(); + audioSlider.setValue(volume); } // Hide the loading panel of the device. showLoadingPopup(false);