Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
140
pkg/common/dbc_desc.go
Normal file
140
pkg/common/dbc_desc.go
Normal file
@@ -0,0 +1,140 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
can "github.com/Fisker-Inc/project-ai-can-go/pkg/descriptor"
|
||||
)
|
||||
|
||||
// SignalDesc is copied from project-ai-can-go and modified for local needs.
|
||||
type SignalDesc struct {
|
||||
DBCHash string `json:"dbc_hash" ch:"dbc_hash"`
|
||||
MessageID uint16 `json:"message_id" ch:"message_id"`
|
||||
// Description of the signal.
|
||||
Name string `json:"name" ch:"signal_name"`
|
||||
// Start bit.
|
||||
Start uint16 `json:"start" ch:"start"`
|
||||
// Length in bits.
|
||||
Length uint16 `json:"length" ch:"length"`
|
||||
// IsBigEndian is true if the signal is big-endian.
|
||||
IsBigEndian bool `json:"big_endian" ch:"big_endian"`
|
||||
// IsSigned is true if the signal uses raw signed values.
|
||||
IsSigned bool `json:"signed" ch:"signed"`
|
||||
// IsMultiplexer is true if the signal is the multiplexor of a multiplexed message.
|
||||
IsMultiplexer bool `json:"multiplexer" ch:"multiplexer"`
|
||||
// IsMultiplexed is true if the signal is multiplexed.
|
||||
IsMultiplexed bool `json:"multiplexed" ch:"multiplexed"`
|
||||
// MultiplexerValue is the value of the multiplexer when this signal is present.
|
||||
MultiplexerValue uint8 `json:"multiplexer_value" ch:"multiplexer_value"`
|
||||
// Offset for real-world transform.
|
||||
Offset float64 `json:"offset" ch:"offset"`
|
||||
// Scale for real-world transform.
|
||||
Scale float64 `json:"scale" ch:"scale"`
|
||||
// Min real-world value.
|
||||
Min float64 `json:"min" ch:"min"`
|
||||
// Max real-world value.
|
||||
Max float64 `json:"max" ch:"max"`
|
||||
// Unit of the signal.
|
||||
Unit string `json:"unit" ch:"unit"`
|
||||
// Description of the signal.
|
||||
Description string `json:"description" ch:"description"`
|
||||
// ValueDescriptions of the signal.
|
||||
ValueDescriptions []string `json:"value_descriptions" ch:"value_descriptions"`
|
||||
// ReceiverNodes is the list of names of the nodes receiving the signal.
|
||||
ReceiverNodes []string `json:"receiver_nodes" ch:"receiver_nodes"`
|
||||
// DefaultValue of the signal.
|
||||
DefaultValue int64 `json:"default_value" ch:"default_value"`
|
||||
// ECUName is a name of an ECU.
|
||||
ECUName string
|
||||
}
|
||||
|
||||
func (s *SignalDesc) CopyFromCAN(in *can.Signal) {
|
||||
s.Name = in.Name
|
||||
s.Start = in.Start
|
||||
s.Length = in.Length
|
||||
s.IsBigEndian = in.IsBigEndian
|
||||
s.IsSigned = in.IsSigned
|
||||
s.IsMultiplexer = in.IsMultiplexer
|
||||
s.IsMultiplexed = in.IsMultiplexed
|
||||
s.MultiplexerValue = uint8(in.MultiplexerValue)
|
||||
s.Offset = in.Offset
|
||||
s.Scale = in.Scale
|
||||
s.Min = in.Min
|
||||
s.Max = in.Max
|
||||
s.Unit = in.Unit
|
||||
s.Description = in.Description
|
||||
s.ValueDescriptions = getDescriptions(in.ValueDescriptions)
|
||||
s.ReceiverNodes = in.ReceiverNodes
|
||||
s.DefaultValue = int64(in.DefaultValue)
|
||||
}
|
||||
|
||||
func getDescriptions(ds []*can.ValueDescription) []string {
|
||||
res := make([]string, len(ds))
|
||||
for k, d := range ds {
|
||||
if d == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
res[k] = fmt.Sprintf("%d: %s", d.Value, d.Description)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
type SignalDescWithECU struct {
|
||||
SignalDesc
|
||||
ECUName string `json:"ecu_name" ch:"ecu_name"`
|
||||
}
|
||||
|
||||
type MessageDesc struct {
|
||||
DBCHash string
|
||||
// Name of the message.
|
||||
Name string
|
||||
// ECUName is a name of an ECU.
|
||||
ECUName string
|
||||
// ID of the message.
|
||||
ID uint32
|
||||
// IsExtended is true if the message is an extended CAN message.
|
||||
IsExtended bool
|
||||
// SendType is the message's send type.
|
||||
SendType string
|
||||
// Length in bytes.
|
||||
Length uint16
|
||||
// Description of the message.
|
||||
Description string
|
||||
// SenderNode is the name of the node sending the message.
|
||||
SenderNode string
|
||||
// CycleTime is the cycle time (ns) of a cyclic message.
|
||||
CycleTime int64
|
||||
// DelayTime is the allowed delay (ns) between cyclic message sends.
|
||||
DelayTime int64
|
||||
}
|
||||
|
||||
func (m *MessageDesc) CopyFromCAN(in *can.Message) {
|
||||
m.Name = in.Name
|
||||
m.ID = in.ID
|
||||
m.IsExtended = in.IsExtended
|
||||
m.SendType = in.SendType.String()
|
||||
m.Length = in.Length
|
||||
m.Description = in.Description
|
||||
m.SenderNode = in.SenderNode
|
||||
m.CycleTime = int64(in.CycleTime)
|
||||
m.DelayTime = int64(in.DelayTime)
|
||||
m.ECUName = extractECUName(in.Name)
|
||||
}
|
||||
|
||||
func extractECUName(msgName string) string {
|
||||
names := strings.Split(msgName, "_")
|
||||
ecuName := names[0]
|
||||
if names[0] == "Diag" && len(names) > 1 {
|
||||
ecuName = names[1]
|
||||
}
|
||||
|
||||
return ecuName
|
||||
}
|
||||
|
||||
type DBCDesc struct {
|
||||
Hash string
|
||||
Name string
|
||||
}
|
||||
Reference in New Issue
Block a user