diff options
author | xengineering <me@xengineering.eu> | 2024-05-30 16:47:29 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2024-05-30 16:48:39 +0200 |
commit | 96d159114af675d55fe0d7c0f22a69d65e9563fc (patch) | |
tree | 1d7b7e6a84b5d06765084ea6414874a21d3cbaa5 /software/communication/interface.go | |
parent | 0cfd378394b6c5d90e00c217b12113e0c3284031 (diff) | |
download | iot-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.go | 52 |
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 +} |