From d857e194f5d79a1dad4a64dbbd1efea455fca5f9 Mon Sep 17 00:00:00 2001 From: Nathaniel Hargrave Date: Thu, 6 Aug 2026 20:52:52 -0400 Subject: [PATCH 1/4] MotorStatus panel css updates --- src/components/panels/MotorStatusPanel.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/panels/MotorStatusPanel.tsx b/src/components/panels/MotorStatusPanel.tsx index e45261a..0518163 100644 --- a/src/components/panels/MotorStatusPanel.tsx +++ b/src/components/panels/MotorStatusPanel.tsx @@ -179,6 +179,7 @@ const MotorStatusPanel: React.FC = () => {
+
- ) : ( -
-
- {`Waypoint ${wp.order}: ${wp.name} [${wp.coordinate[0].toFixed(6)}, ${wp.coordinate[1].toFixed(6)}]`} - - -
- )} - - ))} - + )} + + ))} + +
) } diff --git a/src/contexts/WaypointContext.tsx b/src/contexts/WaypointContext.tsx index f1ef79f..ce57f4f 100644 --- a/src/contexts/WaypointContext.tsx +++ b/src/contexts/WaypointContext.tsx @@ -1,6 +1,6 @@ 'use client'; -import React, { createContext, useContext, useState, ReactNode } from 'react'; +import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; export type LatLngTuple = [number, number]; @@ -19,10 +19,42 @@ interface WaypointContextType { updateWaypoint: (index: number, updated: Waypoint) => void; } +const COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24; // 1 day + +const getCookie = (name: string, fallback: Waypoint[]) => { + const cookie = document.cookie + .split('; ') + .find((entry) => entry.startsWith(`${name}=`)); + + if (!cookie) return fallback; + + const value = JSON.parse(decodeURIComponent(cookie.split('=')[1])); + + return value; +}; + +const setCookie = (name: string, value: Waypoint[]) => { + document.cookie = + `${name}=${encodeURIComponent(JSON.stringify(value))}; ` + + `max-age=${COOKIE_MAX_AGE_SECONDS}; path=/; SameSite=Lax`; +}; + const WaypointContext = createContext(undefined); export const WaypointProvider: React.FC<{ children: ReactNode }> = ({ children }) => { const [waypoints, setWaypoints] = useState([]); + const [cookiesLoaded, setCookiesLoaded] = useState(false); + + useEffect(() => { + setWaypoints(getCookie("waypoints", [])); + setCookiesLoaded(true); + }, []) + + useEffect(() => { + if (!cookiesLoaded) return; + + setCookie("waypoints", waypoints); + }, [waypoints, cookiesLoaded]) const addWaypoint = (coordinate: LatLngTuple) => { setWaypoints((prev) => [ From 9f3b86ab3ee894786cb6a9b1e6dc9c6ccc094521 Mon Sep 17 00:00:00 2001 From: Nathaniel Hargrave Date: Thu, 6 Aug 2026 22:14:28 -0400 Subject: [PATCH 3/4] Add temperature reporting to system telemetry --- src/components/panels/PDBRails.tsx | 2 +- src/components/panels/SystemTelemetryPanel.tsx | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/panels/PDBRails.tsx b/src/components/panels/PDBRails.tsx index 13fbe5e..2ad6d7e 100644 --- a/src/components/panels/PDBRails.tsx +++ b/src/components/panels/PDBRails.tsx @@ -99,7 +99,7 @@ const PDBRailsPanel: React.FC = () => { {LABELS.map((r, idx) => ( - + {r} diff --git a/src/components/panels/SystemTelemetryPanel.tsx b/src/components/panels/SystemTelemetryPanel.tsx index 3689963..81972e5 100644 --- a/src/components/panels/SystemTelemetryPanel.tsx +++ b/src/components/panels/SystemTelemetryPanel.tsx @@ -18,6 +18,8 @@ interface TelemetryData { cpu_usage: number; mem_usage: number; gpu_usage: number; + core_temp: number; + case_temp: number; } const SystemTelemetryPanel: React.FC = () => { @@ -39,6 +41,8 @@ const SystemTelemetryPanel: React.FC = () => { cpu_usage: msg.cpu_usage, mem_usage: msg.mem_usage, gpu_usage: msg.gpu_usage, + core_temp: msg.core_temp, + case_temp: msg.case_temp, }; // circular buffer, size 30 @@ -72,6 +76,8 @@ const SystemTelemetryPanel: React.FC = () => { + + From 8dec52f7dd10be15184e45d52912f05408d893e2 Mon Sep 17 00:00:00 2001 From: Nathaniel Hargrave Date: Fri, 7 Aug 2026 00:14:48 -0400 Subject: [PATCH 4/4] add ros monitor to debug preset --- src/app/page.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 3b2c646..10154e0 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,7 @@ 'use client'; import Layout from '@/components/Layout'; +import { direction } from 'html2canvas/dist/types/css/property-descriptors/direction'; const names = ["Default", "Arm Operation", "Debug", "Auxiliary", "Science"]; const colors = ['#0070f3', '#28a745', '#dc3545', '#ffc107', '#17a2b8']; @@ -83,7 +84,12 @@ const layouts = [ second: { direction: 'row', first: 'webRTCClient:4', - second: 'nodeStatusPanel:5', + second: { + direction: 'column', + first: 'nodeStatusPanel:5', + second: 'rosMonitor:6', + splitPercentage: 70 + }, splitPercentage: 70, }, splitPercentage: 30, @@ -219,4 +225,4 @@ const HomePage = () => { ); }; -export default HomePage; \ No newline at end of file +export default HomePage;