Diagnostics code added
This commit is contained in:
@@ -7,6 +7,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.example.hpostesting.presentation.buffercheck.HemocubeBufferCheckActivity
|
import com.example.hpostesting.presentation.buffercheck.HemocubeBufferCheckActivity
|
||||||
|
import com.example.hpostesting.presentation.diagnostics.DiagnosticsActivity
|
||||||
import `in`.sminnovations.hpostesting.databinding.FragmentGalleryBinding
|
import `in`.sminnovations.hpostesting.databinding.FragmentGalleryBinding
|
||||||
|
|
||||||
class GalleryFragment : Fragment() {
|
class GalleryFragment : Fragment() {
|
||||||
@@ -35,6 +36,12 @@ class GalleryFragment : Fragment() {
|
|||||||
binding.btnSubmit.setOnClickListener {
|
binding.btnSubmit.setOnClickListener {
|
||||||
startActivity(Intent(requireContext(), HemocubeBufferCheckActivity::class.java))
|
startActivity(Intent(requireContext(), HemocubeBufferCheckActivity::class.java))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.btnDiagnostics.setOnClickListener {
|
||||||
|
startActivity(Intent(requireContext(), DiagnosticsActivity::class.java))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import com.example.hpostesting.data.model.patient.DeviceData
|
|||||||
import com.example.hpostesting.data.model.patient.toHemoCubeTestData
|
import com.example.hpostesting.data.model.patient.toHemoCubeTestData
|
||||||
import com.example.hpostesting.presentation.UsbServiceListener
|
import com.example.hpostesting.presentation.UsbServiceListener
|
||||||
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
|
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
|
||||||
|
import com.example.hpostesting.presentation.hemocube.HemocubeActivity
|
||||||
import com.example.hpostesting.presentation.utils.MyDialogListener
|
import com.example.hpostesting.presentation.utils.MyDialogListener
|
||||||
import com.example.hpostesting.presentation.utils.UIUtils
|
import com.example.hpostesting.presentation.utils.UIUtils
|
||||||
import com.google.firebase.crashlytics.ktx.crashlytics
|
import com.google.firebase.crashlytics.ktx.crashlytics
|
||||||
@@ -47,7 +48,6 @@ class DiagnosticsFragment : Fragment() {
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
getBufferdiagnostics()
|
|
||||||
initViews()
|
initViews()
|
||||||
observeViewModel()
|
observeViewModel()
|
||||||
}
|
}
|
||||||
@@ -55,10 +55,11 @@ class DiagnosticsFragment : Fragment() {
|
|||||||
|
|
||||||
private fun initViews() {
|
private fun initViews() {
|
||||||
binding.btnKit.visibility = View.GONE
|
binding.btnKit.visibility = View.GONE
|
||||||
binding.btnSubmit.visibility = View.GONE
|
|
||||||
binding.etBloodGroup.visibility = View.GONE
|
|
||||||
listenToHemoCube()
|
listenToHemoCube()
|
||||||
getBufferdiagnostics()
|
binding.btnSubmit.setOnClickListener {
|
||||||
|
listenToHemoCube()
|
||||||
|
getBufferdiagnostics()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -91,106 +92,16 @@ class DiagnosticsFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun listenToHemoCube() {
|
|
||||||
if (DataHolder.hemoCubeTestData == null) {
|
|
||||||
DataHolder.hemoCubeTestData = DataHolder.selectedTest?.toHemoCubeTestData()
|
|
||||||
}
|
|
||||||
|
|
||||||
val fullReadOutput = StringBuilder()
|
|
||||||
startListening.postValue(true)
|
|
||||||
|
|
||||||
try {
|
|
||||||
(activity as DiagnosticsActivity).mService.listenToHemoCube(object :
|
|
||||||
UsbServiceListener {
|
|
||||||
override fun onUsbRead(data: ByteArray?) {
|
|
||||||
data?.let {
|
|
||||||
val stringData = String(it)
|
|
||||||
fullReadOutput.append(stringData)
|
|
||||||
handleUsbData(stringData, fullReadOutput)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUsbError(e: Exception?) {
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e: Exception) {
|
|
||||||
showToast("test is going on")
|
|
||||||
Firebase.crashlytics.recordException(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun handleUsbData(stringData: String, fullReadOutput: StringBuilder) {
|
|
||||||
if (stringData.contains("#")) {
|
|
||||||
messages.postValue(stringData)
|
|
||||||
isTestOngoing = true
|
|
||||||
}
|
|
||||||
|
|
||||||
resultData += fullReadOutput.toString()
|
|
||||||
|
|
||||||
when {
|
|
||||||
// stringData.contains("ERROR 500") -> showError500Dialog()
|
|
||||||
// stringData.contains("ERROR 501") -> showError501Dialog()
|
|
||||||
// stringData.contains("#Buffer Completed") -> showStartSampleDialog()
|
|
||||||
// stringData.contains("#Sample Completed") -> fetchResult()
|
|
||||||
|
|
||||||
stringData.contains("RESULT") || resultData.contains("REND") -> {
|
|
||||||
var validString: String
|
|
||||||
val results: List<String>
|
|
||||||
if (stringData.contains("RESULT")) {
|
|
||||||
validString = isValidResult(stringData)
|
|
||||||
if (validString.isEmpty()) {
|
|
||||||
results = resultData.split("\n")
|
|
||||||
validString = parseResult(results)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
results = resultData.split("\n")
|
|
||||||
validString = parseResult(results)
|
|
||||||
}
|
|
||||||
if (validString.isNotEmpty()) {
|
|
||||||
// handleValidResult(validString)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun parseResult(frames: List<String>): String {
|
|
||||||
val lines = mutableListOf<String>()
|
|
||||||
for (frame in frames.reversed()) {
|
|
||||||
if (frame.contains("REND") || frame.contains("RESULT")) lines += frame
|
|
||||||
if (frame.contains("RESULT")) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val line = lines.reversed().joinToString("").trim()
|
|
||||||
if (line.contains("RESULT") && line.split(" ").size == 8) {
|
|
||||||
return line
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun isValidResult(line: String): String {
|
|
||||||
return if (line.contains("RESULT") && line.split(" ").size == 8) {
|
|
||||||
line
|
|
||||||
} else {
|
|
||||||
""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun showToast(message: String) {
|
|
||||||
Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun getBufferdiagnostics() {
|
private fun getBufferdiagnostics() {
|
||||||
diagnosticsViewModel.progressBar.postValue(true)
|
diagnosticsViewModel.progressBar.postValue(true)
|
||||||
(activity as DiagnosticsActivity).mService.sendAndListenToHemoCube(
|
(activity as DiagnosticsActivity).mService.sendAndListenToHemoCube(
|
||||||
HemoCubeCommands.getBuffer,
|
HemoCubeCommands.getBuffer,
|
||||||
object : UsbServiceListener {
|
object : UsbServiceListener {
|
||||||
override fun onUsbRead(data: ByteArray?) {}
|
override fun onUsbRead(data: ByteArray?) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
override fun onUsbError(e: Exception?) {
|
override fun onUsbError(e: Exception?) {
|
||||||
diagnosticsViewModel.progressBar.postValue(false)
|
diagnosticsViewModel.progressBar.postValue(false)
|
||||||
}
|
}
|
||||||
@@ -199,9 +110,54 @@ class DiagnosticsFragment : Fragment() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private fun listenToHemoCube() {
|
||||||
|
|
||||||
|
val fullReadOutput = StringBuilder()
|
||||||
|
startListening.postValue(true)
|
||||||
|
|
||||||
|
try {
|
||||||
|
(activity as DiagnosticsActivity).mService.listenToHemoCube(object : UsbServiceListener {
|
||||||
|
override fun onUsbRead(data: ByteArray?) {
|
||||||
|
data?.let {
|
||||||
|
val stringData = String(it)
|
||||||
|
fullReadOutput.append(stringData)
|
||||||
|
}
|
||||||
|
val inputData = mutableListOf<String>()
|
||||||
|
while (true) {
|
||||||
|
if (fullReadOutput.toString().lowercase() == "end") {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
inputData.add(fullReadOutput.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
val parsedData = parseData(inputData)
|
||||||
|
Log.i("D-Data", parsedData.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onUsbError(e: Exception?) {
|
||||||
|
diagnosticsViewModel.progressBar.postValue(false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Firebase.crashlytics.recordException(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun parseData(inputData: List<String>): List<Pair<String, String>> {
|
||||||
|
val pattern = Regex("([A-Z]+)\\s(\\d+)")
|
||||||
|
val parsedData = mutableListOf<Pair<String, String>>()
|
||||||
|
|
||||||
|
for (item in inputData) {
|
||||||
|
val matchResult = pattern.find(item)
|
||||||
|
if (matchResult != null) {
|
||||||
|
val (letters, numbers) = matchResult.destructured
|
||||||
|
parsedData.add(Pair(letters, numbers))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parsedData
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -15,8 +15,8 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="24dp"
|
android:layout_marginHorizontal="24dp"
|
||||||
|
android:text="@string/diagnostics"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:text="@string/Instructions"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
@@ -27,7 +27,6 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="24dp"
|
android:layout_marginHorizontal="24dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:text="@string/step4"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/tv_title" />
|
app:layout_constraintTop_toBottomOf="@id/tv_title" />
|
||||||
@@ -38,8 +37,8 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="24dp"
|
android:layout_marginHorizontal="24dp"
|
||||||
|
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:text="@string/step5"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/tv_subtitle2" />
|
app:layout_constraintTop_toBottomOf="@id/tv_subtitle2" />
|
||||||
@@ -99,33 +98,12 @@
|
|||||||
android:layout_marginHorizontal="16dp"
|
android:layout_marginHorizontal="16dp"
|
||||||
android:layout_marginTop="24dp"
|
android:layout_marginTop="24dp"
|
||||||
android:clickable="false"
|
android:clickable="false"
|
||||||
android:text="@string/submit"
|
android:text="@string/diagnostics"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/til_blood_group" />
|
app:layout_constraintTop_toBottomOf="@id/tv_subtitle4" />
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:id="@+id/til_blood_group"
|
|
||||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginHorizontal="24dp"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/tv_subtitle4">
|
|
||||||
|
|
||||||
<AutoCompleteTextView
|
|
||||||
android:id="@+id/et_blood_group"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:hint="@string/select_blood_group"
|
|
||||||
android:inputType="none"
|
|
||||||
android:labelFor="@id/til_blood_group"
|
|
||||||
app:simpleItems="@array/blood_group" />
|
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/btn_kit"
|
android:id="@+id/btn_kit"
|
||||||
|
|||||||
@@ -21,4 +21,16 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_diagnostics"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:layout_marginTop="24dp"
|
||||||
|
android:clickable="false"
|
||||||
|
android:text="@string/diagnostics"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/btn_submit" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -112,6 +112,7 @@
|
|||||||
<string name="sickle_cert">Sickle Cert</string>
|
<string name="sickle_cert">Sickle Cert</string>
|
||||||
<string name="sickle_find">Sickle Find</string>
|
<string name="sickle_find">Sickle Find</string>
|
||||||
<string name="submit">Submit</string>
|
<string name="submit">Submit</string>
|
||||||
|
<string name="diagnostics">Device Diagnostics</string>
|
||||||
<string name="place_buffer">Start Buffer</string>
|
<string name="place_buffer">Start Buffer</string>
|
||||||
<string name="Start_Sample">Start Sample</string>
|
<string name="Start_Sample">Start Sample</string>
|
||||||
<string name="new_kit">New Kit</string>
|
<string name="new_kit">New Kit</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user