diff --git a/app.db b/app.db index f828ff8..2a0951e 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/com/iflytop/a800/controller/DeviceController.java b/src/main/java/com/iflytop/a800/controller/DeviceController.java index 3970e8b..1ab2d15 100644 --- a/src/main/java/com/iflytop/a800/controller/DeviceController.java +++ b/src/main/java/com/iflytop/a800/controller/DeviceController.java @@ -1,4 +1,5 @@ package com.iflytop.a800.controller; +import com.iflytop.a800.device.Device; import com.iflytop.a800.task.StartResetTask; import com.iflytop.uf.UfActuatorCmdExecutor; import com.iflytop.uf.controller.UfApiControllerBase; @@ -25,19 +26,16 @@ public class DeviceController extends UfApiControllerBase { // String testCardWarehouseTempText = UfActuatorCmdExecutor.execute("TestCardWarehouse", "read_temperature"); // int testCardWarehouseTempInt = Integer.parseInt(testCardWarehouseTempText); Double testCardWarehouseTemp = 0.0; //(double) testCardWarehouseTempInt / 100.0; + +// String incubatorTempStr = UfActuatorCmdExecutor.execute("IncubatorTempCtrl", "read_temperature"); +// int incubatorTempInt = Integer.parseInt(incubatorTempStr); + Double incubatorTemp = 0.0; // (double)incubatorTempInt / 10.0; return this.success(Map.of( - "testCardBoxCase", testCardWarehouseTemp + "testCardBoxCase", testCardWarehouseTemp, + "incubatorTemp", incubatorTemp )); } - @PostMapping("/api/device/trash-box-status-get") - @ResponseBody - public UfApiResponse trashBoxStatusGet() { - Map trashBox = new HashMap<>(); - trashBox.put("status", UfMdbRuntimeVariable.getString("TrashBoxStatus", "EMPTY")); - return this.success(trashBox); - } - @PostMapping("/api/device/id-chip-status-get") @ResponseBody public UfApiResponse idChipStatusGet() { @@ -58,4 +56,11 @@ public class DeviceController extends UfApiControllerBase { } return this.success(); } + + @PostMapping("/api/device/trash-box-clean") + @ResponseBody + public UfApiResponse trashBoxClean() { + Device.getInstance().trashBox.clean(); + return this.success(); + } } diff --git a/src/main/java/com/iflytop/a800/device/Device.java b/src/main/java/com/iflytop/a800/device/Device.java index c043fbc..f2791aa 100644 --- a/src/main/java/com/iflytop/a800/device/Device.java +++ b/src/main/java/com/iflytop/a800/device/Device.java @@ -21,6 +21,8 @@ public class Device { public final LargeBufferTubeManager largeBufferTube = new LargeBufferTubeManager(); // test card manager public final TestCardManager testCard = new TestCardManager(); + // 废料箱 + public final TrashBox trashBox = new TrashBox(); // get instance public static Device getInstance() { diff --git a/src/main/java/com/iflytop/a800/device/TrashBox.java b/src/main/java/com/iflytop/a800/device/TrashBox.java new file mode 100644 index 0000000..d0bcaed --- /dev/null +++ b/src/main/java/com/iflytop/a800/device/TrashBox.java @@ -0,0 +1,54 @@ +package com.iflytop.a800.device; +import com.iflytop.uf.UfActuatorCmdExecutor; +import com.iflytop.uf.model.UfMdbNotification; +import com.iflytop.uf.model.UfMdbRuntimeVariable; +import com.iflytop.uf.util.UfCommon; +public class TrashBox { + // 是否已满 + private Boolean isFull = false; + // 清空锁 + private final Object emptyLock = new Object(); + + // 获取是否已满 + public Boolean getIsFull() { + return this.isFull; + } + + // 清理 + public void clean() { + synchronized ( this.emptyLock ) { + this.emptyLock.notifyAll(); + } + } + + // 等待清空 + public void waitForEmpty() { + do { + UfMdbNotification.action("TrashBoxCleanRequest"); + + synchronized (this.emptyLock) { + try { + this.emptyLock.wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + this.isFull = false; + this.recheckIsFull(); + } while (this.getIsFull()); + } + + // 重新检查是否满 + public void recheckIsFull() { + if ( this.getIsFull() ) { + return ; + } + + UfActuatorCmdExecutor.execute("TrashBox", "extboard_write_outio", "0,1"); + UfCommon.delay(500); + String isFullStr = UfActuatorCmdExecutor.execute("TrashBox","extboard_read_inio", "2"); + this.isFull = "1".equals(isFullStr); + UfMdbRuntimeVariable.setString("IsTrashBoxFull", this.isFull ? "yes" : "no"); + UfActuatorCmdExecutor.execute("TrashBox", "extboard_write_outio", "0,0"); + } +} diff --git a/src/main/java/com/iflytop/a800/task/TubeTestTask.java b/src/main/java/com/iflytop/a800/task/TubeTestTask.java index be72a64..c0a7458 100644 --- a/src/main/java/com/iflytop/a800/task/TubeTestTask.java +++ b/src/main/java/com/iflytop/a800/task/TubeTestTask.java @@ -134,6 +134,13 @@ public class TubeTestTask extends TaskBase { @Override public void run() { + var device = Device.getInstance(); + var trashBox = device.trashBox; + trashBox.recheckIsFull(); + if ( trashBox.getIsFull() ) { + trashBox.waitForEmpty(); + } + this.tubeModel.status = UfMdbDictItem.getValue("TUBE_STATUS", "EXECUTING"); this.tubeModel.save();