瀏覽代碼

添加钥匙卡扣操作(未验证),现有设备不支持

Frankensteinly 1 年之前
父節點
當前提交
c5d7ed104d

+ 23 - 3
app/src/main/java/com/grkj/iscs/activity/ModbusActivity.kt

@@ -113,7 +113,7 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
                 ToastUtils.tip("请输入卡扣编号")
                 return@setOnClickListener
             }
-            ModBusController.openLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
+            ModBusController.controlLockBuckle(true, mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
                 LogUtil.i("开锁卡扣 : ${res.toHexStrings()}")
             }
         }
@@ -127,7 +127,7 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
                 ToastUtils.tip("请输入卡扣编号")
                 return@setOnClickListener
             }
-            ModBusController.closeLockBuckle(mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
+            ModBusController.controlLockBuckle(false, mBinding?.slaveIdx?.text.toString().toInt(), mBinding?.lockIdx?.text.toString().toInt()) { res ->
                 LogUtil.i("关锁卡扣 : ${res.toHexStrings()}")
             }
         }
@@ -167,7 +167,27 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
             }
             mBinding?.keyLight?.setOnClickListener {
                 // TODO 暂时写死,调试用
-                ModBusController.controlKeyLight(1, mBinding?.leftLight?.text.toString().toInt(), mBinding?.rightLight?.text.toString().toInt())
+                ModBusController.controlKeyLight(1, mBinding?.leftLight?.text.toString().toInt(), mBinding?.rightLight?.text.toString().toInt()) {
+                    LogUtil.i("钥匙灯操作 : ${it.toHexStrings()}")
+                }
+            }
+        }
+
+        mBinding?.openKeyBuckle?.setOnClickListener {
+            println("____________________________________")
+            // TODO 暂时写死,调试用
+            ModBusController.controlKeyBuckle(isOpen = true, false, 1) {
+                LogUtil.i("开锁钥匙卡扣 : ${it.toHexStrings()}")
+                println("____________________________________")
+            }
+        }
+
+        mBinding?.closeKeyBuckle?.setOnClickListener {
+            println("____________________________________")
+            // TODO 暂时写死,调试用
+            ModBusController.controlKeyBuckle(isOpen = false, false, 1) {
+                LogUtil.i("关锁钥匙卡扣 : ${it.toHexStrings()}")
+                println("____________________________________")
             }
         }
 

+ 34 - 14
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -103,6 +103,11 @@ object ModBusController {
     fun initDevicesStatus() {
         readDeviceType {
             // TODO 待完善
+            // TODO 打开所有无锁的卡扣
+            // TODO 打开所有无钥匙的卡扣
+            // TODO 关闭所有钥匙灯光
+            // TODO 读取所有锁的RFID
+            // TODO 设置所有钥匙的模式
         }
     }
 
@@ -142,19 +147,12 @@ object ModBusController {
         }
     }
 
