diff options
author | xengineering <me@xengineering.eu> | 2024-05-30 22:55:52 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2024-05-31 10:04:51 +0200 |
commit | a3cbf0dd580a5bc51c4cfccbdf69be5fff23303a (patch) | |
tree | 47705f9414356ff7f1178582c41756ee580d235e | |
parent | 41072be6c6af48f3066daf60552eba5191bfad7d (diff) | |
download | iot-core-a3cbf0dd580a5bc51c4cfccbdf69be5fff23303a.tar iot-core-a3cbf0dd580a5bc51c4cfccbdf69be5fff23303a.tar.zst iot-core-a3cbf0dd580a5bc51c4cfccbdf69be5fff23303a.zip |
software: Fix unslip() implementation and test
Both the implementation and the unit test had bugs which were blocking
the test execution forever. This is fixed with this commit. Furthermore
the new unslip() implementation is refactored and more readable.
-rw-r--r-- | software/communication/data_link.go | 29 | ||||
-rw-r--r-- | software/communication/data_link_test.go | 4 |
2 files changed, 17 insertions, 16 deletions
diff --git a/software/communication/data_link.go b/software/communication/data_link.go index d6e752d..82375bf 100644 --- a/software/communication/data_link.go +++ b/software/communication/data_link.go @@ -1,5 +1,9 @@ package communication +import ( + "log" +) + const ( SLIP_END = 0xC0 SLIP_ESC = 0xDB @@ -32,32 +36,25 @@ func (dl *dataLink) receive(source chan byte) { } func unslip(source chan byte) []byte { - escaped := false buffer := make([]byte, 0) for { octet := <-source - if escaped { - switch octet { + switch octet { + case SLIP_ESC: + escaped := <-source + switch escaped { case SLIP_ESC_END: buffer = append(buffer, SLIP_END) case SLIP_ESC_ESC: buffer = append(buffer, SLIP_ESC) - } - } else { - switch octet { - case SLIP_END: - break - case SLIP_ESC: - escaped = true - continue default: - buffer = append(buffer, octet) - continue + log.Printf("SLIP: Invalid 0x%x followed an escape byte", escaped) } - break + case SLIP_END: + return buffer + default: + buffer = append(buffer, octet) } } - - return buffer } diff --git a/software/communication/data_link_test.go b/software/communication/data_link_test.go index ce8fe10..bbe9539 100644 --- a/software/communication/data_link_test.go +++ b/software/communication/data_link_test.go @@ -8,10 +8,14 @@ import ( func TestUnslip(t *testing.T) { input := []byte{ 0xFF, 0x12, SLIP_END, + 0xFF, SLIP_ESC, SLIP_ESC_END, 0x12, SLIP_END, + 0xFF, SLIP_ESC, SLIP_ESC_ESC, 0x12, SLIP_END, } output := [][]byte{ {0xFF, 0x12}, + {0xFF, SLIP_END, 0x12}, + {0xFF, SLIP_ESC, 0x12}, } bytes := make(chan byte) |