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 */}