Also das
Code: Alles auswählen
EnableJS
async function verbinden() {
g_port = await navigator.serial.requestPort();
await g_port.open({ baudRate: 9600 });
}
verbinden();
DisableJS
SetGadgetText(10, "Serielle Schnittstelle geöffnet")
funktioniert schön. Aber ich wollte jetzt das Programm erweitern. Momentan wird sofort nach dem Klick auf "Verbinden" (das den Schnipsel aufruft) "Serielle Schnittstelle geöffnet" angezeigt, was ja manchmal nicht stimmt. Also das Problem ist, dass der Funktionsaufruf nicht auf das Ende wartet (was ja auch normal zu sein scheint) und ich keine Rückgabewerte bekommen kann. Also weder:
Code: Alles auswählen
EnableJS
async function verbinden() {
try {
g_port = await navigator.serial.requestPort();
await g_port.open({ baudRate: 9600 });
// Erfolgreiche Verbindung, also return null oder eine Erfolgsmeldung
g_fehler = 0;
} catch (err) {
if (err.name === 'AbortError') {
g_fehler = 42;
} else if (err.name === 'NotAllowedError') {
g_fehler = 43;
} else if (err.name === 'SecurityError') {
g_fehler = 44;
} else {
g_fehler = 45;
}
}
}
async function starten() {
await verbinden();
}
//verbinden();
starten();
DisableJS
MessageRequester("Rückgabewert: "+Str(fehler), #PB_MessageRequester_Ok)
SetGadgetText(10, "Serielle Schnittstelle geöffnet")
noch das Gleiche mit return geht nicht. Der Requester für die Schnittstelle erscheint dann gar nicht (bzw. scheint gar nicht zu erscheinen) stattdessen bekomme ich sofort 0 zurück, und beim nächsten Mal 45.
Diese .html Datei mit rein JS funktioniert:
Code: Alles auswählen
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Serial Port Verbindung</title>
</head>
<body>
<button id="connectButton">Verbindung herstellen</button>
<script>
let g_fehler = 0;
async function verbinden() {
try {
const port = await navigator.serial.requestPort(); // Warten auf Benutzerinteraktion
if (!port) {
console.error("Kein Port ausgewählt");
return;
}
await port.open({ baudRate: 9600 });
g_fehler = 0; // Erfolgreiche Verbindung
console.log("Verbindung erfolgreich mit Port:", port);
} catch (err) {
// Fehlerbehandlung
if (err.name === 'AbortError') {
g_fehler = 42;
} else if (err.name === 'NotAllowedError') {
g_fehler = 43;
} else if (err.name === 'SecurityError') {
g_fehler = 44;
} else {
g_fehler = 45;
}
console.error("Fehler bei der Verbindung:", err);
}
}
// Benutzerinteraktion auslösen
document.getElementById('connectButton').addEventListener('click', async () => {
await verbinden();
console.log("Fehlercode:", g_fehler);
});
</script>
</body>
</html>
Ich weiss nicht mehr weiter. Ich möchte nur, dass ich weiss, ob die Schnittstelle zur Verfügung steht, und dies beim Drücken anderer Buttons zum Senden verschiedener Strings berücksichtigt wird (Userfreundlichkeit). Momentan funktionierts so:
https://chregu73.github.io/carparameter.html
Gruss Chregu