diff --git a/src/ui/components/SerialConnectionCard.jsx b/src/ui/components/SerialConnectionCard.jsx index b53b662..87c83b8 100644 --- a/src/ui/components/SerialConnectionCard.jsx +++ b/src/ui/components/SerialConnectionCard.jsx @@ -82,10 +82,21 @@ export default function SerialConnectionCard({port, onRemove, open}) { const { name } = improvState; useEffect(() => { - if (!port.opened) { - port.open({baudRate: useImprovSerial.baudRate}); - } - return () => improv.close(); + (async () => { + if (!port.opened && !open) { + // If the port isn't open yet and the card won't render + // opened anyway briefly open the port to read vendorId + // and productId + await port.open({baudRate: useImprovSerial.baudRate}) + await port.close(); + } + })(); + return async () => { + await improv.close(); + if (port.opened) { + await port.close(); + } + }; }, [port]); const title = name || (vendorId && productId && `usb-${vendorId}-${productId}`) || 'unidentified serial device'; @@ -104,7 +115,12 @@ export default function SerialConnectionCard({port, onRemove, open}) { glyph={} menu={menu} onBeginOpening={() => improv.initialize()} - onDoneClosing={() => improv.close()} + onDoneClosing={async () => { + await improv.close(); + if (port.opened) { + await port.close(); + } + }} > ;