|  |  |  | @ -1,15 +1,21 @@ | 
		
	
		
			
				|  |  |  |  | package com.yinuo.safetywatcher.watcher.port | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | import android.os.Handler | 
		
	
		
			
				|  |  |  |  | import android.os.Looper | 
		
	
		
			
				|  |  |  |  | import kotlinx.coroutines.DelicateCoroutinesApi | 
		
	
		
			
				|  |  |  |  | import kotlinx.coroutines.Dispatchers | 
		
	
		
			
				|  |  |  |  | import kotlinx.coroutines.GlobalScope | 
		
	
		
			
				|  |  |  |  | import kotlinx.coroutines.Runnable | 
		
	
		
			
				|  |  |  |  | import kotlinx.coroutines.delay | 
		
	
		
			
				|  |  |  |  | import kotlinx.coroutines.launch | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | object GasUtils { | 
		
	
		
			
				|  |  |  |  |     private const val BAUD_RATE = 9600 | 
		
	
		
			
				|  |  |  |  |     private const val FULL_MSG_SIZE = 9 | 
		
	
		
			
				|  |  |  |  |     private const val CHECK_TIME = 10000L | 
		
	
		
			
				|  |  |  |  |     private val mPortFlags = booleanArrayOf(false, false, false, false) | 
		
	
		
			
				|  |  |  |  |     private val mPortRunnable = hashMapOf<Int, FlagRunnable>() | 
		
	
		
			
				|  |  |  |  |     private val mHandler = Handler(Looper.getMainLooper()) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     fun initPort() { | 
		
	
		
			
				|  |  |  |  |         openPorts() | 
		
	
	
		
			
				
					|  |  |  | @ -19,7 +25,7 @@ object GasUtils { | 
		
	
		
			
				|  |  |  |  |     private fun openPorts() { | 
		
	
		
			
				|  |  |  |  |         if (!mPortFlags[0]) { | 
		
	
		
			
				|  |  |  |  |             PlatformMultiPortUtils.openPort("/dev/tyyS0", BAUD_RATE) { | 
		
	
		
			
				|  |  |  |  |                 mPortFlags[0] = true | 
		
	
		
			
				|  |  |  |  |                 setFlag(0) | 
		
	
		
			
				|  |  |  |  |                 if (it.isNotEmpty() && it.size >= FULL_MSG_SIZE) { | 
		
	
		
			
				|  |  |  |  |                     val checkSum = getCheckSum(it) | 
		
	
		
			
				|  |  |  |  |                     // 校验通过 | 
		
	
	
		
			
				
					|  |  |  | @ -42,12 +48,23 @@ object GasUtils { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     private fun setFlag(index: Int) { | 
		
	
		
			
				|  |  |  |  |         var flagRunnable = mPortRunnable[index] | 
		
	
		
			
				|  |  |  |  |         if (flagRunnable == null) { | 
		
	
		
			
				|  |  |  |  |             flagRunnable = FlagRunnable(index) | 
		
	
		
			
				|  |  |  |  |             mPortRunnable[index] = flagRunnable | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         mHandler.removeCallbacks(flagRunnable) | 
		
	
		
			
				|  |  |  |  |         mPortFlags[index] = true | 
		
	
		
			
				|  |  |  |  |         mHandler.postDelayed(flagRunnable, CHECK_TIME) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // 监控串口状态 | 
		
	
		
			
				|  |  |  |  |     @OptIn(DelicateCoroutinesApi::class) | 
		
	
		
			
				|  |  |  |  |     private fun watchPortFlag() { | 
		
	
		
			
				|  |  |  |  |         GlobalScope.launch(Dispatchers.Default) { | 
		
	
		
			
				|  |  |  |  |             while (true) { | 
		
	
		
			
				|  |  |  |  |                 delay(30000) | 
		
	
		
			
				|  |  |  |  |                 delay(CHECK_TIME) | 
		
	
		
			
				|  |  |  |  |                 launch(Dispatchers.Main) { | 
		
	
		
			
				|  |  |  |  |                     openPorts() | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
	
		
			
				
					|  |  |  | @ -65,4 +82,10 @@ object GasUtils { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return (sum.inv() + 1).toByte() | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     class FlagRunnable(private val index: Int) : Runnable { | 
		
	
		
			
				|  |  |  |  |         override fun run() { | 
		
	
		
			
				|  |  |  |  |             mPortFlags[index] = false | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } |