Skip to content

Commit ed0214a

Browse files
authored
feat: more detailed connecting modal (#1046)
* Emit message straight from controller * Refactor to use current callback architecture * Resolve copilot feedback * Fix typo * Requested change
1 parent ee342a3 commit ed0214a

8 files changed

Lines changed: 43 additions & 1 deletion

File tree

gcs/src/components/connectionProgress.jsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
import { Progress } from "@mantine/core"
2+
import { useSelector } from "react-redux"
3+
import { selectFetchingParam } from "../redux/slices/paramsSlice"
24

35
export default function ConnectionProgress({ connecting, status }) {
6+
const param = useSelector(selectFetchingParam)
47
return (
58
<>
69
{connecting &&
710
status.message !== null &&
811
typeof status.progress === "number" && (
912
<>
10-
<p className="text-center my-4">{status.message}</p>
13+
<p className="text-center mt-4">{status.message}</p>
14+
<p className="text-center mb-4 text-falcongrey-400 text-sm">
15+
{param ? <>Fetching {param}</> : "Fetching params..."}
16+
</p>
1117
<Progress
1218
animated
1319
size="lg"

gcs/src/redux/middleware/socketMiddleware.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ import {
124124
import {
125125
resetParamsWriteProgressData,
126126
setAutoPilotRebootModalOpen,
127+
setFetchingParam,
127128
setFetchingVars,
128129
setFetchingVarsProgress,
129130
setHasFetchedOnce,
@@ -548,6 +549,10 @@ const socketMiddleware = (store) => {
548549
}
549550
})
550551

552+
socket.socket.on("fetching_param", (msg) => {
553+
store.dispatch(setFetchingParam(msg.message))
554+
})
555+
551556
// Link stats
552557
socket.socket.on(SocketEvents.linkDebugStats, (msg) => {
553558
window.ipcRenderer.invoke("app:update-link-stats", msg)

gcs/src/redux/slices/paramsSlice.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const paramsSlice = createSlice({
1111
showModifiedParams: false,
1212
fetchingVars: false,
1313
fetchingVarsProgress: { progress: 0, param_id: "" },
14+
fetchingParam: "",
1415
searchValue: "",
1516
hasFetchedOnce: false,
1617
loadParamsFileModalOpen: false,
@@ -56,6 +57,10 @@ const paramsSlice = createSlice({
5657
if (action.payload === state.fetchingVarsProgress) return
5758
state.fetchingVarsProgress = action.payload
5859
},
60+
setFetchingParam: (state, action) => {
61+
if (action.payload === state.fetchingParam) return
62+
state.fetchingParam = action.payload
63+
},
5964
setParamSearchValue: (state, action) => {
6065
if (action.payload === state.searchValue) return
6166
state.searchValue = action.payload
@@ -120,6 +125,7 @@ const paramsSlice = createSlice({
120125
resetParamState: (state) => {
121126
state.fetchingVars = false
122127
state.fetchingVarsProgress = { progress: 0, param_id: "" }
128+
state.fetchingParam = ""
123129
state.params = []
124130
state.shownParams = []
125131
state.modifiedParams = []
@@ -182,6 +188,7 @@ const paramsSlice = createSlice({
182188
selectShowModifiedParams: (state) => state.showModifiedParams,
183189
selectFetchingVars: (state) => state.fetchingVars,
184190
selectFetchingVarsProgress: (state) => state.fetchingVarsProgress,
191+
selectFetchingParam: (state) => state.fetchingParam,
185192
selectParamSearchValue: (state) => state.searchValue,
186193
selectHasFetchedOnce: (state) => state.hasFetchedOnce,
187194
selectLoadParamsFileModalOpen: (state) => state.loadParamsFileModalOpen,
@@ -207,6 +214,7 @@ export const {
207214
setModifiedParams,
208215
setFetchingVars,
209216
setFetchingVarsProgress,
217+
setFetchingParam,
210218
setParamSearchValue,
211219
toggleShowModifiedParams,
212220
appendModifiedParams,
@@ -239,6 +247,7 @@ export const {
239247
selectModifiedParams,
240248
selectFetchingVars,
241249
selectFetchingVarsProgress,
250+
selectFetchingParam,
242251
selectShowModifiedParams,
243252
selectParamSearchValue,
244253
selectHasFetchedOnce,

radio/app/controllers/paramsController.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ def getSingleParam(self, param_name: str, timeout: float = 3) -> Response:
6161
try:
6262
time.sleep(0.05) # Brief pause for stability
6363

64+
if self.drone.fetchingParameterCb:
65+
self.drone.fetchingParameterCb(param_name)
66+
6467
self.drone.master.mav.param_request_read_send(
6568
self.drone.target_system,
6669
self.drone.target_component,

radio/app/drone.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def __init__(
8181
droneDisconnectCb: Optional[Callable] = None,
8282
droneConnectStatusCb: Optional[Callable] = None,
8383
linkDebugStatsCb: Optional[Callable] = None,
84+
fetchingParameterCb: Optional[Callable] = None,
8485
) -> None:
8586
"""
8687
The drone class interfaces with the UAS via MavLink.
@@ -99,6 +100,7 @@ def __init__(
99100
self.droneDisconnectCb = droneDisconnectCb
100101
self.droneConnectStatusCb = droneConnectStatusCb
101102
self.linkDebugStatsCb = linkDebugStatsCb
103+
self.fetchingParameterCb = fetchingParameterCb
102104

103105
self.connectionError: Optional[str] = None
104106

radio/app/endpoints/autopilot.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def rebootAutopilot() -> None:
2222
droneDisconnectCb = droneStatus.drone.droneDisconnectCb
2323
droneConnectStatusCb = droneStatus.drone.droneConnectStatusCb
2424
linkDebugStatsCb = droneStatus.drone.linkDebugStatsCb
25+
fetchingParameterCb = droneStatus.drone.fetchingParameterCb
2526
forwarding_address = droneStatus.drone.forwarding_address
2627

2728
socketio.emit("disconnected_from_drone")
@@ -55,6 +56,7 @@ def rebootAutopilot() -> None:
5556
droneDisconnectCb=droneDisconnectCb,
5657
droneConnectStatusCb=droneConnectStatusCb,
5758
linkDebugStatsCb=linkDebugStatsCb,
59+
fetchingParameterCb=fetchingParameterCb,
5860
)
5961
if droneStatus.drone.connectionError:
6062
tries += 1

radio/app/endpoints/comPorts.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
droneErrorCb,
1414
getComPortNames,
1515
getFlightSwVersionString,
16+
fetchingParameterCb,
1617
)
1718

1819

@@ -140,6 +141,7 @@ def connectToDrone(data: ConnectionDataType) -> None:
140141
droneDisconnectCb=disconnectFromDrone,
141142
droneConnectStatusCb=droneConnectStatusCb,
142143
linkDebugStatsCb=sendLinkDebugStats,
144+
fetchingParameterCb=fetchingParameterCb,
143145
)
144146

145147
if drone.connectionError is not None:

radio/app/utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,19 @@ def notConnectedError(action: Optional[str] = None) -> None:
178178
)
179179

180180

181+
def fetchingParameterCb(param_name: str) -> None:
182+
"""
183+
Send the parameter currently being fetched to the socket.
184+
185+
Args:
186+
param_name (str): The name of the parameter currently being fetched.
187+
"""
188+
socketio.emit(
189+
"fetching_param",
190+
{"success": True, "message": param_name},
191+
)
192+
193+
181194
def missingParameterError(endpoint: str, params: Union[str, list[str]]) -> None:
182195
""" "
183196
Send error to the socket indicating that a request made to the server was missing required parameters

0 commit comments

Comments
 (0)