26 #include "NumberWriter.h"
28 namespace ace_segment {
45 const uint8_t NumberWriter::kHexCharPatterns[kNumHexChars] PROGMEM = {
66 void NumberWriter::writeInternalHexCharAt(uint8_t pos, hexchar_t c) {
67 uint8_t pattern = pgm_read_byte(&kHexCharPatterns[(uint8_t) c]);
76 const uint8_t bufSize = 5;
78 uint8_t start = toDecimal(num, buf, bufSize);
80 return writeHexCharsInsideBoxAt(
81 pos, &buf[start], bufSize - start, boxSize);
90 bool negative = num < 0;
91 uint16_t absNum = negative ? -num : num;
93 const uint8_t bufSize = 6;
95 uint8_t start = toDecimal(absNum, buf, bufSize);
100 return writeHexCharsInsideBoxAt(
101 pos, &buf[start], bufSize - start, boxSize);
104 uint8_t NumberWriter::writeHexCharsInsideBoxAt(
110 uint8_t absBoxSize = (boxSize < 0) ? -boxSize : boxSize;
113 if (len >= absBoxSize) {
114 writeInternalHexCharsAt(pos, s, len);
119 uint8_t padSize = absBoxSize - len;
122 writeInternalHexCharsAt(pos, s, len);
124 while (padSize--) writeInternalHexCharAt(pos++,
kCharSpace);
127 while (padSize--) writeInternalHexCharAt(pos++,
kCharSpace);
128 writeInternalHexCharsAt(pos, s, len);