mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-08-21 08:14:00 +08:00
onroad transition: clear params and start safety setter thread (#28151)
* rename from ignition to onroad/offroad * forgot one * clear in manager * don't clear in boardd anymore fix * params isn't used here * add comment * Revert "add comment" This reverts commit 54fb6660501679e5a989c3f06c0a438bdb04dc7e. * write params in manager * first part is self explanatory * remove these from thermald now * start safety setter thread with IsOnroad * drivesss * more * less * come back * makes sense here old-commit-hash: b8fa7f58ea8db77d2f7a9e70d139019b24a29da7
This commit is contained in:
@@ -466,7 +466,8 @@ void panda_state_thread(PubMaster *pm, std::vector<Panda *> pandas, bool spoofin
|
||||
SubMaster sm({"controlsState"});
|
||||
|
||||
Panda *peripheral_panda = pandas[0];
|
||||
bool ignition_last = false;
|
||||
bool is_onroad = false;
|
||||
bool is_onroad_last = false;
|
||||
std::future<bool> safety_future;
|
||||
|
||||
LOGD("start panda state thread");
|
||||
@@ -507,19 +508,18 @@ void panda_state_thread(PubMaster *pm, std::vector<Panda *> pandas, bool spoofin
|
||||
}
|
||||
}
|
||||
|
||||
// clear ignition-based params and set new safety on car start
|
||||
if (ignition && !ignition_last) {
|
||||
params.clearAll(CLEAR_ON_IGNITION_ON);
|
||||
is_onroad = params.getBool("IsOnroad");
|
||||
|
||||
// set new safety on onroad transition, after params are cleared
|
||||
if (is_onroad && !is_onroad_last) {
|
||||
if (!safety_future.valid() || safety_future.wait_for(0ms) == std::future_status::ready) {
|
||||
safety_future = std::async(std::launch::async, safety_setter_thread, pandas);
|
||||
} else {
|
||||
LOGW("Safety setter thread already running");
|
||||
}
|
||||
} else if (!ignition && ignition_last) {
|
||||
params.clearAll(CLEAR_ON_IGNITION_OFF);
|
||||
}
|
||||
|
||||
ignition_last = ignition;
|
||||
is_onroad_last = is_onroad;
|
||||
|
||||
sm.update(0);
|
||||
const bool engaged = sm.allAliveAndValid({"controlsState"}) && sm["controlsState"].getControlsState().getEnabled();
|
||||
|
||||
@@ -138,10 +138,25 @@ def manager_thread() -> None:
|
||||
|
||||
ensure_running(managed_processes.values(), False, params=params, CP=sm['carParams'], not_run=ignore)
|
||||
|
||||
started_prev = False
|
||||
|
||||
while True:
|
||||
sm.update()
|
||||
|
||||
started = sm['deviceState'].started
|
||||
|
||||
if started and not started_prev:
|
||||
params.clear_all(ParamKeyType.CLEAR_ON_ONROAD_TRANSITION)
|
||||
elif not started and started_prev:
|
||||
params.clear_all(ParamKeyType.CLEAR_ON_OFFROAD_TRANSITION)
|
||||
|
||||
# initialize and update onroad params, which drives boardd's safety setter thread
|
||||
if started != started_prev or sm.frame == 0:
|
||||
params.put_bool("IsOnroad", started)
|
||||
params.put_bool("IsOffroad", not started)
|
||||
|
||||
started_prev = started
|
||||
|
||||
ensure_running(managed_processes.values(), started, params=params, CP=sm['carParams'], not_run=ignore)
|
||||
|
||||
running = ' '.join("%s%s\u001b[0m" % ("\u001b[32m" if p.proc.is_alive() else "\u001b[31m", p.name)
|
||||
|
||||
@@ -313,9 +313,6 @@ def thermald_thread(end_event, hw_queue):
|
||||
should_start = should_start and all(startup_conditions.values())
|
||||
|
||||
if should_start != should_start_prev or (count == 0):
|
||||
params.put_bool("IsOnroad", should_start)
|
||||
params.put_bool("IsOffroad", not should_start)
|
||||
|
||||
params.put_bool("IsEngaged", False)
|
||||
engaged_prev = False
|
||||
HARDWARE.set_power_save(not should_start)
|
||||
|
||||
Reference in New Issue
Block a user