diff --git a/gcs/src/components/mapComponents/homeMarker.jsx b/gcs/src/components/mapComponents/homeMarker.jsx index 5811106b7..2f2345631 100644 --- a/gcs/src/components/mapComponents/homeMarker.jsx +++ b/gcs/src/components/mapComponents/homeMarker.jsx @@ -11,7 +11,12 @@ import resolveConfig from "tailwindcss/resolveConfig" import tailwindConfig from "../../../tailwind.config" const tailwindColors = resolveConfig(tailwindConfig).theme.colors -export default function HomeMarker({ lat, lon, lineTo = null }) { +export default function HomeMarker({ + lat, + lon, + updateMissionHomePositionDragCb, + lineTo = null, +}) { return ( <> {lineTo !== null && ( { + updateMissionHomePosition(x, y) + }} lineTo={ filteredMissionItems.length > 0 && [ intToCoord(filteredMissionItems[0].y), @@ -331,6 +335,18 @@ function MapSectionNonMemo({ + { + updateMissionHomePosition( + clickedGpsCoords.lat, + clickedGpsCoords.lng, + ) + }} + > +
+

Set home position

+
+
)} diff --git a/gcs/src/helpers/dataFormatters.js b/gcs/src/helpers/dataFormatters.js index 252435115..6fd634e3a 100644 --- a/gcs/src/helpers/dataFormatters.js +++ b/gcs/src/helpers/dataFormatters.js @@ -8,7 +8,7 @@ export function intToCoord(val) { } export function coordToInt(val) { - return val * 1e7 + return parseInt(val * 1e7) } export const dataFormatters = { diff --git a/gcs/src/missions.jsx b/gcs/src/missions.jsx index 573478131..22814e489 100644 --- a/gcs/src/missions.jsx +++ b/gcs/src/missions.jsx @@ -11,7 +11,8 @@ import { ResizableBox } from "react-resizable" import { v4 as uuidv4 } from "uuid" // Custom component and helpers -import { Button, Divider, FileButton, Tabs } from "@mantine/core" +import { Button, Divider, FileButton, Tabs, Tooltip } from "@mantine/core" +import { IconInfoCircle } from "@tabler/icons-react" import Layout from "./components/layout" import MissionItemsTable from "./components/missions/missionItemsTable" import MissionsMapSection from "./components/missions/missionsMap" @@ -403,6 +404,53 @@ export default function Missions() { } } + function updateMissionHomePosition(lat, lon) { + const newHomePosition = { + lat: Number.isInteger(lat) ? lat : coordToInt(lat), + lon: Number.isInteger(lon) ? lon : coordToInt(lon), + alt: 0.1, + } + setHomePosition(newHomePosition) + + // Also update the first waypoint if it is a home position waypoint + if (missionItems.length > 0 && isGlobalFrameHomeCommand(missionItems[0])) { + // Check if the first item is a home position command + const updatedMissionItems = [...missionItems] + updatedMissionItems[0] = { + ...updatedMissionItems[0], + x: newHomePosition.lat, + y: newHomePosition.lon, + } + setMissionItems(updatedMissionItems) + } else { + // If the first item is not a home position command, add a new home position item + const newHomeMissionItem = { + id: uuidv4(), + seq: 0, + x: newHomePosition.lat, + y: newHomePosition.lon, + z: 0.1, + frame: parseInt( + Object.keys(MAV_FRAME_LIST).find( + (key) => MAV_FRAME_LIST[key] === "MAV_FRAME_GLOBAL", + ), + ), + command: 16, // MAV_CMD_NAV_WAYPOINT + param1: 0, + param2: 0, + param3: 0, + param4: 0, + current: 0, + autocontinue: 1, + target_component: targetInfo.target_component, + target_system: targetInfo.target_system, + mission_type: 0, + mavpackettype: "MISSION_ITEM_INT", + } + setMissionItems((prevItems) => [newHomeMissionItem, ...prevItems]) + } + } + return ( {/* Banner to let people know that things are still under development */} @@ -472,7 +520,17 @@ export default function Missions() {
-

Home location

+

+ Home location{" "} + + + + + +

Lat:{" "} {intToCoord(homePosition?.lat).toFixed( @@ -509,6 +567,7 @@ export default function Missions() { markerDragEndCallback={updateMissionItem} rallyDragEndCallback={updateRallyItem} addNewMissionItem={addNewMissionItem} + updateMissionHomePosition={updateMissionHomePosition} mapId="missions" />