summaryrefslogtreecommitdiff
path: root/software/communication/interface.go
diff options
context:
space:
mode:
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
+}