Skip to content

Commit 5255aa8

Browse files
committed
Fix params page refreshing params
1 parent 7e9e1ec commit 5255aa8

5 files changed

Lines changed: 44 additions & 13 deletions

File tree

gcs/src/params.jsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,19 @@ import { selectConnectedToDrone } from "./redux/slices/droneConnectionSlice.js"
3535
import { selectIsArmed, selectIsFlying } from "./redux/slices/droneInfoSlice.js"
3636
import {
3737
emitExportParamsToFile,
38+
emitGetParams,
3839
emitRefreshParams,
3940
emitSetMultipleParams,
4041
resetParamState,
4142
selectFetchingVars,
4243
selectFetchingVarsProgress,
43-
selectHasFetchedOnce,
4444
selectModifiedParams,
4545
selectParams,
4646
selectParamSearchValue,
4747
selectShowModifiedParams,
4848
selectShownParams,
4949
setFetchingVars,
5050
setFetchParamsWarningModalOpen,
51-
setHasFetchedOnce,
5251
setLoadedFileName,
5352
setLoadedParams,
5453
setLoadParamsFileModalOpen,
@@ -78,7 +77,6 @@ export default function Params() {
7877
const isFlying = useSelector(selectIsFlying)
7978

8079
// Parameter states
81-
const hasFetchedOnce = useSelector(selectHasFetchedOnce)
8280
const params = useSelector(selectParams)
8381
const shownParams = useSelector(selectShownParams)
8482
const modifiedParams = useSelector(selectModifiedParams)
@@ -96,12 +94,13 @@ export default function Params() {
9694
useEffect(() => {
9795
if (!connected) {
9896
dispatch(resetParamState())
97+
return
9998
}
10099

101-
if (connected && !hasFetchedOnce && !fetchingVars) {
102-
fetchParams()
100+
if (!fetchingVars && params.length === 0) {
101+
dispatch(emitGetParams())
103102
}
104-
}, [connected])
103+
}, [connected, dispatch, fetchingVars, params.length])
105104

106105
useEffect(() => {
107106
if (!params) return
@@ -133,7 +132,6 @@ export default function Params() {
133132
function fetchParamsForFirstTime() {
134133
dispatch(setFetchingVars(true))
135134
dispatch(emitRefreshParams())
136-
dispatch(setHasFetchedOnce(true))
137135
dispatch(setPendingFetchAction(null))
138136
}
139137

gcs/src/redux/middleware/emitters.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import {
6666
} from "../slices/missionSlice"
6767
import {
6868
emitExportParamsToFile,
69+
emitGetParams,
6970
emitRebootAutopilot,
7071
emitRefreshParams,
7172
emitSetMultipleParams,
@@ -321,6 +322,10 @@ export function handleEmitters(socket, store, action) {
321322
emitter: emitRebootAutopilot,
322323
callback: () => socket.socket.emit("reboot_autopilot"),
323324
},
325+
{
326+
emitter: emitGetParams,
327+
callback: () => socket.socket.emit("get_params"),
328+
},
324329
{
325330
emitter: emitRefreshParams,
326331
callback: () => socket.socket.emit("refresh_params"),

gcs/src/redux/middleware/socketMiddleware.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ const DroneSpecificSocketEvents = Object.freeze({
173173

174174
const ParamSpecificSocketEvents = Object.freeze({
175175
onRebootAutopilot: "reboot_autopilot",
176-
onParamsMessage: "params",
176+
onGetParamsResult: "get_params_result",
177177
onParamRequestUpdate: "param_request_update",
178178
onParamSetSuccess: "param_set_success",
179179
onParamError: "params_error",
@@ -470,7 +470,6 @@ const socketMiddleware = (store) => {
470470
store.dispatch(setConnecting(false))
471471
store.dispatch(setConnectionModal(false))
472472

473-
store.dispatch(setHasFetchedOnce(false))
474473
store.dispatch(setGuidedModePinData({ lat: 0, lon: 0, alt: 0 }))
475474
store.dispatch(setRebootData({}))
476475
store.dispatch(setAutoPilotRebootModalOpen(false))
@@ -870,9 +869,12 @@ const socketMiddleware = (store) => {
870869
},
871870
)
872871

873-
socket.socket.on(ParamSpecificSocketEvents.onParamsMessage, (msg) => {
874-
store.dispatch(setParams(msg))
875-
store.dispatch(setShownParams(msg))
872+
socket.socket.on(ParamSpecificSocketEvents.onGetParamsResult, (msg) => {
873+
if (msg.success) {
874+
store.dispatch(setParams(msg.data))
875+
store.dispatch(setShownParams(msg.data))
876+
}
877+
store.dispatch(setHasFetchedOnce(true))
876878
store.dispatch(setFetchingVars(false))
877879
store.dispatch(setFetchingVarsProgress({ progress: 0, param_id: "" }))
878880
store.dispatch(setParamSearchValue(""))

gcs/src/redux/slices/paramsSlice.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ const paramsSlice = createSlice({
177177

178178
// Emitters (empty objects to be captured in the middleware)
179179
emitRebootAutopilot: () => {},
180+
emitGetParams: () => {},
180181
emitRefreshParams: () => {},
181182
emitSetMultipleParams: () => {},
182183
emitExportParamsToFile: () => {},
@@ -241,6 +242,7 @@ export const {
241242
setRebootPromptModalOpen,
242243
setPendingFetchAction,
243244
emitRebootAutopilot,
245+
emitGetParams,
244246
emitRefreshParams,
245247
emitSetMultipleParams,
246248
emitExportParamsToFile,

radio/app/endpoints/params.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,28 @@ def setMultipleParamsProgressUpdateCallback(
2727
socketio.emit("set_multiple_params_progress", data)
2828

2929

30+
@socketio.on("get_params")
31+
def get_params() -> None:
32+
"""
33+
Get cached parameters from the params controller.
34+
"""
35+
drone = droneStatus.drone
36+
if drone is None:
37+
return
38+
39+
if droneStatus.state != "params":
40+
socketio.emit(
41+
"params_error",
42+
{"message": "You must be on the params screen to get parameters."},
43+
)
44+
logger.debug(f"Current state: {droneStatus.state}")
45+
return
46+
47+
socketio.emit(
48+
"get_params_result", {"success": True, "data": drone.paramsController.params}
49+
)
50+
51+
3052
@socketio.on("set_multiple_params")
3153
def set_multiple_params(params_list: List[Any]) -> None:
3254
"""
@@ -103,7 +125,9 @@ def send_param_request_update(progress_data: dict) -> None:
103125
)
104126
return
105127

106-
socketio.emit("params", params_controller.params)
128+
socketio.emit(
129+
"get_params_result", {"success": True, "data": drone.paramsController.params}
130+
)
107131

108132

109133
@socketio.on("export_params_to_file")

0 commit comments

Comments
 (0)