MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxReadSerialBuffer

Function fxReadSerialBuffer

tools/serial2xsbug/serial2xsbug.c:537–752  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

535}
536
537void fxReadSerialBuffer(txSerialTool self, char* buffer, int size)
538{
539 char* src = buffer;
540 char* srcLimit = src + size;
541 int offset = self->index;
542 char* dst = self->buffer + offset;
543 char* dstLimit = self->buffer + mxBufferSize;
544
545 if (self->trace)
546 fprintf(stderr, "%.*s", size, buffer);
547
548 while (src < srcLimit) {
549 if (dst == dstLimit) {
550 txSerialMachine machine = self->currentMachine;
551 if (machine && !machine->suppress)
552 fxWriteNetwork(machine, self->buffer, mxBufferSize - mxTagSize);
553 memmove(self->buffer, dstLimit - mxTagSize, mxTagSize);
554 dst = self->buffer + mxTagSize;
555 offset = mxTagSize;
556 }
557 *dst++ = *src++;
558 offset++;
559 if (gBinaryState) {
560 if (1 == gBinaryState) {
561 gBinaryLength = dst[-1] << 8;
562 gBinaryState = 2;
563 }
564 else if (2 == gBinaryState) {
565 gBinaryLength |= dst[-1];
566 gBinaryState = 3;
567 }
568 if ((3 == gBinaryState) && ((2 + gBinaryLength) == (dst - self->buffer))) {
569 fxCommandReceived(self, self->buffer + 2, gBinaryLength);
570
571 dst = self->buffer;
572 offset = 0;
573 gBinaryState = 0;
574 }
575 }
576 else
577 if ((offset >= 2) && (dst[-2] == 13) && (dst[-1] == 10)) {
578 uint8_t flag;
579 uint32_t value;
580 if ((offset >= mxTagSize) && fxMatchProcessingInstruction(dst - mxTagSize, &flag, &value)) {
581 if (flag) {
582 self->currentMachine = fxOpenNetwork(self, value);
583 gBinaryState = 2 == flag;
584
585 if (gRestarting)
586 fxRestart(self);
587 }
588 else {
589 fxCloseNetwork(self, value);
590 gRestarting = 0;
591 }
592 }
593 else if ((offset >= 10) && (dst[-10] == '<') && (dst[-9] == '/') && (dst[-8] == 'x') && (dst[-7] == 's') && (dst[-6] == 'b') && (dst[-5] == 'u') && (dst[-4] == 'g') && (dst[-3] == '>')) {
594 txSerialMachine machine = self->currentMachine;

Callers 3

fxReadSerialFunction · 0.85
fxReadSerialFunction · 0.85
fxReadSerialFunction · 0.85

Calls 10

fxCommandReceivedFunction · 0.85
fxRestartFunction · 0.85
fxInitializeTargetFunction · 0.85
systemCommandFunction · 0.85
printAddressFunction · 0.85
fxWriteNetworkFunction · 0.70
fxOpenNetworkFunction · 0.70
fxCloseNetworkFunction · 0.70
fxCloseSerialFunction · 0.70

Tested by

no test coverage detected