summaryrefslogtreecommitdiff
path: root/software
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 /software
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.
Diffstat (limited to 'software')
-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)