acceptByte method

void acceptByte(
  1. int b
)

Implementation

void acceptByte(int b) {
  if (_fieldCksumBytes == 0) {
    _fieldCksumBytes = _calcCksumBytes();
  }

  if (ps == 'SOF') {
    if (useFieldSofByte) {
      if (b != fieldSofValue) {
        return;
      }

      rpayload = Uint8List(0);
      rpayload = Uint8List.fromList([...rpayload, b]);
    }

    ps = 'ID';
    rlen = fieldIdBytes;
    rbuf = Uint8List(0);

    if (useFieldSofByte) {
      return;
    }
  }

  if (ps == 'ID') {
    rpayload = Uint8List.fromList([...rpayload, b]);
    rbuf = Uint8List.fromList([...rbuf, b]);

    if (rbuf.length == rlen) {
      rf.id = _unpack(rbuf);

      ps = 'LEN';
      rlen = fieldLenBytes;
      rbuf = Uint8List(0);
    }
    return;
  }

  if (ps == 'LEN') {
    rpayload = Uint8List.fromList([...rpayload, b]);
    rbuf = Uint8List.fromList([...rbuf, b]);

    if (rbuf.length == rlen) {
      rf.len = _unpack(rbuf);

      ps = 'TYPE';
      rlen = fieldTypeBytes;
      rbuf = Uint8List(0);
    }
    return;
  }

  if (ps == 'TYPE') {
    rpayload = Uint8List.fromList([...rpayload, b]);
    rbuf = Uint8List.fromList([...rbuf, b]);

    if (rbuf.length == rlen) {
      rf.type = _unpack(rbuf);

      if (_fieldCksumBytes > 0) {
        ps = 'HCK';
        rlen = _fieldCksumBytes;
        rbuf = Uint8List(0);
      } else {
        ps = 'PLD';
        rlen = rf.len;
        rbuf = Uint8List(0);
      }
    }
    return;
  }

  if (ps == 'HCK') {
    rbuf = Uint8List.fromList([...rbuf, b]);

    if (rbuf.length == rlen) {
      int hck = _unpack(rbuf);
      int actual = _cksum(rpayload);

      if (hck != actual) {
        resetParser();
      } else {
        if (rf.len == 0) {
          handleRxFrame();
          resetParser();
        } else {
          ps = 'PLD';
          rlen = rf.len;
          rbuf = Uint8List(0);
          rpayload = Uint8List(0);
        }
      }
    }
    return;
  }

  if (ps == 'PLD') {
    rpayload = Uint8List.fromList([...rpayload, b]);
    rbuf = Uint8List.fromList([...rbuf, b]);

    if (rbuf.length == rlen) {
      rf.data = rpayload;

      if (_fieldCksumBytes > 0) {
        ps = 'PCK';
        rlen = _fieldCksumBytes;
        rbuf = Uint8List(0);
      } else {
        handleRxFrame();
        resetParser();
      }
    }
    return;
  }

  if (ps == 'PCK') {
    rbuf = Uint8List.fromList([...rbuf, b]);

    if (rbuf.length == rlen) {
      int pck = _unpack(rbuf);
      int actual = _cksum(rpayload);

      if (pck != actual) {
        resetParser();
      } else {
        handleRxFrame();
        resetParser();
      }
    }
    return;
  }
}