Add msgpack wire protocol with halfsiphash checksums
This commit is contained in:
@@ -2,6 +2,7 @@ package picoserial
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"go.bug.st/serial"
|
||||
"go.bug.st/serial/enumerator"
|
||||
@@ -20,8 +21,12 @@ func FindDevice() (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func Open(portName string) (serial.Port, error) {
|
||||
return serial.Open(portName, &serial.Mode{BaudRate: 115200})
|
||||
}
|
||||
|
||||
func SendByte(portName string, b byte) error {
|
||||
port, err := serial.Open(portName, &serial.Mode{BaudRate: 115200})
|
||||
port, err := Open(portName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("opening %s: %w", portName, err)
|
||||
}
|
||||
@@ -33,3 +38,32 @@ func SendByte(portName string, b byte) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SendByteAndRead sends a byte and reads the response with a timeout.
|
||||
func SendByteAndRead(portName string, b byte, timeout time.Duration) ([]byte, error) {
|
||||
port, err := Open(portName)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("opening %s: %w", portName, err)
|
||||
}
|
||||
defer port.Close()
|
||||
|
||||
port.SetReadTimeout(timeout)
|
||||
|
||||
_, err = port.Write([]byte{b})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("writing to %s: %w", portName, err)
|
||||
}
|
||||
|
||||
var resp []byte
|
||||
buf := make([]byte, 256)
|
||||
for {
|
||||
n, err := port.Read(buf)
|
||||
if n > 0 {
|
||||
resp = append(resp, buf[:n]...)
|
||||
}
|
||||
if err != nil || n == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user