diff --git a/src/ConnectionSettingsModal.js b/src/ConnectionSettingsModal.js index 54c39a0..6e7f6a5 100644 --- a/src/ConnectionSettingsModal.js +++ b/src/ConnectionSettingsModal.js @@ -64,6 +64,11 @@ const CONNECTION_TYPES = { WEBSOCKET: 'websocket' }; +const SERIAL_PROTOCOLS = { + MAVLINK: 'mavlink', + SLCAN: 'slcan' +}; + // Add this constant inside the ConnectionSettingsModal.js file, outside the component const INTERFACE_BUS_LIST = [0, 1]; //BUS 1, BUS 2 @@ -85,6 +90,7 @@ const ConnectionSettingsModal = ({ const [ports, setPorts] = useState([]); const [selectedPort, setSelectedPort] = useState(null); const [baudRate, setBaudRate] = useState(DEFAULT_BAUD_RATE); + const [serialProtocol, setSerialProtocol] = useState(SERIAL_PROTOCOLS.MAVLINK); const [wsHost, setWsHost] = useState(DEFAULT_WS_HOST); const [wsPort, setWsPort] = useState(DEFAULT_WS_PORT); @@ -93,6 +99,7 @@ const ConnectionSettingsModal = ({ // Track active connection const [activeConnection, setActiveConnection] = useState(null); // null, 'serial', or 'websocket' + const [activeSerialProtocol, setActiveSerialProtocol] = useState(null); // Add these state variables after your other state declarations const [hostError, setHostError] = useState(''); @@ -237,9 +244,10 @@ const ConnectionSettingsModal = ({ if (activeConnection === 'serial') { // Disconnect using close() window.mavlinkSession.close(); - + // Update the UI regardless of connection state setActiveConnection(null); + setActiveSerialProtocol(null); onConnectionStatusChange(false); showMessage('Serial connection closed', 'info'); @@ -264,25 +272,28 @@ const ConnectionSettingsModal = ({ } } - window.mavlinkSession.initWebSerialConnection(port, baudRate); + window.mavlinkSession.initWebSerialConnection(port, baudRate, { protocol: serialProtocol }); window.mavlinkSession.addWebSerialOpenHandler(() => { // Set Node ID and Bus for the local node window.localNode.setNodeId(parseInt(nodeId, 10)); - window.localNode.setBus(selectedBus); + window.localNode.setBus(selectedBus); + + if (serialProtocol === SERIAL_PROTOCOLS.MAVLINK) { + const intervalId = setInterval(() => { + if (window.mavlinkSession) { + window.mavlinkSession.enableMavlinkCanForward(window.localNode.bus); + } + }, 1000); + setForwardingInterval(intervalId); + } else { + setForwardingInterval(null); + } - - // Start the mavlinkCanForward interval - const intervalId = setInterval(() => { - if (window.mavlinkSession) { - window.mavlinkSession.enableMavlinkCanForward(window.localNode.bus); - } - }, 1000); - - setForwardingInterval(intervalId); setActiveConnection('serial'); + setActiveSerialProtocol(serialProtocol); setConnectionInProgress(false); onConnectionStatusChange(true); - showMessage('Serial connection established', 'success'); + showMessage(`Serial ${serialProtocol === SERIAL_PROTOCOLS.SLCAN ? 'SLCAN' : 'MAVLink'} connection established`, 'success'); }) window.mavlinkSession.addWebSerialErrorHandler((error) => { @@ -404,6 +415,7 @@ const ConnectionSettingsModal = ({ // Force close the connection window.mavlinkSession.close(); setActiveConnection(null); + setActiveSerialProtocol(null); onConnectionStatusChange(false); showMessage('WebSocket connection closed', 'info'); if (forwardingInterval) { @@ -447,6 +459,7 @@ const ConnectionSettingsModal = ({ }, 1000); setForwardingInterval(intervalId); setActiveConnection('websocket'); + setActiveSerialProtocol(null); onConnectionStatusChange(true); setConnectionInProgress(false); showMessage('WebSocket connection established', 'success'); @@ -511,9 +524,9 @@ const ConnectionSettingsModal = ({ Adapter Settings {activeConnection && ( - @@ -586,7 +599,19 @@ const ConnectionSettingsModal = ({ - + + + Serial Protocol + + + {/* Port action buttons */}