|
|
@@ -32,7 +32,7 @@ function getCameraLogLevel() {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-function downloadCameraLogFile() {
|
|
|
+function downloadCameraLogFile(event) {
|
|
|
const btn = event.currentTarget;
|
|
|
btn.disabled = true;
|
|
|
|
|
|
@@ -83,12 +83,12 @@ function downloadCameraLogFile() {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-function restartCameraService() {
|
|
|
+function restartCameraService(event) {
|
|
|
if (!confirm("确定重启相机服务吗?")) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (cameraTakingPhoto) {
|
|
|
+ if (cameraTakingPhoto || cameraPreviewRunning) {
|
|
|
alert("相机使用中,请稍后再重试!");
|
|
|
return;
|
|
|
}
|
|
|
@@ -141,8 +141,7 @@ function getCameraStatus() {
|
|
|
.forEach(id => setText(id, null, "page5"));
|
|
|
})
|
|
|
.finally(() => {
|
|
|
- ["btn1", "btn2", "btn3", "btn4"]
|
|
|
- .forEach(id => setBtnStatus(id, true, "page5"));
|
|
|
+ updateCameraButtons();
|
|
|
});
|
|
|
|
|
|
getCameraLogLevel();
|
|
|
@@ -194,15 +193,24 @@ function cameraPing() {
|
|
|
|
|
|
let cameraPreviewTimer = null;
|
|
|
let cameraPreviewRunning = false;
|
|
|
+let cameraPreviewFrames = 0;
|
|
|
let cameraPhotoIndex = 0;
|
|
|
let cameraCurrentFile = "";
|
|
|
-let cameraTakingPhoto = false;
|
|
|
+let cameraTakingPhoto = false;
|
|
|
|
|
|
const cameraPhotoFiles = [
|
|
|
"/tmp/camera_preview_0.jpg",
|
|
|
"/tmp/camera_preview_1.jpg"
|
|
|
];
|
|
|
|
|
|
+function updateCameraButtons() {
|
|
|
+ const normalEnable = !cameraPreviewRunning && !cameraTakingPhoto;
|
|
|
+ ["btn1", "btn2", "btn3"]
|
|
|
+ .forEach(id => setBtnStatus(id, normalEnable, "page5"));
|
|
|
+
|
|
|
+ setBtnStatus("btn4", cameraPreviewRunning, "page5");
|
|
|
+}
|
|
|
+
|
|
|
async function cameraTakePhoto(filename) {
|
|
|
const r = await fetch("/api/camera/takePhoto", {
|
|
|
method: "POST",
|
|
|
@@ -226,13 +234,18 @@ function setImageSrc(id, url)
|
|
|
}
|
|
|
|
|
|
async function takeOnePhoto() {
|
|
|
- if (cameraTakingPhoto) {
|
|
|
+ if (cameraPreviewRunning || cameraTakingPhoto) {
|
|
|
return;
|
|
|
}
|
|
|
- cameraTakingPhoto = true;
|
|
|
|
|
|
- ["btn1", "btn2", "btn3", "btn4"]
|
|
|
- .forEach(id => setBtnStatus(id, false, "page5"));
|
|
|
+ try {
|
|
|
+ await setCameraWaitAEDone(true);
|
|
|
+ } catch(e) {
|
|
|
+ console.error("open wait AE failed:", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ cameraTakingPhoto = true;
|
|
|
+ updateCameraButtons();
|
|
|
|
|
|
["cvar1", "cvar2", "cvar3", "cvar4", "cvar5", "cvar6"]
|
|
|
.forEach(id => setText(id, null, "page5"));
|
|
|
@@ -259,19 +272,130 @@ async function takeOnePhoto() {
|
|
|
setText("cvar1", "拍照失败", "page5");
|
|
|
} finally {
|
|
|
cameraTakingPhoto = false;
|
|
|
- ["btn1", "btn2", "btn3", "btn4"]
|
|
|
- .forEach(id => setBtnStatus(id, true, "page5"));
|
|
|
+ updateCameraButtons();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function setCameraWaitAEDone(waitAE) {
|
|
|
+ const r = await fetch("/api/camera/setWaitAEDoneForTakePhoto", {
|
|
|
+ method:"POST",
|
|
|
+ headers:{
|
|
|
+ "Content-Type":"application/json"
|
|
|
+ },
|
|
|
+ body:JSON.stringify({
|
|
|
+ waitAE: waitAE ? "1" : "0"
|
|
|
+ })
|
|
|
+ });
|
|
|
+ if (!r.ok) {
|
|
|
+ throw new Error(await r.text());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function startCameraPreview() {
|
|
|
+ if (cameraPreviewRunning || cameraTakingPhoto) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ await setCameraWaitAEDone(false);
|
|
|
+ } catch(e) {
|
|
|
+ console.error("close wait AE failed:", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ cameraPreviewRunning = true;
|
|
|
+ updateCameraButtons();
|
|
|
+ cameraPreviewFrames = 0;
|
|
|
+
|
|
|
+ ["cvar1", "cvar2", "cvar3", "cvar4", "cvar5", "cvar6"]
|
|
|
+ .forEach(id => setText(id, null, "page5"));
|
|
|
+
|
|
|
+ cameraPreviewLoop();
|
|
|
+}
|
|
|
+
|
|
|
+async function cameraPreviewLoop() {
|
|
|
+ if (!cameraPreviewRunning) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ cameraTakingPhoto = true;
|
|
|
+ updateCameraButtons();
|
|
|
+ setText("cvar1", "拍照中, 请稍后...", "page5");
|
|
|
+ const filename = cameraPhotoFiles[cameraPhotoIndex];
|
|
|
+ cameraPhotoIndex = cameraPhotoIndex ? 0 : 1;
|
|
|
+
|
|
|
+ try {
|
|
|
+ const data = await cameraTakePhoto(filename);
|
|
|
+ if (!data.ok) throw new Error("take photo failed");
|
|
|
+
|
|
|
+ cameraCurrentFile = filename;
|
|
|
+ cameraPreviewFrames++;
|
|
|
+ setImageSrc("camera-image", "/api/camera/getImage?file=" + encodeURIComponent(filename) + "&t=" + Date.now());
|
|
|
+ setText("cvar1", "拍照完成", "page5");
|
|
|
+ setText("cvar2", String(cameraPreviewFrames), "page5");
|
|
|
+ setText("cvar3", data.var1, "page5");
|
|
|
+ setText("cvar4", data.var2, "page5");
|
|
|
+ setText("cvar5", data.var3, "page5");
|
|
|
+ setText("cvar6", data.var4 + "x" + data.var5, "page5");
|
|
|
+ } catch(e) {
|
|
|
+ console.error("cameraPreviewLoop failed:", e);
|
|
|
+ stopCameraPreview();
|
|
|
+ setText("cvar1", "拍照失败", "page5");
|
|
|
+ } finally {
|
|
|
+ cameraTakingPhoto = false;
|
|
|
+ updateCameraButtons();
|
|
|
+ if (cameraPreviewRunning) {
|
|
|
+ cameraPreviewTimer = setTimeout(cameraPreviewLoop, 20);
|
|
|
+ } else {
|
|
|
+ setCameraWaitAEDone(true)
|
|
|
+ .catch(e => {
|
|
|
+ console.error("restore wait AE failed:", e);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function stopCameraPreview() {
|
|
|
+ if(!cameraPreviewRunning) {
|
|
|
+ return;
|
|
|
}
|
|
|
+ cameraPreviewRunning = false;
|
|
|
+ updateCameraButtons();
|
|
|
+ if (cameraPreviewTimer) {
|
|
|
+ clearTimeout(cameraPreviewTimer);
|
|
|
+ cameraPreviewTimer = null;
|
|
|
+ }
|
|
|
+ setText("cvar1", "停止中, 请稍后...", "page5");
|
|
|
+}
|
|
|
+
|
|
|
+function downloadCameraImage() {
|
|
|
+ if (!cameraCurrentFile) {
|
|
|
+ alert("暂无图片");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const a = document.createElement("a");
|
|
|
+ a.href = "/api/camera/getImage?file=" + encodeURIComponent(cameraCurrentFile) + "&download=1";
|
|
|
+ a.download = "camera.jpg";
|
|
|
+
|
|
|
+ document.body.appendChild(a);
|
|
|
+ a.click();
|
|
|
+ a.remove();
|
|
|
}
|
|
|
|
|
|
function initPage5() {
|
|
|
getCameraStatus();
|
|
|
- if (cameraTakingPhoto) {
|
|
|
+ if (cameraCurrentFile) {
|
|
|
+ setImageSrc("camera-image", "/api/camera/getImage?file=" + encodeURIComponent(cameraCurrentFile) + "&t=" + Date.now());
|
|
|
+ }
|
|
|
+ if (cameraTakingPhoto || cameraPreviewRunning) {
|
|
|
setText("cvar1", "拍照中, 请稍后...", "page5");
|
|
|
}
|
|
|
connectLog("yfkj-camera-capture.service", "text1");
|
|
|
}
|
|
|
|
|
|
function exitPage5() {
|
|
|
+ if (cameraPreviewRunning) {
|
|
|
+ stopCameraPreview();
|
|
|
+ }
|
|
|
disconnectLog();
|
|
|
}
|