diff options
author | Daniel Friesel <derf@finalrewind.org> | 2016-02-12 20:46:34 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2016-02-12 20:46:34 +0100 |
commit | 712950db5e0c08d7b31a5074765d507f73da423c (patch) | |
tree | 575ae37257e87e1fe11581be5fe45a2a592d2eaf /src/fecmodem.cc | |
parent | 285952ea1dc6ac40d67820844033d6115ab7e404 (diff) |
quick&dirty hamming buffer implementation.
Diffstat (limited to 'src/fecmodem.cc')
-rw-r--r-- | src/fecmodem.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/fecmodem.cc b/src/fecmodem.cc index bd0d58c..52271fd 100644 --- a/src/fecmodem.cc +++ b/src/fecmodem.cc @@ -48,4 +48,32 @@ uint8_t FECModem::hamming2416(uint8_t *byte1, uint8_t *byte2, uint8_t parity) return 0; } +uint8_t FECModem::buffer_available() +{ + if (rxWasReset()) + hammingState = FIRST_BYTE; + if (this->Modem::buffer_available() >= 3) + return 2; + if (hammingState == SECOND_BYTE) + return 1; + return 0; +} + +uint8_t FECModem::buffer_get() +{ + uint8_t byte1, parity; + if (hammingState == SECOND_BYTE) { + hammingState = FIRST_BYTE; + return buf_byte; + } + hammingState = SECOND_BYTE; + byte1 = this->Modem::buffer_get(); + buf_byte = this->Modem::buffer_get(); + parity = this->Modem::buffer_get(); + + hamming2416(&byte1, &buf_byte, parity); + + return byte1; +} + FECModem modem; |