support multiple named serial connections, change default baudrate to 115200 (#551)

This commit is contained in:
Alex McLean 2023-11-10 11:17:35 +00:00 committed by GitHub
parent d02450c0d9
commit d25851ac17
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -6,23 +6,23 @@ This program is free software: you can redistribute it and/or modify it under th
import { Pattern, isPattern } from '@strudel.cycles/core'; import { Pattern, isPattern } from '@strudel.cycles/core';
var writeMessage; var writeMessagers = {};
var choosing = false; var choosing = false;
export async function getWriter(br = 38400) { export async function getWriter(name, br) {
if (choosing) { if (choosing) {
return; return;
} }
choosing = true; choosing = true;
if (writeMessage) { if (name in writeMessagers) {
return writeMessage; return writeMessagers[name];
} }
if ('serial' in navigator) { if ('serial' in navigator) {
const port = await navigator.serial.requestPort(); const port = await navigator.serial.requestPort();
await port.open({ baudRate: br }); await port.open({ baudRate: br });
const encoder = new TextEncoder(); const encoder = new TextEncoder();
const writer = port.writable.getWriter(); const writer = port.writable.getWriter();
writeMessage = function (message, chk) { writeMessagers[name] = function (message, chk) {
const encoded = encoder.encode(message); const encoded = encoder.encode(message);
if (!chk) { if (!chk) {
writer.write(encoded); writer.write(encoded);
@ -63,10 +63,10 @@ function crc16(data) {
return crc & 0xffff; return crc & 0xffff;
} }
Pattern.prototype.serial = function (br = 38400, sendcrc = false, singlecharids = false) { Pattern.prototype.serial = function (br = 115200, sendcrc = false, singlecharids = false, name = 'default') {
return this.withHap((hap) => { return this.withHap((hap) => {
if (!writeMessage) { if (!(name in writeMessagers)) {
getWriter(br); getWriter(name, br);
} }
const onTrigger = (time, hap, currentTime) => { const onTrigger = (time, hap, currentTime) => {
var message = ''; var message = '';
@ -108,7 +108,7 @@ Pattern.prototype.serial = function (br = 38400, sendcrc = false, singlecharids
const offset = (time - currentTime + latency) * 1000; const offset = (time - currentTime + latency) * 1000;
window.setTimeout(function () { window.setTimeout(function () {
writeMessage(message, chk); writeMessagers[name](message, chk);
}, offset); }, offset);
}; };
return hap.setContext({ ...hap.context, onTrigger, dominantTrigger: true }); return hap.setContext({ ...hap.context, onTrigger, dominantTrigger: true });