优化
This commit is contained in:
@@ -19,6 +19,7 @@ import com.shuwei.intelligent.shelves.R
|
||||
import com.shuwei.intelligent.shelves.adapter.ShelfAdapter
|
||||
import com.shuwei.intelligent.shelves.base.BaseActivity
|
||||
import com.shuwei.intelligent.shelves.databinding.ActivityHomeBinding
|
||||
import com.shuwei.intelligent.shelves.dialog.CommonDialog
|
||||
import com.shuwei.intelligent.shelves.model.ClearShelfEvent
|
||||
import com.shuwei.intelligent.shelves.model.SendWeightEvent
|
||||
import com.shuwei.intelligent.shelves.model.ShelfBody
|
||||
@@ -32,7 +33,9 @@ import com.shuwei.intelligent.shelves.net.UiState
|
||||
import com.shuwei.intelligent.shelves.net.apiService
|
||||
import com.shuwei.intelligent.shelves.serial.SerialPortManager
|
||||
import com.shuwei.intelligent.shelves.task.TaskManager
|
||||
import com.shuwei.intelligent.shelves.utils.HexUtils
|
||||
import com.shuwei.intelligent.shelves.utils.binaryToHex
|
||||
import com.shuwei.intelligent.shelves.utils.ext.copyTextToClipboard
|
||||
import com.shuwei.intelligent.shelves.utils.ext.gone
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toJsonString
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toast
|
||||
@@ -52,6 +55,7 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "HomeActivity"
|
||||
private const val LOG_PREFIX = "receiveSerialPortData:收到"
|
||||
|
||||
private const val MM_DD_EEEE__HH_MM_SS = "MM月dd日 EEEE HH:mm:ss"
|
||||
|
||||
@@ -72,10 +76,16 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
const val DEVICE_INFO_CMD = "${HEADER}0301000000000000000000000000${FOOTER}"
|
||||
|
||||
//const val START_CMD= "${HEADER}0F01360000${FOOTER}"
|
||||
const val START_TEMP_CTRL_CMD= "${HEADER}0F01360000${FOOTER}"
|
||||
//const val START_CMD= "${HEADER}0F01050020${FOOTER}"
|
||||
//const val ACTIVE_CMD = "${HEADER}000281C5D70A7D428948AD7254FADBB1516738938B4B9CBD73673E9D8E7F2E15062D$FOOTER"
|
||||
const val ACTIVE_CMD = "${HEADER}000281C5D70A7D42894EA17650F5D0BB516838E7863C9ABD766C38958AFF0F3C062D${FOOTER}"
|
||||
const val ACTIVE_CMD =
|
||||
"${HEADER}000281C5D70A7D42894EA17650F5D0BB516838E7863C9ABD766C38958AFF0F3C062D${FOOTER}"
|
||||
|
||||
//华氏温度单位
|
||||
const val F_TEMP_CMD = "${HEADER}0F01390000${FOOTER}"
|
||||
//摄氏温度单位
|
||||
const val C_TEMP_CMD = "${HEADER}0F01390001${FOOTER}"
|
||||
|
||||
//开灯(开 继电器1)
|
||||
const val LIGHT_CLOSE = "${HEADER}020102020102020000000000000000000000000000${FOOTER}"
|
||||
@@ -150,6 +160,12 @@ class HomeActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
//sendCmd(ACTIVE_CMD)
|
||||
|
||||
binding.root.postDelayed({
|
||||
sendCmd(START_TEMP_CTRL_CMD)
|
||||
sendCmd(C_TEMP_CMD)
|
||||
}, 5000)
|
||||
|
||||
TaskManager.startTask()
|
||||
|
||||
// var androidId = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID)
|
||||
@@ -169,36 +185,6 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
viewModel.getShelfList(deviceId = App.deviceId)
|
||||
|
||||
// repeat(100) {
|
||||
// lifecycleScope.launch {
|
||||
// val data = "D6DADEDB01010C6102000000000000010000000500008000000000060000000500000004000080060000000100000010190080701800800000000000000000000000000000000000000000000000005037414645333633333334333731373056322E313069FFFF"
|
||||
// receiveSerialPortData(data)
|
||||
// delay(500)
|
||||
// }
|
||||
// }
|
||||
|
||||
// lifecycleScope.launch {
|
||||
// repeat(100) {
|
||||
// val sb = StringBuilder().apply {
|
||||
//// 610200000000000001000000050000800000000006000000050000000400008006000000010000001019008070180080
|
||||
// repeat(12) {
|
||||
// val num = (0..99).random()
|
||||
// val num2 = (0..99).random()
|
||||
// val num3 = (0..99).random()
|
||||
// val num4 = (0..1).random()
|
||||
// val numStr = if (num <= 9) "0${num}" else "" + num
|
||||
// val numStr2 = if (num2 <= 9) "0${num2}" else "" + num2
|
||||
// val numStr3 = if (num3 <= 9) "0${num3}" else "" + num3
|
||||
// val numStr4 = if (num4 == 1) "80" else "00"
|
||||
// append(numStr).append(numStr2).append(numStr3).append(numStr4)
|
||||
// }
|
||||
// }
|
||||
// val data =
|
||||
// "${HEADER}0302000000000C${sb}5037414645333633333334333731373056322E313069${FOOTER}"
|
||||
// receiveSerialPortData(data)
|
||||
// delay(500)
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private fun getTokenSuccess(data: RespData<*>) {
|
||||
@@ -223,6 +209,9 @@ class HomeActivity : BaseActivity() {
|
||||
return
|
||||
}
|
||||
deviceName = data.data.deviceName
|
||||
|
||||
updateLeftStatus("$deviceName -°C / -%")
|
||||
|
||||
App.canteenId = data.data.placeId
|
||||
val tempList = data.data.containerGoodsList
|
||||
if (tempList.isNullOrEmpty()) {
|
||||
@@ -264,43 +253,73 @@ class HomeActivity : BaseActivity() {
|
||||
private fun receiveSerialPortData(srcData: String) {
|
||||
log("receiveSerialPortData: $srcData")
|
||||
var data = ""
|
||||
if (srcData.startsWith(HEADER) && srcData.contains(FOOTER)) {
|
||||
if (srcData.contains(HEADER) && srcData.contains(FOOTER)) {
|
||||
serialReader.clear()
|
||||
val endIndex = srcData.indexOf(FOOTER) + FOOTER.length
|
||||
serialReader.append(srcData.substring(0, endIndex))
|
||||
val startIndex = srcData.lastIndexOf(HEADER)
|
||||
var endIndex = srcData.indexOf(FOOTER) + FOOTER.length
|
||||
if (endIndex < startIndex) {
|
||||
//类似这种:31314FFFFFD6DADEDB01010C,FOOTER在HEADER前
|
||||
data = srcData.substring(startIndex)
|
||||
if (data.contains(FOOTER)) {
|
||||
endIndex = srcData.indexOf(FOOTER) + FOOTER.length
|
||||
data = data.substring(0, endIndex)
|
||||
handleReceivedData(data)
|
||||
serialReader.clear()
|
||||
return
|
||||
}
|
||||
serialReader.clear()
|
||||
serialReader.append(data).append(",")
|
||||
return
|
||||
}
|
||||
serialReader.append(srcData.substring(startIndex, endIndex))
|
||||
data = serialReader.toString()
|
||||
} else if (srcData.startsWith(HEADER) && srcData.contains(FOOTER).not()) {
|
||||
handleReceivedData(data)
|
||||
serialReader.clear()
|
||||
return
|
||||
}
|
||||
if (srcData.contains(HEADER) && srcData.contains(FOOTER).not()) {
|
||||
serialReader.clear()
|
||||
val startIndex = srcData.lastIndexOf(HEADER)
|
||||
serialReader.append(srcData.substring(startIndex)).append(",")
|
||||
return
|
||||
}
|
||||
if (srcData.contains(HEADER).not() && srcData.contains(FOOTER).not()) {
|
||||
serialReader.append(srcData).append(",")
|
||||
return
|
||||
} else if (srcData.startsWith(HEADER).not() && srcData.contains(FOOTER).not()) {
|
||||
serialReader.append(srcData).append(",")
|
||||
}
|
||||
//if (srcData.contains(HEADER).not() && srcData.contains(FOOTER))
|
||||
val endIndex = srcData.indexOf(FOOTER) + FOOTER.length
|
||||
serialReader.append(srcData.substring(0, endIndex))
|
||||
log("receiveSerialPortData:serialReader: $serialReader")
|
||||
data = serialReader.toString().replace(",", "")
|
||||
handleReceivedData(data)
|
||||
}
|
||||
|
||||
private fun handleReceivedData(data: String) {
|
||||
if (data.isEmpty()) {
|
||||
return
|
||||
} else {
|
||||
val endIndex = srcData.indexOf(FOOTER) + FOOTER.length
|
||||
serialReader.append(srcData.substring(0, endIndex))
|
||||
log("receiveSerialPortData:serialReader: $serialReader")
|
||||
data = serialReader.toString().replace(",", "")
|
||||
}
|
||||
|
||||
val cmd = data.substring(HEADER.length, HEADER.length + 4)
|
||||
val cmdFlag = cmd.substring(0, 2)
|
||||
when (cmd) {
|
||||
"0001" -> {
|
||||
//终端发起激活指令,拿到固定数据体(终端ID-15字节、固件版本-5字节、命令次数-1字节)
|
||||
val reqBody = data.substring(HEADER.length + cmd.length, data.length - FOOTER.length)
|
||||
val reqBody =
|
||||
data.substring(HEADER.length + cmd.length, data.length - FOOTER.length)
|
||||
if (reqBody.length == 44) {
|
||||
terminalId = reqBody.substring(2, 32)
|
||||
terminalVersion = reqBody.substring(32, 42)
|
||||
log("receiveSerialPortData:收到[激活]${cmd.substring(0,2)}指令:${data},终端id:${terminalId},固件版本:${terminalVersion},发送激活命令:$ACTIVE_CMD")
|
||||
log("${LOG_PREFIX}[激活]${cmdFlag}指令:${data},终端id:${terminalId},固件版本:${terminalVersion},发送激活命令:$ACTIVE_CMD")
|
||||
sendCmd(ACTIVE_CMD)
|
||||
}
|
||||
}
|
||||
|
||||
"0101","8101" -> {
|
||||
"0101", "8101" -> {
|
||||
//心跳0102${p1}${p2}${version}
|
||||
//心跳81(终端发起,当终端发送此命令时需要服务端存储串口屏显示信息)
|
||||
val respCmd = "${HEADER}01020106${terminalVersion}$FOOTER"
|
||||
log("receiveSerialPortData:收到[心跳]${cmd.substring(0,2)}指令:${data},发送应答指令:${respCmd}")
|
||||
val respCmd = "${HEADER}01020906${terminalVersion}$FOOTER"
|
||||
log("${LOG_PREFIX}[心跳]${cmdFlag}指令:${data},发送应答指令:${respCmd}")
|
||||
sendCmd(respCmd)
|
||||
heartBeat(data)
|
||||
}
|
||||
@@ -308,27 +327,28 @@ class HomeActivity : BaseActivity() {
|
||||
"0202" -> {
|
||||
//开关锁反馈020200${deviceId}${version}
|
||||
val respCmd = "${HEADER}020200${terminalId}${terminalVersion}$FOOTER"
|
||||
log("receiveSerialPortData:收到[开锁]${cmd.substring(0,2)}指令:${data},发送应答指令:${respCmd}")
|
||||
log("${LOG_PREFIX}[开锁]${cmdFlag}指令:${data},发送应答指令:${respCmd}")
|
||||
sendCmd(respCmd)
|
||||
//lockFeedback(data)
|
||||
}
|
||||
|
||||
"0302" -> {
|
||||
//获取设备状态
|
||||
log("${LOG_PREFIX}[获取设备状态]${cmdFlag}指令:${data}")
|
||||
getDeviceInfo(data)
|
||||
}
|
||||
|
||||
"0501" -> {
|
||||
//卡号上发
|
||||
val respCmd = "${HEADER}050203$FOOTER"
|
||||
log("receiveSerialPortData:收到[卡号上发]${cmd.substring(0,2)}指令:${data},发送应答指令:${respCmd}")
|
||||
log("${LOG_PREFIX}[卡号上发]${cmdFlag}指令:${data},发送应答指令:${respCmd}")
|
||||
sendCmd(respCmd)
|
||||
}
|
||||
|
||||
"0B01" -> {
|
||||
//操作记录上传
|
||||
val respCmd = "${HEADER}0B0203$FOOTER"
|
||||
log("receiveSerialPortData:收到[操作记录上传]${cmd.substring(0,2)}指令:${data},发送应答指令:${respCmd}")
|
||||
log("${LOG_PREFIX}[操作记录上传]${cmdFlag}指令:${data},发送应答指令:${respCmd}")
|
||||
sendCmd(respCmd)
|
||||
}
|
||||
|
||||
@@ -336,36 +356,63 @@ class HomeActivity : BaseActivity() {
|
||||
//对时
|
||||
val timeLong = System.currentTimeMillis() / 1000 + (8 * 3600)
|
||||
val timeStr = "0000000" + String.format("%X", timeLong)
|
||||
val time = timeStr.substring(timeStr.length - 8).chunked(2).reversed().joinToString("")
|
||||
val time =
|
||||
timeStr.substring(timeStr.length - 8).chunked(2).reversed().joinToString("")
|
||||
val respCmd = "${HEADER}0B02${time}$FOOTER"
|
||||
log("receiveSerialPortData:收到[对时]${cmd.substring(0,2)}指令:${data},发送应答指令:${respCmd}")
|
||||
log("${LOG_PREFIX}[对时]${cmdFlag}指令:${data},发送应答指令:${respCmd}")
|
||||
sendCmd(respCmd)
|
||||
}
|
||||
|
||||
"0E01" -> {
|
||||
//终端位置上报
|
||||
val respCmd = "${HEADER}0E0200$FOOTER"
|
||||
log("receiveSerialPortData:收到[终端位置上报]${cmd.substring(0,2)}指令:${data},发送应答指令:${respCmd}")
|
||||
log("${LOG_PREFIX}[终端位置上报]${cmdFlag}指令:${data},发送应答指令:${respCmd}")
|
||||
sendCmd(respCmd)
|
||||
}
|
||||
|
||||
"1001" -> {
|
||||
//温控信息上报
|
||||
val respCmd = "${HEADER}100200$FOOTER"
|
||||
log("receiveSerialPortData:收到[温控信息上报]${cmd.substring(0,2)}指令:${data},发送应答指令:${respCmd}")
|
||||
val logMsg = "${LOG_PREFIX}[温控信息上报]${cmdFlag}指令:${data},发送应答指令:${respCmd}"
|
||||
log(logMsg)
|
||||
sendCmd(respCmd)
|
||||
val tempC = HexUtils.signedHexToDec(data.substring(0, 4)) * 0.1
|
||||
updateLeftStatus("$deviceName ${"%.1f".format(tempC)}°C / -%")
|
||||
|
||||
//D6DADEDB1001015D020000000027001E00020000001E001C00B40000000000010000000100040000001900440003000F00000000000FFFE6000200010002FFD80044000300010005001E0001FFD80056001400280000000000000000008300090000003C00D2000000000000007F003700000000A100000031323136334238423134303233303456322E313100FFFF
|
||||
runOnUiThread {
|
||||
if (tipDialog == null) {
|
||||
CommonDialog(this).apply {
|
||||
dialogTitle = "温馨提示"
|
||||
// dialogContent = logMsg
|
||||
confirmBlock = {
|
||||
logMsg?.copyTextToClipboard(this@HomeActivity)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tipDialog?.isShowing == false) {
|
||||
tipDialog?.dialogContent = logMsg
|
||||
tipDialog?.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"1002" -> {
|
||||
log("receiveSerialPortData,温控信息应答1002数据:${data}")
|
||||
log("${LOG_PREFIX}[温控信息应答]1002数据:${data}")
|
||||
}
|
||||
|
||||
"0F02" -> {
|
||||
log("receiveSerialPortData,温控信息应答0F02数据:${data}")
|
||||
log("${LOG_PREFIX}[温控信息应答]0F02数据:${data}")
|
||||
//D6DADEDB0F020331323136334238423134303233303456322E31313EFFFF00000055010000000000002707000001000000220100000000000091040000120100000100000095140080611400800000000000000000000000000000000000000000010100005031323136334238423134303233303456322E31313EFFFF
|
||||
runOnUiThread { }
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
private var tipDialog: CommonDialog? = null
|
||||
|
||||
private var fixedDataBody = ""
|
||||
|
||||
// private fun lockFeedback(data: String) {
|
||||
@@ -404,14 +451,14 @@ class HomeActivity : BaseActivity() {
|
||||
)
|
||||
val temperatureStartIndex = 158
|
||||
val temperatureEndIndex = temperatureStartIndex + 2
|
||||
val temperatureHex = data.substring(temperatureStartIndex, temperatureEndIndex)
|
||||
val temperature = hexToDec(temperatureHex)
|
||||
val tempC = f2C(temperature.toDouble())
|
||||
showTemperatureC = "%.1f".format(tempC)
|
||||
// val temperatureHex = data.substring(temperatureStartIndex, temperatureEndIndex)
|
||||
// val temperature = hexToDec(temperatureHex)
|
||||
// val tempC = f2C(temperature.toDouble())
|
||||
// showTemperatureC = "%.1f".format(tempC)
|
||||
|
||||
//val percent = 10 * list.count { it.goodsName.isNullOrBlank().not() }
|
||||
|
||||
updateLeftStatus("${deviceName} [$temperatureHex] ${showTemperatureC}°C / -%")
|
||||
// updateLeftStatus("${deviceName} [$temperatureHex] ${showTemperatureC}°C / -%")
|
||||
|
||||
getFixDataBody(data, temperatureEndIndex)
|
||||
}.onFailure {
|
||||
@@ -477,13 +524,17 @@ class HomeActivity : BaseActivity() {
|
||||
e.printStackTrace()
|
||||
return
|
||||
}
|
||||
val temperature = hexToDec(temperatureHex)
|
||||
val tempC = f2C(temperature.toDouble())
|
||||
showTemperatureC = "%.1f".format(tempC)
|
||||
// val temperature = hexToDec(temperatureHex)
|
||||
// val tempC = f2C(temperature.toDouble())
|
||||
// showTemperatureC = "%.1f".format(tempC)
|
||||
|
||||
//val percent = 10 * list.count { it.goodsName.isNullOrBlank().not() }
|
||||
|
||||
updateLeftStatus("${deviceName} ${showTemperatureC}°C / -%")
|
||||
// updateLeftStatus("${deviceName} ${showTemperatureC}°C / -%")
|
||||
|
||||
|
||||
// val tempC = HexUtils.signedHexToDec(temperatureHex) * 0.1
|
||||
updateLeftStatus("$deviceName -°C / -% $temperatureHex")
|
||||
|
||||
getWeightInfo(
|
||||
start = weightStartIndex,
|
||||
@@ -494,13 +545,13 @@ class HomeActivity : BaseActivity() {
|
||||
getFixDataBody(data, temperatureEndIndex)
|
||||
}
|
||||
|
||||
fun getFixDataBody(data:String, temperatureEndIndex: Int) {
|
||||
fun getFixDataBody(data: String, temperatureEndIndex: Int) {
|
||||
try {
|
||||
if (terminalId.isNotBlank() && terminalVersion.isNotBlank()) {
|
||||
return
|
||||
}
|
||||
val fixDataBodyStartIndex = temperatureEndIndex + 1
|
||||
val fixDataBody = data.substring(fixDataBodyStartIndex, data.length- FOOTER.length)
|
||||
val fixDataBody = data.substring(fixDataBodyStartIndex, data.length - FOOTER.length)
|
||||
if (fixDataBody.length == 42) {
|
||||
terminalId = fixDataBody.substring(0, 30)
|
||||
terminalVersion = fixDataBody.substring(30, 40)
|
||||
|
||||
@@ -7,7 +7,10 @@ import com.shuwei.intelligent.shelves.base.BaseActivity
|
||||
import com.shuwei.intelligent.shelves.databinding.ActivityLogListBinding
|
||||
import com.shuwei.intelligent.shelves.dialog.CommonDialog
|
||||
import com.shuwei.intelligent.shelves.utils.ext.copyTextToClipboard
|
||||
import com.shuwei.intelligent.shelves.utils.ext.gone
|
||||
import com.shuwei.intelligent.shelves.utils.ext.startActivity
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toast
|
||||
import com.shuwei.intelligent.shelves.utils.ext.visible
|
||||
|
||||
class LogActivity : BaseActivity() {
|
||||
|
||||
@@ -69,6 +72,22 @@ class LogActivity : BaseActivity() {
|
||||
it.layoutManager = LinearLayoutManager(this)
|
||||
it.adapter = logAdapter
|
||||
}
|
||||
binding.btnFind.run {
|
||||
if (isLogDir) gone() else visible()
|
||||
}
|
||||
binding.btnFind.setOnClickListener {
|
||||
if (isLogDir) {
|
||||
return@setOnClickListener
|
||||
}
|
||||
val list = logList.filter { it.contains("${HomeActivity.HEADER}1001") }
|
||||
if (list.isEmpty()) {
|
||||
toast("未找到到1001指令")
|
||||
return@setOnClickListener
|
||||
}
|
||||
logList.clear()
|
||||
logList.addAll(list)
|
||||
logAdapter.notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user