mirror of https://github.com/rusefi/rusefi-1.git
first bugfixes
This commit is contained in:
parent
8365e5719e
commit
35e69c1c99
|
@ -58,19 +58,11 @@ static void writeAs(int64_t value, int numBytes) {
|
||||||
} else {
|
} else {
|
||||||
writeByte(numBytes);
|
writeByte(numBytes);
|
||||||
for (int i = 0; i < numBytes; i++) {
|
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! :)
|
// This is the main secret of this format! :)
|
||||||
static void write(int64_t value) {
|
static void write(int64_t value) {
|
||||||
if (value < 0 || value > 0xFFFFFFFFL) {
|
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: some C++ magic would allow us to drop 'count' parameter
|
||||||
// todo: Look at efi::size in util
|
// todo: Look at efi::size in util
|
||||||
static void write(int values[], int count) {
|
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) {
|
static void writeChannelHeader(int ch) {
|
||||||
write(0xff);
|
write(0xff);
|
||||||
write(ch);
|
write(ch);
|
||||||
writeString(channelNames[ch]);
|
writeString(channelNames[ch]);
|
||||||
write(0, 2);
|
write(0, 2);
|
||||||
write(1.0);
|
writeDouble(1.0);
|
||||||
write(0);
|
write(0);
|
||||||
write(0.0);
|
writeDouble(0.0);
|
||||||
write(1); // or 2
|
write(1); // or 2
|
||||||
write(0.0); // or 1.0
|
writeDouble(0.0); // or 1.0
|
||||||
|
|
||||||
// this part sounds like the 'next' pointer?
|
// this part sounds like the 'next' pointer?
|
||||||
if (ch == numChannels - 1) {
|
if (ch == numChannels - 1) {
|
||||||
|
@ -167,11 +182,11 @@ static void writeEdges(int64_t *chDeltas, bool useLongDeltas, int numEdges) {
|
||||||
// set 16-bit 'sign' flag
|
// set 16-bit 'sign' flag
|
||||||
if (!useLongDeltas && (d & SIGN_FLAG) == SIGN_FLAG)
|
if (!useLongDeltas && (d & SIGN_FLAG) == SIGN_FLAG)
|
||||||
d = (d & 0x7fff) | (SIGN_FLAG >> 16);
|
d = (d & 0x7fff) | (SIGN_FLAG >> 16);
|
||||||
writeByte((uint8_t)(d & 0xff));
|
writeByte((uint8_t) (d & 0xff));
|
||||||
writeByte((uint8_t)((d >> 8) & 0xff));
|
writeByte((uint8_t) ((d >> 8) & 0xff));
|
||||||
if (useLongDeltas) {
|
if (useLongDeltas) {
|
||||||
writeByte((uint8_t)((d >> 16) & 0xff));
|
writeByte((uint8_t) ((d >> 16) & 0xff));
|
||||||
writeByte((uint8_t)((d >> 24) & 0xff));
|
writeByte((uint8_t) ((d >> 24) & 0xff));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writeByte(0x00);
|
writeByte(0x00);
|
||||||
|
@ -197,6 +212,7 @@ static void writeChannelData(int ch, int64_t *chDeltas, int chLastState,
|
||||||
write(ch + 1);
|
write(ch + 1);
|
||||||
write(0);
|
write(0);
|
||||||
write(realDurationInSamples);
|
write(realDurationInSamples);
|
||||||
|
printf("realDurationInSamples=%d\n", realDurationInSamples);
|
||||||
write(1);
|
write(1);
|
||||||
write(lastRecord);
|
write(lastRecord);
|
||||||
|
|
||||||
|
@ -417,9 +433,9 @@ static void writeEvents(CompositeEvent *events, int count) {
|
||||||
prevTs = ts;
|
prevTs = ts;
|
||||||
chPrevState = chState;
|
chPrevState = chState;
|
||||||
}
|
}
|
||||||
writeChannelData(ch, chDeltas, chPrevState, prevTs, useLongDeltas,
|
|
||||||
deltaCount);
|
|
||||||
}
|
}
|
||||||
|
writeChannelData(ch, chDeltas, chPrevState, prevTs, useLongDeltas,
|
||||||
|
deltaCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(chDeltas);
|
free(chDeltas);
|
||||||
|
@ -458,7 +474,7 @@ static void writeFooter() {
|
||||||
|
|
||||||
write(BLOCK);
|
write(BLOCK);
|
||||||
write(0);
|
write(0);
|
||||||
write(1.0);
|
writeDouble(1.0);
|
||||||
write(SUB);
|
write(SUB);
|
||||||
write(0, 6);
|
write(0, 6);
|
||||||
write(1);
|
write(1);
|
||||||
|
|
Loading…
Reference in New Issue