Skip to content

Commit 6b2130b

Browse files
committed
Moved ToneMode mapping to MFSKAndFlmsgEncoder
1 parent ff9ae3e commit 6b2130b

1 file changed

Lines changed: 25 additions & 5 deletions

File tree

AudioCoder/src/main/java/org/operatorfoundation/audiocoder/mfsk_andflmsg/MFSKAndFlmsgEncoder.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import kotlinx.coroutines.Dispatchers
66
import kotlinx.coroutines.flow.onSubscription
77
import kotlinx.coroutines.launch
88
import kotlinx.coroutines.coroutineScope
9+
import org.operatorfoundation.audiocoder.mfsk.MFSKMode
910
import timber.log.Timber
1011

1112
/**
@@ -57,8 +58,14 @@ object MFSKAndFlmsgEncoder
5758
* symbol duration, or [MFSKAndFlmsgEncodeResult.Busy] /
5859
* [MFSKAndFlmsgEncodeResult.Failed] on error.
5960
*/
60-
suspend fun encode(text: String, mode: ToneMode): MFSKAndFlmsgEncodeResult = coroutineScope {
61-
val acquireResult = MFSKAndFlmsgEngine.acquireForTx(mode, TX_FREQUENCY_HZ)
61+
suspend fun encode(text: String, mode: MFSKMode): MFSKAndFlmsgEncodeResult = coroutineScope {
62+
63+
val toneMode = toneMode(mode)
64+
?: return@coroutineScope MFSKAndFlmsgEncodeResult.Failed(
65+
"No fldigi ToneMode mapping for MFSKMode.${mode.label}"
66+
)
67+
val acquireResult = MFSKAndFlmsgEngine.acquireForTx(toneMode, TX_FREQUENCY_HZ)
68+
6269
val handle = when (acquireResult)
6370
{
6471
is TxAcquisitionResult.Success -> acquireResult.handle
@@ -98,7 +105,7 @@ object MFSKAndFlmsgEncoder
98105
if (collectedTones.isEmpty())
99106
{
100107
return@coroutineScope MFSKAndFlmsgEncodeResult.Failed(
101-
"No tones emitted for mode ${mode.name}"
108+
"No tones emitted for mode ${mode.label}"
102109
)
103110
}
104111

@@ -107,10 +114,10 @@ object MFSKAndFlmsgEncoder
107114
}.toLongArray()
108115

109116
val symbolDurationMs =
110-
(collectedTones.first().durationSamples.toDouble() / mode.sampleRate() * 1000).toLong()
117+
(collectedTones.first().durationSamples.toDouble() / toneMode.sampleRate() * 1000).toLong()
111118

112119
Timber.d("MFSKAndFlmsgEncoder: encoded ${collectedTones.size} tones " +
113-
"at ${symbolDurationMs}ms each for mode ${mode.name}")
120+
"at ${symbolDurationMs}ms each for mode ${mode.label}")
114121

115122
MFSKAndFlmsgEncodeResult.Success(symbolFrequenciesCHz, symbolDurationMs)
116123
}
@@ -119,4 +126,17 @@ object MFSKAndFlmsgEncoder
119126
handle.close()
120127
}
121128
}
129+
130+
/**
131+
* Maps an AudioCoder [MFSKMode] to the FldigiAndroid [ToneMode] used internally
132+
* by the fldigi engine. Returns null for modes not yet supported via this path.
133+
*/
134+
private fun toneMode(mode: MFSKMode): ToneMode? = when (mode)
135+
{
136+
MFSKMode.MFSK16 -> ToneMode.MFSK16
137+
MFSKMode.MFSK32 -> ToneMode.MFSK32
138+
MFSKMode.MFSK64 -> ToneMode.MFSK64
139+
MFSKMode.MFSK128 -> ToneMode.MFSK128
140+
else -> null
141+
}
122142
}

0 commit comments

Comments
 (0)