mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Fixed radar track display bug in RadarViewModel.kt
This commit is contained in:
1 parent
278c06170b
commit
a006d0558a
1 file changed
+19
-25
+19
-25
@@ -27,6 +27,7 @@ import com.rtbishop.look4sat.domain.model.SatRadio
|
|||||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||||
import com.rtbishop.look4sat.domain.predict.SatPos
|
import com.rtbishop.look4sat.domain.predict.SatPos
|
||||||
|
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||||
import com.rtbishop.look4sat.framework.OrientationManager
|
import com.rtbishop.look4sat.framework.OrientationManager
|
||||||
import com.rtbishop.look4sat.utility.DataReporter
|
import com.rtbishop.look4sat.utility.DataReporter
|
||||||
import com.rtbishop.look4sat.utility.round
|
import com.rtbishop.look4sat.utility.round
|
||||||
@@ -35,7 +36,6 @@ import dagger.hilt.android.lifecycle.HiltViewModel
|
|||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.isActive
|
import kotlinx.coroutines.isActive
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.*
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
@@ -61,9 +61,17 @@ class RadarViewModel @Inject constructor(
|
|||||||
val pass = passes.find { pass -> pass.catNum == catNum && pass.aosTime == aosTime }
|
val pass = passes.find { pass -> pass.catNum == catNum && pass.aosTime == aosTime }
|
||||||
pass?.let { satPass ->
|
pass?.let { satPass ->
|
||||||
emit(satPass)
|
emit(satPass)
|
||||||
sendPassData(satPass)
|
val transmitters = repository.getRadiosWithId(satPass.catNum)
|
||||||
sendPassDataBT(satPass)
|
viewModelScope.launch {
|
||||||
processTransmitters(satPass)
|
while (isActive) {
|
||||||
|
val timeNow = System.currentTimeMillis()
|
||||||
|
val satPos = satManager.getPosition(satPass.satellite, stationPos, timeNow)
|
||||||
|
sendPassData(satPass, satPos, satPass.satellite)
|
||||||
|
sendPassDataBT(satPos)
|
||||||
|
processRadios(transmitters, satPass.satellite, timeNow)
|
||||||
|
delay(1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,15 +98,12 @@ class RadarViewModel @Inject constructor(
|
|||||||
return GeomagneticField(latitude, longitude, 0f, time).declination
|
return GeomagneticField(latitude, longitude, 0f, time).declination
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sendPassData(satPass: SatPass) {
|
private fun sendPassData(satPass: SatPass, satPos: SatPos, satellite: Satellite) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
var satTrack: List<SatPos> = emptyList()
|
var track: List<SatPos> = emptyList()
|
||||||
if (!satPass.isDeepSpace) {
|
if (!satPass.isDeepSpace) {
|
||||||
satTrack = satManager
|
track = satManager.getTrack(satellite, stationPos, satPass.aosTime, satPass.losTime)
|
||||||
.getTrack(satPass.satellite, stationPos, satPass.aosTime, satPass.losTime)
|
|
||||||
}
|
}
|
||||||
while (isActive) {
|
|
||||||
val satPos = satManager.getPosition(satPass.satellite, stationPos, Date().time)
|
|
||||||
if (settings.getRotatorEnabled()) {
|
if (settings.getRotatorEnabled()) {
|
||||||
val server = settings.getRotatorServer()
|
val server = settings.getRotatorServer()
|
||||||
val port = settings.getRotatorPort().toInt()
|
val port = settings.getRotatorPort().toInt()
|
||||||
@@ -106,16 +111,12 @@ class RadarViewModel @Inject constructor(
|
|||||||
val elevation = satPos.elevation.toDegrees().round(1)
|
val elevation = satPos.elevation.toDegrees().round(1)
|
||||||
reporter.reportRotation(server, port, azimuth, elevation)
|
reporter.reportRotation(server, port, azimuth, elevation)
|
||||||
}
|
}
|
||||||
_passData.postValue(RadarData(satPos, satTrack))
|
_passData.postValue(RadarData(satPos, track))
|
||||||
delay(1000)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sendPassDataBT(satPass: SatPass) {
|
private fun sendPassDataBT(satPos: SatPos) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
while (isActive) {
|
|
||||||
val satPos = satManager.getPosition(satPass.satellite, stationPos, Date().time)
|
|
||||||
if (settings.getBTEnabled()) {
|
if (settings.getBTEnabled()) {
|
||||||
val btDevice = settings.getBTDeviceAddr()
|
val btDevice = settings.getBTDeviceAddr()
|
||||||
if (btReporter.isConnected()) {
|
if (btReporter.isConnected()) {
|
||||||
@@ -128,21 +129,14 @@ class RadarViewModel @Inject constructor(
|
|||||||
btReporter.connectBTDevice(btDevice)
|
btReporter.connectBTDevice(btDevice)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delay(1000)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processTransmitters(pass: SatPass) {
|
private fun processRadios(radios: List<SatRadio>, satellite: Satellite, time: Long) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
delay(125)
|
delay(125)
|
||||||
val transmitters = repository.getRadiosWithId(pass.catNum)
|
val list = satManager.processRadios(satellite, stationPos, radios, time)
|
||||||
while (isActive) {
|
|
||||||
val time = System.currentTimeMillis()
|
|
||||||
val list = satManager.processRadios(pass.satellite, stationPos, transmitters, time)
|
|
||||||
_transmitters.postValue(list)
|
_transmitters.postValue(list)
|
||||||
delay(1000)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user