summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2024-05-30 22:55:52 +0200
committerxengineering <me@xengineering.eu>2024-05-31 10:04:51 +0200
commita3cbf0dd580a5bc51c4cfccbdf69be5fff23303a (patch)
tree47705f9414356ff7f1178582c41756ee580d235e
parent41072be6c6af48f3066daf60552eba5191bfad7d (diff)
downloadiot-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.go29
-rw-r--r--software/communication/data_link_test.go4
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)