Skip to content

Commit 1430825

Browse files
author
Dr. Brandon Wiley
committed
Callsigns need a number
1 parent cb85df0 commit 1430825

File tree

1 file changed

+31
-31
lines changed
  • Codex/src/main/java/org/operatorfoundation/codex/symbols

1 file changed

+31
-31
lines changed

Codex/src/main/java/org/operatorfoundation/codex/symbols/WSPRMessage.kt

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package org.operatorfoundation.codex.symbols
2-
import android.telecom.Call
32
import java.math.BigInteger
43
import org.operatorfoundation.codex.*
54

65
class WSPRMessage(
7-
val prefix: Required,
8-
val callsign1: CallLetterNumber,
9-
val callsign2: CallLetterNumber,
10-
val callsign3: CallLetterNumber,
11-
val callsign4: CallLetterNumber,
12-
val callsign5: CallLetterNumber,
6+
val prefix: Required, // Q (position 1)
7+
val callsign1: CallLetter, // Letter (position 2)
8+
val callsign2: CallNumber, // Number (position 3) - MUST be a digit
9+
val callsign3: CallLetter, // Letter (position 4)
10+
val callsign4: CallLetter, // Letter (position 5)
11+
val callsign5: CallLetter, // Letter (position 6)
1312
val grid1: GridLetter,
1413
val grid2: GridLetter,
1514
val grid3: GridNumber,
@@ -18,12 +17,14 @@ class WSPRMessage(
1817
) : Symbol {
1918
companion object : SymbolFactory<WSPRMessage> {
2019
override fun size(): BigInteger {
21-
val callsignCapacity = BigInteger.valueOf(CallLetterNumber.size().toLong()).pow(5)
20+
val callLetterCapacity = BigInteger.valueOf(CallLetter.size().toLong()).pow(4) // 4 letter positions
21+
val callNumberCapacity = CallNumber.size() // 1 number position
2222
val gridLetterCapacity = BigInteger.valueOf(GridLetter.size().toLong()).pow(2)
2323
val gridNumberCapacity = BigInteger.valueOf(GridNumber.size().toLong()).pow(2)
2424
val powerCapacity = Power.size()
2525

26-
return callsignCapacity
26+
return callLetterCapacity
27+
.multiply(callNumberCapacity)
2728
.multiply(gridLetterCapacity)
2829
.multiply(gridNumberCapacity)
2930
.multiply(powerCapacity)
@@ -62,34 +63,34 @@ class WSPRMessage(
6263
val grid1 = GridLetter.encode(value)
6364
remaining = remaining.divide(size)
6465

65-
// callsign5
66-
size = CallLetterNumber.size()
66+
// callsign5 - Letter
67+
size = CallLetter.size()
6768
value = remaining.mod(size)
68-
val callsign5 = CallLetterNumber.encode(value)
69+
val callsign5 = CallLetter.encode(value)
6970
remaining = remaining.divide(size)
7071

71-
// callsign4
72-
size = CallLetterNumber.size()
72+
// callsign4 - Letter
73+
size = CallLetter.size()
7374
value = remaining.mod(size)
74-
val callsign4 = CallLetterNumber.encode(value)
75+
val callsign4 = CallLetter.encode(value)
7576
remaining = remaining.divide(size)
7677

77-
// callsign3
78-
size = CallLetterNumber.size()
78+
// callsign3 - Letter
79+
size = CallLetter.size()
7980
value = remaining.mod(size)
80-
val callsign3 = CallLetterNumber.encode(value)
81+
val callsign3 = CallLetter.encode(value)
8182
remaining = remaining.divide(size)
8283

83-
// callsign2
84-
size = CallLetterNumber.size()
84+
// callsign2 - NUMBER position
85+
size = CallNumber.size()
8586
value = remaining.mod(size)
86-
val callsign2 = CallLetterNumber.encode(value)
87+
val callsign2 = CallNumber.encode(value)
8788
remaining = remaining.divide(size)
8889

89-
// callsign1
90-
size = CallLetterNumber.size()
90+
// callsign1 - Letter
91+
size = CallLetter.size()
9192
value = remaining.mod(size)
92-
val callsign1 = CallLetterNumber.encode(value)
93+
val callsign1 = CallLetter.encode(value)
9394
remaining = remaining.divide(size)
9495

9596
require(remaining == BigInteger.ZERO) { "Value $numericValue is too large to encode in WSPR" }
@@ -108,23 +109,23 @@ class WSPRMessage(
108109
var result = BigInteger.ZERO
109110

110111
// Process symbols in order (most significant first in mixed-radix)
111-
var size = CallLetterNumber.size()
112+
var size = CallLetter.size()
112113
var decoded = callsign1.decode()
113114
result = result.multiply(size).add(decoded)
114115

115-
size = CallLetterNumber.size()
116+
size = CallNumber.size() // NUMBER position
116117
decoded = callsign2.decode()
117118
result = result.multiply(size).add(decoded)
118119

119-
size = CallLetterNumber.size()
120+
size = CallLetter.size()
120121
decoded = callsign3.decode()
121122
result = result.multiply(size).add(decoded)
122123

123-
size = CallLetterNumber.size()
124+
size = CallLetter.size()
124125
decoded = callsign4.decode()
125126
result = result.multiply(size).add(decoded)
126127

127-
size = CallLetterNumber.size()
128+
size = CallLetter.size()
128129
decoded = callsign5.decode()
129130
result = result.multiply(size).add(decoded)
130131

@@ -151,8 +152,7 @@ class WSPRMessage(
151152
return result
152153
}
153154

154-
fun extractValues(): Triple<String, String, Int>
155-
{
155+
fun extractValues(): Triple<String, String, Int> {
156156
val callsign = "Q${callsign1.value}${callsign2.value}${callsign3.value}${callsign4.value}${callsign5.value}"
157157
val grid = "${grid1.value}${grid2.value}${grid3.value}${grid4.value}"
158158
val power = power.value

0 commit comments

Comments
 (0)