Commit 3b42f5dc authored by tongzifang's avatar tongzifang

增加sunmi 称重

parent 2e6cd515
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".BtListActivity" /> <activity android:name=".BtListActivity" />
<activity android:name=".MainActivityPtinter"></activity>
<activity android:name=".UsbActivity" /> <activity android:name=".UsbActivity" />
<activity android:name=".ZqToolActivity" /> <activity android:name=".ZqToolActivity" />
</application> </application>
......
...@@ -2,12 +2,11 @@ package com.qimai.android.widget ...@@ -2,12 +2,11 @@ package com.qimai.android.widget
import android.app.Application import android.app.Application
import com.qmai.rebootoncrash.config.CaocConfig import com.qmai.rebootoncrash.config.CaocConfig
import zs.qimai.com.printer2.utils.PrintManagerUtils
class App : Application() { class App : Application() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
PrintManagerUtils.getInstance().init(this) // PrintManagerUtils.getInstance().init(this)
CaocConfig.Builder.create() CaocConfig.Builder.create()
.errorDrawable(R.mipmap.ic_launcher) .errorDrawable(R.mipmap.ic_launcher)
.restartActivity(TopBarActivity::class.java) .restartActivity(TopBarActivity::class.java)
......
...@@ -16,11 +16,6 @@ import androidx.recyclerview.widget.LinearLayoutManager ...@@ -16,11 +16,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.qimai.android.widget.R import com.qimai.android.widget.R
import kotlinx.android.synthetic.main.activity_bt_list.* import kotlinx.android.synthetic.main.activity_bt_list.*
import zs.qimai.com.printer2.utils.PrintManagerUtils
import zs.qimai.com.printer2.callback.BlueToothSearchCallBack
import zs.qimai.com.printer2.callback.OnBtConnectCallBack
import zs.qimai.com.printer2.manager.BlueDeviceManager
import zs.qimai.com.printer2.manager.DeviceManager
import java.util.ArrayList import java.util.ArrayList
import java.util.HashSet import java.util.HashSet
...@@ -29,37 +24,37 @@ class BtListActivity : AppCompatActivity(), View.OnClickListener { ...@@ -29,37 +24,37 @@ class BtListActivity : AppCompatActivity(), View.OnClickListener {
@RequiresApi(Build.VERSION_CODES.KITKAT) @RequiresApi(Build.VERSION_CODES.KITKAT)
override fun onClick(p0: View?) { override fun onClick(p0: View?) {
Log.d(TAG, "onClick: ${datas[p0!!.tag as Int].name}") Log.d(TAG, "onClick: ${datas[p0!!.tag as Int].name}")
PrintManagerUtils.getInstance().btConnect(datas[p0!!.tag as Int].address, object : // PrintManagerUtils.getInstance().btConnect(datas[p0!!.tag as Int].address, object :
OnBtConnectCallBack { // OnBtConnectCallBack {
override fun onConnectSuccess(deviceManager: DeviceManager?) { // override fun onConnectSuccess(deviceManager: DeviceManager?) {
(deviceManager as?BlueDeviceManager)?.let { // (deviceManager as?BlueDeviceManager)?.let {
Toast.makeText( // Toast.makeText(
this@BtListActivity, // this@BtListActivity,
"连接成功 name = ${it.mBlueToothDevice?.name} 类型是 ${if (deviceManager.mPrintMode==1)"小票" else "标签"}", // "连接成功 name = ${it.mBlueToothDevice?.name} 类型是 ${if (deviceManager.mPrintMode==1)"小票" else "标签"}",
Toast.LENGTH_LONG // Toast.LENGTH_LONG
).show() // ).show()
//finish() // //finish()
} // }
//
Log.d(TAG, "onConnectSuccess: ") // Log.d(TAG, "onConnectSuccess: ")
} // }
//
override fun onConnectError(errCode: Int, msg: String?) { // override fun onConnectError(errCode: Int, msg: String?) {
Toast.makeText( // Toast.makeText(
this@BtListActivity, // this@BtListActivity,
"连接失败 code= $errCode errmsg= $msg", // "连接失败 code= $errCode errmsg= $msg",
Toast.LENGTH_LONG // Toast.LENGTH_LONG
).show() // ).show()
//
Log.d(TAG, "onConnectError: errcode= $errCode errmsg= $msg") // Log.d(TAG, "onConnectError: errcode= $errCode errmsg= $msg")
} // }
//
override fun onConnectStart() { // override fun onConnectStart() {
Log.d(TAG, "onConnectStart: ") // Log.d(TAG, "onConnectStart: ")
} // }
//
//
}) // })
} }
...@@ -71,50 +66,50 @@ class BtListActivity : AppCompatActivity(), View.OnClickListener { ...@@ -71,50 +66,50 @@ class BtListActivity : AppCompatActivity(), View.OnClickListener {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_bt_list) setContentView(R.layout.activity_bt_list)
Log.d(TAG, "onCreate: model= ${Build.MODEL} brand = ${Build.BRAND} ") Log.d(TAG, "onCreate: model= ${Build.MODEL} brand = ${Build.BRAND} ")
PrintManagerUtils.getInstance().getSearchBlueToothList(this,object : BlueToothSearchCallBack { // PrintManagerUtils.getInstance().getSearchBlueToothList(this,object : BlueToothSearchCallBack {
override fun onRefuseGrantPermission() { // override fun onRefuseGrantPermission() {
//
} // }
//
override fun onSearchStart() { // override fun onSearchStart() {
//
} // }
//
override fun searchFailed(code: Int, msg: String?) { // override fun searchFailed(code: Int, msg: String?) {
//
} // }
//
override fun onSearchFinish() { // override fun onSearchFinish() {
} // }
//
override fun onRefuseOpenBtEnable() { // override fun onRefuseOpenBtEnable() {
Log.d(TAG, "onRefuseOpenBtEnable: ") // Log.d(TAG, "onRefuseOpenBtEnable: ")
} // }
//
override fun onSuccessOpenBtEnable() { // override fun onSuccessOpenBtEnable() {
//
Log.d(TAG, "onSuccessOpenBtEnable: ") // Log.d(TAG, "onSuccessOpenBtEnable: ")
} // }
//
override fun onBlueToothFound(bluetoothDevice: BluetoothDevice?) { // override fun onBlueToothFound(bluetoothDevice: BluetoothDevice?) {
//Log.d(TAG, "onBlueToothFound: ") // //Log.d(TAG, "onBlueToothFound: ")
bluetoothDevice?.let { // bluetoothDevice?.let {
//
var status = setDatas.add(it) // var status = setDatas.add(it)
if (status) { // if (status) {
datas.add(it) // datas.add(it)
} // }
} // }
if (adapter == null) { // if (adapter == null) {
adapter = Adapter() // adapter = Adapter()
rv_list.layoutManager = LinearLayoutManager(this@BtListActivity) // rv_list.layoutManager = LinearLayoutManager(this@BtListActivity)
rv_list.adapter = adapter // rv_list.adapter = adapter
} else { // } else {
adapter?.notifyDataSetChanged() // adapter?.notifyDataSetChanged()
} // }
//
} // }
}) // })
} }
inner class Adapter : RecyclerView.Adapter<ViewHolder>() { inner class Adapter : RecyclerView.Adapter<ViewHolder>() {
......
...@@ -35,12 +35,6 @@ class LogActivity : AppCompatActivity() { ...@@ -35,12 +35,6 @@ class LogActivity : AppCompatActivity() {
} }
} }
} }
//测试称重reply
lifecycleScope.launch {
ZqScaleKit.instance.connectState.collect {
Log.d("LogActivity", it.toString())
}
}
} }
......
...@@ -56,7 +56,7 @@ class MainActivity : AppCompatActivity() { ...@@ -56,7 +56,7 @@ class MainActivity : AppCompatActivity() {
startActivity(Intent(MainActivity@ this, GridDividerActivity::class.java)) startActivity(Intent(MainActivity@ this, GridDividerActivity::class.java))
} }
findViewById<Button>(R.id.btn_printer).setOnClickListener { findViewById<Button>(R.id.btn_printer).setOnClickListener {
startActivity(Intent(this, MainActivityPtinter::class.java)) // startActivity(Intent(this, MainActivityPtinter::class.java))
} }
findViewById<Button>(R.id.btn_log).setOnClickListener { findViewById<Button>(R.id.btn_log).setOnClickListener {
startActivity(Intent(this, LogActivity::class.java)) startActivity(Intent(this, LogActivity::class.java))
......
package com.qimai.android.widget;
import zs.qimai.com.printer2.canvas.PrintTemplate
class PtOrderPrintTemplate:PrintTemplate<Any> {
override fun getPrintData(data: Any): ByteArray? {
return null
}
}
\ No newline at end of file
package com.qimai.android.widget; package com.qimai.android.widget;
import android.hardware.usb.UsbDevice import android.hardware.usb.UsbDevice
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.activity_usb.* import kotlinx.android.synthetic.main.activity_usb.*
import zs.qimai.com.printer2.callback.UsbPrintConnCallBack
import zs.qimai.com.printer2.utils.PrintManagerUtils
import zs.qimai.com.printer2.callback.UsbSearchCallBack
import zs.qimai.com.printer2.callback.UsbSearchCallBack2
import zs.qimai.com.printer2.manager.UsbDeviceManager
class UsbActivity : AppCompatActivity(), View.OnClickListener { class UsbActivity : AppCompatActivity(), View.OnClickListener {
private val TAG = "UsbActivity" private val TAG = "UsbActivity"
override fun onClick(v: View?) { override fun onClick(v: View?) {
(v!!.tag as? String)?.let { (v!!.tag as? String)?.let {
PrintManagerUtils.getInstance().usbConnect(it, datas[it]!!,object: UsbPrintConnCallBack{ // PrintManagerUtils.getInstance().usbConnect(it, datas[it]!!,object: UsbPrintConnCallBack{
override fun onConnStart() { // override fun onConnStart() {
//
} // }
//
override fun onConnSucess(usbDeviceManager: UsbDeviceManager) { // override fun onConnSucess(usbDeviceManager: UsbDeviceManager) {
Log.d(TAG, "onConnSucess: ") // Log.d(TAG, "onConnSucess: ")
finish() // finish()
} // }
//
override fun onConnFailed(code: Int, error: String) { // override fun onConnFailed(code: Int, error: String) {
Log.d(TAG, "onConnFailed:code= $code msg= $error") // Log.d(TAG, "onConnFailed:code= $code msg= $error")
//
} // }
//
}) // })
} }
//datas[v!!.tag as String]?.let { } //datas[v!!.tag as String]?.let { }
} }
...@@ -48,50 +42,50 @@ class UsbActivity : AppCompatActivity(), View.OnClickListener { ...@@ -48,50 +42,50 @@ class UsbActivity : AppCompatActivity(), View.OnClickListener {
setContentView(R.layout.activity_usb) setContentView(R.layout.activity_usb)
rv_list.layoutManager = LinearLayoutManager(this@UsbActivity) rv_list.layoutManager = LinearLayoutManager(this@UsbActivity)
rv_list.adapter = adapter rv_list.adapter = adapter
PrintManagerUtils.getInstance().getSearchUsbList(object : UsbSearchCallBack2 { // PrintManagerUtils.getInstance().getSearchUsbList(object : UsbSearchCallBack2 {
override fun onSearchFoundAll(devices: HashMap<String, UsbDevice>?) { // override fun onSearchFoundAll(devices: HashMap<String, UsbDevice>?) {
Log.d(TAG, "onSearchFoundAll: ") // Log.d(TAG, "onSearchFoundAll: ")
} // }
//
override fun onSearchStart() { // override fun onSearchStart() {
Log.d(TAG, "onSearchStart: ") // Log.d(TAG, "onSearchStart: ")
} // }
//
override fun onSearchFound(address: String, usbDevice: UsbDevice) { // override fun onSearchFound(address: String, usbDevice: UsbDevice) {
datas[address] = usbDevice // datas[address] = usbDevice
adapter.notifyDataSetChanged() // adapter.notifyDataSetChanged()
Log.d(TAG, "onSearchFound: ") // Log.d(TAG, "onSearchFound: ")
} // }
//
override fun onSearchError(errCode: Int, errMsg: String?) { // override fun onSearchError(errCode: Int, errMsg: String?) {
Log.d(TAG, "onSearchError: ") // Log.d(TAG, "onSearchError: ")
} // }
//
override fun onSearchFinish() { // override fun onSearchFinish() {
Log.d(TAG, "onSearchFinish: ") // Log.d(TAG, "onSearchFinish: ")
} // }
}) // })
PrintManagerUtils.getInstance().getSearchUsbList(object : UsbSearchCallBack { // PrintManagerUtils.getInstance().getSearchUsbList(object : UsbSearchCallBack {
//
override fun onSearchStart() { // override fun onSearchStart() {
Log.d(TAG, "onSearchStart1: ") // Log.d(TAG, "onSearchStart1: ")
} // }
//
override fun onSearchFound(address: String, usbDevice: UsbDevice) { // override fun onSearchFound(address: String, usbDevice: UsbDevice) {
datas[address] = usbDevice // datas[address] = usbDevice
adapter.notifyDataSetChanged() // adapter.notifyDataSetChanged()
Log.d(TAG, "onSearchFound1: ") // Log.d(TAG, "onSearchFound1: ")
} // }
//
override fun onSearchError(errCode: Int, errMsg: String?) { // override fun onSearchError(errCode: Int, errMsg: String?) {
Log.d(TAG, "onSearchError1: ") // Log.d(TAG, "onSearchError1: ")
} // }
//
override fun onSearchFinish() { // override fun onSearchFinish() {
Log.d(TAG, "onSearchFinish1: ") // Log.d(TAG, "onSearchFinish1: ")
} // }
}) // })
} }
inner class Adapter : RecyclerView.Adapter<ViewHolder>() { inner class Adapter : RecyclerView.Adapter<ViewHolder>() {
......
...@@ -9,9 +9,9 @@ import android.view.View ...@@ -9,9 +9,9 @@ import android.view.View
import android.widget.* import android.widget.*
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.qmai.zqtoolkit.ZqScaleKit import com.blankj.utilcode.util.DeviceUtils
import com.qmai.zqtoolkit.ScaleHub
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -41,8 +41,8 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -41,8 +41,8 @@ class ZqToolActivity : AppCompatActivity() {
private var m_bConnected = false private var m_bConnected = false
private var m_bThreadAutoReadExit = true private var m_bThreadAutoReadExit = true
// private val ZqScaleKit.instance by lazy { // private val ScaleHub.instance by lazy {
// ViewModelProvider(this).get(ZqScaleKit::class.java) // ViewModelProvider(this).get(ScaleHub::class.java)
// } // }
...@@ -78,6 +78,7 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -78,6 +78,7 @@ class ZqToolActivity : AppCompatActivity() {
// //
sp = getSharedPreferences("com.example.zqebsdksample_preferences", MODE_PRIVATE) sp = getSharedPreferences("com.example.zqebsdksample_preferences", MODE_PRIVATE)
// //
Log.v("ScaleHub", DeviceUtils.getManufacturer())
val ListPort: MutableList<String> = ArrayList() val ListPort: MutableList<String> = ArrayList()
ListPort.add("ttyS0") ListPort.add("ttyS0")
ListPort.add("ttyS1") ListPort.add("ttyS1")
...@@ -132,7 +133,8 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -132,7 +133,8 @@ class ZqToolActivity : AppCompatActivity() {
lifecycleScope.launch { lifecycleScope.launch {
ZqScaleKit.instance.connectState.collect { ScaleHub.connectState.collect {
Log.v("ZqToolActivity",it.toString())
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
m_bConnected = it.isConnect m_bConnected = it.isConnect
if (m_bConnected) { if (m_bConnected) {
...@@ -143,9 +145,10 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -143,9 +145,10 @@ class ZqToolActivity : AppCompatActivity() {
} }
} }
lifecycleScope.launch { lifecycleScope.launch {
ZqScaleKit.instance.livingWeight.collect { ScaleHub.livingWeight.collect {
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
Log.d(TAG, it.toString()) Log.d(TAG, it.toString())
tvTare?.text=it.tare
if (it.isStable) { if (it.isStable) {
tvWeight?.text = it.weight tvWeight?.text = it.weight
tvState?.text = "稳定" tvState?.text = "稳定"
...@@ -163,11 +166,11 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -163,11 +166,11 @@ class ZqToolActivity : AppCompatActivity() {
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
ZqScaleKit.instance.stopReadData() ScaleHub.stopReadData()
m_bThreadAutoReadExit = true m_bThreadAutoReadExit = true
if (m_bConnected) { if (m_bConnected) {
m_bConnected = false m_bConnected = false
ZqScaleKit.instance.disconnect() ScaleHub.disconnect()
butConnect!!.text = "连接" butConnect!!.text = "连接"
} }
} }
...@@ -178,7 +181,7 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -178,7 +181,7 @@ class ZqToolActivity : AppCompatActivity() {
when (v.id) { when (v.id) {
R.id.ButConnect -> { R.id.ButConnect -> {
if (!m_bConnected) { if (!m_bConnected) {
ZqScaleKit.instance.connect() ScaleHub.connect(this)
// Thread { // Thread {
// if (zqeb.EB_Connect( // if (zqeb.EB_Connect(
// String.format( // String.format(
...@@ -195,24 +198,24 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -195,24 +198,24 @@ class ZqToolActivity : AppCompatActivity() {
// }.start() // }.start()
} else { } else {
m_bThreadAutoReadExit = true m_bThreadAutoReadExit = true
ZqScaleKit.instance.disconnect() ScaleHub.disconnect()
m_bConnected = false m_bConnected = false
butConnect!!.text = "连接" butConnect!!.text = "连接"
} }
} }
R.id.ButSetZero -> { R.id.ButSetZero -> {
if (m_bConnected) { if (m_bConnected) {
ZqScaleKit.instance.setZero() ScaleHub.setZero()
} }
} }
R.id.ButNetweight -> { R.id.ButNetweight -> {
if (m_bConnected) { if (m_bConnected) {
ZqScaleKit.instance.setNetWeight() ScaleHub.setNetWeight()
} }
} }
R.id.ButClearTare -> { R.id.ButClearTare -> {
if (m_bConnected) { if (m_bConnected) {
ZqScaleKit.instance.clearTare() ScaleHub.clearTare()
} }
} }
R.id.ButSetTare -> { R.id.ButSetTare -> {
...@@ -222,12 +225,12 @@ class ZqToolActivity : AppCompatActivity() { ...@@ -222,12 +225,12 @@ class ZqToolActivity : AppCompatActivity() {
} }
R.id.ButAutoRead -> { R.id.ButAutoRead -> {
if (m_bConnected) { if (m_bConnected) {
ZqScaleKit.instance.readData() ScaleHub.readData()
} }
} }
R.id.ButAutoStopRead -> { R.id.ButAutoStopRead -> {
// if (m_bConnected) { // if (m_bConnected) {
ZqScaleKit.instance.stopReadData() ScaleHub.stopReadData()
//} //}
// val strText = butAutoRead!!.text.toString() // val strText = butAutoRead!!.text.toString()
// if (strText == "开始读数") { // if (strText == "开始读数") {
......
...@@ -30,7 +30,7 @@ android { ...@@ -30,7 +30,7 @@ android {
} }
} }
group 'com.qmai.android.zqtoolkit' group 'com.qmai.android.zqtoolkit'
version '1.0.6' version '1.0.6.2'
gradlePublish { gradlePublish {
......
package com.qmai.zqtoolkit
import android.os.Build
/**
* tongzi
* 2022/4/28
*/
object ScaleChecker {
/**
* 商米
*/
fun isSUNMI() = Build.BRAND.lowercase().contains("sunmi")
}
\ No newline at end of file
package com.qmai.zqtoolkit
import android.content.Context
import android.util.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
/**
* tongzi
* 2022/4/28
*/
object ScaleHub {
private const val TAG = "ScaleHub"
private val _connectState = MutableSharedFlow<ConnectState>(replay = 1)
val connectState: SharedFlow<ConnectState> = _connectState
private val _livingWeight = MutableSharedFlow<LivingWeight>()
val livingWeight: SharedFlow<LivingWeight> = _livingWeight
fun connect(cxt: Context? = null, port: String = "ttyS4", buad: String = "9600") {
GlobalScope.launch(context = Dispatchers.IO) {
when {
ScaleChecker.isSUNMI() -> {
Log.v(TAG,"sunmi")
cxt?.let { SunmiScaleKit.connect(it) }
}
else -> {
Log.v(TAG,"zq")
ZqScaleKit.connect(cxt, port, buad)
}
}
collectConnectData()
}
}
private suspend fun collectConnectData() {
when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.connectState.collect {
_connectState.emit(it)
}
}
else -> {
ZqScaleKit.connectState.collect {
_connectState.emit(it)
}
}
}
}
fun disconnect() {
when {
ScaleChecker.isSUNMI() -> {
}
else -> {
ZqScaleKit.disconnect()
}
}
}
//置零
fun setZero() {
when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.setZero()
}
else -> {
ZqScaleKit.setZero()
}
}
}
//去皮
fun setNetWeight() {
when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.setNetWeight()
}
else -> {
ZqScaleKit.setNetWeight()
}
}
}
//清皮
fun clearTare() {
when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.clearTare()
}
else -> {
ZqScaleKit.clearTare()
}
}
}
//读取电子秤参数
fun getParameter(): Array<String> {
return when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.getParameter()
}
else -> {
ZqScaleKit.getParameter()
}
}
}
//读取重量、皮重
fun readData() {
GlobalScope.launch(context = Dispatchers.IO) {
when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.readData()
}
else -> {
ZqScaleKit.readData()
}
}
collectWeightData()
}
}
private suspend fun collectWeightData() {
when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.livingWeight.collect {
_livingWeight.emit(it)
}
}
else -> {
ZqScaleKit.livingWeight.collect {
_livingWeight.emit(it)
}
}
}
}
fun stopReadData() {
when {
ScaleChecker.isSUNMI() -> {
SunmiScaleKit.stopReadData()
}
else -> {
ZqScaleKit.stopReadData()
}
}
}
}
package com.qmai.zqtoolkit
import android.annotation.SuppressLint
import android.content.Context
import android.os.RemoteException
import android.util.Log
import com.sunmi.electronicscaleservice.ScaleCallback
import com.sunmi.scalelibrary.ScaleManager
import com.sunmi.scalelibrary.ScaleManager.ScaleServiceConnection
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.launch
import java.text.DecimalFormat
/**
* tongzi
* 2022/4/28
*/
object SunmiScaleKit {
private const val TAG = "SunmiScaleKit"
private val _connectState = MutableSharedFlow<ConnectState>(replay = 1)
val connectState: SharedFlow<ConnectState> = _connectState
@SuppressLint("StaticFieldLeak")
private var mScaleManager: ScaleManager? = null
private val _livingWeight = MutableSharedFlow<LivingWeight>()
val livingWeight: SharedFlow<LivingWeight> = _livingWeight
private val decimalFormat = DecimalFormat("0.000")
fun connect(
cxt: Context,
) {
mScaleManager = ScaleManager.getInstance(cxt)
mScaleManager?.connectService(object : ScaleServiceConnection {
override fun onServiceConnected() {
GlobalScope.launch(context = Dispatchers.IO) {
_connectState.emit(ConnectState(true, "打开成功"))
}
}
override fun onServiceDisconnect() {
GlobalScope.launch(context = Dispatchers.IO) {
_connectState.emit(ConnectState(false, "打开失败"))
}
}
})
}
fun readData() {
try {
mScaleManager?.getData(object : ScaleCallback.Stub() {
override fun getData(i: Int, i1: Int, i2: Int) {
// i = 净重量 单位 克 ,i1 = 皮重量 单位 克 ,i2 = 稳定状态 1 为稳定。具体其他状态请参考商米开发者文档
Log.v(
TAG, String.format(
"%d,%d,%d",
i2, i, i1
)
)
GlobalScope.launch(context = Dispatchers.IO) {
_livingWeight.emit(
LivingWeight(
i2 == 1,
decimalFormat.format((i * 1.0f / 1000).toDouble()),
"kg",
decimalFormat.format((i1 * 1.0f / 1000).toDouble()),
i2 == 1
)
)
}
}
})
} catch (e: RemoteException) {
e.printStackTrace()
}
}
fun stopReadData() {
mScaleManager?.cancelGetData()
}
//置零
fun setZero() {
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) {
mScaleManager?.zero()
Log.v(TAG, "setZero")
}
}
//去皮
fun setNetWeight() {
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) {
mScaleManager?.tare()
Log.v(TAG, "setNetWeight")
}
}
//清皮
fun clearTare() {
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) {
mScaleManager?.tare()
Log.v(TAG, "clearTare")
}
}
//读取电子秤参数
fun getParameter(): Array<String> {
var parameter: Array<String> = arrayOf()
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) {
parameter[0] = mScaleManager?.firmwareVersion.toString()
Log.v(TAG, "getParameter")
}
return parameter
}
}
\ No newline at end of file
...@@ -12,61 +12,58 @@ import kotlinx.coroutines.flow.* ...@@ -12,61 +12,58 @@ import kotlinx.coroutines.flow.*
* date : 2022/2/10 14:18 * date : 2022/2/10 14:18
* description : * description :
*/ */
class ZqScaleKit private constructor() { object ZqScaleKit {
companion object {
val instance = Helper.instance
}
private object Helper {
val instance = ZqScaleKit()
}
private const val TAG = "ZqScaleKit"
private val zqeb by lazy { private val zqeb by lazy {
zqebsdk() zqebsdk()
} }
private var stableWeight = mutableListOf<String>() private var isConnect = false
private val _connectState = MutableSharedFlow<ConnectState>(replay = 1) private val _connectState = MutableSharedFlow<ConnectState>(replay = 1)
val connectState: SharedFlow<ConnectState> = _connectState val connectState: SharedFlow<ConnectState> = _connectState
private var stableWeight = mutableListOf<String>()
private val _livingWeight = MutableSharedFlow<LivingWeight>() private val _livingWeight = MutableSharedFlow<LivingWeight>()
val livingWeight: SharedFlow<LivingWeight> = _livingWeight val livingWeight: SharedFlow<LivingWeight> = _livingWeight
private var job: Job? = null private var job: Job? = null
fun connect(cxt: Context? = null, port: String = "ttyS4", buad: String = "9600") { suspend fun connect(
GlobalScope.launch(context = Dispatchers.IO) { cxt: Context? = null,
val ebConnect = zqeb.EB_Connect(String.format("%s:%s", port, buad), cxt) port: String = "ttyS4",
Log.v( buad: String = "9600",
"ZqScaleKit", String.format("%s:%s", port, buad) ) {
) val ebConnect = zqeb.EB_Connect(String.format("%s:%s", port, buad), cxt)
val msg: String = when (ebConnect) { val msg: String = when (ebConnect) {
PrinterConst.ErrorCode.SUCCESS -> { PrinterConst.ErrorCode.SUCCESS -> {
"打开成功" "打开成功"
} }
PrinterConst.ErrorCode.INVALIDPARAM -> { PrinterConst.ErrorCode.INVALIDPARAM -> {
"打印机参数无效" "打印机参数无效"
} }
PrinterConst.ErrorCode.PORTERROR -> { PrinterConst.ErrorCode.PORTERROR -> {
"端口错误" "端口错误"
}
PrinterConst.ErrorCode.NOPERMISSION -> {
"没有该端口的访问权限"
}
else -> "未知错误"
} }
delay(1000) PrinterConst.ErrorCode.NOPERMISSION -> {
_connectState.emit(ConnectState(ebConnect == PrinterConst.ErrorCode.SUCCESS, msg)) "没有该端口的访问权限"
}
else -> "未知错误"
} }
Log.v(
TAG, String.format("%s:%s", port, buad) + "isConnect:" + isConnect + msg
)
_connectState.emit(ConnectState(ebConnect == PrinterConst.ErrorCode.SUCCESS, msg))
} }
fun disconnect() { fun disconnect() {
// stopReadData() // stopReadData()
val ebDisconnect = zqeb.EB_Disconnect() val ebDisconnect = zqeb.EB_Disconnect()
Log.v("ZqScaleKit", String.format("ebDisconnect: %s", ebDisconnect)) Log.v(TAG, String.format("ebDisconnect: %s", ebDisconnect))
} }
//置零 //置零
fun setZero() { fun setZero() {
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) { if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) {
val ebSetzero = zqeb.EB_SetZero() val ebSetzero = zqeb.EB_SetZero()
Log.v("ZqScaleKit", String.format("ebSetzero: %s", ebSetzero)) Log.v(TAG, String.format("ebSetzero: %s", ebSetzero))
} }
} }
...@@ -74,7 +71,7 @@ class ZqScaleKit private constructor() { ...@@ -74,7 +71,7 @@ class ZqScaleKit private constructor() {
fun setNetWeight() { fun setNetWeight() {
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) { if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) {
val ebSetnetweight = zqeb.EB_SetNetWeight() val ebSetnetweight = zqeb.EB_SetNetWeight()
Log.v("ZqScaleKit", String.format("ebSetnetweight: %s", ebSetnetweight)) Log.v(TAG, String.format("ebSetnetweight: %s", ebSetnetweight))
} }
} }
...@@ -82,7 +79,7 @@ class ZqScaleKit private constructor() { ...@@ -82,7 +79,7 @@ class ZqScaleKit private constructor() {
fun clearTare() { fun clearTare() {
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) { if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) {
val ebCleartare = zqeb.EB_ClearTare() val ebCleartare = zqeb.EB_ClearTare()
Log.v("ZqScaleKit", String.format("ebCleartare: %s", ebCleartare)) Log.v(TAG, String.format("ebCleartare: %s", ebCleartare))
} }
} }
...@@ -90,14 +87,13 @@ class ZqScaleKit private constructor() { ...@@ -90,14 +87,13 @@ class ZqScaleKit private constructor() {
//读取电子秤参数 //读取电子秤参数
fun getParameter(): Array<String> { fun getParameter(): Array<String> {
var parameter: Array<String> = arrayOf() var parameter: Array<String> = arrayOf()
if (!_connectState.replayCache.isNullOrEmpty() && _connectState.replayCache.last().isConnect) { if (isConnect) {
parameter = zqeb.EB_GetParameter() parameter = zqeb.EB_GetParameter()
Log.v("ZqScaleKit", String.format("parameter: %s", parameter)) Log.v(TAG, String.format("parameter: %s", parameter))
} }
return parameter return parameter
} }
private val weightFlow = flow { private val weightFlow = flow {
while (true) { while (true) {
emit(Unit) emit(Unit)
...@@ -128,7 +124,7 @@ class ZqScaleKit private constructor() { ...@@ -128,7 +124,7 @@ class ZqScaleKit private constructor() {
private suspend fun getWeightTare() { private suspend fun getWeightTare() {
val strRet: Array<String> = zqeb.EB_GetWeightTare() val strRet: Array<String> = zqeb.EB_GetWeightTare()
Log.v( Log.v(
"ZqScaleKit", String.format( TAG, String.format(
"%s,%s,%s", "%s,%s,%s",
strRet[0], strRet[1], strRet[2] strRet[0], strRet[1], strRet[2]
) )
...@@ -137,11 +133,11 @@ class ZqScaleKit private constructor() { ...@@ -137,11 +133,11 @@ class ZqScaleKit private constructor() {
var strWeight = "" var strWeight = ""
var strTare = "" var strTare = ""
var strUnit = "" var strUnit = ""
if (strRet[1].isNotEmpty()) { if (!strRet[1].isNullOrEmpty()) {
strUnit = strRet[1].replace("[^a-z^A-Z]".toRegex(), "") strUnit = strRet[1].replace("[^a-z^A-Z]".toRegex(), "")
strWeight = strRet[1].replace(strUnit, "") strWeight = strRet[1].replace(strUnit, "")
} }
if (strUnit.isEmpty()&& strRet[2].isNotEmpty()) { if (strUnit.isEmpty() && !strRet[2].isNullOrEmpty()) {
strTare = strRet[2].replace(strUnit, "") strTare = strRet[2].replace(strUnit, "")
} }
if (Integer.valueOf(strRet[0]) == 0) { if (Integer.valueOf(strRet[0]) == 0) {
...@@ -168,23 +164,13 @@ class ZqScaleKit private constructor() { ...@@ -168,23 +164,13 @@ class ZqScaleKit private constructor() {
else -> stableWeight.add(strWeight) else -> stableWeight.add(strWeight)
} }
} else { } else {
// when (Integer.valueOf(strRet[0])) { // when (Integer.valueOf(strRet[0])) {
// -3-> strState = "Data wrong" // -3 -> strState = "Data wrong"
// -2-> strState = "Read Data Error" // -2 -> strState = "Read Data Error"
// -1 -> strState = "Port Error" // -1 -> strState = "Port Error"
// // 1 -> strState = "Weight instability"
// 1 -> { // 2 -> strState = "Weight overflow or not ZERO"
// strState = "Weight instability" // }
// strWeight = strRet[1]
// strTare = strRet[2]
// }
// 2 -> {
// strState = "Weight overflow or not ZERO"
// strWeight = strRet[1]
// strTare = strRet[2]
// }
// }
_livingWeight.emit( _livingWeight.emit(
LivingWeight( LivingWeight(
false, false,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment