boardd: enable fingerprinting with both multiplexed modes (#27159)

Co-authored-by: Shane Smiskol <shane@smiskol.com>
old-commit-hash: 0eeb69a5d0
beeps
Adeeb Shihadeh 2 years ago committed by GitHub
parent d41cd812d7
commit f0425412c1
  1. 1
      common/params.cc
  2. 15
      selfdrive/boardd/boardd.cc
  3. 5
      selfdrive/car/car_helpers.py

@ -111,6 +111,7 @@ std::unordered_map<std::string, uint32_t> keys = {
{"DoReboot", CLEAR_ON_MANAGER_START}, {"DoReboot", CLEAR_ON_MANAGER_START},
{"DoShutdown", CLEAR_ON_MANAGER_START}, {"DoShutdown", CLEAR_ON_MANAGER_START},
{"DoUninstall", CLEAR_ON_MANAGER_START}, {"DoUninstall", CLEAR_ON_MANAGER_START},
{"FirmwareObdQueryDone", CLEAR_ON_MANAGER_START | CLEAR_ON_IGNITION_ON},
{"ForcePowerDown", CLEAR_ON_MANAGER_START}, {"ForcePowerDown", CLEAR_ON_MANAGER_START},
{"GitBranch", PERSISTENT}, {"GitBranch", PERSISTENT},
{"GitCommit", PERSISTENT}, {"GitCommit", PERSISTENT},

@ -106,6 +106,8 @@ void sync_time(Panda *panda, SyncTimeDir dir) {
bool safety_setter_thread(std::vector<Panda *> pandas) { bool safety_setter_thread(std::vector<Panda *> pandas) {
LOGD("Starting safety setter thread"); LOGD("Starting safety setter thread");
Params p;
// there should be at least one panda connected // there should be at least one panda connected
if (pandas.size() == 0) { if (pandas.size() == 0) {
return false; return false;
@ -117,25 +119,20 @@ bool safety_setter_thread(std::vector<Panda *> pandas) {
pandas[i]->set_safety_model(cereal::CarParams::SafetyModel::ELM327, safety_param); pandas[i]->set_safety_model(cereal::CarParams::SafetyModel::ELM327, safety_param);
} }
Params p = Params(); // wait for FW query at OBD port to finish
// wait for VIN to be read
while (true) { while (true) {
if (do_exit || !check_all_connected(pandas) || !ignition) { if (do_exit || !check_all_connected(pandas) || !ignition) {
return false; return false;
} }
std::string value_vin = p.get("CarVin"); if (p.getBool("FirmwareObdQueryDone")) {
if (value_vin.size() > 0) { LOGW("finished FW query at OBD port");
// sanity check VIN format
assert(value_vin.size() == 17);
LOGW("got CarVin %s", value_vin.c_str());
break; break;
} }
util::sleep_for(20); util::sleep_for(20);
} }
// set to ELM327 for ECU knockouts // set to ELM327 to finish fingerprinting and for potential ECU knockouts
for (Panda *panda : pandas) { for (Panda *panda : pandas) {
panda->set_safety_model(cereal::CarParams::SafetyModel::ELM327, 1U); panda->set_safety_model(cereal::CarParams::SafetyModel::ELM327, 1U);
} }

@ -113,7 +113,10 @@ def fingerprint(logcan, sendcan, num_pandas):
cloudlog.event("Malformed VIN", vin=vin, error=True) cloudlog.event("Malformed VIN", vin=vin, error=True)
vin = VIN_UNKNOWN vin = VIN_UNKNOWN
cloudlog.warning("VIN %s", vin) cloudlog.warning("VIN %s", vin)
Params().put("CarVin", vin)
params = Params()
params.put("CarVin", vin)
params.put_bool("FirmwareObdQueryDone", True)
finger = gen_empty_fingerprint() finger = gen_empty_fingerprint()
candidate_cars = {i: all_legacy_fingerprint_cars() for i in [0, 1]} # attempt fingerprint on both bus 0 and 1 candidate_cars = {i: all_legacy_fingerprint_cars() for i in [0, 1]} # attempt fingerprint on both bus 0 and 1

Loading…
Cancel
Save