소스 검색

添加更新钥匙RFID

Frankensteinly 1 년 전
부모
커밋
d2a0fa1352

+ 7 - 4
app/src/main/AndroidManifest.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools" >
+    xmlns:tools="http://schemas.android.com/tools">
 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
@@ -20,7 +20,11 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/Theme.ISCS"
-        tools:targetApi="31" >
+        tools:targetApi="31">
+        <activity
+            android:name=".activity.WebSocketActivity"
+            android:exported="false" />
+
         <meta-data
             android:name="design_width_in_dp"
             android:value="640" />
@@ -34,10 +38,9 @@
         <activity
             android:name=".activity.BleActivity"
             android:exported="false" />
-
         <activity
             android:name=".activity.MainActivity"
-            android:exported="true" >
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 

+ 3 - 0
app/src/main/java/com/grkj/iscs/activity/MainActivity.kt

@@ -33,7 +33,10 @@ class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
 
         mBinding?.modbus?.setOnClickListener {
             startActivity(Intent(this, ModbusActivity::class.java))
+        }
 
+        mBinding?.websocket?.setOnClickListener {
+            startActivity(Intent(this, WebSocketActivity::class.java))
         }
     }
 }

+ 2 - 1
app/src/main/java/com/grkj/iscs/activity/ModbusActivity.kt

@@ -151,9 +151,10 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
 
         mBinding?.keyRfid?.setOnClickListener {
             // TODO 暂时写死,调试用
-            ModBusController.readKeyRfid(1, true) { res ->
+            ModBusController.readKeyRfid(1, true) { left, res ->
                 val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
                 println("钥匙RFID : $rfid")
+                ModBusController.updateKeyRfid(1, left, rfid)
             }
         }
 

+ 14 - 0
app/src/main/java/com/grkj/iscs/activity/WebSocketActivity.kt

@@ -0,0 +1,14 @@
+package com.grkj.iscs.activity
+
+import com.grkj.iscs.base.BaseBindingActivity
+import com.grkj.iscs.databinding.ActivityWebSocketBinding
+
+class WebSocketActivity : BaseBindingActivity<ActivityWebSocketBinding>() {
+
+    override val viewBinding: ActivityWebSocketBinding
+        get() = ActivityWebSocketBinding.inflate(layoutInflater)
+
+    override fun initView() {
+
+    }
+}

+ 4 - 4
app/src/main/java/com/grkj/iscs/modbus/DeviceBean.kt

@@ -12,7 +12,7 @@ import com.grkj.iscs.util.log.LogUtil
  */
 class DeviceBean(
     var idx: Byte?,
-    private var type: Byte?,
+    var type: Byte?,
     var keyList: MutableList<KeyBean>,
     var lockList: MutableList<LockBean>
 ) {
@@ -32,8 +32,8 @@ class DeviceBean(
                     val isRightCharging = (byteArray[3].toInt() shr 1) and 0x1 == 1
                     LogUtil.i("钥匙刷新状态 : $leftHasKey - $isLeftCharging - $rightHasKey - $isRightCharging")
                     if (keyList.isEmpty()) {
-                        keyList.add(KeyBean(true, leftHasKey, isLeftCharging))
-                        keyList.add(KeyBean(false, rightHasKey, isRightCharging))
+                        keyList.add(KeyBean(true, leftHasKey, isLeftCharging, null))
+                        keyList.add(KeyBean(false, rightHasKey, isRightCharging, null))
                         return null
                     }
 
@@ -107,7 +107,7 @@ class DeviceBean(
     /**
      * 钥匙
      */
-    data class KeyBean(var isLeft: Boolean, var hasKey: Boolean, var isCharging: Boolean)
+    data class KeyBean(var isLeft: Boolean, var hasKey: Boolean, var isCharging: Boolean, var rfid: String?)
     /**
      * 锁具
      *

+ 23 - 2
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -160,11 +160,11 @@ object ModBusController {
         }
     }
 
-    fun readKeyRfid(slaveIdx: Int?, isLeft: Boolean, done: ((res: ByteArray) -> Unit)? = null) {
+    fun readKeyRfid(slaveIdx: Int?, isLeft: Boolean, done: ((isLeft: Boolean, res: ByteArray) -> Unit)? = null) {
         slaveIdx?.let {
             modBusManager?.generateKeyRfidCmd(isLeft)?.let { cmd ->
                 modBusManager?.sendTo(it, cmd) {
-                    done?.invoke(it)
+                    done?.invoke(isLeft, it)
                 }
             }
         }
@@ -180,6 +180,13 @@ object ModBusController {
         }
     }
 
+    /**
+     * 更新钥匙RFID
+     */
+    fun updateKeyRfid(slaveIdx: Int, isLeft: Boolean, rfid: String) {
+        deviceList.find { it.idx?.toInt() == slaveIdx }?.keyList?.find { it.isLeft == isLeft }?.rfid = rfid
+    }
+
     /**
      * 更新锁具RFID
      */
@@ -218,5 +225,19 @@ object ModBusController {
         }
     }
 
+    /**
+     * 根据RFID找钥匙
+     */
+    fun getKeyByRfid(rfid: String): DeviceBean.KeyBean? {
+        return deviceList.find { it.type == 0x00.toByte() }?.keyList?.find { it.rfid == rfid }
+    }
+
+    /**
+     * 根据RFID找锁具
+     */
+    fun getLockByRfid(rfid: String): DeviceBean.LockBean? {
+        return deviceList.find { it.type == 0x01.toByte() }?.lockList?.find { it.rfid == rfid }
+    }
+
     // TODO 根据RFID找锁
 }

+ 10 - 0
app/src/main/res/layout/activity_main.xml

@@ -28,4 +28,14 @@
         android:text="ModBus"
         android:textSize="30sp"
         android:layout_margin="5dp"/>
+
+    <Button
+        android:id="@+id/websocket"
+        android:layout_width="200dp"
+        android:layout_height="80dp"
+        android:minWidth="0dp"
+        android:minHeight="0dp"
+        android:text="WebSocket"
+        android:textSize="30sp"
+        android:layout_margin="5dp"/>
 </LinearLayout>

+ 10 - 0
app/src/main/res/layout/activity_web_socket.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".activity.WebSocketActivity">
+
+</androidx.constraintlayout.widget.ConstraintLayout>