Procházet zdrojové kódy

fix(硬件):
- `CanCommand`: 修复`setLatchBits_1to5`方法中控制位逻辑错误,确保开锁(`isOpen=true`)时值为`0b0_0000`,关锁(`isOpen=false`)时值为`0b1_1111`。
- `CanHardwareHelper`: 调整`openOrCloseLocks`中`target`的计算逻辑,`lockIdxList`中锁索引从1开始,计算时需减1以匹配位操作(`1 shl (i-1)`),并修正初始累加值为0。

周文健 před 1 měsícem
rodič
revize
5601bfeacc

+ 1 - 1
data/src/main/java/com/grkj/data/hardware/can/CanCommand.kt

@@ -166,7 +166,7 @@ object CanCommands {
          * 批量写入 5 位控制(低5位有效),适配 5路/柜体同构
          */
         fun setLatchBits_1to5(target: Int, isOpen: Boolean): SdoRequest.Write {
-            val v = if (isOpen) 0b1_1111 else 0b0_0000
+            val v = if (isOpen) 0b0_0000 else 0b1_1111
             return SdoRequest.Write(nodeId, Command.CONTROL_REG, 0x00, shortLE(v, target), 2, timeoutMs = CustomCanConfig.instance.readTimeoutMs.toLong())
         }
 

+ 2 - 2
data/src/main/java/com/grkj/data/hardware/can/CanHardwareHelper.kt

@@ -166,8 +166,8 @@ class CanHardwareHelper : IHardwareHelper {
         done: ((ByteArray) -> Unit)?
     ) {
         slaveAddress?.let {
-            val target = lockIdxList.fold(1) { acc, i ->
-                acc or (1 shl i)
+            val target = lockIdxList.fold(0) { acc, i ->
+                acc or (1 shl (i-1))
             }
             val req = CanCommands.forDevice(slaveAddress).setLatchBits_1to5(target, isOpen)
             CanHelper.writeTo(req) {