Skip to content

Commit e93b820

Browse files
committed
backed/DigiRig: Sync RTS signal to audio playback
I originally had some hacky code in here to _hopfeully_ ensure that the RTS signal was raise while packets were being transmitted, but it was only a best-guess attempt. This commit implements an OnPlaybackPositionUpdateListener to tell us exactly when the audio for a packet has finished playing, so we know exactly when to clear the RTS signal.
1 parent 69f6cc3 commit e93b820

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/backend/DigiRig.scala

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import android.content.SharedPreferences
1212
import android.hardware.usb.UsbManager
1313
import android.hardware.usb.UsbDevice
1414
import android.hardware.usb.UsbDeviceConnection
15+
import android.media.AudioTrack.OnPlaybackPositionUpdateListener
1516
import android.util.Log
1617
import java.io.{InputStream, OutputStream}
1718

@@ -59,7 +60,15 @@ class DigiRig(service : AprsService, prefs : PrefsWrapper) extends AfskUploader(
5960
val pendingIntent = PendingIntent.getBroadcast(service, 0, intent, 0)
6061

6162
// Audio stuff
63+
var audioPlaying = false
6264
output.setVolume(AudioTrack.getMaxVolume())
65+
output.setPlaybackPositionUpdateListener(new OnPlaybackPositionUpdateListener {
66+
override def onMarkerReached(audioTrack: AudioTrack): Unit = {
67+
DigiRig.this.audioPlaying = false
68+
}
69+
70+
override def onPeriodicNotification(audioTrack: AudioTrack): Unit = {}
71+
})
6372

6473
val receiver = new BroadcastReceiver() {
6574
override def onReceive(ctx: Context, i: Intent) {
@@ -167,14 +176,11 @@ class DigiRig(service : AprsService, prefs : PrefsWrapper) extends AfskUploader(
167176
Log.d(TAG, "update(): From: " + from + " To: " + to + " Via: " + Digis + " telling " + data)
168177

169178
ser.setRTS(true)
170-
val bits_per_byte = 8
171-
val bits_in_frame = packet.toAX25Frame().length / bits_per_byte
172-
val ms_per_s = 1000
173-
val sleep_ms = bits_in_frame * ms_per_s / 1200 // aprs is 1200 baud
174-
val sleep_pad_ms = 1500
175-
Thread.sleep(sleep_ms + sleep_pad_ms)
179+
audioPlaying = true
176180
val result = sendMessage(msg)
177-
Thread.sleep(sleep_ms + sleep_pad_ms)
181+
while (audioPlaying) {
182+
Thread.sleep(10)
183+
}
178184
ser.setRTS(false)
179185

180186
if (result)

0 commit comments

Comments
 (0)