github.com/jordan-bonecutter/can-go@v0.0.0-20230901155856-d83995b18e50/pkg/dbc/messageid.go (about) 1 package dbc 2 3 import "fmt" 4 5 // MessageID represents a message ID. 6 type MessageID uint32 7 8 // ID constants. 9 const ( 10 // maxID is the largest valid standard CAN ID. 11 maxID = 0x7ff 12 // maxExtendedID is the largest valid extended CAN ID. 13 maxExtendedID = 0x1fffffff 14 ) 15 16 // messageIDExtendedFlag is a bit flag that is set for extended message IDs. 17 const messageIDExtendedFlag MessageID = 0x80000000 18 19 // messageIDIndependentSignals is a special message ID used for the "independent signals" message. 20 const messageIDIndependentSignals MessageID = 0xc0000000 21 22 // IsExtended returns true if the message ID is an extended CAN ID. 23 func (m MessageID) IsExtended() bool { 24 return m != messageIDIndependentSignals && m&messageIDExtendedFlag > 0 25 } 26 27 // ToCAN returns the CAN id value of the message ID (i.e. with bit flags removed). 28 func (m MessageID) ToCAN() uint32 { 29 return uint32(m &^ messageIDExtendedFlag) 30 } 31 32 // Validate returns an error for invalid message IDs. 33 func (m MessageID) Validate() error { 34 if m == messageIDIndependentSignals { 35 return nil 36 } 37 if m.IsExtended() && m.ToCAN() > maxExtendedID { 38 return fmt.Errorf("invalid extended ID: %v", m) 39 } 40 if !m.IsExtended() && m.ToCAN() > maxID { 41 return fmt.Errorf("invalid standard ID: %v", m) 42 } 43 return nil 44 }