@@ -6,6 +6,7 @@ import kotlinx.coroutines.Dispatchers
66import kotlinx.coroutines.flow.onSubscription
77import kotlinx.coroutines.launch
88import kotlinx.coroutines.coroutineScope
9+ import org.operatorfoundation.audiocoder.mfsk.MFSKMode
910import 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