update vail to add decoder

This commit is contained in:
Michael 2024-11-03 12:17:10 -06:00
parent 82fd49723f
commit 775bbc904c
2 changed files with 39 additions and 0 deletions

View File

@ -211,6 +211,13 @@
</div>
</div>
<div class="column">
<div class="box">
<h2 class="title">Decoded</h2>
<textarea id="decodedMorse" class="textarea" style="white-space: pre-wrap;"></textarea>
</div>
</div>
<div class="column">
<div class="box">
<h2 class="title" data-i18n="heading.notes" data-i18n="heading.notes"></h2>

View File

@ -8,6 +8,7 @@ import * as time from "./time.mjs"
import * as Music from "./music.mjs"
import * as Icon from "./icon.mjs"
import * as Noise from "./noise.mjs"
import { Decoder } from "./decoder.js";
const DefaultRepeater = "General"
@ -79,6 +80,10 @@ class VailClient {
initLog("Setting up input methods")
this.inputs = new Inputs.Collection(this)
// Instantiate the Decoder
initLog("Setting up the decoder")
this.decoder = new Decoder(letter => this.updateDecodedText(letter));
initLog("Listening on AudioContext")
document.body.addEventListener(
"click",
@ -200,12 +205,17 @@ class VailClient {
this.outputs.Buzz(false)
this.icon.Set("rx")
// Start decoding the tone
this.decoder.keyOn(); // Let the decoder know a tone is being played
if (this.rxChart) this.rxChart.Set(1)
}
Silence() {
this.outputs.Silence()
if (this.rxChart) this.rxChart.Set(0)
// Stop decoding the tone
this.decoder.keyOff(); // Let the decoder know the tone has stopped
}
BuzzDuration(tx, when, duration) {
@ -222,6 +232,16 @@ class VailClient {
chart.SetAt(1, when)
chart.SetAt(0, when+duration)
}
// Inform the decoder about tone events
if (!tx) {
// For received tones
setTimeout(() => {
this.decoder.keyOn(); // Start decoding the tone
setTimeout(() => {
this.decoder.keyOff(); // Stop decoding the tone after the duration
}, duration);
}, when - Date.now());
}
}
/**
@ -232,6 +252,8 @@ class VailClient {
BeginTx() {
this.beginTxTime = Date.now()
this.outputs.Buzz(true)
// Inform the decoder about tone start
this.decoder.keyOn();
if (this.txChart) this.txChart.Set(1)
}
@ -249,6 +271,8 @@ class VailClient {
let duration = endTxTime - this.beginTxTime
this.outputs.Silence(true)
this.repeater.Transmit(this.beginTxTime, duration)
// Inform the decoder about tone stop
this.decoder.keyOff();
this.beginTxTime = null
if (this.txChart) this.txChart.Set(0)
}
@ -461,6 +485,14 @@ class VailClient {
this.updateReading("#clock-off-value", this.clockOffset)
}
updateDecodedText(letter) {
const decodedTextArea = document.getElementById('decodedMorse');
if (decodedTextArea && letter) {
decodedTextArea.value += letter; // Append the new letter to the decoded Morse text area
decodedTextArea.scrollTop = decodedTextArea.scrollHeight; // Scroll to the bottom
}
}
/**
* Update an element with a value, if that element exists
*