mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-04 19:57:27 +00:00
Fixed IC-705 frequency read in dual-radio mode (#260)
This commit is contained in:
1 parent
b7ac9c913a
commit
fac319b215
2 files changed
+37
-3
No files matched your search
+4
-3
@@ -330,12 +330,13 @@ object IcomCivProtocol {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse frequency + mode from a CMD_READ_FREQ reply payload.
|
* Parse frequency + mode from a CMD_READ_FREQ reply payload.
|
||||||
* Payload layout after stripping command byte: [5 freq bytes] [mode byte] [filter byte]
|
* Payload layout after stripping command byte: [5 freq bytes]
|
||||||
|
* The IC-705 does not include a mode byte; if one is present it is parsed, otherwise mode is empty.
|
||||||
*/
|
*/
|
||||||
fun parseFreqModePayload(payload: ByteArray): Pair<Long, String>? {
|
fun parseFreqModePayload(payload: ByteArray): Pair<Long, String>? {
|
||||||
if (payload.size < 6) return null
|
if (payload.size < 5) return null
|
||||||
val freqHz = decodeFrequencyBcd(payload.copyOfRange(0, 5))
|
val freqHz = decodeFrequencyBcd(payload.copyOfRange(0, 5))
|
||||||
val mode = BYTE_TO_MODE[payload[5]] ?: return null
|
val mode = if (payload.size > 5) BYTE_TO_MODE[payload[5]] ?: return null else ""
|
||||||
return freqHz to mode
|
return freqHz to mode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package com.rtbishop.look4sat.core.data.framework
|
||||||
|
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertNotNull
|
||||||
|
import org.junit.Assert.assertNull
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class IcomCivProtocolTest {
|
||||||
|
|
||||||
|
private fun bytes(vararg values: Int) = ByteArray(values.size) { values[it].toByte() }
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun parseFreqModePayload_ic705ReadFreqReply() {
|
||||||
|
// Reply captured from an IC-705 to CMD 0x03: frequency only, no mode byte
|
||||||
|
val reply = bytes(0xFE, 0xFE, 0xE0, 0xA4, 0x03, 0x60, 0x74, 0x95, 0x45, 0x01, 0xFD)
|
||||||
|
val response = IcomCivProtocol.parseResponse(reply, IcomCivProtocol.CMD_READ_FREQ)
|
||||||
|
assertNotNull(response)
|
||||||
|
assertEquals(145957460L to "", IcomCivProtocol.parseFreqModePayload(response!!.payload))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun parseFreqModePayload_withModeByte() {
|
||||||
|
assertEquals(
|
||||||
|
435611000L to "USB",
|
||||||
|
IcomCivProtocol.parseFreqModePayload(bytes(0x00, 0x10, 0x61, 0x35, 0x04, 0x01, 0x01))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun parseFreqModePayload_tooShort() {
|
||||||
|
assertNull(IcomCivProtocol.parseFreqModePayload(bytes(0x60, 0x74, 0x95, 0x45)))
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user