rename can frame type enums

This commit is contained in:
saji 2023-05-09 10:25:29 -05:00
parent 344353b0d6
commit 1bd003843c
4 changed files with 54 additions and 16 deletions

View file

@ -6,6 +6,12 @@
// by writing "adapters" to various devices/formats (xbee, sqlite, network socket, socketcan)
package gotelem
import (
"fmt"
"os"
"time"
)
// Frame represents a protocol-agnostic CAN frame. The Id can be standard or extended,
// but if it is extended, the Kind should be EFF.
type Frame struct {
@ -26,10 +32,10 @@ type CANFrame interface {
type Kind uint8
const (
SFF Kind = iota // Standard ID Frame
EFF // Extended ID Frame
RTR // Remote Transmission Request Frame
ERR // Error Frame
CanSFFFrame Kind = iota // Standard ID Frame
CanEFFFrame // Extended ID Frame
CanRTRFrame // Remote Transmission Request Frame
CanErrFrame // Error Frame
)
// CanFilter is a basic filter for masking out data. It has an Inverted flag
@ -56,3 +62,32 @@ type CanTransciever interface {
CanSink
CanSource
}
// CanWriter
type CanWriter struct {
output *os.File
}
// send writes the frame to the file.
func (cw *CanWriter) Send(f *Frame) error {
ts := time.Now().Unix()
_, err := fmt.Fprintf(cw.output, "%d %X %X", ts, f.Id, f.Data)
return err
}
func (cw *CanWriter) Close() error {
return cw.output.Close()
}
func OpenCanWriter(name string) (*CanWriter, error) {
f, err := os.Create(name)
if err != nil {
return nil, err
}
cw := &CanWriter{
output: f,
}
return cw, nil
}

View file

@ -8,10 +8,10 @@ func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[SFF-0]
_ = x[EFF-1]
_ = x[RTR-2]
_ = x[ERR-3]
_ = x[CanSFFFrame-0]
_ = x[CanEFFFrame-1]
_ = x[CanRTRFrame-2]
_ = x[CanErrFrame-3]
}
const _Kind_name = "SFFEFFRTRERR"

View file

@ -134,15 +134,17 @@ func (sck *CanSocket) Send(msg *gotelem.Frame) error {
idToWrite := msg.Id
switch msg.Kind {
case gotelem.SFF:
case gotelem.CanSFFFrame:
idToWrite &= unix.CAN_SFF_MASK
case gotelem.EFF:
case gotelem.CanEFFFrame:
idToWrite &= unix.CAN_EFF_MASK
idToWrite |= unix.CAN_EFF_FLAG
case gotelem.RTR:
case gotelem.CanRTRFrame:
idToWrite |= unix.CAN_RTR_FLAG
default:
case gotelem.CanErrFrame:
return errors.New("you can't send error frames")
default:
return errors.New("unknown frame type")
}
binary.LittleEndian.PutUint32(buf[:4], idToWrite)
@ -186,10 +188,10 @@ func (sck *CanSocket) Recv() (*gotelem.Frame, error) {
var k gotelem.Kind
if id&unix.CAN_EFF_FLAG != 0 {
// extended id frame
k = gotelem.EFF
k = gotelem.CanEFFFrame
} else {
// it's a normal can frame
k = gotelem.SFF
k = gotelem.CanSFFFrame
}
dataLength := uint8(buf[4])

View file

@ -45,7 +45,7 @@ func TestCanSocket(t *testing.T) {
// make a packet.
testFrame := &gotelem.Frame{
Id: 0x123,
Kind: gotelem.SFF,
Kind: gotelem.CanSFFFrame,
Data: []byte{0, 1, 2, 3, 4, 5, 6, 7},
}
err := sock.Send(testFrame)
@ -63,7 +63,7 @@ func TestCanSocket(t *testing.T) {
testFrame := &gotelem.Frame{
Id: 0x234,
Kind: gotelem.SFF,
Kind: gotelem.CanSFFFrame,
Data: []byte{0, 1, 2, 3, 4, 5, 6, 7},
}
_ = sock.Send(testFrame)
@ -81,4 +81,5 @@ func TestCanSocket(t *testing.T) {
})
// TODO: test filtering.
}