15uint8_t detws_snp_bcc(
const uint8_t *bytes,
size_t len)
18 for (
size_t i = 0; i < len; i++)
19 sum = (uint8_t)(sum + bytes[i]);
23size_t detws_snp_build(uint8_t control,
const uint8_t *data,
size_t data_len, uint8_t *out,
size_t cap)
25 if (!out || (data_len && !data) || data_len > 255)
27 size_t n = 2 + data_len + 1;
31 out[1] = (uint8_t)data_len;
33 memcpy(out + 2, data, data_len);
34 out[2 + data_len] = detws_snp_bcc(out, 2 + data_len);
38bool detws_snp_parse(
const uint8_t *frame,
size_t len, SnpFrame *out)
40 if (!frame || !out || len < 3)
42 uint8_t data_len = frame[1];
43 size_t expect = 2 + (size_t)data_len + 1;
46 if (detws_snp_bcc(frame, 2 + data_len) != frame[2 + data_len])
48 out->control = frame[0];
49 out->data = data_len ? (frame + 2) : nullptr;
50 out->data_len = data_len;
GE Fanuc SNP (Series Ninety Protocol) serial frame codec (DETWS_ENABLE_SNP).