Documentation ¶
Overview ¶
Package can provides primitives for working with CAN.
Index ¶
- Constants
- func CheckBitRangeBigEndian(frameLength, rangeStart, rangeLength uint8) error
- func CheckBitRangeLittleEndian(frameLength, rangeStart, rangeLength uint8) error
- func CheckValue(value uint64, bits uint8) error
- type Data
- func (d *Data) Bit(i uint8) bool
- func (d *Data) PackBigEndian() uint64
- func (d *Data) PackLittleEndian() uint64
- func (d *Data) SetBit(i uint8, value bool)
- func (d *Data) SetSignedBitsBigEndian(start, length uint8, value int64)
- func (d *Data) SetSignedBitsLittleEndian(start, length uint8, value int64)
- func (d *Data) SetUnsignedBitsBigEndian(start, length uint8, value uint64)
- func (d *Data) SetUnsignedBitsLittleEndian(start, length uint8, value uint64)
- func (d *Data) SignedBitsBigEndian(start, length uint8) int64
- func (d *Data) SignedBitsLittleEndian(start, length uint8) int64
- func (d *Data) UnpackBigEndian(packed uint64)
- func (d *Data) UnpackLittleEndian(packed uint64)
- func (d *Data) UnsignedBitsBigEndian(start, length uint8) uint64
- func (d *Data) UnsignedBitsLittleEndian(start, length uint8) uint64
- type Frame
- type FrameMarshaler
- type FrameUnmarshaler
- type Message
Constants ¶
const ( MaxID = 0x7ff MaxExtendedID = 0x1fffffff )
CAN format constants.
const MaxDataLength = 8
Variables ¶
This section is empty.
Functions ¶
func CheckBitRangeBigEndian ¶
CheckBitRangeBigEndian checks that a big-endian bit range fits in the data.
func CheckBitRangeLittleEndian ¶
CheckBitRangeLittleEndian checks that a little-endian bit range fits in the data.
func CheckValue ¶
CheckValue checks that a value fits in a number of bits.
Types ¶
type Data ¶
type Data [MaxDataLength]byte
Data holds the data in a CAN frame.
Layout ¶
Individual bits in the data are numbered according to the following scheme:
BIT NUMBER +------+------+------+------+------+------+------+------+ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | BYTE +------+------+------+------+------+------+------+------+ NUMBER +-----+ +------+------+------+------+------+------+------+------+ | 0 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | +-----+ +------+------+------+------+------+------+------+------+ | 1 | | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | +-----+ +------+------+------+------+------+------+------+------+ | 2 | | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | +-----+ +------+------+------+------+------+------+------+------+ | 3 | | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | +-----+ +------+------+------+------+------+------+------+------+ | 4 | | 39 | 38 | 37 | 36 | 35 | 34 | 33 | 32 | +-----+ +------+------+------+------+------+------+------+------+ | 5 | | 47 | 46 | 45 | 44 | 43 | 42 | 41 | 40 | +-----+ +------+------+------+------+------+------+------+------+ | 6 | | 55 | 54 | 53 | 52 | 51 | 50 | 49 | 48 | +-----+ +------+------+------+------+------+------+------+------+ | 7 | | 63 | 62 | 61 | 60 | 59 | 58 | 57 | 56 | +-----+ +------+------+------+------+------+------+------+------+
Bit ranges can be manipulated using little-endian and big-endian bit ordering.
Little-endian bit ranges ¶
Example range of length 32 starting at bit 29:
BIT NUMBER +------+------+------+------+------+------+------+------+ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | BYTE +------+------+------+------+------+------+------+------+ NUMBER +-----+ +------+------+------+------+------+------+------+------+ | 0 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | +-----+ +------+------+------+------+------+------+------+------+ | 1 | | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | +-----+ +------+------+------+------+------+------+------+------+ | 2 | | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | +-----+ +------+------+------+------+------+------+------+------+ | 3 | | <-------------LSb | 28 | 27 | 26 | 25 | 24 | +-----+ +------+------+------+------+------+------+------+------+ | 4 | | <-------------------------------------------------- | +-----+ +------+------+------+------+------+------+------+------+ | 5 | | <-------------------------------------------------- | +-----+ +------+------+------+------+------+------+------+------+ | 6 | | <-------------------------------------------------- | +-----+ +------+------+------+------+------+------+------+------+ | 7 | | 63 | 62 | 61 | <-MSb--------------------------- | +-----+ +------+------+------+------+------+------+------+------+
Big-endian bit ranges ¶
Example range of length 32 starting at bit 29:
BIT NUMBER +------+------+------+------+------+------+------+------+ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | BYTE +------+------+------+------+------+------+------+------+ NUMBER +-----+ +------+------+------+------+------+------+------+------+ | 0 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | +-----+ +------+------+------+------+------+------+------+------+ | 1 | | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | +-----+ +------+------+------+------+------+------+------+------+ | 2 | | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | +-----+ +------+------+------+------+------+------+------+------+ | 3 | | 31 | 30 | <-MSb--------------------------------- | +-----+ +------+------+------+------+------+------+------+------+ | 4 | | <-------------------------------------------------- | +-----+ +------+------+------+------+------+------+------+------+ | 5 | | <-------------------------------------------------- | +-----+ +------+------+------+------+------+------+------+------+ | 6 | | <-------------------------------------------------- | +-----+ +------+------+------+------+------+------+------+------+ | 7 | | <------LSb | 61 | 60 | 59 | 58 | 57 | 56 | +-----+ +------+------+------+------+------+------+------+------+
func (*Data) PackBigEndian ¶
PackBigEndian packs the data into a contiguous uint64 value for big-endian signals.
func (*Data) PackLittleEndian ¶
PackLittleEndian packs the data into a contiguous uint64 value for little-endian signals.
func (*Data) SetSignedBitsBigEndian ¶
SetSignedBitsBigEndian sets the big-endian bit range [start, start+length) to the provided signed value.
func (*Data) SetSignedBitsLittleEndian ¶
SetSignedBitsLittleEndian sets the little-endian bit range [start, start+length) to the provided signed value.
func (*Data) SetUnsignedBitsBigEndian ¶
SetUnsignedBitsBigEndian sets the big-endian bit range [start, start+length) to the provided unsigned value.
func (*Data) SetUnsignedBitsLittleEndian ¶
SetUnsignedBitsBigEndian sets the little-endian bit range [start, start+length) to the provided unsigned value.
func (*Data) SignedBitsBigEndian ¶
SignedBitsBigEndian returns little-endian bit range [start, start+length) as a signed value.
func (*Data) SignedBitsLittleEndian ¶
SignedBitsLittleEndian returns little-endian bit range [start, start+length) as a signed value.
func (*Data) UnpackBigEndian ¶
UnpackBigEndian sets the value of d.Bytes by unpacking the provided value as sequential big-endian bits.
func (*Data) UnpackLittleEndian ¶
UnpackLittleEndian sets the value of d.Bytes by unpacking the provided value as sequential little-endian bits.
func (*Data) UnsignedBitsBigEndian ¶
UnsignedBitsBigEndian returns the big-endian bit range [start, start+length) as an unsigned value.
func (*Data) UnsignedBitsLittleEndian ¶
UnsignedBitsLittleEndian returns the little-endian bit range [start, start+length) as an unsigned value.
type Frame ¶
type Frame struct { // ID is the CAN ID ID uint32 // Length is the number of bytes of data in the frame. Length uint8 // Data is the frame data. Data Data // IsRemote is true for remote frames. IsRemote bool // IsExtended is true for extended frames, i.e. frames with 29-bit IDs. IsExtended bool }
Frame represents a CAN frame.
A Frame is intentionally designed to fit into 16 bytes on common architectures and is therefore amenable to pass-by-value and judicious copying.
func (Frame) JSON ¶
JSON returns the JSON-encoding of f, using hex-encoding for the data.
Examples:
{"id":32,"data":"0102030405060708"} {"id":32,"extended":true,"remote":true,"length":4}
func (Frame) MarshalJSON ¶
MarshalJSON returns the JSON-encoding of f, using hex-encoding for the data.
See JSON for an example of the JSON schema.
func (Frame) String ¶
String returns an ASCII representation the CAN frame.
Format:
([0-9A-F]{3}|[0-9A-F]{3})#(R[0-8]?|[0-9A-F]{0,16})
The format is compatible with the candump(1) log file format.
func (*Frame) UnmarshalJSON ¶
UnmarshalJSON sets *f using the provided JSON-encoded values.
See MarshalJSON for an example of the expected JSON schema.
The result should be checked with Validate to guard against invalid JSON data.
func (*Frame) UnmarshalString ¶
UnmarshalString sets *f using the provided ASCII representation of a Frame.
type FrameMarshaler ¶
FrameMarshaler can marshal itself to a CAN frame.
type FrameUnmarshaler ¶
FrameUnmarshaler can unmarshal itself from a CAN frame.
type Message ¶
type Message interface { FrameMarshaler FrameUnmarshaler }
Message is anything that can marshal and unmarshal itself to/from a CAN frame.
Directories ¶
Path | Synopsis |
---|---|
cmd
|
|
internal
|
|
clock
Package clock provides primitives for mocking time.
|
Package clock provides primitives for mocking time. |
mocks/gen/mockcanrunner
Package mockcanrunner is a generated GoMock package.
|
Package mockcanrunner is a generated GoMock package. |
mocks/gen/mockclock
Package mockclock is a generated GoMock package.
|
Package mockclock is a generated GoMock package. |
mocks/gen/mocksocketcan
Package mocksocketcan is a generated GoMock package.
|
Package mocksocketcan is a generated GoMock package. |
reinterpret
Package reinterpret provides primitives for reinterpreting arbitrary-length values as signed or unsigned.
|
Package reinterpret provides primitives for reinterpreting arbitrary-length values as signed or unsigned. |
pkg
|
|
dbc
Package dbc provides primitives for parsing, formatting and linting DBC files.
|
Package dbc provides primitives for parsing, formatting and linting DBC files. |
generated
Package generated provides primitives for working with code-generated CAN messages.
|
Package generated provides primitives for working with code-generated CAN messages. |