This commit is contained in:
Pritimay Sarkar
2024-01-11 23:14:20 +05:30
parent 86854a1e27
commit 29ee6a0752
3 changed files with 114 additions and 151 deletions

View File

@@ -1,6 +1,8 @@
package com.example.hpostesting.data.constant
object Constants {
const val PQ_MODE = true
const val ACTION_USB_PERMISSION = "shanmukha.in.sickle_cell.USB_PERMISSION"
const val HOMOCUBE_USB_PERMISSION = "shanmukha.in.sickle_cell_homocube.USB_PERMISSION"
@@ -173,66 +175,6 @@ object Constants {
const val BUFFER_LED_LOWER_BOUND = 21000
const val BUFFER_LED_UPPER_BOUND = 24500
const val TEST_STATUS_CODE_TEST_STARTED = 1.0
const val TEST_STATUS_CODE_CONFIG_STARTED = 2.0
const val TEST_STATUS_CODE_CONFIG_COMPLETED = 3.0
const val TEST_STATUS_CODE_BUFFER_STARTED = 4.0
const val TEST_STATUS_CODE_BUFFER_COMPLETED = 5.0
const val TEST_STATUS_CODE_BUFFER_PRINT_STARTED = 6.0
const val TEST_STATUS_CODE_BUFFER_PRINT_COMPLETED = 7.0
const val TEST_STATUS_CODE_SAMPLE_STARTED = 8.0
const val TEST_STATUS_CODE_SAMPLE_COMPLETED = 9.0
const val TEST_STATUS_CODE_SAMPLE_PRINT_STARTED = 10.0
const val TEST_STATUS_CODE_SAMPLE_PRINT_COMPLETED = 11.0
const val TEST_STATUS_CODE_FIRST_GAIN_STARTED = 12.0
const val TEST_STATUS_CODE_FIRST_GAIN_COMPLETED = 13.0
const val TEST_STATUS_CODE_FIRST_GAIN_PRINT_STARTED = 14.0
const val TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED = 15.0
const val TEST_STATUS_CODE_SECOND_GAIN_STARTED = 16.0
const val TEST_STATUS_CODE_SECOND_GAIN_COMPLETED = 17.0
const val TEST_STATUS_CODE_SECOND_GAIN_PRINT_STARTED = 18.0
const val TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED = 19.0
const val TEST_STATUS_CODE_THIRD_GAIN_STARTED = 20.0
const val TEST_STATUS_CODE_THIRD_GAIN_COMPLETED = 21.0
const val TEST_STATUS_CODE_THIRD_GAIN_PRINT_STARTED = 22.0
const val TEST_STATUS_CODE_THIRD_GAIN_PRINT_COMPLETED = 23.0
const val TEST_STATUS_CODE_FORTH_GAIN_STARTED = 24.0
const val TEST_STATUS_CODE_FORTH_GAIN_COMPLETED = 25.0
const val TEST_STATUS_CODE_FORTH_GAIN_PRINT_STARTED = 26.0
const val TEST_STATUS_CODE_FORTH_GAIN_PRINT_COMPLETED = 27.0
const val TEST_STATUS_CODE_TEST_COMPLETED = 30.0
enum class TestStatus(val CODE: Double) {
TEST_STARTED(1.0),
CONFIG_STARTED(2.0),
CONFIG_COMPLETED(3.0),
BUFFER_STARTED(4.0),
BUFFER_COMPLETED(5.0),
BUFFER_PRINT_STARTED(6.0),
BUFFER_PRINT_COMPLETED(7.0),
SAMPLE_STARTED(8.0),
SAMPLE_COMPLETED(9.0),
SAMPLE_PRINT_STARTED(10.0),
SAMPLE_PRINT_COMPLETED(11.0),
FIRST_GAIN_STARTED(12.0),
FIRST_GAIN_COMPLETED(13.0),
FIRST_GAIN_PRINT_STARTED(14.0),
FIRST_GAIN_PRINT_COMPLETED(15.0),
SECOND_GAIN_STARTED(16.0),
SECOND_GAIN_COMPLETED(17.0),
SECOND_GAIN_PRINT_STARTED(18.0),
SECOND_GAIN_PRINT_COMPLETED(19.0),
THIRD_GAIN_STARTED(20.0),
THIRD_GAIN_COMPLETED(21.0),
THIRD_GAIN_PRINT_STARTED(22.0),
THIRD_GAIN_PRINT_COMPLETED(23.0),
FORTH_GAIN_STARTED(24.0),
FORTH_GAIN_COMPLETED(25.0),
FORTH_GAIN_PRINT_STARTED(26.0),
FORTH_GAIN_PRINT_COMPLETED(27.0),
TEST_COMPLETED(30.0)
}
val DEVICE_CONFIGURATION: Map<String, List<List<Double>>> = mapOf<String, List<List<Double>>>(
"HCV-000-3001" to listOf(
listOf(1.313, -0.89), // LED1, 435nm

View File

@@ -0,0 +1,32 @@
package com.example.hpostesting.data.constant
enum class TestStatus(val CODE: Double) {
TEST_STARTED(1.0),
CONFIG_STARTED(2.0),
CONFIG_COMPLETED(3.0),
BUFFER_STARTED(4.0),
BUFFER_COMPLETED(5.0),
BUFFER_PRINT_STARTED(6.0),
BUFFER_PRINT_COMPLETED(7.0),
SAMPLE_STARTED(8.0),
SAMPLE_COMPLETED(9.0),
SAMPLE_PRINT_STARTED(10.0),
SAMPLE_PRINT_COMPLETED(11.0),
FIRST_GAIN_STARTED(12.0),
FIRST_GAIN_COMPLETED(13.0),
FIRST_GAIN_PRINT_STARTED(14.0),
FIRST_GAIN_PRINT_COMPLETED(15.0),
SECOND_GAIN_STARTED(16.0),
SECOND_GAIN_COMPLETED(17.0),
SECOND_GAIN_PRINT_STARTED(18.0),
SECOND_GAIN_PRINT_COMPLETED(19.0),
THIRD_GAIN_STARTED(20.0),
THIRD_GAIN_COMPLETED(21.0),
THIRD_GAIN_PRINT_STARTED(22.0),
THIRD_GAIN_PRINT_COMPLETED(23.0),
FORTH_GAIN_STARTED(24.0),
FORTH_GAIN_COMPLETED(25.0),
FORTH_GAIN_PRINT_STARTED(26.0),
FORTH_GAIN_PRINT_COMPLETED(27.0),
TEST_COMPLETED(30.0)
}

View File

@@ -20,6 +20,7 @@ import com.example.hpostesting.data.DataHolder
import com.example.hpostesting.data.Result
import com.example.hpostesting.data.constant.Constants
import com.example.hpostesting.data.constant.HemoCubeCommands
import com.example.hpostesting.data.constant.TestStatus
import com.example.hpostesting.data.model.patient.DeviceData
import com.example.hpostesting.data.model.patient.toHemoCubeTestData
import com.example.hpostesting.presentation.UsbServiceListener
@@ -137,25 +138,6 @@ class HemoCubeFragment : Fragment() {
binding.tvDeviceMessages.visibility = View.VISIBLE
}
}
// val spinner: Spinner = binding.spinnerSolutions
// val options = arrayOf("KMnO4", "Tartrazine", "AR", "HB", "Blood")
// val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, options)
// adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// spinner.adapter = adapter
// spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
// override fun onItemSelected(
// parent: AdapterView<*>?,
// view: View?,
// position: Int,
// id: Long
// ) {
// val selectedValue: String = options[position]
// }
//
// override fun onNothingSelected(parent: AdapterView<*>?) {
// }
// }
}
private fun observeViewModel() {
@@ -395,7 +377,7 @@ class HemoCubeFragment : Fragment() {
hemoCubeViewModel.deviceMessages.postValue(currentResultData)
when {
resultData.contains("SNE") && this.testStatusCode < Constants.TEST_STATUS_CODE_CONFIG_COMPLETED -> {
resultData.contains("SNE") && this.testStatusCode < TestStatus.CONFIG_COMPLETED.CODE -> {
if (resultData.contains("HCV")) {
processHardwareId(resultData, "HCV", 12)
}
@@ -405,29 +387,29 @@ class HemoCubeFragment : Fragment() {
}
}
resultData.contains("#BS") && this.testStatusCode < Constants.TEST_STATUS_CODE_BUFFER_STARTED -> {
resultData.contains("#BS") && this.testStatusCode < TestStatus.BUFFER_STARTED.CODE -> {
hemoCubeViewModel.messages.postValue(getString(R.string.buffer_started))
this.testStatusCode = Constants.TEST_STATUS_CODE_BUFFER_STARTED
this.testStatusCode = TestStatus.BUFFER_STARTED.CODE
}
resultData.contains("#BC") && this.testStatusCode < Constants.TEST_STATUS_CODE_BUFFER_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_BUFFER_COMPLETED
resultData.contains("#BC") && this.testStatusCode < TestStatus.BUFFER_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.BUFFER_COMPLETED.CODE
activity?.runOnUiThread {
binding.tvSubtitle4.text = getString(R.string.buffer_completed)
binding.btnSamplestart.visibility = View.VISIBLE
}
}
resultData.contains("#SS1") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_STARTED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_STARTED
resultData.contains("#SS1") && this.testStatusCode < TestStatus.SAMPLE_STARTED.CODE -> {
this.testStatusCode = TestStatus.SAMPLE_STARTED.CODE
activity?.runOnUiThread {
binding.tvSubtitle4.text = getString(R.string.sample_started)
binding.btnSamplestart.visibility = View.GONE
}
}
resultData.contains("#SC1") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_COMPLETED
resultData.contains("#SC1") && this.testStatusCode < TestStatus.SAMPLE_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.SAMPLE_COMPLETED.CODE
hemoCubeViewModel.messages.postValue(
getString(R.string.sample_completed) + "\n" + getString(R.string.gathering_data))
fetchResult()
@@ -441,83 +423,47 @@ class HemoCubeFragment : Fragment() {
)
}
currentResultData.contains("#SS2") && this.testStatusCode < Constants.TEST_STATUS_CODE_FIRST_GAIN_STARTED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_FIRST_GAIN_STARTED
currentResultData.contains("#SS2") && this.testStatusCode < TestStatus.FIRST_GAIN_STARTED.CODE -> {
this.testStatusCode = TestStatus.FIRST_GAIN_STARTED.CODE
hemoCubeViewModel.messages.postValue("1.3X Gain Started")
}
currentResultData.contains("#SC2") && this.testStatusCode < Constants.TEST_STATUS_CODE_FIRST_GAIN_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_FIRST_GAIN_COMPLETED
currentResultData.contains("#SC2") && this.testStatusCode < TestStatus.FIRST_GAIN_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.FIRST_GAIN_COMPLETED.CODE
hemoCubeViewModel.messages.postValue("1.3X Gain Completed")
fetchResult()
}
currentResultData.contains("#SS3") && this.testStatusCode < Constants.TEST_STATUS_CODE_SECOND_GAIN_STARTED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_SECOND_GAIN_STARTED
currentResultData.contains("#SS3") && this.testStatusCode < TestStatus.SECOND_GAIN_STARTED.CODE -> {
this.testStatusCode = TestStatus.SECOND_GAIN_STARTED.CODE
hemoCubeViewModel.messages.postValue("2X Gain Started")
}
currentResultData.contains("#SC3") && this.testStatusCode < Constants.TEST_STATUS_CODE_SECOND_GAIN_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_SECOND_GAIN_COMPLETED
currentResultData.contains("#SC3") && this.testStatusCode < TestStatus.SECOND_GAIN_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.SECOND_GAIN_COMPLETED.CODE
hemoCubeViewModel.messages.postValue("2X Gain Completed")
fetchResult()
}
currentResultData.contains("#SS5") && this.testStatusCode < Constants.TEST_STATUS_CODE_FORTH_GAIN_STARTED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_FORTH_GAIN_STARTED
currentResultData.contains("#SS5") && this.testStatusCode < TestStatus.FORTH_GAIN_STARTED.CODE -> {
this.testStatusCode = TestStatus.FORTH_GAIN_STARTED.CODE
hemoCubeViewModel.messages.postValue("7.6X Gain Started")
}
currentResultData.contains("#SC5") && this.testStatusCode < Constants.TestStatus.CONFIG_COMPLETED.CODE -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_FORTH_GAIN_COMPLETED
currentResultData.contains("#SC5") && this.testStatusCode < TestStatus.CONFIG_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.CONFIG_COMPLETED.CODE
hemoCubeViewModel.messages.postValue("7.6X Gain Completed")
fetchResult()
}
resultData.contains("REND") && this.testStatusCode < Constants.TEST_STATUS_CODE_SAMPLE_PRINT_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_SAMPLE_PRINT_COMPLETED
hemoCubeViewModel.messages.postValue(
getString(R.string.data_collected_processing_data)
)
val resultLines = resultData.split("\\s+(?=LB|LS)".toRegex())
var bufferIntensity = resultLines[1].split(' ')[1].trim()
led1BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_1, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
bufferIntensity = resultLines[2].split(' ')[1].trim()
led2BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_2, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
bufferIntensity = resultLines[3].split(' ')[1].trim()
led3BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_3, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
bufferIntensity = resultLines[4].split(' ')[1].trim()
led4BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_4, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
led1SampleForDevice = resultLines[5].split(' ')[1].trim().toDoubleOrNull()!!
led2SampleForDevice = resultLines[6].split(' ')[1].trim().toDoubleOrNull()!!
led3SampleForDevice = resultLines[7].split(' ')[1].trim().toDoubleOrNull()!!
led4SampleForDevice =
resultLines[8].split(' ')[1].split('\r')[0].trim().toDoubleOrNull()!!
processResult()
sendFirstGainCommand()
currentResultData = ""
resultData.contains("REND") && this.testStatusCode < TestStatus.SAMPLE_PRINT_COMPLETED.CODE -> {
handleSampleCompleted()
}
currentResultData.contains("REND") && this.testStatusCode >= Constants.TEST_STATUS_CODE_FIRST_GAIN_COMPLETED && this.testStatusCode < Constants.TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED
currentResultData.contains("REND")
&& this.testStatusCode >= TestStatus.FIRST_GAIN_COMPLETED.CODE
&& this.testStatusCode < TestStatus.FIRST_GAIN_PRINT_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.FIRST_GAIN_PRINT_COMPLETED.CODE
hemoCubeViewModel.messages.postValue("1.3X gain data gathered")
val resultLines = currentResultData.split("\\s+(?=LB|LS)".toRegex())
@@ -532,8 +478,10 @@ class HemoCubeFragment : Fragment() {
currentResultData = ""
}
currentResultData.contains("REND") && this.testStatusCode >= Constants.TEST_STATUS_CODE_FIRST_GAIN_PRINT_COMPLETED && this.testStatusCode < Constants.TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED
currentResultData.contains("REND")
&& this.testStatusCode >= TestStatus.FIRST_GAIN_PRINT_COMPLETED.CODE
&& this.testStatusCode < TestStatus.SECOND_GAIN_PRINT_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.SECOND_GAIN_PRINT_COMPLETED.CODE
hemoCubeViewModel.messages.postValue("2X gain data gathered")
val resultLines = currentResultData.split("\\s+(?=LB|LS)".toRegex())
@@ -548,8 +496,10 @@ class HemoCubeFragment : Fragment() {
currentResultData = ""
}
currentResultData.contains("REND") && this.testStatusCode >= Constants.TEST_STATUS_CODE_SECOND_GAIN_PRINT_COMPLETED && this.testStatusCode < Constants.TEST_STATUS_CODE_FORTH_GAIN_PRINT_COMPLETED -> {
this.testStatusCode = Constants.TEST_STATUS_CODE_FORTH_GAIN_PRINT_COMPLETED
currentResultData.contains("REND")
&& this.testStatusCode >= TestStatus.SECOND_GAIN_PRINT_COMPLETED.CODE
&& this.testStatusCode < TestStatus.FORTH_GAIN_PRINT_COMPLETED.CODE -> {
this.testStatusCode = TestStatus.FORTH_GAIN_PRINT_COMPLETED.CODE
hemoCubeViewModel.messages.postValue("7.6X gain data gathered")
val resultLines = currentResultData.split("\\s+(?=LB|LS)".toRegex())
@@ -579,6 +529,49 @@ class HemoCubeFragment : Fragment() {
}
}
fun handleSampleCompleted() {
this.testStatusCode = TestStatus.SAMPLE_PRINT_COMPLETED.CODE
hemoCubeViewModel.messages.postValue(
getString(R.string.data_collected_processing_data)
)
val resultLines = resultData.split("\\s+(?=LB|LS)".toRegex())
var bufferIntensity = resultLines[1].split(' ')[1].trim()
led1BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_1, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
bufferIntensity = resultLines[2].split(' ')[1].trim()
led2BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_2, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
bufferIntensity = resultLines[3].split(' ')[1].trim()
led3BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_3, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
bufferIntensity = resultLines[4].split(' ')[1].trim()
led4BufferForDevice = if (isUsingExistingBuffer) {
sharedPreferences.getString(Constants.BUFFER_VALUE_4, "")?.toDoubleOrNull()!!
} else {
bufferIntensity.toDoubleOrNull()!!
}
led1SampleForDevice = resultLines[5].split(' ')[1].trim().toDoubleOrNull()!!
led2SampleForDevice = resultLines[6].split(' ')[1].trim().toDoubleOrNull()!!
led3SampleForDevice = resultLines[7].split(' ')[1].trim().toDoubleOrNull()!!
led4SampleForDevice =
resultLines[8].split(' ')[1].split('\r')[0].trim().toDoubleOrNull()!!
processResult()
sendFirstGainCommand()
currentResultData = ""
}
fun processHardwareId(resultData: String, prefix: String, expectedLength: Int) {
val pattern = Regex("$prefix-\\d{3,4}-\\d{4}")
val matchResult = pattern.find(resultData)
@@ -590,7 +583,7 @@ class HemoCubeFragment : Fragment() {
putString(Constants.DEVICE_ID, deviceHardwareId)
apply()
}
this.testStatusCode = Constants.TEST_STATUS_CODE_CONFIG_COMPLETED
this.testStatusCode = TestStatus.CONFIG_COMPLETED.CODE
activity?.runOnUiThread {
binding.btnPlacebuffer.visibility = View.VISIBLE
}
@@ -628,12 +621,8 @@ class HemoCubeFragment : Fragment() {
fun handleBackButtonPress() {
if (isTestOngoing) {
// If the test is ongoing, don't allow the back button action
// You can optionally show a message to the user indicating why the back button is disabled
// For example, show a Toast or Snackbar.
showToast(R.string.test_go_noback)
} else {
// If the test is not ongoing, you can trigger the back action of the hosting activity
activity?.onBackPressed()
}
}