serial pairing

This commit is contained in:
2023-07-05 20:16:22 +02:00
parent f9fea7b585
commit fa0c394d4d
5 changed files with 46 additions and 29 deletions

View File

@@ -1,4 +1,5 @@
import {writable} from "svelte/store"
import {CharaDevice} from "$lib/serial/device.js"
/** @type {import('svelte/store').Writable<import('./device.js').CharaDevice>} */
export const serialPort = writable()
@@ -11,3 +12,21 @@ export const chords = writable([])
/** @type {import('svelte/store').Writable<boolean>} */
export const syncing = writable(false)
/** @type {CharaDevice} */
let device // @hmr:keep
export async function initSerial() {
syncing.set(true)
device ??= new CharaDevice()
serialPort.set(device)
const chordCount = await device.getChordCount()
const chordInfo = []
for (let i = 0; i < chordCount; i++) {
chordInfo.push(await device.getChord(i))
}
chordInfo.sort(({phrase: a}, {phrase: b}) => a.localeCompare(b))
chords.set(chordInfo)
syncing.set(false)
}

View File

@@ -2,6 +2,15 @@ import {LineBreakTransformer} from "$lib/serial/line-break-transformer.js"
import {serialLog} from "$lib/serial/connection.js"
import {ACTION_MAP} from "$lib/serial/webserial/constants/action-map.js"
export const VENDOR_ID = 0x239a
/**
* @returns {Promise<boolean>}
*/
export async function hasSerialPermission() {
return navigator.serial.getPorts().then(it => it.length > 0)
}
export class CharaDevice {
/** @type {Promise<SerialPort>} */
#port
@@ -26,7 +35,9 @@ export class CharaDevice {
*/
constructor(baudRate = 115200) {
this.#port = navigator.serial.getPorts().then(async ports => {
const port = ports.find(it => it.getInfo().usbVendorId === 0x239a)
const port =
ports.find(it => it.getInfo().usbVendorId === VENDOR_ID) ??
(await navigator.serial.requestPort({filters: [{usbVendorId: VENDOR_ID}]}))
await port.open({baudRate})
const info = port.getInfo()
serialLog.update(it => {