Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/cantool/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ func genGo(inputFile, outputFile string) error {
if err != nil {
return err
}
result, err := generate.Compile(inputFile, input)
result, err := dbc.Compile(inputFile, input)
if err != nil {
return err
}
Expand Down
18 changes: 0 additions & 18 deletions internal/generate/file_test.go

This file was deleted.

47 changes: 23 additions & 24 deletions internal/generate/compile.go → pkg/dbc/compile.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package generate
package dbc

import (
"fmt"
"sort"
"time"

"go.einride.tech/can/pkg/dbc"
"go.einride.tech/can/pkg/descriptor"
)

Expand All @@ -15,7 +14,7 @@ type CompileResult struct {
}

func Compile(sourceFile string, data []byte) (result *CompileResult, err error) {
p := dbc.NewParser(sourceFile, data)
p := NewParser(sourceFile, data)
if err := p.Parse(); err != nil {
return nil, fmt.Errorf("failed to parse DBC source file: %w", err)
}
Expand All @@ -31,7 +30,7 @@ func Compile(sourceFile string, data []byte) (result *CompileResult, err error)
}

type compileError struct {
def dbc.Def
def Def
reason string
}

Expand All @@ -41,7 +40,7 @@ func (e *compileError) Error() string {

type compiler struct {
db *descriptor.Database
defs []dbc.Def
defs []Def
warnings []error
}

Expand All @@ -52,10 +51,10 @@ func (c *compiler) addWarning(warning error) {
func (c *compiler) collectDescriptors() {
for _, def := range c.defs {
switch def := def.(type) {
case *dbc.VersionDef:
case *VersionDef:
c.db.Version = def.Version
case *dbc.MessageDef:
if def.MessageID == dbc.IndependentSignalsMessageID {
case *MessageDef:
if def.MessageID == IndependentSignalsMessageID {
continue // don't compile
}
message := &descriptor.Message{
Expand Down Expand Up @@ -87,7 +86,7 @@ func (c *compiler) collectDescriptors() {
message.Signals = append(message.Signals, signal)
}
c.db.Messages = append(c.db.Messages, message)
case *dbc.NodesDef:
case *NodesDef:
for _, node := range def.NodeNames {
c.db.Nodes = append(c.db.Nodes, &descriptor.Node{Name: string(node)})
}
Expand All @@ -98,16 +97,16 @@ func (c *compiler) collectDescriptors() {
func (c *compiler) addMetadata() {
for _, def := range c.defs {
switch def := def.(type) {
case *dbc.SignalValueTypeDef:
case *SignalValueTypeDef:
signal, ok := c.db.Signal(def.MessageID.ToCAN(), string(def.SignalName))
if !ok {
c.addWarning(&compileError{def: def, reason: "no declared signal"})
continue
}
switch def.SignalValueType {
case dbc.SignalValueTypeInt:
case SignalValueTypeInt:
signal.IsFloat = false
case dbc.SignalValueTypeFloat32:
case SignalValueTypeFloat32:
if signal.Length == 32 {
signal.IsFloat = true
} else {
Expand All @@ -118,10 +117,10 @@ func (c *compiler) addMetadata() {
reason := fmt.Sprintf("unsupported signal value type: %v", def.SignalValueType)
c.addWarning(&compileError{def: def, reason: reason})
}
case *dbc.CommentDef:
case *CommentDef:
switch def.ObjectType {
case dbc.ObjectTypeMessage:
if def.MessageID == dbc.IndependentSignalsMessageID {
case ObjectTypeMessage:
if def.MessageID == IndependentSignalsMessageID {
continue // don't compile
}
message, ok := c.db.Message(def.MessageID.ToCAN())
Expand All @@ -130,8 +129,8 @@ func (c *compiler) addMetadata() {
continue
}
message.Description = def.Comment
case dbc.ObjectTypeSignal:
if def.MessageID == dbc.IndependentSignalsMessageID {
case ObjectTypeSignal:
if def.MessageID == IndependentSignalsMessageID {
continue // don't compile
}
signal, ok := c.db.Signal(def.MessageID.ToCAN(), string(def.SignalName))
Expand All @@ -140,19 +139,19 @@ func (c *compiler) addMetadata() {
continue
}
signal.Description = def.Comment
case dbc.ObjectTypeNetworkNode:
case ObjectTypeNetworkNode:
node, ok := c.db.Node(string(def.NodeName))
if !ok {
c.addWarning(&compileError{def: def, reason: "no declared node"})
continue
}
node.Description = def.Comment
}
case *dbc.ValueDescriptionsDef:
if def.MessageID == dbc.IndependentSignalsMessageID {
case *ValueDescriptionsDef:
if def.MessageID == IndependentSignalsMessageID {
continue // don't compile
}
if def.ObjectType != dbc.ObjectTypeSignal {
if def.ObjectType != ObjectTypeSignal {
continue // don't compile
}
signal, ok := c.db.Signal(def.MessageID.ToCAN(), string(def.SignalName))
Expand All @@ -166,9 +165,9 @@ func (c *compiler) addMetadata() {
Value: int64(valueDescription.Value),
})
}
case *dbc.AttributeValueForObjectDef:
case *AttributeValueForObjectDef:
switch def.ObjectType {
case dbc.ObjectTypeMessage:
case ObjectTypeMessage:
msg, ok := c.db.Message(def.MessageID.ToCAN())
if !ok {
c.addWarning(&compileError{def: def, reason: "no declared message"})
Expand All @@ -185,7 +184,7 @@ func (c *compiler) addMetadata() {
case "GenMsgDelayTime":
msg.DelayTime = time.Duration(def.IntValue) * time.Millisecond
}
case dbc.ObjectTypeSignal:
case ObjectTypeSignal:
sig, ok := c.db.Signal(def.MessageID.ToCAN(), string(def.SignalName))
if !ok {
c.addWarning(&compileError{def: def, reason: "no declared signal"})
Expand Down
12 changes: 11 additions & 1 deletion internal/generate/compile_test.go → pkg/dbc/compile_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package generate
package dbc

import (
"os"
Expand Down Expand Up @@ -403,3 +403,13 @@ func Test_CopyFrom_PreservesOutOfRangeValues(t *testing.T) {
t.Errorf("Expected frames of messages to be identical (%v != %v)", m2.Frame(), original.Frame())
}
}

func runTestInDir(t *testing.T, dir string) func() {
// change working directory to project root
wd, err := os.Getwd()
assert.NilError(t, err)
assert.NilError(t, os.Chdir(dir))
return func() {
assert.NilError(t, os.Chdir(wd))
}
}