TPMS: Quick implementation of "flags" column.

For now, shows only for Schrader OOK packets: top (left) nibble is function code, bottom nibble has two-bit checksum.
This commit is contained in:
Jared Boone 2016-05-17 14:23:03 -07:00
parent 40859444fe
commit 05df04df7e
4 changed files with 30 additions and 4 deletions

View File

@ -47,6 +47,10 @@ std::string temperature(Temperature temperature) {
return to_string_dec_int(temperature.celsius(), 3);
}
std::string flags(Flags flags) {
return to_string_hex(flags, 2);
}
} /* namespace format */
} /* namespace tpms */
@ -72,16 +76,20 @@ void TPMSRecentEntry::update(const tpms::Reading& reading) {
if( reading.temperature().is_valid() ) {
last_temperature = reading.temperature();
}
if( reading.flags().is_valid() ) {
last_flags = reading.flags();
}
}
namespace ui {
static const std::array<std::pair<std::string, size_t>, 5> tpms_columns { {
static const std::array<std::pair<std::string, size_t>, 6> tpms_columns { {
{ "Tp", 2 },
{ "ID", 8 },
{ "kPa", 3 },
{ "C", 3 },
{ "Cnt", 3 },
{ "Fl", 2 },
} };
template<>
@ -133,6 +141,12 @@ void RecentEntriesView<TPMSRecentEntries>::draw(
line += " " + to_string_dec_uint(entry.received_count, 3);
}
if( entry.last_flags.is_valid() ) {
line += " " + tpms::format::flags(entry.last_flags.value());
} else {
line += " " " ";
}
line.resize(target_rect.width() / 8, ' ');
painter.draw_string(target_rect.pos, draw_style, line);
}

View File

@ -53,6 +53,7 @@ struct TPMSRecentEntry {
Optional<Pressure> last_pressure;
Optional<Temperature> last_temperature;
Optional<tpms::Flags> last_flags;
TPMSRecentEntry(
const Key& key

View File

@ -74,7 +74,9 @@ Optional<Reading> Packet::reading(const SignalType signal_type) const {
return Reading {
Reading::Type::Schrader,
reader_.read(3, 24),
Pressure { static_cast<int>(reader_.read(27, 8)) }
Pressure { static_cast<int>(reader_.read(27, 8)) * 4 / 3 },
{ },
Flags { (flags << 4) | checksum }
};
}

View File

@ -37,6 +37,8 @@ using units::Pressure;
namespace tpms {
using Flags = uint8_t;
enum SignalType : uint32_t {
FLM = 1,
Schrader = 2,
@ -92,11 +94,13 @@ public:
Type type,
TransponderID id,
Optional<Pressure> pressure = { },
Optional<Temperature> temperature = { }
Optional<Temperature> temperature = { },
Optional<Flags> flags = { }
) : type_ { type },
id_ { id },
pressure_ { pressure },
temperature_ { temperature }
temperature_ { temperature },
flags_ { flags }
{
}
@ -116,11 +120,16 @@ public:
return temperature_;
}
Optional<Flags> flags() const {
return flags_;
}
private:
Type type_ { Type::None };
TransponderID id_ { 0 };
Optional<Pressure> pressure_ { };
Optional<Temperature> temperature_ { };
Optional<Flags> flags_ { };
};
class Packet {