desc:软件层面添加传感器通道开关

main
xiaowusky 1 year ago
parent 45fdacbb43
commit 841f27e6de

@ -32,7 +32,7 @@ import com.yinuo.safetywatcher.watcher.utils.trySetCommonBg
abstract class BaseActivity : AppCompatActivity() {
private val baseBinding: ActivityBaseBinding by lazy {
val baseBinding: ActivityBaseBinding by lazy {
ActivityBaseBinding.inflate(layoutInflater)
}

@ -14,8 +14,17 @@ object GasPortUtils {
private const val READ_MSG_INTERVAL = 180L
private var mInitFlag = false
private var readGasMsgThread: Thread? = null;
private var toDoCmdList: ArrayList<ByteArray> = ArrayList<ByteArray>()
private val listeners: ArrayList<(ByteArray) -> Unit> = ArrayList<(ByteArray) -> Unit>()
private var toDoCmdList: ArrayList<ByteArray> = ArrayList()
private val listeners: ArrayList<(ByteArray) -> Unit> = ArrayList()
private val switchStatus = booleanArrayOf(true, true, true, true, true)
fun setSwitch(index: Int, status: Boolean) {
switchStatus[index] = status
}
fun isSwitchOpen(index: Int): Boolean {
return switchStatus[index]
}
fun addListener(listener: (ByteArray) -> Unit) {
listeners.add(listener)
@ -61,16 +70,26 @@ object GasPortUtils {
gasTypeDao.deleteAll()
while (true) {
// 延时一段时间后,发送指令读取气体数据
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_1)
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_2)
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_3)
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_4)
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_5)
if (isSwitchOpen(0)) {
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_1)
}
if (isSwitchOpen(1)) {
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_2)
}
if (isSwitchOpen(2)) {
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_3)
}
if (isSwitchOpen(3)) {
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_4)
}
if (isSwitchOpen(4)) {
Thread.sleep(READ_MSG_INTERVAL)
ComMultiPortUtils.sendMsg(PORT_PATH, CMD.SENSOR_5)
}
if (toDoCmdList.isNotEmpty()) {
toDoCmdList.forEach {
Thread.sleep(READ_MSG_INTERVAL)

@ -26,7 +26,7 @@ import kotlin.math.pow
object ParseHelper {
private val mPortRunnable = hashMapOf<Int, FlagRunnable>()
private val mPortRunnable = hashMapOf<Int, FlagRunnable?>()
private val mHandler = Handler(Looper.getMainLooper())
private val tempGasData = mutableListOf<GasReqBean>()
private val devicesApi by lazy {
@ -294,13 +294,22 @@ object ParseHelper {
var flagRunnable = mPortRunnable[index]
if (flagRunnable != null) {
mHandler.removeCallbacks(flagRunnable)
} else {
flagRunnable = FlagRunnable(type, index)
mPortRunnable[index] = flagRunnable
}
flagRunnable = FlagRunnable(type, index)
mPortRunnable[index] = flagRunnable
// 如果一段时间内没有收到消息,认为连接断开
mHandler.postDelayed(flagRunnable, GasPortUtils.CHECK_TIME)
}
fun removeOutLineRunnable(index: Int) {
var flagRunnable = mPortRunnable[index]
if (flagRunnable != null) {
mHandler.removeCallbacks(flagRunnable)
mPortRunnable[index] = null
}
}
/**
* 离线检查
*/

@ -166,19 +166,23 @@ class HomeActivity : NoOptionsActivity() {
*/
private fun changeViewStatus() {
lifecycleScope.launch(Dispatchers.Main) {
//mHasSensorData = true
mBinding.errorView.visibility =
if (!AppData.hasCameraData()) View.VISIBLE else View.GONE
lifecycleScope.launchWhenResumed {
//mHasSensorData = true
mBinding.errorView.visibility =
if (!AppData.hasCameraData()) View.VISIBLE else View.GONE
// val errorRes =
// if (!AppData.hasCameraData() && !AppData.hasSensorData()) R.drawable.ic_nosingal else R.drawable.ic_icon
val errorRes = R.drawable.ic_icon
mBinding.errorView.setImageResource(errorRes)
val errorRes = R.drawable.ic_icon
mBinding.errorView.setImageResource(errorRes)
}
}
}
private fun showTipView() {
lifecycleScope.launch(Dispatchers.Main) {
mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap())
lifecycleScope.launchWhenResumed {
mBinding.tipView.setImageBitmap(TxtOverlay.getOverlayBitmap())
}
}
}
@ -206,6 +210,7 @@ class HomeActivity : NoOptionsActivity() {
private val warnMap = hashMapOf<String, Warning?>()
// 设置传感器
private fun setForSensor() {
TxtOverlay.setTipChangeListener {
@ -238,11 +243,13 @@ class HomeActivity : NoOptionsActivity() {
}
}
launch(Dispatchers.Main) {
if (builder.toString().isNotEmpty()) {
mBinding.tvWarn.text = builder.toString()
mBinding.tvWarn.visibility = View.VISIBLE
} else {
mBinding.tvWarn.visibility = View.GONE
lifecycleScope.launchWhenResumed {
if (builder.toString().isNotEmpty()) {
mBinding.tvWarn.text = builder.toString()
mBinding.tvWarn.visibility = View.VISIBLE
} else {
mBinding.tvWarn.visibility = View.GONE
}
}
}
}

@ -11,6 +11,8 @@ import com.yinuo.safetywatcher.R
import com.yinuo.safetywatcher.databinding.ActivitySensorSettingBinding
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity
import com.yinuo.safetywatcher.watcher.port.GasCache
import com.yinuo.safetywatcher.watcher.port.GasPortUtils
import com.yinuo.safetywatcher.watcher.port.ParseHelper
import com.yinuo.safetywatcher.watcher.port.UNIT_MGM3
import com.yinuo.safetywatcher.watcher.port.UNIT_PPM
import com.yinuo.safetywatcher.watcher.port.cmd.CH4_H2
@ -88,6 +90,30 @@ class SensorSettingActivity : NoOptionsActivity() {
// 设置各种监听
setListener()
val switchOpen = GasPortUtils.isSwitchOpen(sensorIndex)
switchOp(switchOpen)
mBinding.sensorSwitch.isChecked = switchOpen
mBinding.areaSwitch.setOnClickListener {
mBinding.sensorSwitch.performClick()
}
// 开关
mBinding.sensorSwitch.setOnCheckedChangeListener { _, isChecked ->
switchOp(isChecked)
}
}
private fun switchOp(isChecked: Boolean) {
if (isChecked) {
mBinding.tvStatus.text = getString(R.string.sensor_status_on)
mBinding.layoutOp.visibility = View.VISIBLE
GasPortUtils.setSwitch(sensorIndex, true)
} else {
mBinding.tvStatus.text = getString(R.string.sensor_status_off)
mBinding.layoutOp.visibility = View.GONE
GasPortUtils.setSwitch(sensorIndex, false)
ParseHelper.removeOutLineRunnable(sensorIndex)
}
}
private fun setListener() {
@ -103,13 +129,24 @@ class SensorSettingActivity : NoOptionsActivity() {
startActivity(intent)
}
baseBinding.topBar.getBackArea()?.setOnKeyListener { v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
if (event.action == KeyEvent.ACTION_DOWN) {
mBinding.areaSwitch.requestFocus()
return@setOnKeyListener true
}
}
return@setOnKeyListener false
}
/**
* 昵称edittext按键设置
*/
mBinding.etName.setOnKeyListener { _, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
if (event.action == KeyEvent.ACTION_DOWN) {
tryFocusBackArea()
// tryFocusBackArea()
mBinding.areaSwitch.requestFocus()
return@setOnKeyListener true
}
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {

@ -176,4 +176,8 @@ class CommonTopBar : LinearLayout {
fun tryFocusBackArea() {
mBinding?.backArea?.requestFocus()
}
fun getBackArea(): View? {
return mBinding?.backArea
}
}

@ -4,180 +4,213 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingStart="@dimen/_121dp"
android:paddingTop="@dimen/_61dp">
<EditText
android:id="@+id/et_name"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:textSize="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:hint="@string/sensor_name_txt"
android:singleLine="true"
android:paddingStart="@dimen/_30dp"
android:focusable="true"
android:nextFocusDown="@id/et_name"
android:background="@drawable/cloud_sync_btn_bg"/>
android:paddingTop="@dimen/_40dp">
<EditText
android:id="@+id/et_gas_name"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:textSize="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:hint="@string/gas_name_txt"
android:singleLine="true"
android:paddingStart="@dimen/_30dp"
<LinearLayout
android:id="@+id/area_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:nextFocusDown="@id/et_gas_name"
android:background="@drawable/cloud_sync_btn_bg"/>
<TextView
android:id="@+id/et_step"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:textSize="@dimen/_30dp"
android:gravity="center_vertical"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:hint="@string/sensor_step_txt"
android:paddingStart="@dimen/_30dp"
android:background="@drawable/cloud_sync_btn_bg"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_6dp"
android:layout_marginTop="@dimen/_40dp"
android:text="@string/gas_unit"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
android:layout_marginEnd="@dimen/_61dp"
android:paddingEnd="@dimen/_61dp">
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_vol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp"
android:layout_marginStart="@dimen/_20dp"
android:paddingHorizontal="@dimen/_6dp"
android:checked="true"
android:focusable="true"
android:text="@string/unit_vol"
android:textColor="@color/white"
android:textSize="@dimen/_28dp" />
<TextView
android:id="@+id/tv_status"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginVertical="20dp"
android:layout_weight="1"
android:textColor="@color/white"
android:textSize="@dimen/_36dp" />
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_lel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp"
android:layout_marginStart="@dimen/_20dp"
android:paddingHorizontal="@dimen/_6dp"
android:checked="true"
android:focusable="true"
android:text="@string/unit_lel"
android:textColor="@color/white"
android:textSize="@dimen/_28dp" />
<Switch
android:id="@+id/sensor_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
</LinearLayout>
<RadioGroup
android:id="@+id/rg_unit"
<LinearLayout
android:id="@+id/layout_op"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp"
android:layout_marginStart="@dimen/_20dp"
android:orientation="horizontal">
android:orientation="vertical">
<EditText
android:id="@+id/et_name"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:background="@drawable/cloud_sync_btn_bg"
android:focusable="true"
android:hint="@string/sensor_name_txt"
android:nextFocusDown="@id/et_name"
android:paddingStart="@dimen/_30dp"
android:singleLine="true"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="@dimen/_30dp" />
<EditText
android:id="@+id/et_gas_name"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:background="@drawable/cloud_sync_btn_bg"
android:focusable="true"
android:hint="@string/gas_name_txt"
android:nextFocusDown="@id/et_gas_name"
android:paddingStart="@dimen/_30dp"
android:singleLine="true"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="@dimen/_30dp" />
<TextView
android:id="@+id/et_step"
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:background="@drawable/cloud_sync_btn_bg"
android:gravity="center_vertical"
android:hint="@string/sensor_step_txt"
android:paddingStart="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="@dimen/_30dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_6dp"
android:layout_marginTop="@dimen/_40dp"
android:text="@string/gas_unit"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_ppm"
android:id="@+id/rb_vol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/_6dp"
android:layout_marginStart="@dimen/_20dp"
android:layout_marginTop="@dimen/_40dp"
android:checked="true"
android:focusable="true"
android:text="@string/unit_ppm"
android:paddingHorizontal="@dimen/_6dp"
android:text="@string/unit_vol"
android:textColor="@color/white"
android:textSize="@dimen/_28dp" />
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_mgm3"
android:id="@+id/rb_lel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/_6dp"
android:layout_marginStart="@dimen/_20dp"
android:layout_marginTop="@dimen/_40dp"
android:checked="true"
android:focusable="true"
android:text="@string/unit_mg_m3"
android:paddingHorizontal="@dimen/_6dp"
android:text="@string/unit_lel"
android:textColor="@color/white"
android:layout_marginStart="@dimen/_40dp"
android:textSize="@dimen/_28dp" />
</RadioGroup>
<!--<RelativeLayout
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:gravity="center"
android:background="@drawable/cloud_sync_btn_bg">
<EditText
android:id="@+id/et_type"
<RadioGroup
android:id="@+id/rg_unit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:paddingStart="@dimen/_30dp"
android:hint="@string/sensor_type_txt"
android:background="#00000000"/>
<ImageView
android:layout_width="@dimen/_31dp"
android:layout_height="@dimen/_17dp"
android:src="@mipmap/ic_arrow_down"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/_30dp"/>
</RelativeLayout>-->
<TextView
android:id="@+id/tv_warn_setting"
android:layout_width="@dimen/_380dp"
android:layout_height="@dimen/_80dp"
android:layout_marginTop="@dimen/_40dp"
android:textColor="@color/white"
android:gravity="center"
android:textSize="@dimen/_30dp"
android:text="@string/sensor_warn_setting_txt"
android:focusable="true"
android:background="@drawable/warn_setting_btn_bg"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp">
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_20dp"
android:layout_marginTop="@dimen/_40dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_ppm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:paddingHorizontal="@dimen/_6dp"
android:text="@string/unit_ppm"
android:textColor="@color/white"
android:textSize="@dimen/_28dp" />
<androidx.appcompat.widget.AppCompatRadioButton
android:id="@+id/rb_mgm3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_40dp"
android:focusable="true"
android:paddingHorizontal="@dimen/_6dp"
android:text="@string/unit_mg_m3"
android:textColor="@color/white"
android:textSize="@dimen/_28dp" />
</RadioGroup>
<!--<RelativeLayout
android:layout_width="@dimen/_600dp"
android:layout_height="@dimen/_100dp"
android:layout_marginTop="@dimen/_40dp"
android:gravity="center"
android:background="@drawable/cloud_sync_btn_bg">
<EditText
android:id="@+id/et_type"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="@dimen/_30dp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:paddingStart="@dimen/_30dp"
android:hint="@string/sensor_type_txt"
android:background="#00000000"/>
<ImageView
android:layout_width="@dimen/_31dp"
android:layout_height="@dimen/_17dp"
android:src="@mipmap/ic_arrow_down"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/_30dp"/>
</RelativeLayout>-->
<TextView
android:id="@+id/tv_save"
android:id="@+id/tv_warn_setting"
android:layout_width="@dimen/_380dp"
android:layout_height="@dimen/_80dp"
android:textColor="@color/white"
android:gravity="center"
android:text="@string/save"
android:layout_marginTop="@dimen/_40dp"
android:background="@drawable/warn_setting_btn_bg"
android:focusable="true"
android:textSize="@dimen/_30dp"
android:background="@drawable/save_btn_bg"/>
<TextView
android:id="@+id/tv_sensor_init"
android:layout_width="@dimen/_260dp"
android:layout_height="@dimen/_80dp"
android:layout_marginStart="@dimen/_38dp"
android:textColor="@color/white"
android:gravity="center"
android:textSize="@dimen/_30dp"
android:focusable="true"
android:text="@string/sensor_init_txt"
android:background="@drawable/sensor_init_btn_bg"/>
android:text="@string/sensor_warn_setting_txt"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_40dp">
<TextView
android:id="@+id/tv_save"
android:layout_width="@dimen/_380dp"
android:layout_height="@dimen/_80dp"
android:background="@drawable/save_btn_bg"
android:focusable="true"
android:gravity="center"
android:text="@string/save"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
<TextView
android:id="@+id/tv_sensor_init"
android:layout_width="@dimen/_260dp"
android:layout_height="@dimen/_80dp"
android:layout_marginStart="@dimen/_38dp"
android:background="@drawable/sensor_init_btn_bg"
android:focusable="true"
android:gravity="center"
android:text="@string/sensor_init_txt"
android:textColor="@color/white"
android:textSize="@dimen/_30dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

@ -87,4 +87,7 @@
<string name="calibration_success_txt">校准传感器成功</string>
<string name="calibration_fail_txt">校准传感器失败</string>
<string name="calibration_outtime_txt">校准传感器失败, 传感器未响应!</string>
<string name="sensor_status_on">通道开启</string>
<string name="sensor_status_off">通道关闭</string>
</resources>

Loading…
Cancel
Save