diff --git a/src/App.tsx b/src/App.tsx index 71c777c..9459f1f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -15,6 +15,7 @@ import { captureElementPng, downloadDataUrlPng } from './utils/screenshot' import PlotToolsOverlay from './components/PlotToolsOverlay' import TabNav from './components/TabNav' import SerialConsole from './components/SerialConsole' +import ConsoleInput from './components/ConsoleInput' import Footer from './components/Footer' import { exportChartData, type ChartExportOptions } from './utils/chartExport' import { driver } from 'driver.js' @@ -89,6 +90,25 @@ function App() { const dataConnection = useDataConnection(handleIncomingLine) + const handleSendMessage = useCallback(async (message: string) => { + try { + const isControlChar = message.length === 1 && message.charCodeAt(0) < 32 + const messageToSend = isControlChar ? message : (message.endsWith('\n') ? message : message + '\n') + + if (isControlChar) { + const code = message.charCodeAt(0) + const ctrlName = code === 3 ? '^C (ETX)' : code === 4 ? '^D (EOT)' : `^${String.fromCharCode(64 + code)}` + consoleStore.addOutgoing(ctrlName) + } else { + consoleStore.addOutgoing(message) + } + + await dataConnection.write(messageToSend) + } catch (error) { + consoleStore.addOutgoing(`Error: ${error instanceof Error ? error.message : 'Failed to send'}`, 'error') + } + }, [dataConnection, consoleStore]) + const canvasRef = useRef(null) const containerRef = useRef(null) const plotContainerRef = useRef(null) @@ -275,6 +295,10 @@ function App() { onClose={() => setShowSettingsPanel(false)} /> + ) : (