Added frequency reporting to PassReporter.kt

This commit is contained in:
Arty Bishop committed 2021-10-27 21:47:02 +01:00
1 parent 09f35579dc
commit 84240c94c6
5 files changed
+63 -49

No files matched your search

@@ -1,34 +0,0 @@
package com.rtbishop.look4sat.framework
import com.rtbishop.look4sat.data.DataReporter
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import java.io.BufferedWriter
import java.net.Socket
class NetDataReporter(private val reporterDispatcher: CoroutineDispatcher) : DataReporter {
private var rotatorSocket: Socket? = null
private var rotatorWriter: BufferedWriter? = null
override suspend fun setRotatorSocket(server: String, port: Int) {
withContext(reporterDispatcher) {
runCatching {
rotatorSocket = Socket(server, port)
rotatorWriter = rotatorSocket?.getOutputStream()?.bufferedWriter()
}.onFailure { println(it.localizedMessage) }
}
}
override suspend fun reportRotation(azim: Double, elev: Double) {
withContext(reporterDispatcher) {
runCatching {
rotatorWriter?.let { writer ->
writer.write("\\set_pos $azim $elev")
writer.newLine()
writer.flush()
}
}.onFailure { println(it.localizedMessage) }
}
}
}
@@ -22,8 +22,8 @@ import android.content.SharedPreferences
import android.location.LocationManager
import androidx.room.Room
import com.rtbishop.look4sat.data.*
import com.rtbishop.look4sat.domain.PassReporter
import com.rtbishop.look4sat.domain.Predictor
import com.rtbishop.look4sat.framework.NetDataReporter
import com.rtbishop.look4sat.framework.PreferencesProvider
import com.rtbishop.look4sat.framework.api.RemoteSource
import com.rtbishop.look4sat.framework.api.SatelliteService
@@ -112,7 +112,7 @@ object SatelliteDataModule {
@Provides
@Singleton
fun provideDataReporter(@IoDispatcher dispatcher: CoroutineDispatcher): DataReporter {
return NetDataReporter(dispatcher)
fun provideDataReporter(@IoDispatcher dispatcher: CoroutineDispatcher): PassReporter {
return PassReporter(dispatcher)
}
}
@@ -18,7 +18,7 @@
package com.rtbishop.look4sat.presentation.radarScreen
import androidx.lifecycle.*
import com.rtbishop.look4sat.data.DataReporter
import com.rtbishop.look4sat.domain.PassReporter
import com.rtbishop.look4sat.data.PreferencesSource
import com.rtbishop.look4sat.data.SatelliteRepo
import com.rtbishop.look4sat.domain.Predictor
@@ -41,7 +41,7 @@ class RadarViewModel @Inject constructor(
private val preferences: PreferencesSource,
private val predictor: Predictor,
private val satelliteRepo: SatelliteRepo,
private val dataReporter: DataReporter
private val passReporter: PassReporter
) : ViewModel(), OrientationProvider.OrientationListener {
private val stationPos = preferences.loadStationPosition()
@@ -80,7 +80,7 @@ class RadarViewModel @Inject constructor(
var satTrack: List<SatPos> = emptyList()
val rotatorPrefs = preferences.getRotatorServer()
if (rotatorPrefs != null) {
dataReporter.setRotatorSocket(rotatorPrefs.first, rotatorPrefs.second)
passReporter.setupRotatorSocket(rotatorPrefs.first, rotatorPrefs.second)
}
if (!satPass.isDeepSpace) {
val startDate = Date(satPass.aosTime)
@@ -91,7 +91,7 @@ class RadarViewModel @Inject constructor(
val satPos = predictor.getSatPos(satPass.satellite, stationPos, Date())
val azimuth = Math.toDegrees(satPos.azimuth).round(1)
val elevation = Math.toDegrees(satPos.elevation).round(1)
dataReporter.reportRotation(azimuth, elevation)
passReporter.reportRotation(azimuth, elevation)
_passData.postValue(RadarData(satPos, satTrack))
delay(1000)
}
@@ -1,8 +0,0 @@
package com.rtbishop.look4sat.data
interface DataReporter {
suspend fun setRotatorSocket(server: String, port: Int)
suspend fun reportRotation(azim: Double, elev: Double)
}
@@ -0,0 +1,56 @@
package com.rtbishop.look4sat.domain
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import java.io.BufferedWriter
import java.net.Socket
class PassReporter(private val reporterDispatcher: CoroutineDispatcher) {
private var radioSocket: Socket? = null
private var radioWriter: BufferedWriter? = null
private var rotatorSocket: Socket? = null
private var rotatorWriter: BufferedWriter? = null
suspend fun setupRadioSocket(server: String, port: Int) {
withContext(reporterDispatcher) {
runCatching {
radioSocket = Socket(server, port)
radioWriter = rotatorSocket?.getOutputStream()?.bufferedWriter()
}.onFailure { println(it.localizedMessage) }
}
}
suspend fun reportFrequency(freq: Long) {
withContext(reporterDispatcher) {
runCatching {
rotatorWriter?.let { writer ->
writer.write("\\set_freq $freq")
writer.newLine()
writer.flush()
}
}.onFailure { println(it.localizedMessage) }
}
}
suspend fun setupRotatorSocket(server: String, port: Int) {
withContext(reporterDispatcher) {
runCatching {
rotatorSocket = Socket(server, port)
rotatorWriter = rotatorSocket?.getOutputStream()?.bufferedWriter()
}.onFailure { println(it.localizedMessage) }
}
}
suspend fun reportRotation(azim: Double, elev: Double) {
withContext(reporterDispatcher) {
runCatching {
rotatorWriter?.let { writer ->
writer.write("\\set_pos $azim $elev")
writer.newLine()
writer.flush()
}
}.onFailure { println(it.localizedMessage) }
}
}
}