21 for (
int n = 0; n < str.length(); n++) {
22 if (!isDigit(str.charAt(n)) && str.charAt(n) !=
',') {
25 if (str.charAt(n) ==
',') {
30 DEBUG(
"RawTimings::maybe() returns true.\n");
37 IRAM_ATTR RawTimings::operator
bool() {
38 return (intervals.size() > 0);
42 void IRAM_ATTR RawTimings::zap() {
48 String RawTimings::toString() {
50 for (
int count = 0; count < intervals.size(); count++) {
51 res += intervals[count];
52 if (count != intervals.size() - 1) {
61 bool RawTimings::fromString(
const String &in) {
65 int nextSemicolon = in.indexOf(
",", pos);
67 int value = in.substring(pos, nextSemicolon).toInt();
72 intervals.push_back(value);
73 pos = nextSemicolon + 1;
74 nextSemicolon = in.indexOf(
",", pos);
75 }
while (nextSemicolon != -1);
76 int value = in.substring(pos).toInt();
77 if (value == 0 || error) {
78 ERROR(
"Conversion to RawTimings failed at position %i in String '%s'\n", pos, in.c_str());
81 intervals.push_back(value);
88 bool RawTimings::fromPulsetrain(Pulsetrain &train) {
89 for (
int transition : train.transitions) {
90 intervals.push_back(train.bins[transition].average);
97 Pulsetrain RawTimings::toPulsetrain() {
99 res.fromRawTimings(*
this);
106 String RawTimings::visualizer(
int base) {
110 String ones_and_zeroes;
112 for (
int n = 0; n < intervals.size(); n++) {
113 curstate = (n % 2 == 0) ?
"1" :
"0";
114 for (
int m = 0; m < max((intervals[n] + (base / 2)) / base, 1); m++) {
115 ones_and_zeroes += curstate;
118 ones_and_zeroes +=
"0";
120 for (
int n = 0; n < ones_and_zeroes.length(); n += 2) {
121 String chunk = ones_and_zeroes.substring(n, n + 2);
124 }
else if (chunk ==
"00") {
126 }
else if (chunk ==
"01") {
128 }
else if (chunk ==
"10") {
137 String RawTimings::visualizer() {
138 int visualizer_pixel;
140 return visualizer(visualizer_pixel);