From d0c309801d9473fed3fa0ca5f2048dd71522cc8e Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Thu, 3 Aug 2023 15:34:49 +0530 Subject: [PATCH] add commands to set and read buffer sample - add commands --- .../data/constant/HemoCubeCommands.kt | 5 +- .../presentation/hemocube/HemoCubeFragment.kt | 80 ++++++++++++++++--- .../hemocube/HemoCubeViewModel.kt | 8 ++ .../presentation/testRight/UsbService.kt | 2 +- 4 files changed, 82 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt b/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt index 09bf400..5eee6f7 100644 --- a/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt +++ b/app/src/main/java/com/example/hpostesting/data/constant/HemoCubeCommands.kt @@ -1,5 +1,8 @@ package com.example.hpostesting.data.constant enum class HemoCubeCommands(val command: String) { - run("R\r"), + startBuffer("B\r"), + getBuffer("B\r"), + startSample("S\r"), + getSample("P\r"), } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt index beea992..34432bb 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt @@ -22,6 +22,7 @@ import com.example.hpostesting.presentation.utils.MyDialogListener import com.example.hpostesting.presentation.utils.UIUtils import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding +import kotlin.math.log10 class HemoCubeFragment : Fragment() { @@ -54,6 +55,11 @@ class HemoCubeFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + if (DataHolder.hemoCubeTestData == null) { + DataHolder.hemoCubeTestData = DataHolder.selectedTest?.toHemoCubeTestData() + } + setupButtonClickListeners() sharedPreference = @@ -105,8 +111,8 @@ class HemoCubeFragment : Fragment() { object : MyDialogListener { override fun onClickNegativeButton() {} override fun onClickPositiveButton() { - fetchHemoCubeResult() - sendCommandToHemoCube() +// fetchHemoCubeResult() + getSampleResult() } }) } @@ -117,10 +123,6 @@ class HemoCubeFragment : Fragment() { binding.progressBar.visibility = View.VISIBLE - if (DataHolder.hemoCubeTestData == null) { - DataHolder.hemoCubeTestData = DataHolder.selectedTest?.toHemoCubeTestData() - } - if (isOnline) { resultRatio?.let { ratio -> Log.e("Testdb", "upload") @@ -201,7 +203,8 @@ class HemoCubeFragment : Fragment() { private fun calculateResult() { hemoCubeViewModel } - private fun fetchHemoCubeResult() { + + private fun listenToHemoCube() { if (DataHolder.hemoCubeTestData == null) { DataHolder.hemoCubeTestData = DataHolder.selectedTest?.toHemoCubeTestData() } @@ -217,7 +220,7 @@ class HemoCubeFragment : Fragment() { binding.tvSubtitle4.text = fullReadOutput resultData = fullReadOutput.toString() - DataHolder.hemoCubeTestData?.resultData = resultData + DataHolder.hemoCubeTestData?.resultData resultRatio = "" //TODO val pareseddata = parseUsbData(fullReadOutput.toString()) Log.d("Result", data.toString()) @@ -231,6 +234,7 @@ class HemoCubeFragment : Fragment() { }) } + //TODO: remove private fun fetchHemoCubeResultNew() { hemoCubeViewModel.progressBar.postValue(true) val fullReadOutput = StringBuilder() @@ -268,11 +272,11 @@ class HemoCubeFragment : Fragment() { }) } - private fun sendCommandToHemoCube() { + private fun getBufferResult() { hemoCubeViewModel.progressBar.postValue(true) val fullReadOutput = StringBuilder() - (activity as HemocubeActivity).mService.eventDrivenWriteHemoCube(HemoCubeCommands.run, + (activity as HemocubeActivity).mService.sendAndListenToHemoCube(HemoCubeCommands.getBuffer, object : UsbServiceListener { override fun onUsbRead(data: ByteArray?) { data?.let { @@ -281,8 +285,62 @@ class HemoCubeFragment : Fragment() { if (stringData.contains("RESULT", true)) { // hemoCubeViewModel.mapDeviceConstants(fullReadOutput.toString()) + + val response: String = "RESULT SN18291 1937.23 2828.11" + +// val response = stringData + val result = response.split(" ") + val deviceSerialNo = result[1] + val led1Buffer = result[2].toDouble() + val led2Buffer = result[3].toDouble() + DataHolder.hemoCubeTestData?.deviceSerialNumber = deviceSerialNo + DataHolder.hemoCubeTestData?.led1Buffer = led1Buffer + DataHolder.hemoCubeTestData?.led2Buffer = led2Buffer hemoCubeViewModel.progressBar.postValue(false) - } else if (stringData.contains("FINE", true)) { + } + } + } + + override fun onUsbError(e: Exception?) { + hemoCubeViewModel.progressBar.postValue(false) + } + }) + } + + private fun getSampleResult() { + hemoCubeViewModel.progressBar.postValue(true) + val fullReadOutput = StringBuilder() + + (activity as HemocubeActivity).mService.sendAndListenToHemoCube(HemoCubeCommands.getSample, + object : UsbServiceListener { + override fun onUsbRead(data: ByteArray?) { + data?.let { + val stringData = String(it) + fullReadOutput.append(stringData) + + if (stringData.contains("RESULT", true)) { +// hemoCubeViewModel.mapDeviceConstants(fullReadOutput.toString()) + + val response: String = "RESULT SN18291 1937.23 2828.11 28211.20 121829.12" + +// val response = stringData + val result = response.split(" ") + val deviceSerialNo = result[1] + val led1Buffer = result[2].toDouble() + val led2Buffer = result[3].toDouble() + val led1Sample = result[4].toDouble() + val led2Sample = result[5].toDouble() + val led1Average = log10(led1Buffer / led1Sample) + val led2Average = log10(led1Buffer / led1Sample) + val deviceRatio = led1Average / led2Average + DataHolder.hemoCubeTestData?.deviceSerialNumber = deviceSerialNo + DataHolder.hemoCubeTestData?.led1Buffer = led1Buffer + DataHolder.hemoCubeTestData?.led2Buffer = led2Buffer + DataHolder.hemoCubeTestData?.led1Sample = led1Sample + DataHolder.hemoCubeTestData?.led2Sample = led2Sample + DataHolder.hemoCubeTestData?.led1Average = led1Average + DataHolder.hemoCubeTestData?.led2Average = led2Average + DataHolder.hemoCubeTestData?.deviceRatio = deviceRatio hemoCubeViewModel.progressBar.postValue(false) } } diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt index e30bd2f..80dd97e 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt @@ -76,6 +76,14 @@ class HemoCubeViewModel @Inject constructor( testDetails?.testTime = SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.getDefault() ).format(Calendar.getInstance().time) + testDetails?.deviceSerialNumber = DataHolder.hemoCubeTestData?.deviceSerialNumber.toString() + testDetails?.led1Buffer = DataHolder.hemoCubeTestData?.led1Buffer + testDetails?.led2Buffer = DataHolder.hemoCubeTestData?.led2Buffer + testDetails?.led1Sample = DataHolder.hemoCubeTestData?.led1Sample + testDetails?.led2Sample = DataHolder.hemoCubeTestData?.led2Sample + testDetails?.led1Average = DataHolder.hemoCubeTestData?.led1Average + testDetails?.led2Average = DataHolder.hemoCubeTestData?.led2Average + testDetails?.deviceRatio = DataHolder.hemoCubeTestData?.deviceRatio viewModelScope.launch { try { diff --git a/app/src/main/java/com/example/hpostesting/presentation/testRight/UsbService.kt b/app/src/main/java/com/example/hpostesting/presentation/testRight/UsbService.kt index 9b4ee5c..38b1815 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/testRight/UsbService.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/testRight/UsbService.kt @@ -74,7 +74,7 @@ class UsbService : Service() { } } - fun eventDrivenWriteHemoCube(command: HemoCubeCommands, listener: UsbServiceListener) { + fun sendAndListenToHemoCube(command: HemoCubeCommands, listener: UsbServiceListener) { try { this.listener = listener mPort.write(command.command.toByteArray(), Constants.WRITE_TIMEOUT_MILLIS)