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

View file

@ -30,7 +30,7 @@ import java.lang.ref.WeakReference
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
lateinit var garmin: Garmin // lateinit var garmin: Garmin
private lateinit var binding: ActivityMainBinding private lateinit var binding: ActivityMainBinding
private lateinit var mapControl: MapControl private lateinit var mapControl: MapControl
@ -95,8 +95,8 @@ class MainActivity : AppCompatActivity() {
Log.d(TAG, device.name) Log.d(TAG, device.name)
device.name.equals("GARMIN HUD") device.name.equals("GARMIN HUD")
}?.apply { }?.apply {
garmin = Garmin(context, this, bluetoothAdapter) Garmin.instance = Garmin(context, this, bluetoothAdapter)
garmin.start() 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.api.MapboxRouteLineView
import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineApiOptions import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineApiOptions
import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineViewOptions import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineViewOptions
import eu.ztsh.garmin.Garmin
import eu.ztsh.garmin.UI import eu.ztsh.garmin.UI
class RouteControl(private val mapControl: MapControl, ui: UI, private val context: Context) { 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.visibility = View.VISIBLE
mapControl.ui.maneuverView.renderManeuvers(maneuvers) mapControl.ui.maneuverView.renderManeuvers(maneuvers)
Garmin.instance.process(it[0])
/* // dump(maneuvers.value[0])
dump(maneuvers.value[0])
garmin.process(maneuvers.value[0])
*/
} }
) )