summaryrefslogtreecommitdiff
path: root/src/fecmodem.cc
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2016-02-12 20:46:34 +0100
committerDaniel Friesel <derf@finalrewind.org>2016-02-12 20:46:34 +0100
commit712950db5e0c08d7b31a5074765d507f73da423c (patch)
tree575ae37257e87e1fe11581be5fe45a2a592d2eaf /src/fecmodem.cc
parent285952ea1dc6ac40d67820844033d6115ab7e404 (diff)
quick&dirty hamming buffer implementation.
Diffstat (limited to 'src/fecmodem.cc')
-rw-r--r--src/fecmodem.cc28
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;