Hi all,
I noticed some behavior on the tpms command I'd
copied from the Kia/Kona code, which sent me down a small
rabbit hole.
What I was seeing was that the temperature was repeated
instead of seeing the pressure and temperature.
Even in vehicle.cpp, we can see code like this:
const char* range_est =
StdMetrics.ms_v_bat_range_est->AsUnitString("-",
rangeUnit, 0).c_str();
if (*range_est != '-')
writer->printf("Est. range: %s\n", range_est);
My C++ is a bit rusty, however I believe that the 'const
char*' won't hold the temporary std::string object returned
by 'AsUnitString'. To do that, I believe we need to assign
to a reference (which I know will work). The problem is
that the original code will mostly work (especially in cases
like the above), as the deallocated heap memory won't have
been reallocated.
const std::string& range_est =
StdMetrics.ms_v_bat_range_est->AsUnitString("-",
rangeUnit, 0);
if (!is_empty_metric(range_est))
writer->printf("Est. range: %s\n",
range_est.c_str());
Where I've defined in vehicle.h the following:
inline bool is_empty_metric(const
std::string &measure)
{
return (measure == "") || (measure[0] == '-');
}
Will the above work functionally? Would it be better to
be:
return (measure =="") || (measure == "-")
This occurs in 8 files (outside my new Ioniq 5 files)
that I have noted.
I would make a separate commit for this and do a pull
request for it,
//.ichael