mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-01-07 22:57:48 +00:00
Add Tamper Flags to ERT RX display and meter ID to log file (#1707)
This commit is contained in:
parent
58bf60695d
commit
715a2dd448
@ -54,24 +54,31 @@ std::string id(ID value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string consumption(Consumption value) {
|
std::string consumption(Consumption value) {
|
||||||
return to_string_dec_uint(value, 10);
|
return to_string_dec_uint(value, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string commodity_type(CommodityType value) {
|
std::string commodity_type(CommodityType value) {
|
||||||
return to_string_dec_uint(value, 2);
|
return to_string_dec_uint(value, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string tamper_flags(TamperFlags value) {
|
||||||
|
return to_string_hex(value & 0xFFFF, 4); // Note: ignoring bits 32-47 of tamper flags in IDM type due to screen width
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string tamper_flags_scm(TamperFlags value) {
|
||||||
|
return " " + to_string_hex(value & 0x0F, 1) + "/" + to_string_hex(value >> 4, 1); // Physical/Encoder flags
|
||||||
|
}
|
||||||
|
|
||||||
} /* namespace format */
|
} /* namespace format */
|
||||||
|
|
||||||
} /* namespace ert */
|
} /* namespace ert */
|
||||||
|
|
||||||
void ERTLogger::on_packet(const ert::Packet& packet, const uint32_t target_frequency) {
|
void ERTLogger::on_packet(const ert::Packet& packet, const uint32_t target_frequency) {
|
||||||
const auto formatted = packet.symbols_formatted();
|
const auto formatted = packet.symbols_formatted();
|
||||||
|
|
||||||
// TODO: function doesn't take uint64_t, so when >= 1<<32, weirdness will ensue!
|
|
||||||
const auto target_frequency_str = to_string_dec_uint(target_frequency, 10);
|
const auto target_frequency_str = to_string_dec_uint(target_frequency, 10);
|
||||||
|
|
||||||
std::string entry = target_frequency_str + " " + ert::format::type(packet.type()) + " " + formatted.data + "/" + formatted.errors;
|
std::string entry = target_frequency_str + " " + ert::format::type(packet.type()) + " " + formatted.data + "/" + formatted.errors + " ID:" + to_string_dec_uint(packet.id(), 1);
|
||||||
|
|
||||||
log_file.write_entry(packet.received_at(), entry);
|
log_file.write_entry(packet.received_at(), entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,6 +88,8 @@ void ERTRecentEntry::update(const ert::Packet& packet) {
|
|||||||
received_count++;
|
received_count++;
|
||||||
|
|
||||||
last_consumption = packet.consumption();
|
last_consumption = packet.consumption();
|
||||||
|
last_tamper_flags = packet.tamper_flags();
|
||||||
|
packet_type = packet.type();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
@ -91,13 +100,10 @@ void RecentEntriesTable<ERTRecentEntries>::draw(
|
|||||||
const Rect& target_rect,
|
const Rect& target_rect,
|
||||||
Painter& painter,
|
Painter& painter,
|
||||||
const Style& style) {
|
const Style& style) {
|
||||||
std::string line = ert::format::id(entry.id) + " " + ert::format::commodity_type(entry.commodity_type) + " " + ert::format::consumption(entry.last_consumption);
|
std::string line = ert::format::id(entry.id) + " " + ert::format::commodity_type(entry.commodity_type) + " " + ert::format::consumption(entry.last_consumption) + " ";
|
||||||
|
|
||||||
if (entry.received_count > 999) {
|
line += (entry.packet_type == ert::Packet::Type::SCM) ? ert::format::tamper_flags_scm(entry.last_tamper_flags) : ert::format::tamper_flags(entry.last_tamper_flags);
|
||||||
line += " +++";
|
line += (entry.received_count > 99) ? " ++" : to_string_dec_uint(entry.received_count, 3);
|
||||||
} else {
|
|
||||||
line += " " + to_string_dec_uint(entry.received_count, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
line.resize(target_rect.width() / 8, ' ');
|
line.resize(target_rect.width() / 8, ' ');
|
||||||
painter.draw_string(target_rect.location(), style, line);
|
painter.draw_string(target_rect.location(), style, line);
|
||||||
|
@ -72,11 +72,12 @@ struct ERTRecentEntry {
|
|||||||
|
|
||||||
ert::ID id{ert::invalid_id};
|
ert::ID id{ert::invalid_id};
|
||||||
ert::CommodityType commodity_type{ert::invalid_commodity_type};
|
ert::CommodityType commodity_type{ert::invalid_commodity_type};
|
||||||
|
ert::Consumption last_consumption{};
|
||||||
|
ert::TamperFlags last_tamper_flags{};
|
||||||
|
ert::Packet::Type packet_type{};
|
||||||
|
|
||||||
size_t received_count{0};
|
size_t received_count{0};
|
||||||
|
|
||||||
ert::Consumption last_consumption{};
|
|
||||||
|
|
||||||
ERTRecentEntry(
|
ERTRecentEntry(
|
||||||
const Key& key)
|
const Key& key)
|
||||||
: id{key.id},
|
: id{key.id},
|
||||||
@ -137,9 +138,10 @@ class ERTAppView : public View {
|
|||||||
|
|
||||||
const RecentEntriesColumns columns{{
|
const RecentEntriesColumns columns{{
|
||||||
{"ID", 10},
|
{"ID", 10},
|
||||||
{"Tp", 2},
|
{"Ty", 2},
|
||||||
{"Consumpt", 10},
|
{"Consumpt", 8},
|
||||||
{"Cnt", 3},
|
{"Tamp", 4},
|
||||||
|
{"Ct", 2},
|
||||||
}};
|
}};
|
||||||
ERTRecentEntriesView recent_entries_view{columns, recent};
|
ERTRecentEntriesView recent_entries_view{columns, recent};
|
||||||
|
|
||||||
|
@ -82,6 +82,19 @@ CommodityType Packet::commodity_type() const {
|
|||||||
return invalid_commodity_type;
|
return invalid_commodity_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TamperFlags Packet::tamper_flags() const {
|
||||||
|
if (type() == Type::SCM) {
|
||||||
|
return (reader_.read(9, 2) << 4) | reader_.read(3, 2); // Physical/Encoder tamper flags in lower/upper nibbles
|
||||||
|
}
|
||||||
|
if (type() == Type::SCMPLUS) {
|
||||||
|
return reader_.read(10 * 8, 16);
|
||||||
|
}
|
||||||
|
if (type() == Type::IDM) {
|
||||||
|
return reader_.read(11 * 8, 48);
|
||||||
|
}
|
||||||
|
return invalid_tamper_flags;
|
||||||
|
}
|
||||||
|
|
||||||
FormattedSymbols Packet::symbols_formatted() const {
|
FormattedSymbols Packet::symbols_formatted() const {
|
||||||
return format_symbols(decoder_);
|
return format_symbols(decoder_);
|
||||||
}
|
}
|
||||||
|
@ -34,10 +34,12 @@ namespace ert {
|
|||||||
using ID = uint32_t;
|
using ID = uint32_t;
|
||||||
using Consumption = uint32_t;
|
using Consumption = uint32_t;
|
||||||
using CommodityType = uint32_t;
|
using CommodityType = uint32_t;
|
||||||
|
using TamperFlags = uint32_t;
|
||||||
|
|
||||||
constexpr ID invalid_id = 0;
|
constexpr ID invalid_id = 0;
|
||||||
constexpr CommodityType invalid_commodity_type = -1;
|
constexpr CommodityType invalid_commodity_type = -1;
|
||||||
constexpr Consumption invalid_consumption = 0;
|
constexpr Consumption invalid_consumption = 0;
|
||||||
|
constexpr TamperFlags invalid_tamper_flags = 0;
|
||||||
|
|
||||||
class Packet {
|
class Packet {
|
||||||
public:
|
public:
|
||||||
@ -67,6 +69,7 @@ class Packet {
|
|||||||
ID id() const;
|
ID id() const;
|
||||||
CommodityType commodity_type() const;
|
CommodityType commodity_type() const;
|
||||||
Consumption consumption() const;
|
Consumption consumption() const;
|
||||||
|
TamperFlags tamper_flags() const;
|
||||||
|
|
||||||
FormattedSymbols symbols_formatted() const;
|
FormattedSymbols symbols_formatted() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user