fix: Proces threading fix

This commit is contained in:
Piotr Dec 2024-07-31 18:38:42 +02:00
parent 116b13adcb
commit 75e10c1579
Signed by: stawros
GPG key ID: F89F27AD8F881A91
3 changed files with 20 additions and 16 deletions

View file

@ -23,7 +23,7 @@ class Garmin(
) {
private lateinit var connection: ConnectThread
private lateinit var processing: ProcessingThread
private val observer = ProcessingThreadObserver()
private val cache = DataCache()
fun start() {
@ -36,15 +36,11 @@ class Garmin(
}
fun process(maneuver: Maneuver) {
processing = ManeuverProcessingThread(maneuver)
processing.start()
processing.join()
ManeuverProcessingThread(maneuver).start()
}
fun process(location: LocationMatcherResult) {
processing = LocationProcessingThread(location)
processing.start()
processing.join()
LocationProcessingThread(location).start()
}
fun process(navigationSessionState: NavigationSessionState) {
@ -83,6 +79,15 @@ class Garmin(
connection.enqueue(GarminMapper.setDirection(incoming))
}
cache.update(incoming)
observer.join(this)
}
}
private inner class ProcessingThreadObserver {
fun join(thread: ProcessingThread) {
thread.join()
}
}
@ -165,6 +170,8 @@ class Garmin(
companion object {
lateinit var instance: Garmin
fun prepareData(input: IntArray): IntArray {
val n = input.size
var crc = (0xeb + n + n).toUInt()

View file

@ -30,7 +30,7 @@ import java.lang.ref.WeakReference
@SuppressLint("MissingPermission")
class MainActivity : AppCompatActivity() {
lateinit var garmin: Garmin
// lateinit var garmin: Garmin
private lateinit var binding: ActivityMainBinding
private lateinit var mapControl: MapControl
@ -95,8 +95,8 @@ class MainActivity : AppCompatActivity() {
Log.d(TAG, device.name)
device.name.equals("GARMIN HUD")
}?.apply {
garmin = Garmin(context, this, bluetoothAdapter)
garmin.start()
Garmin.instance = Garmin(context, this, bluetoothAdapter)
Garmin.instance.start()
}
}

View file

@ -35,6 +35,7 @@ import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi
import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView
import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineApiOptions
import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineViewOptions
import eu.ztsh.garmin.Garmin
import eu.ztsh.garmin.UI
class RouteControl(private val mapControl: MapControl, ui: UI, private val context: Context) {
@ -166,12 +167,8 @@ class RouteControl(private val mapControl: MapControl, ui: UI, private val conte
{
mapControl.ui.maneuverView.visibility = View.VISIBLE
mapControl.ui.maneuverView.renderManeuvers(maneuvers)
/*
dump(maneuvers.value[0])
garmin.process(maneuvers.value[0])
*/
Garmin.instance.process(it[0])
// dump(maneuvers.value[0])
}
)