26 #include <AceCommon.h>
27 #include "LogBinTableRenderer.h"
29 namespace ace_routine {
36 static const char kBinLabel00[] PROGMEM =
"<2us";
37 static const char kBinLabel01[] PROGMEM =
"<4us";
38 static const char kBinLabel02[] PROGMEM =
"<8us";
39 static const char kBinLabel03[] PROGMEM =
"<16us";
40 static const char kBinLabel04[] PROGMEM =
"<32us";
41 static const char kBinLabel05[] PROGMEM =
"<64us";
42 static const char kBinLabel06[] PROGMEM =
"<128us";
43 static const char kBinLabel07[] PROGMEM =
"<256us";
44 static const char kBinLabel08[] PROGMEM =
"<512us";
45 static const char kBinLabel09[] PROGMEM =
"<1ms";
46 static const char kBinLabel10[] PROGMEM =
"<2ms";
47 static const char kBinLabel11[] PROGMEM =
"<4ms";
48 static const char kBinLabel12[] PROGMEM =
"<8ms";
49 static const char kBinLabel13[] PROGMEM =
"<16ms";
50 static const char kBinLabel14[] PROGMEM =
"<33ms";
51 static const char kBinLabel15[] PROGMEM =
"<66ms";
52 static const char kBinLabel16[] PROGMEM =
"<131ms";
53 static const char kBinLabel17[] PROGMEM =
"<262ms";
54 static const char kBinLabel18[] PROGMEM =
"<524ms";
55 static const char kBinLabel19[] PROGMEM =
"<1s";
56 static const char kBinLabel20[] PROGMEM =
"<2s";
57 static const char kBinLabel21[] PROGMEM =
"<4s";
58 static const char kBinLabel22[] PROGMEM =
"<8s";
59 static const char kBinLabel23[] PROGMEM =
"<17s";
60 static const char kBinLabel24[] PROGMEM =
"<34s";
61 static const char kBinLabel25[] PROGMEM =
"<67s";
62 static const char kBinLabel26[] PROGMEM =
"<134s";
63 static const char kBinLabel27[] PROGMEM =
"<268s";
64 static const char kBinLabel28[] PROGMEM =
"<537s";
65 static const char kBinLabel29[] PROGMEM =
"<1074s";
66 static const char kBinLabel30[] PROGMEM =
"<2147s";
67 static const char kBinLabel31[] PROGMEM =
"<4295s";
69 const char*
const kBinLabels[kNumBinLabels] PROGMEM = {
104 void printHeaderTo(Print& printer, uint8_t startBin, uint8_t endBin) {
105 endBin = (endBin > kNumBinLabels) ? kNumBinLabels : endBin;
106 if (endBin <= startBin)
return;
108 for (uint8_t i = startBin; i < endBin - 1; i++) {
109 auto* label = (
const char*) pgm_read_ptr(&internal::kBinLabels[i]);
110 printPStringTo(printer, label, 6);
112 printer.print(F(
" >>"));
115 void printPStringTo(Print& printer,
const char* s, uint8_t boxSize) {
116 uint8_t length = strlen_P(s);
118 if (length < boxSize) {
119 for (uint8_t i = 0; i < (boxSize - length); i++) {
122 printLength = length;
124 printLength = boxSize;
127 for (uint8_t i = 0; i < printLength; i++) {
128 printer.print((
char) pgm_read_byte(&s[i]));
134 const uint16_t bins[],
139 endBin = (endBin > numBins) ? numBins : endBin;
140 for (uint8_t i = startBin; i < endBin; i++) {
141 uint16_t count = bins[i];
143 ace_common::printPad5To(printer, count);