diff --git a/src/main/java/com/iflytop/sgs/app/service/device/DeviceInitService.java b/src/main/java/com/iflytop/sgs/app/service/device/DeviceInitService.java index 9ebc0ca..2f4a739 100644 --- a/src/main/java/com/iflytop/sgs/app/service/device/DeviceInitService.java +++ b/src/main/java/com/iflytop/sgs/app/service/device/DeviceInitService.java @@ -16,7 +16,8 @@ import com.iflytop.sgs.common.enums.HeatModuleCode; import com.iflytop.sgs.common.enums.cmd.CmdColor; import com.iflytop.sgs.common.service.CanBusService; import com.iflytop.sgs.hardware.exception.HardwareException; -import com.iflytop.sgs.hardware.service.setup.A8kSubModuleRegInitService; +import com.iflytop.sgs.hardware.service.AppEventBusService; +import com.iflytop.sgs.hardware.type.appevent.AppEvent; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -39,13 +40,14 @@ public class DeviceInitService { private final ObjectProvider heatModuleStateProvider; private final ObjectProvider solutionContainerStateProvider; private final DeviceLightSoundService deviceLightSoundService; - private final A8kSubModuleRegInitService a8kSubModuleRegInitService; + private final AppEventBusService eventBus; @PostConstruct public void init() throws InterruptedException { - while (!a8kSubModuleRegInitService.getIsInited()) { - Thread.sleep(100); - } + eventBus.regListener(this::onAppEvent); + } + + private void onAppEvent(AppEvent event) { new Thread(() -> { try { CompletableFuture.runAsync(() -> { diff --git a/src/main/java/com/iflytop/sgs/hardware/service/setup/A8kSubModuleRegInitService.java b/src/main/java/com/iflytop/sgs/hardware/service/setup/A8kSubModuleRegInitService.java deleted file mode 100644 index f0ed16a..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/service/setup/A8kSubModuleRegInitService.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.iflytop.sgs.hardware.service.setup; - -import com.iflytop.sgs.hardware.comm.can.A8kCanBusService; -import com.iflytop.sgs.hardware.config.A8kSubModuleInitRegConfig; -import com.iflytop.sgs.hardware.drivers.ModuleEnableCtrlDriver; -import com.iflytop.sgs.hardware.exception.HardwareException; -import com.iflytop.sgs.hardware.service.AppEventBusService; -import com.iflytop.sgs.hardware.type.MId; -import com.iflytop.sgs.hardware.type.ModuleType; -import com.iflytop.sgs.hardware.type.RegIndex; -import com.iflytop.sgs.hardware.type.appevent.A8kCanBusOnConnectEvent; -import com.iflytop.sgs.hardware.type.appevent.AppEvent; -import com.iflytop.sgs.hardware.type.db.SubModuleRegInitialValue; -import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * 子设备寄存器初始化服务 - */ - -@Component -@Slf4j -@RequiredArgsConstructor -public class A8kSubModuleRegInitService { - private final A8kCanBusService canBus; - private final ModuleEnableCtrlDriver moduleEnableCtrlDriver; - private final AppEventBusService eventBus; - private final A8kSubModuleInitRegConfig a8kSubModuleInitRegConfig; - private final SubModuleRegInitialValueMgrService subModuleRegInitialValueMgrService; - private Boolean isInited = false; - - @PostConstruct - void init() { - eventBus.regListener(this::onAppEvent); - } - - public synchronized boolean getIsInited() { - return isInited; - } - - - private void onAppEvent(AppEvent event) { - if (event instanceof A8kCanBusOnConnectEvent) { - var initThread = new Thread(this::initModuleRegVal); - initThread.setName("initModuleRegVal"); - initThread.start(); - } - } - - private void initModuleRegVal() { - do { -// try { - log.info("forceInitA8kModParams"); - dumpAllSubBoardVersion(); -// initA8kModParams(); - isInited = true; - - log.info("======================================================"); - log.info("= init hardware param success...... ="); - log.info("======================================================"); - break; -// } catch (HardwareException e) { -// log.error("init hardware param fail......, try init it after 5s", e); -// } - } while (false); - } - - private void dumpAllSubBoardVersion() { - log.info("======================================================="); - log.info("= dump all sub board version...... ="); - log.info("="); - - boolean hasDiffVersion = false; - Integer maxVersion = null; - for (MId mid : MId.values()) { - if (mid == MId.NotSet) { - continue; - } - try { - if (!canBus.ping(mid)) { - log.error(String.format("+ %-40s(%d): offline", mid, mid.index)); - continue; - } - - Integer ver = canBus.moduleReadVersion(mid); - String moduleType = canBus.moduleReadType(mid).toString(); - if (maxVersion != null && !maxVersion.equals(ver)) { - hasDiffVersion = true; - } - if (maxVersion == null || ver > maxVersion) { - maxVersion = ver; - } - log.info(String.format("+ %-40s(%d): type:%-20s version:%s", mid, mid.index, moduleType, ver)); - } catch (HardwareException e) { - log.error(String.format("+ %20s(%d): offline", mid, mid.index)); - - } - } - - if (!hasDiffVersion) { - // gStateMgrService.setMcuVersion(String.format("V%04d", maxVersion)); - } else { - //版本不一致,标记为(*),表示需要升级 - // gStateMgrService.setMcuVersion(String.format("V%04d(*)", maxVersion)); - } - } - - - private void initA8kModParams() throws HardwareException { - for (MId mid : MId.values()) { - if (mid == MId.NotSet) - continue; - - log.info("============== {}({}) ===============", mid, mid.index); - - ModuleType moduleType = canBus.moduleReadType(mid); - List regIndexes = a8kSubModuleInitRegConfig.findRegIndexByModuleType(moduleType); - - for (RegIndex regIndex : regIndexes) { - SubModuleRegInitialValue val = subModuleRegInitialValueMgrService.findByIDAndRegIndex(mid, regIndex); - if (val == null) - continue; - - log.info(String.format("= init %s(%d) %-45s: %d", mid, mid.index, regIndex, val.regInitVal)); - canBus.moduleSetReg(mid, regIndex, val.regInitVal); - } - log.info("="); - } - } - - -} diff --git a/src/main/java/com/iflytop/sgs/hardware/service/setup/SubModuleRegInitialValueMgrService.java b/src/main/java/com/iflytop/sgs/hardware/service/setup/SubModuleRegInitialValueMgrService.java deleted file mode 100644 index 77882d5..0000000 --- a/src/main/java/com/iflytop/sgs/hardware/service/setup/SubModuleRegInitialValueMgrService.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.iflytop.sgs.hardware.service.setup; - - -import com.iflytop.sgs.hardware.comm.can.A8kCanBusService; -import com.iflytop.sgs.hardware.config.A8kSubModuleInitRegConfig; -import com.iflytop.sgs.hardware.dao.SubModuleRegInitialValueDao; -import com.iflytop.sgs.hardware.exception.HardwareException; -import com.iflytop.sgs.hardware.type.MId; -import com.iflytop.sgs.hardware.type.ModuleType; -import com.iflytop.sgs.hardware.type.RegIndex; -import com.iflytop.sgs.hardware.type.db.SubModuleRegInitialValue; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - - -@Component -@Slf4j -@RequiredArgsConstructor -public class SubModuleRegInitialValueMgrService { - - private final SubModuleRegInitialValueDao subModuleRegInitialValueDao; - private final A8kCanBusService canBus; - private final A8kSubModuleInitRegConfig a8kSubModuleInitRegConfig; - - - /** - * 从微控制器同步寄存器值到数据库 - * @throws HardwareException e - */ - public void syncFromMirco() throws HardwareException { - List regcache = List.of(); - for (MId mid : MId.values()) { - if (mid == MId.NotSet) - continue; - - ModuleType moduleType = canBus.moduleReadType(mid); - List regIndexes = a8kSubModuleInitRegConfig.findRegIndexByModuleType(moduleType); - - for (RegIndex regIndex : regIndexes) { - log.info("read {}({})-{}", mid, mid.index, regIndex); - Integer val = canBus.moduleGetReg(mid, regIndex); - regcache.add(new SubModuleRegInitialValue(mid, regIndex, val)); - } - } - for (SubModuleRegInitialValue reg : regcache) { - log.info(String.format("storage %s(%d) %-40s: %d", reg.mid, reg.mid.index, reg.regIndex, reg.regInitVal)); - subModuleRegInitialValueDao.update(reg.mid, reg.regIndex, reg.regInitVal); - } - - // - // 删除掉不需要的寄存器 - // - var allConfigs = subModuleRegInitialValueDao.getAll(); - for (SubModuleRegInitialValue reg : allConfigs) { - //TODO:模块类型存储到数据库中,而不是从微控制器读取 - ModuleType moduleType = canBus.moduleReadType(reg.mid); - if (!a8kSubModuleInitRegConfig.isNeeded(moduleType, reg.regIndex)) { - subModuleRegInitialValueDao.delete(reg.id); - } - } - } - - public void export() { - subModuleRegInitialValueDao.export(); - } - - public String getExportPath() { - return subModuleRegInitialValueDao.getExportPATH(); - } - - public void importFromCSV(String filecontent) { - subModuleRegInitialValueDao.importFromCSV(filecontent, true); - } - - public List getAll() { - return subModuleRegInitialValueDao.getAll(); - } - - public SubModuleRegInitialValue findByIDAndRegIndex(MId mid, RegIndex regIndex) { - return subModuleRegInitialValueDao.findByIDAndRegIndex(mid, regIndex); - } - -}