Documentation ¶
Overview ¶
Package dbc provides primitives for parsing, formatting and linting DBC files.
The implementation adheres to the "DBC File Format Documentation Version 01/2007" unless specified otherwise.
Index ¶
- Constants
- func IsIndependentSignalsMessage(m *MessageDef) bool
- type AccessType
- type AttributeDef
- type AttributeDefaultValueDef
- type AttributeValueForObjectDef
- type AttributeValueType
- type BitTimingDef
- type CommentDef
- type Def
- type EnvironmentVariableDataDef
- type EnvironmentVariableDef
- type EnvironmentVariableType
- type Error
- type File
- type Identifier
- type Keyword
- type MessageDef
- type MessageID
- type MessageTransmittersDef
- type NewSymbolsDef
- type NodesDef
- type ObjectType
- type Parser
- type SignalDef
- type SignalValueType
- type SignalValueTypeDef
- type UnknownDef
- type ValueDescriptionDef
- type ValueDescriptionsDef
- type ValueTableDef
- type VersionDef
Constants ¶
const ( // IndependentSignalsMessageName is the message name used by the special independent signals message. IndependentSignalsMessageName Identifier = "VECTOR__INDEPENDENT_SIG_MSG" // IndependentSignalsMessageName is the message ID used by the special independent signals message. IndependentSignalsMessageID MessageID = 0xc0000000 // IndependentSignalsMessageSize is the size used by the special independent signals message. IndependentSignalsMessageSize = 0 )
Independent signals constants.
DBC files may contain a special message with the following message name and message ID.
This message will have size 0 and may contain duplicate signal names.
Variables ¶
This section is empty.
Functions ¶
func IsIndependentSignalsMessage ¶
func IsIndependentSignalsMessage(m *MessageDef) bool
IsIndependentSignalsMessage returns true if m is the special independent signals message.
Types ¶
type AccessType ¶
type AccessType string
AccessType represents the access type of an environment variable.
const ( AccessTypeUnrestricted AccessType = "DUMMY_NODE_VECTOR0" AccessTypeRead AccessType = "DUMMY_NODE_VECTOR1" AccessTypeWrite AccessType = "DUMMY_NODE_VECTOR2" AccessTypeReadWrite AccessType = "DUMMY_NODE_VECTOR3" )
func (AccessType) Validate ¶
func (a AccessType) Validate() error
Validate returns an error for invalid access types.
type AttributeDef ¶
type AttributeDef struct { Pos scanner.Position ObjectType ObjectType Name Identifier Type AttributeValueType MinimumInt int64 MaximumInt int64 MinimumFloat float64 MaximumFloat float64 EnumValues []string }
AttributeDef defines a user-defined attribute.
User-defined attributes are a means to extend the object properties of the DBC file.
These additional attributes have to be defined using an attribute definition with an attribute default value.
For each object having a value defined for the attribute, an attribute value entry has to be defined.
If no attribute value entry is defined for an object, the value of the object's attribute is the attribute's default.
func (*AttributeDef) Position ¶
func (d *AttributeDef) Position() scanner.Position
Position returns the position of the definition.
type AttributeDefaultValueDef ¶
type AttributeDefaultValueDef struct { Pos scanner.Position AttributeName Identifier DefaultIntValue int64 DefaultFloatValue float64 DefaultStringValue string }
AttributeDefaultValueDef defines the default value for an attribute.
func (*AttributeDefaultValueDef) Position ¶
func (d *AttributeDefaultValueDef) Position() scanner.Position
Position returns the position of the definition.
type AttributeValueForObjectDef ¶
type AttributeValueForObjectDef struct { Pos scanner.Position AttributeName Identifier ObjectType ObjectType MessageID MessageID SignalName Identifier NodeName Identifier EnvironmentVariableName Identifier IntValue int64 FloatValue float64 StringValue string }
AttributeValueForObjectDef defines a value for an attribute and an object.
func (*AttributeValueForObjectDef) Position ¶
func (d *AttributeValueForObjectDef) Position() scanner.Position
Position returns the position of the definition.
type AttributeValueType ¶
type AttributeValueType string
AttributeValueType represents an attribute value type.
const ( AttributeValueTypeInt AttributeValueType = "INT" AttributeValueTypeHex AttributeValueType = "HEX" AttributeValueTypeFloat AttributeValueType = "FLOAT" AttributeValueTypeString AttributeValueType = "STRING" AttributeValueTypeEnum AttributeValueType = "ENUM" )
func (AttributeValueType) Validate ¶
func (a AttributeValueType) Validate() error
Validate returns an error for invalid attribute value types.
type BitTimingDef ¶
BitTimingDef defines the baud rate and the settings of the BTR registers of a CAN network.
This definition is obsolete and not used anymore.
func (*BitTimingDef) Position ¶
func (d *BitTimingDef) Position() scanner.Position
Position returns the position of the definition.
type CommentDef ¶
type CommentDef struct { Pos scanner.Position ObjectType ObjectType NodeName Identifier MessageID MessageID SignalName Identifier EnvironmentVariableName Identifier Comment string }
CommentDef defines a comment.
func (*CommentDef) Position ¶
func (d *CommentDef) Position() scanner.Position
Position returns the position of the definition.
type Def ¶
type Def interface { // Position of the definition. Position() scanner.Position // contains filtered or unexported methods }
Def represents a single definition within a DBC file.
type EnvironmentVariableDataDef ¶
type EnvironmentVariableDataDef struct { Pos scanner.Position // EnvironmentVariableName is the name of the environment variable. EnvironmentVariableName Identifier // DataSize is the size of the environment variable data in bytes. DataSize uint64 }
EnvironmentVariableDataDef defines an environment variable as being of type "data".
Environment variables of this type can store an arbitrary binary data of the given length. The length is given in bytes.
func (*EnvironmentVariableDataDef) Position ¶
func (d *EnvironmentVariableDataDef) Position() scanner.Position
Position returns the position of the definition.
type EnvironmentVariableDef ¶
type EnvironmentVariableDef struct { Pos scanner.Position Name Identifier Type EnvironmentVariableType Minimum float64 Maximum float64 Unit string InitialValue float64 ID uint64 AccessType AccessType AccessNodes []Identifier }
EnvironmentVariableDef defines an environment variable.
DBC files that describe the CAN communication and don't define any additional data for system or remaining bus simulations don't include environment variables.
func (*EnvironmentVariableDef) Position ¶
func (d *EnvironmentVariableDef) Position() scanner.Position
Position returns the position of the definition.
type EnvironmentVariableType ¶
type EnvironmentVariableType uint64
EnvironmentVariableType represents the type of an environment variable.
const ( EnvironmentVariableTypeInteger EnvironmentVariableType = 0 EnvironmentVariableTypeFloat EnvironmentVariableType = 1 EnvironmentVariableTypeString EnvironmentVariableType = 2 )
func (EnvironmentVariableType) Validate ¶
func (e EnvironmentVariableType) Validate() error
Validate returns an error for invalid environment variable types.
type Error ¶
type Error interface { error // Position of the error in the DBC file. Position() scanner.Position // Reason for the error. Reason() string }
Error represents an error in a DBC file.
type File ¶
type File struct { // Name of the file. Name string // Data contains the raw file data. Data []byte // Defs in the file. Defs []Def }
File is a parsed DBC source file.
type Identifier ¶
type Identifier string
Identifier represents a DBC identifier.
const NodePlaceholder Identifier = "Vector__XXX"
NodePlaceholder is the placeholder node name used when no actual node is specified.
func (Identifier) Validate ¶
func (id Identifier) Validate() (err error)
Validate returns an error for invalid DBC identifiers.
type Keyword ¶
type Keyword string
Keyword represents a DBC keyword.
const ( KeywordAttribute Keyword = "BA_DEF_" KeywordAttributeDefault Keyword = "BA_DEF_DEF_" KeywordAttributeValue Keyword = "BA_" KeywordBitTiming Keyword = "BS_" KeywordComment Keyword = "CM_" KeywordEnvironmentVariable Keyword = "EV_" KeywordEnvironmentVariableData Keyword = "ENVVAR_DATA_" KeywordMessage Keyword = "BO_" KeywordMessageTransmitters Keyword = "BO_TX_BU_" KeywordNewSymbols Keyword = "NS_" KeywordNodes Keyword = "BU_" KeywordSignal Keyword = "SG_" KeywordSignalGroup Keyword = "SIG_GROUP_" KeywordSignalType Keyword = "SGTYPE_" KeywordSignalValueType Keyword = "SIG_VALTYPE_" KeywordValueDescriptions Keyword = "VAL_" KeywordValueTable Keyword = "VAL_TABLE_" KeywordVersion Keyword = "VERSION" )
type MessageDef ¶
type MessageDef struct { // Pos is the position of the message definition. Pos scanner.Position // MessageID contains the message CAN ID. // // The CAN ID has to be unique within the DBC file. // // If the most significant bit of the message ID is set, the ID is an extended CAN ID. The extended CAN ID can be // determined by masking out the most significant bit with the mask 0xCFFFFFFF. MessageID MessageID // Name is the name of the message. // // The message name has to be unique within the DBC file. Name Identifier // Size specifies the size of the message in bytes. Size uint64 // Transmitter specifies the name of the node transmitting the message. // // The transmitter has to be defined in the set of node names in the nodes definition. // // If the message has no transmitter, the string 'Vector__XXX' has to be given here. Transmitter Identifier // Signals specifies the signals of the message. Signals []SignalDef }
MessageDef defines a frame in the network.
The definition includes the name of a frame as well as its properties and the signals transferred.
func (*MessageDef) Position ¶
func (d *MessageDef) Position() scanner.Position
Position returns the position of the definition.
type MessageID ¶
type MessageID uint32
MessageID represents a message ID.
func (MessageID) IsExtended ¶
IsExtended returns true if the message ID is an extended CAN ID.
type MessageTransmittersDef ¶
type MessageTransmittersDef struct { Pos scanner.Position MessageID MessageID Transmitters []Identifier }
MessageTransmittersDef defines multiple transmitter nodes of a single message.
This definition is used to describe communication data for higher layer protocols.
This is not used to define CAN layer-2 communication.
func (*MessageTransmittersDef) Position ¶
func (d *MessageTransmittersDef) Position() scanner.Position
Position returns the position of the definition.
type NewSymbolsDef ¶
NewSymbolsDef defines new symbol entries in a DBC file.
func (*NewSymbolsDef) Position ¶
func (d *NewSymbolsDef) Position() scanner.Position
Position returns the position of the definition.
type NodesDef ¶
type NodesDef struct { Pos scanner.Position NodeNames []Identifier }
NodesDef defines the names of all nodes participating in the network.
This definition is required in every DBC file.
All node names must be unique.
type ObjectType ¶
type ObjectType string
ObjectType identifies the type of a DBC object.
const ( ObjectTypeUnspecified ObjectType = "" ObjectTypeNetworkNode ObjectType = "BU_" ObjectTypeMessage ObjectType = "BO_" ObjectTypeSignal ObjectType = "SG_" ObjectTypeEnvironmentVariable ObjectType = "EV_" )
func (ObjectType) Validate ¶
func (o ObjectType) Validate() error
Validate returns an error for invalid object types.
type SignalDef ¶
type SignalDef struct { // Pos is the position of the definition. Pos scanner.Position // Name of the signal. // // Has to be unique for all signals within the same message. Name Identifier // StartBit specifies the position of the signal within the data field of the frame. // // For signals with byte order Intel (little-endian) the position of the least-significant bit is given. // // For signals with byte order Motorola (big-endian) the position of the most significant bit is given. // // The bits are counted in a saw-tooth manner. // // The start bit has to be in the range of [0 ,8*message_size-1]. StartBit uint64 // Size specifies the size of the signal in bits. Size uint64 // IsBigEndian is true if the signal's byte order is Motorola (big-endian). IsBigEndian bool // IsSigned is true if the signal is signed. IsSigned bool // IsMultiplexerSwitch is true if the signal is a multiplexer switch. // // A multiplexer indicator of 'M' defines the signal as the multiplexer switch. // Only one signal within a single message can be the multiplexer switch. IsMultiplexerSwitch bool // IsMultiplexed is true if the signal is multiplexed by the message's multiplexer switch. IsMultiplexed bool // MultiplexerSwitch is the multiplexer switch value of the signal. // // The multiplexed signal is transferred in the message if the switch value of the multiplexer signal is equal to // its multiplexer switch value. MultiplexerSwitch uint64 // Offset is the signals physical value offset. // // Together with the factor, the offset defines the linear conversion rule to convert the signal's raw value into // the signal's physical value and vice versa. // // physical_value = raw_value * factor + offset // raw_value = (physical_value - offset) / factor Offset float64 // Factor is the signal's physical value factor. // // See: Offset. Factor float64 // Minimum defines the signal's minimum physical value. Minimum float64 // Maximum defines the signal's maximum physical value. Maximum float64 // Unit defines the unit of the signal's physical value. Unit string // Receivers specifies the nodes receiving the signal. // // If the signal has no receiver, the string 'Vector__XXX' has to be given here. Receivers []Identifier }
SignalDef defines a signal within a message.
type SignalValueType ¶
type SignalValueType uint64
SignalValueType represents an extended signal value type.
const ( SignalValueTypeInt SignalValueType = 0 SignalValueTypeFloat32 SignalValueType = 1 SignalValueTypeFloat64 SignalValueType = 2 )
func (SignalValueType) Validate ¶
func (s SignalValueType) Validate() error
Validate returns an error for invalid signal value types.
type SignalValueTypeDef ¶
type SignalValueTypeDef struct { Pos scanner.Position MessageID MessageID SignalName Identifier SignalValueType SignalValueType }
SignalValueTypeDef defines an extended type definition for a signal.
func (*SignalValueTypeDef) Position ¶
func (d *SignalValueTypeDef) Position() scanner.Position
Position returns the position of the definition.
type UnknownDef ¶
UnknownDef represents an unknown or unsupported DBC definition.
func (*UnknownDef) Position ¶
func (d *UnknownDef) Position() scanner.Position
Position returns the position of the definition.
type ValueDescriptionDef ¶
ValueDescriptionDef defines a textual description for a single signal value.
The value may either be a signal raw value transferred on the bus or the value of an environment variable in a remaining bus simulation.
func (*ValueDescriptionDef) Position ¶
func (d *ValueDescriptionDef) Position() scanner.Position
Position returns the position of the definition.
type ValueDescriptionsDef ¶
type ValueDescriptionsDef struct { Pos scanner.Position ObjectType ObjectType MessageID MessageID SignalName Identifier EnvironmentVariableName Identifier ValueDescriptions []ValueDescriptionDef }
ValueDescriptionsDef defines inline descriptions for specific raw signal values.
func (*ValueDescriptionsDef) Position ¶
func (d *ValueDescriptionsDef) Position() scanner.Position
Position returns the position of the definition.
type ValueTableDef ¶
type ValueTableDef struct { Pos scanner.Position TableName Identifier ValueDescriptions []ValueDescriptionDef }
ValueTableDef defines a global value table.
The value descriptions in value tables define value encodings for signal raw values.
In commonly used DBC files, the global value tables aren't used, but the value descriptions are defined for each signal independently.
func (*ValueTableDef) Position ¶
func (d *ValueTableDef) Position() scanner.Position
Position returns the position of the definition.
type VersionDef ¶
VersionDef defines the version of a DBC file.
func (*VersionDef) Position ¶
func (d *VersionDef) Position() scanner.Position
Position returns the position of the definition.