Bläddra i källkod

改成根据数据类型进行解析。

ccc 4 månader sedan
förälder
incheckning
3f0b9523c8

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/activity/setting/SettingViewModel.kt

@@ -312,7 +312,7 @@ class SettingViewModel @Inject constructor(private val mRepo: SettingRepository)
                         )
                     )
                 Log.d(TAG, "调试 getAllParam0: ")
-                delay(500)
+                delay(1000)
             }
         }
     }

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/HomeFragment.kt

@@ -193,7 +193,7 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
         Log.d(TAG, "clickProduct: "+product)
         //点击前校验 有没有开机、有没有选择支付方式等。
         val deviceStatusCheck = mViewModel.deviceStatusCheck()//是否开机
-        if (deviceStatusCheck != "") {
+        if (deviceStatusCheck != "02") {
             showTipsDialog(deviceStatusCheck)
             return
         }

+ 22 - 21
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt

@@ -14,6 +14,7 @@ import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
 import com.hboxs.serialport.plc.DialogClickListener
 import com.hboxs.serialport.plc.message.Message
+import com.hboxs.serialport.plc.util.HexUtils
 import com.hboxs.serialport.sbc.SBCHeartbeat
 import com.hboxs.serialport.sbc.VBoxMessage
 import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
@@ -25,6 +26,7 @@ import com.quyunshuo.androidbaseframemvvm.base.utils.RegisterEventBus
 import com.quyunshuo.androidbaseframemvvm.common.bean.ShoppingCartBean
 import com.quyunshuo.androidbaseframemvvm.common.constant.Heartbeat
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseFragment
+import com.quyunshuo.androidbaseframemvvm.common.util.ByteUtils
 import com.quyunshuo.androidbaseframemvvm.common.util.LongClickUtils
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil
 import com.quyunshuo.module.home.R
@@ -65,7 +67,6 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
     private var isProcessing = false // 标志位,用于确保只执行一次
     private var isMakePoc = false
 
-
     override fun HomeFragmentMakeBinding.initView() {
         //处理传递过来的商品数据,进行制作、数据保存
         val selectPro = arguments?.getString("SELECT_PRO")
@@ -79,10 +80,10 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
         //首先判断是否有做糖数据,如果有则发送指令,如果没有就结束。
         if (selectPro != null) {
             shoppingCartItems = parseShoppingCartData(selectPro).toMutableList()
-//            if (shoppingCartItems.isNotEmpty()) {
-//                mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
-//                shoppingCartItems.removeAt(0)
-//            }
+            if (shoppingCartItems.isNotEmpty()) {
+                mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
+                shoppingCartItems.removeAt(0)
+            }
         }
 
         LongClickUtils.setLongClick(Handler(), ivLogo, 5000, object : View.OnLongClickListener {
@@ -114,7 +115,6 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
         mBinding.tvFashengqi.text = "$value°C"
     }
 
-
     fun getD2Value(s: String) {
         when (s) {
             PlcD2StatusEnum.D2_2.address -> {
@@ -167,23 +167,22 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
         }
     }
 
-
     internal class MyHandler(fragment: Fragment) : Handler(), LifecycleObserver {
         var mWeakReference: WeakReference<Fragment> = WeakReference(fragment)
         var fragment: MakeFragment = mWeakReference.get() as MakeFragment
         override fun handleMessage(msg: android.os.Message) {
-            //as用来强转
             when (msg.what) {
                 1 -> {
                     if (fragment.mBinding!=null) {
                         if (fragment.isMakePoc) {
+                            Log.d("制作测试", "2: ")
                             fragment.plannedSpeed++
                             fragment.mBinding.progressView.setCurrentProgress(fragment.plannedSpeed)
                             val sysTime = System.currentTimeMillis() //获取系统时间
                             val sysTimeStr =
                                 DateFormat.format("yyyy-MM-dd HH:mm:ss", sysTime) //时间显示格式
                             fragment.mBinding.tvTime.text = sysTimeStr //更新时间
-                            fragment.mBinding.tvLutou.text = SBCHeartbeat.headTemp + "°C"
+//                            fragment.mBinding.tvLutou.text = SBCHeartbeat.headTemp + "°C"
                             var percentage: Double =
                                 ((fragment.plannedSpeed / fragment.mBinding.progressView.maxProgress) * 100).toDouble()
                             if (percentage >= 100) {
@@ -199,16 +198,15 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
                             }
                         } else {
                             fragment.plannedSpeed = 1
+                            Log.d("制作测试", "3: ")
                             fragment.mBinding.progressView.setCurrentProgress(fragment.plannedSpeed)
                             fragment.mBinding.tvProgressDescribe.setText("机器预热中,请耐心等待。。。")
                         }
-
                         if (fragment.plannedSpeed >= fragment.mBinding.progressView.maxProgress) {
                             fragment.jobHandler?.cancel()
                         }
                     }
                 }
-
                 else -> {}
             }
         }
@@ -241,16 +239,19 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(messageEvent: VBoxMessage) {
         XLogUtil.d(messageEvent.cmd + ":messageEvent.data:" + messageEvent.data)
-        when (messageEvent.cmd) {
-            VboxCommand.CMD_HEARTBEAT -> {
-                cmdHeartbeat(messageEvent)
-            }
-            VboxCommand.COIN_DATA -> {
+        Log.d(TAG, messageEvent.cmd + "制作页面 :messageEvent.data:" + messageEvent.data)
+        val getSign = messageEvent.data.substring(2, 4)
+        when (getSign) {
+            "01" -> {
                 val coin = messageEvent.data.substring(80, 84)
                 if (coin == "0000") {
                     stopRestCoin()
                 }
-            }
+                val overheatState = HexUtils.hexStr2BinStr(messageEvent.data.substring(4, 6))
+                val split = overheatState.trim().split("")
+                mBinding.tvLutou.text = ((split[1].toInt() * 256) + ByteUtils.hexStr2decimal(messageEvent.data.substring(6, 8))).toString()
+                cmdHeartbeat(messageEvent)
+               }
             else -> {}
         }
     }
@@ -262,11 +263,11 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>() {
         when (deviceState) {
             "02" -> {//就绪待机,可以选购或制作下一杯
                 Log.d(TAG, "startSendMake: " + isProcessing + ":" + shoppingCartItems)
-                if (!isProcessing && shoppingCartItems.isNotEmpty()) {
-                    mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
-                    isProcessing = true // 设置标志位,表示正在处理
+//                if (!isProcessing && shoppingCartItems.isNotEmpty()) {
+//                    mViewModel.startSendMake(shoppingCartItems[0].nameChinese)
+//                    isProcessing = true // 设置标志位,表示正在处理
                     isShowAgainBuyDialog = true
-                }
+//                }
             }
             "04" -> {//开始制作
                 if (isProcessing) {

+ 4 - 0
module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/HomeFragmentVM.kt

@@ -206,6 +206,10 @@ class HomeFragmentVM @Inject constructor(private val mRepo: HomeFragmentRepo) :
             //机器制作中
             return UiUtil.getStringRes(R.string.home_tips_dialog_5)
         }
+        if (D2Value.value == "02") {
+            //机器开机完毕
+            return "02"
+        }
         return ""
     }
 

+ 10 - 17
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt

@@ -381,22 +381,18 @@ class GlobalServiceViewModel @Inject constructor(
 
     fun disposeData(messageEvent: VBoxMessage) {
         XLogUtil.d(messageEvent.cmd + ":messageEvent.data:" + messageEvent.data)
-        when (messageEvent.cmd) {
-            VboxCommand.CMD_INIT -> {
+        val getSign = messageEvent.data.substring(2, 4)
+        when (getSign) {
+            "00" -> {
                 cmdInit(messageEvent)
             }
-
-            VboxCommand.CMD_HEARTBEAT -> {
-                if (messageEvent.data.substring(2, 4) == "01") {
-                    cmdHeartbeat(messageEvent)
-                }
-            }
-
-            VboxCommand.CMD_BACK_DATA -> {
-                cmdBackData(messageEvent)
-                threadGlobalParam.stopBackData()
+            "01" -> {
+                cmdHeartbeat(messageEvent)
             }
-
+//            VboxCommand.CMD_BACK_DATA -> {
+//                cmdBackData(messageEvent)
+//                threadGlobalParam.stopBackData()
+//            }
             else -> {}
         }
     }
@@ -427,10 +423,7 @@ class GlobalServiceViewModel @Inject constructor(
 
         //炉头温度
         SBCHeartbeat.headTemp = ((split[1].toInt() * 256) + ByteUtils.hexStr2decimal(
-            messageEvent.data.substring(
-                6,
-                8
-            )
+            messageEvent.data.substring(6, 8)
         )).toString()
         Log.d(TAG, "steamTemp: " + SBCHeartbeat.headTemp)
         //蒸汽温度

+ 6 - 5
serialport-api/src/main/java/com/hboxs/serialport/plc/thread/ThreadHomeParam.kt

@@ -93,15 +93,16 @@ class ThreadHomeParam : LifecycleObserver {
 
     fun startMake(value: String) {
         stopSendMake()
-        jobM1 = CoroutineScope(Dispatchers.Main).launch {
-            while (isActiveM1) {
+//        jobM1 = CoroutineScope(Dispatchers.Main).launch {
+//            while (isActiveM1) {
                 VboxSerialPortManager.getInstance().sendData(value)
-                delay(1000) // 每隔2秒重复执行
-            }
-        }
+//                delay(1000) // 每隔2秒重复执行
+//            }
+//        }
     }
 
     fun stopSendMake() {
+        isActiveM1=false
         jobM1?.cancel()
     }
 

+ 4 - 1
serialport-api/src/main/java/com/hboxs/serialport/sbc/VboxSerialPortReadThread.java

@@ -132,6 +132,7 @@ public class VboxSerialPortReadThread extends Thread {
         }
         retainRemainingData(endIndex + 1, bufferSize);
     }
+
     private void onPacketReceived(byte[] packet) {
         if (packet == null || packet.length == 0) {
             Log.e("SerialPort", "空数据包");
@@ -143,6 +144,7 @@ public class VboxSerialPortReadThread extends Thread {
         Log.d(TAG,"长度 收到的命令:3 "+ commandFrame.getCmd()+"收到有效数据包: " + hexStr);
 
     }
+
     // 查找起始符位置
     private int findStartIndex(byte[] bufferData) {
         for (int i = 0; i <= bufferData.length - START_FLAG.length; i++) {
@@ -182,11 +184,12 @@ public class VboxSerialPortReadThread extends Thread {
             );
             receiveBuffer.reset();
             receiveBuffer.write(remaining, 0, remaining.length);
-            processBuffer(); // 递归处理剩余数据
+                processBuffer(); // 处理当前缓冲区数据
         } else {
             receiveBuffer.reset();
         }
     }
+
     // 查找结束符位置(从起始符后开始)
     private int findEndIndex(byte[] bufferData, int startIndex) {
         for (int i = startIndex + START_FLAG.length; i <= bufferData.length - END_FLAG.length; i++) {

+ 0 - 1
serialport-api/src/main/java/com/hboxs/serialport/sbc/VboxSerialPortSendQueue.java

@@ -62,7 +62,6 @@ public class VboxSerialPortSendQueue {
      */
     private class SendCommandHandler extends Handler {
         private VboxCommandFrame frame;
-
         SendCommandHandler() {
             super(mSendCommandHandlerThread.getLooper());
             Log.d(TAG, "sendMessage: " + mSendCommandHandlerThread.getLooper());