Spaces:
Sleeping
Sleeping
| import { useState, useCallback } from 'react'; | |
| import { useStore } from '../store/useStore'; | |
| export const useSerial = () => { | |
| const [port, setPort] = useState<any>(null); | |
| const { setConnectedDevice, setLoading } = useStore(); | |
| const connect = useCallback(async () => { | |
| if (!('serial' in navigator)) { | |
| alert('您的浏览器不支持 Web Serial API'); | |
| return; | |
| } | |
| try { | |
| setLoading(true); | |
| const port = await (navigator as any).serial.requestPort(); | |
| await port.open({ baudRate: 9600 }); | |
| setPort(port); | |
| setConnectedDevice({ | |
| id: 'serial-port', | |
| name: '串口设备', | |
| type: 'serial', | |
| status: 'connected' | |
| }); | |
| console.log('Serial Port Connected'); | |
| } catch (error) { | |
| console.error('Serial Connection Error:', error); | |
| } finally { | |
| setLoading(false); | |
| } | |
| }, [setConnectedDevice, setLoading]); | |
| const disconnect = useCallback(async () => { | |
| if (port) { | |
| await port.close(); | |
| } | |
| setPort(null); | |
| setConnectedDevice(null); | |
| }, [port, setConnectedDevice]); | |
| return { port, connect, disconnect }; | |
| }; | |