mirror of
https://github.com/TeamVanced/VancedMicroG
synced 2025-01-02 15:45:56 +01:00
ENF: Handle issue with negative or 0 durations due to system time changes
With time synchronisation and can happen that timestamps in database are newer than reported system time, which then can lead to reported exposure with multiple measurements but negative or zero reported duration, resulting in divide-by-zero and other issues in average RSSI calculation. This fixes the issue, by ignoring new measurements of the same RPI when they are seemingly older than a previous measurement.
This commit is contained in:
parent
d16d438350
commit
110157dab8
@ -184,7 +184,7 @@ class ExposureDatabase private constructor(private val context: Context) : SQLit
|
||||
}
|
||||
|
||||
fun noteAdvertisement(rpi: ByteArray, aem: ByteArray, rssi: Int, timestamp: Long = Date().time) = writableDatabase.run {
|
||||
val update = compileStatement("UPDATE $TABLE_ADVERTISEMENTS SET rssi = ((rssi * duration) + (? * (? - timestamp - duration))) / (? - timestamp), duration = (? - timestamp) WHERE rpi = ? AND timestamp > ? AND timestamp < ?").run {
|
||||
val update = compileStatement("UPDATE $TABLE_ADVERTISEMENTS SET rssi = IFNULL(((rssi * duration) + (? * MIN(0, ? - timestamp - duration))) / MAX(duration, ? - timestamp), -100), duration = MAX(duration, ? - timestamp) WHERE rpi = ? AND timestamp > ? AND timestamp < ?").run {
|
||||
bindLong(1, rssi.toLong())
|
||||
bindLong(2, timestamp)
|
||||
bindLong(3, timestamp)
|
||||
|
Loading…
Reference in New Issue
Block a user