-    fun openLockBuckle(slaveIdx: Int?, lockIdx: Int, done: ((res: ByteArray) -> Unit)? = null)  {
-        slaveIdx?.let {
-            modBusManager?.generateLockBuckleCmd(true, lockIdx)?.let { cmd ->
-                modBusManager?.sendTo(it, cmd) { res ->
-                    done?.invoke(res)
-                }
-            }
-        }
-    }
-
-    fun closeLockBuckle(slaveIdx: Int?, lockIdx: Int, done: ((res: ByteArray) -> Unit)? = null)  {
+    /**
+     * 开/关锁具卡扣
+     */
+    fun controlLockBuckle(isOpen: Boolean, slaveIdx: Int?, lockIdx: Int, done: ((res: ByteArray) -> Unit)? = null)  {
         slaveIdx?.let {
-            modBusManager?.generateLockBuckleCmd(false, lockIdx)?.let { cmd ->
+            modBusManager?.generateLockBuckleCmd(isOpen, lockIdx)?.let { cmd ->
                 modBusManager?.sendTo(it, cmd) { res ->
                     done?.invoke(res)
                 }
@@ -191,12 +189,34 @@ object ModBusController {
 
     /**
      * 操作钥匙灯
+     *
+     * @param leftAction、rightAction 0:保持当前状态 1:点亮 2:熄灭 默认0
      */
-    fun controlKeyLight(slaveIdx: Int?, leftAction: Int = 0, rightAction: Int = 0) {
+    fun controlKeyLight(slaveIdx: Int?, leftAction: Int = 0, rightAction: Int = 0, done: ((res: ByteArray) -> Unit)? = null) {
         slaveIdx?.let {
             modBusManager?.generateKeyLightCmd(leftAction, rightAction)?.let { cmd ->
-                modBusManager?.sendTo(it, cmd)
+                modBusManager?.sendTo(it, cmd) {
+                    done?.invoke(it)
+                }
             }
         }
     }
+
+    /**
+     * 开/关钥匙卡扣
+     *
+     * @param isOpen true:开操作 false:关操作
+     * @param isLeft true:左卡扣 false:右卡扣
+     */
+    fun controlKeyBuckle(isOpen: Boolean, isLeft: Boolean, slaveIdx: Int?, done: ((res: ByteArray) -> Unit)? = null)  {
+        slaveIdx?.let {
+            modBusManager?.generateKeyBuckleCmd(isOpen, isLeft)?.let { cmd ->
+                modBusManager?.sendTo(it, cmd) { res ->
+                    done?.invoke(res)
+                }
+            }
+        }
+    }
+
+    // TODO 根据RFID找锁
 }

+ 18 - 2
app/src/main/java/com/grkj/iscs/modbus/ModBusManager.kt

@@ -267,11 +267,14 @@ class ModBusManager(
         }
 
         // 第三位是 是否响应,第四位是操作哪个,操作默认全是0或者1,使用第三位响应来进行操作
-        return MBFrame(FRAME_TYPE_WRITE,
+        return MBFrame(
+            FRAME_TYPE_WRITE,
             byteArrayOf(0x00,
                 if (lockIndex in 0..7) 0x11 else 0x12,
                 str.toInt(2).toByte(),
-                if (isOpen) 0x00 else 0xFF.toByte()))
+                if (isOpen) 0x00 else 0xFF.toByte()
+            )
+        )
     }
 
     fun generateKeyRfidCmd(isLeft: Boolean): MBFrame {
@@ -293,6 +296,19 @@ class ModBusManager(
         )
     }
 
+    /**
+     * 操作钥匙底座卡扣,一次只操作一个卡扣
+     *
+     * @param isOpen true:开操作 false:关操作
+     * @param isLeft true:左卡扣 false:右卡扣
+     */
+    fun generateKeyBuckleCmd(isOpen: Boolean, isLeft: Boolean): MBFrame {
+        return MBFrame(
+            FRAME_TYPE_WRITE,
+            byteArrayOf(0x00, 0x11, if (isLeft) 0b10000000.toByte() else 0b00001000, if (isOpen) 0x00 else 0xFF.toByte())
+        )
+    }
+
     /**
      * 生成锁具 RFID 读指令
      *

+ 22 - 1
app/src/main/res/layout/activity_modbus.xml

@@ -128,7 +128,8 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="horizontal">
+        android:orientation="horizontal"
+        android:gravity="center_vertical">
 
         <EditText
             android:id="@+id/leftLight"
@@ -163,5 +164,25 @@
             android:text="Key Light"
             android:textSize="8sp"
             android:layout_margin="5dp"/>
+
+        <Button
+            android:id="@+id/openKeyBuckle"
+            android:layout_width="100dp"
+            android:layout_height="40dp"
+            android:minWidth="0dp"
+            android:minHeight="0dp"
+            android:text="Open Right Key Buckle"
+            android:textSize="8sp"
+            android:layout_margin="5dp"/>
+
+        <Button
+            android:id="@+id/closeKeyBuckle"
+            android:layout_width="100dp"
+            android:layout_height="40dp"
+            android:minWidth="0dp"
+            android:minHeight="0dp"
+            android:text="Close Right Key Buckle"
+            android:textSize="8sp"
+            android:layout_margin="5dp"/>
     </LinearLayout>
 </LinearLayout>