166 lines
5.3 KiB
JavaScript
166 lines
5.3 KiB
JavaScript
/*
|
|
* Copyright (C) 2024, Digi International Inc.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
// Constants.
|
|
const ID_NPU_DEMOS = "npu_demos";
|
|
const ID_NPU_IMAGE = "preview_image";
|
|
const ID_NPU_DEMOS_CONTAINER = "npu_demos_container";
|
|
|
|
const CLASS_4_COLUMNS_XL = "col-xl-3"
|
|
const CLASS_NPU_DEMO_CONTAINER = "npu-container"
|
|
|
|
const TEMPLATE_NPU_DEMO = "" +
|
|
"<div class='d-flex justify-content-center align-items-center npu-box'>" +
|
|
" <div class='npu-item' onclick='runNPUDemo(\"{0}\")'>" +
|
|
" <div class='npu-title'>{1}</div>" +
|
|
" <img src='./static/images/{2}' alt='{3}'>" +
|
|
" </div>" +
|
|
"</div>";
|
|
const TEMPLATE_NO_DEMOS = "<p style='padding-left: 15px;'><i>No demos found</i></p>";
|
|
|
|
const MESSAGE_EXECUTING_NPU_DEMO = "Executing NPU demo...";
|
|
|
|
const HIDE_STATUS_TIMEOUT = 10000; // 10 seconds.
|
|
|
|
// Variables.
|
|
var readingNPUInfo = false;
|
|
var npuInfoRead = false;
|
|
|
|
// Initializes the npu page.
|
|
function initializeNPUPage() {
|
|
// Sanity checks.
|
|
if (!isNPUShowing() || npuInfoRead)
|
|
return;
|
|
// Read NPU demos information.
|
|
readNPUDemos();
|
|
}
|
|
|
|
// Read the NPU demos information.
|
|
function readNPUDemos() {
|
|
// Execute only in the NPU page.
|
|
if (!isNPUShowing() || npuInfoRead)
|
|
return;
|
|
// Flag reading variable.
|
|
readingNPUInfo = true;
|
|
// Hide the info popup.
|
|
showInfoPopup(false);
|
|
// Show the loading popup.
|
|
showLoadingPopup(true, MESSAGE_LOADING_INFORMATION);
|
|
// Send request to read NPU demos information.
|
|
$.post(
|
|
"http://" + getServerAddress() + "/ajax/get_npu_demos",
|
|
function(data) {
|
|
readingNPUInfo = false;
|
|
// Process only in the NPU page.
|
|
if (!isNPUShowing())
|
|
return;
|
|
// Hide the loading panel.
|
|
showLoadingPopup(false);
|
|
// Process the answer.
|
|
processNPUDemosResponse(data);
|
|
}
|
|
).fail(function(response) {
|
|
// Flag reading variable.
|
|
readingNPUInfo = false;
|
|
// Process only in the NPU page.
|
|
if (!isNPUShowing())
|
|
return;
|
|
// Hide the loading panel.
|
|
showLoadingPopup(false);
|
|
// Process error.
|
|
processAjaxErrorResponse(response);
|
|
});
|
|
}
|
|
|
|
// Processes the response of the NPU demos request.
|
|
function processNPUDemosResponse(response) {
|
|
// Check if there was any error in the request.
|
|
if (!checkErrorResponse(response, false)) {
|
|
// List the available demos.
|
|
listNPUDemos(JSON.parse(response[ID_DATA]));
|
|
// Flag device info read.
|
|
npuInfoRead = true;
|
|
}
|
|
}
|
|
|
|
// Lists and draws the given NPU demos.
|
|
function listNPUDemos(npuDemos) {
|
|
var npuDemosContainer = document.getElementById(ID_NPU_DEMOS_CONTAINER);
|
|
|
|
// Process response entries and create HTML elements.
|
|
if (npuDemos.length === 0) {
|
|
var entryDiv = document.createElement("div");
|
|
|
|
entryDiv.innerHTML = TEMPLATE_NO_DEMOS;
|
|
npuDemosContainer.appendChild(entryDiv);
|
|
} else {
|
|
for (var demo of npuDemos) {
|
|
var id = demo[ID_ID];
|
|
var name = demo[ID_NAME];
|
|
var image = demo[ID_NPU_IMAGE];
|
|
var entryDiv = document.createElement("div");
|
|
|
|
entryDiv.classList.add(CLASS_4_COLUMNS_XL);
|
|
entryDiv.classList.add(CLASS_NPU_DEMO_CONTAINER);
|
|
entryDiv.innerHTML = TEMPLATE_NPU_DEMO.format(id, name, image, name);
|
|
npuDemosContainer.appendChild(entryDiv);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Runs the given NPU demo.
|
|
function runNPUDemo(npuDemoID) {
|
|
// Hide the info popup.
|
|
showInfoPopup(false);
|
|
// Show the loading popup.
|
|
showLoadingPopup(true, MESSAGE_EXECUTING_NPU_DEMO);
|
|
// Send request.
|
|
$.post(
|
|
"http://" + getServerAddress() + "/ajax/run_npu_demo",
|
|
JSON.stringify({
|
|
"demo_id": npuDemoID,
|
|
}),
|
|
function(data) {
|
|
// Process only in the NPU page.
|
|
if (!isNPUShowing())
|
|
return;
|
|
// Process answer.
|
|
processRunNPUDemoResponse(data);
|
|
}
|
|
).fail(function(response) {
|
|
// Process only in the NPU page.
|
|
if (!isNPUShowing())
|
|
return;
|
|
// Hide the loading panel.
|
|
showLoadingPopup(false);
|
|
// Process error.
|
|
processAjaxErrorResponse(response);
|
|
});
|
|
}
|
|
|
|
// Processes the response of the run NPU demo request.
|
|
function processRunNPUDemoResponse(response) {
|
|
// Check if there was any error in the request.
|
|
checkErrorResponse(response, false);
|
|
// Start timer to hide loading popup.
|
|
setTimeout(() => {
|
|
// Process only in the NPU page.
|
|
if (!isNPUShowing())
|
|
return;
|
|
// Hide the loading panel.
|
|
showLoadingPopup(false);
|
|
}, HIDE_STATUS_TIMEOUT);
|
|
} |