summaryrefslogtreecommitdiff
path: root/software/communication/interface.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2024-05-30 16:47:29 +0200
committerxengineering <me@xengineering.eu>2024-05-30 16:48:39 +0200
commit96d159114af675d55fe0d7c0f22a69d65e9563fc (patch)
tree1d7b7e6a84b5d06765084ea6414874a21d3cbaa5 /software/communication/interface.go
parent0cfd378394b6c5d90e00c217b12113e0c3284031 (diff)
downloadiot-core-96d159114af675d55fe0d7c0f22a69d65e9563fc.tar
iot-core-96d159114af675d55fe0d7c0f22a69d65e9563fc.tar.zst
iot-core-96d159114af675d55fe0d7c0f22a69d65e9563fc.zip
software: communication: Add SerialInterface
This new type bundles the whole communication stack. This is easier to use than handling types for each layer on the user side of the communication package.
Diffstat (limited to 'software/communication/interface.go')
-rw-r--r--software/communication/interface.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/software/communication/interface.go b/software/communication/interface.go
new file mode 100644
index 0000000..d6111cc
--- /dev/null
+++ b/software/communication/interface.go
@@ -0,0 +1,52 @@
+package communication
+
+import (
+ "fmt"
+ "log"
+
+ "go.bug.st/serial"
+)
+
+type SerialInterface struct {
+ port serial.Port
+}
+
+func NewSerialInterface() (SerialInterface, error) {
+ iface := SerialInterface{}
+
+ devices, err := getStSerials()
+ if err != nil {
+ return iface, err
+ }
+
+ if len(devices) != 1 {
+ return iface, fmt.Errorf("Require exactly one serial device from STMicroelectronics but %d attached", len(devices))
+ }
+ device := devices[0]
+
+ iface.port, err = openSerial(device)
+ if err != nil {
+ return iface, err
+ }
+
+ return iface, nil
+}
+
+func (i *SerialInterface) Log() {
+ for {
+ data, err := i.Read()
+ if err != nil {
+ log.Fatal(err)
+ }
+ log.Printf("RX: '%s'\n", string(data))
+ }
+}
+
+func (i *SerialInterface) Read() ([]byte, error) {
+ buff := make([]byte, 100)
+ n, err := i.port.Read(buff)
+ if err != nil {
+ return []byte{}, err
+ }
+ return buff[:n], nil
+}