diff --git a/unit_tests/logicdata.cpp b/unit_tests/logicdata.cpp index eb60229b77..e278c2575b 100644 --- a/unit_tests/logicdata.cpp +++ b/unit_tests/logicdata.cpp @@ -58,19 +58,11 @@ static void writeAs(int64_t value, int numBytes) { } else { writeByte(numBytes); for (int i = 0; i < numBytes; i++) { - writeByte((uint8_t)((value >> (i * 8)) & 0xff)); + writeByte((uint8_t) ((value >> (i * 8)) & 0xff)); } } } -static void writeString(const char *value) { - int len = strlen(value); - writeByte(len); - for (int i = 0; i < len; i++) { - writeByte(value[i]); - } -} - // This is the main secret of this format! :) static void write(int64_t value) { if (value < 0 || value > 0xFFFFFFFFL) { @@ -88,6 +80,14 @@ static void write(int64_t value) { } } +static void writeString(const char *value) { + int len = strlen(value); + write(len); + for (int i = 0; i < len; i++) { + writeByte(value[i]); + } +} + // todo: some C++ magic would allow us to drop 'count' parameter // todo: Look at efi::size in util static void write(int values[], int count) { @@ -138,16 +138,31 @@ static void writeHeader() { } +static void writeDouble(double value) { + static_assert(sizeof(double) == 8); + + if (value == 0.0) { + writeByte(0); + } else { + writeByte(8); + char *ptr = (char*) (void*) &value; + + for (int i = 0; i < 8; i++) { + writeByte(ptr[i]); + } + } +} + static void writeChannelHeader(int ch) { write(0xff); write(ch); writeString(channelNames[ch]); write(0, 2); - write(1.0); + writeDouble(1.0); write(0); - write(0.0); + writeDouble(0.0); write(1); // or 2 - write(0.0); // or 1.0 + writeDouble(0.0); // or 1.0 // this part sounds like the 'next' pointer? if (ch == numChannels - 1) { @@ -167,11 +182,11 @@ static void writeEdges(int64_t *chDeltas, bool useLongDeltas, int numEdges) { // set 16-bit 'sign' flag if (!useLongDeltas && (d & SIGN_FLAG) == SIGN_FLAG) d = (d & 0x7fff) | (SIGN_FLAG >> 16); - writeByte((uint8_t)(d & 0xff)); - writeByte((uint8_t)((d >> 8) & 0xff)); + writeByte((uint8_t) (d & 0xff)); + writeByte((uint8_t) ((d >> 8) & 0xff)); if (useLongDeltas) { - writeByte((uint8_t)((d >> 16) & 0xff)); - writeByte((uint8_t)((d >> 24) & 0xff)); + writeByte((uint8_t) ((d >> 16) & 0xff)); + writeByte((uint8_t) ((d >> 24) & 0xff)); } } writeByte(0x00); @@ -197,6 +212,7 @@ static void writeChannelData(int ch, int64_t *chDeltas, int chLastState, write(ch + 1); write(0); write(realDurationInSamples); + printf("realDurationInSamples=%d\n", realDurationInSamples); write(1); write(lastRecord); @@ -417,9 +433,9 @@ static void writeEvents(CompositeEvent *events, int count) { prevTs = ts; chPrevState = chState; } - writeChannelData(ch, chDeltas, chPrevState, prevTs, useLongDeltas, - deltaCount); } + writeChannelData(ch, chDeltas, chPrevState, prevTs, useLongDeltas, + deltaCount); } free(chDeltas); @@ -458,7 +474,7 @@ static void writeFooter() { write(BLOCK); write(0); - write(1.0); + writeDouble(1.0); write(SUB); write(0, 6); write(1);