Documentation ¶
Overview ¶
Package can provides an implemention of a CAN bus to send and receive CAN frames.
Index ¶
- Constants
- func Marshal(frm Frame) (b []byte, err error)
- func NewSockaddr(proto uint16, Ifindex int) syscall.Sockaddr
- func Unmarshal(b []byte, frm *Frame) (err error)
- func Wait(bus *Bus, id uint32, timeout time.Duration) <-chan WaitResponse
- type Bus
- type Frame
- type Handler
- type HandlerFunc
- type ReadWriteCloser
- type Reader
- type WaitResponse
- type Writer
Constants ¶
const ( // MaskIDSff is used to extract the valid 11-bit CAN identifier bits from the frame ID of a standard frame format. MaskIDSff = 0x000007FF // MaskIDEff is used to extract the valid 29-bit CAN identifier bits from the frame ID of an extended frame format. MaskIDEff = 0x1FFFFFFF // MaskErr is used to extract the the error flag (0 = data frame, 1 = error message) from the frame ID. MaskErr = 0x20000000 // MaskRtr is used to extract the rtr flag (1 = rtr frame) from the frame ID MaskRtr = 0x40000000 // MaskEff is used to extract the eff flag (0 = standard frame, 1 = extended frame) from the frame ID MaskEff = 0x80000000 )
const ( // MaxFrameDataLength defines the max length of a CAN data frame defined in ISO 11898-1. MaxFrameDataLength = 8 // MaxExtFrameDataLength defines the max length of an CAN extended data frame defined in ISO ISO 11898-7. MaxExtFrameDataLength = 64 )
const AF_CAN = syscall.AF_CAN
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Bus ¶
type Bus struct {
// contains filtered or unexported fields
}
Bus represents the CAN bus. Handlers can subscribe to receive frames. Frame are sent using the *Publish* method.
func NewBusForInterfaceWithName ¶
NewBusForInterfaceWithName returns a bus from the network interface with name ifaceName.
func (*Bus) ConnectAndPublish ¶
ConnectAndPublish starts handling CAN frames to publish them to handlers.
func (*Bus) Publish ¶
Publish publishes a frame on the bus.
Frames publishes with the Publish methods are not received by handlers.
func (*Bus) SubscribeFunc ¶
func (b *Bus) SubscribeFunc(fn HandlerFunc)
SubscribeFunc adds a function as handler.
type Frame ¶
type Frame struct { // bit 0-28: CAN identifier (11/29 bit) // bit 29: error message flag (ERR) // bit 30: remote transmision request (RTR) // bit 31: extended frame format (EFF) ID uint32 Length uint8 Flags uint8 Res0 uint8 Res1 uint8 Data [MaxFrameDataLength]uint8 }
Frame represents a standard CAN data frame
type Handler ¶
type Handler interface {
Handle(frame Frame)
}
The Handler interfaces defines a method to receive a frame.
func NewHandler ¶
func NewHandler(fn HandlerFunc) Handler
NewHandler returns a new handler which calls fn when a frame is received.
type HandlerFunc ¶
type HandlerFunc func(frame Frame)
HandlerFunc defines the function type to handle a frame.
type ReadWriteCloser ¶
The ReadWriteCloser interface combines the Reader and Writer and `io.Closer` interface.
func NewEchoReadWriteCloser ¶
func NewEchoReadWriteCloser() ReadWriteCloser
NewEchoReadWriteCloser returns a ReadWriteCloser which echoes received bytes.
func NewReadWriteCloser ¶
func NewReadWriteCloser(rwc io.ReadWriteCloser) ReadWriteCloser
NewReadWriteCloser returns a ReadWriteCloser for an `io.ReadWriteCloser`.
func NewReadWriteCloserForInterface ¶
func NewReadWriteCloserForInterface(i *net.Interface) (ReadWriteCloser, error)
type WaitResponse ¶
A WaitResponse encapsulates the response of waiting for a frame.