acceptByte method
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;
}
}