balise btm
This commit is contained in:
parent
268e93ca88
commit
15c7a686f1
284
third_party/message/can_btm_data.go
vendored
284
third_party/message/can_btm_data.go
vendored
@ -11,6 +11,40 @@ type BtmDataMessageFrame struct {
|
||||
Message []byte
|
||||
}
|
||||
|
||||
func NewBtmDataMessageFrame(sn byte, offset byte) *BtmDataMessageFrame {
|
||||
return &BtmDataMessageFrame{
|
||||
FId: *NewCanFrameId(CAN_ADDR_RSP_ATP, CAN_ADDR_RSP_BTM, 0x80+offset, sn),
|
||||
}
|
||||
}
|
||||
func (f *BtmDataMessageFrame) Encode() CanBusData {
|
||||
writer := NewCanBitsWriter(12)
|
||||
//
|
||||
f.FId.Encode(writer)
|
||||
//
|
||||
for _, data := range f.Message {
|
||||
writer.AddByte(data)
|
||||
}
|
||||
return writer.(CanBusData)
|
||||
}
|
||||
func (f *BtmDataMessageFrame) Decode(reader CanBitsReader) bool {
|
||||
if !f.FId.Decode(reader) {
|
||||
return false
|
||||
}
|
||||
//
|
||||
f.Message = make([]byte, 0, 8)
|
||||
for c := 0; c < 8; c++ {
|
||||
data, ok := reader.ReadByte()
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
f.Message = append(f.Message, data)
|
||||
}
|
||||
//
|
||||
return true
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
// BtmDataMessageTimeAFrame 数据帧-时间戳A
|
||||
// offset = 0x0d
|
||||
type BtmDataMessageTimeAFrame struct {
|
||||
@ -22,6 +56,90 @@ type BtmDataMessageTimeAFrame struct {
|
||||
Crc32A uint32
|
||||
}
|
||||
|
||||
func NewBtmDataMessageTimeAFrame(sn byte) *BtmDataMessageTimeAFrame {
|
||||
return &BtmDataMessageTimeAFrame{
|
||||
FId: *NewCanFrameId(CAN_ADDR_RSP_ATP, CAN_ADDR_RSP_BTM, 0x80+0x0d, sn),
|
||||
}
|
||||
}
|
||||
func (f *BtmDataMessageTimeAFrame) Encode() CanBusData {
|
||||
writer := NewCanBitsWriter(12)
|
||||
//
|
||||
f.FId.Encode(writer)
|
||||
//
|
||||
byteMsk := uint32(0x00_00_00_ff)
|
||||
//
|
||||
writer.AddByte(byte((f.TimeA >> 24) & byteMsk))
|
||||
writer.AddByte(byte((f.TimeA >> 16) & byteMsk))
|
||||
writer.AddByte(byte((f.TimeA >> 8) & byteMsk))
|
||||
writer.AddByte(byte(f.TimeA & byteMsk))
|
||||
//
|
||||
writer.AddByte(byte((f.Crc32A >> 24) & byteMsk))
|
||||
writer.AddByte(byte((f.Crc32A >> 16) & byteMsk))
|
||||
writer.AddByte(byte((f.Crc32A >> 8) & byteMsk))
|
||||
writer.AddByte(byte(f.Crc32A & byteMsk))
|
||||
//
|
||||
return writer.(CanBusData)
|
||||
}
|
||||
func (f *BtmDataMessageTimeAFrame) Decode(reader CanBitsReader) bool {
|
||||
if !f.FId.Decode(reader) {
|
||||
return false
|
||||
}
|
||||
//
|
||||
f.TimeA = 0
|
||||
a1, a1Ok := reader.ReadByte()
|
||||
if !a1Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeA |= uint32(a1) << 24
|
||||
//
|
||||
a2, a2Ok := reader.ReadByte()
|
||||
if !a2Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeA |= uint32(a2) << 16
|
||||
//
|
||||
a3, a3Ok := reader.ReadByte()
|
||||
if !a3Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeA |= uint32(a3) << 8
|
||||
//
|
||||
a4, a4Ok := reader.ReadByte()
|
||||
if !a4Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeA |= uint32(a4)
|
||||
//
|
||||
f.Crc32A = 0
|
||||
c1, c1Ok := reader.ReadByte()
|
||||
if !c1Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32A |= uint32(c1) << 24
|
||||
//
|
||||
c2, c2Ok := reader.ReadByte()
|
||||
if !c2Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32A |= uint32(c2) << 16
|
||||
//
|
||||
c3, c3Ok := reader.ReadByte()
|
||||
if !c3Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32A |= uint32(c3) << 8
|
||||
//
|
||||
c4, c4Ok := reader.ReadByte()
|
||||
if !c4Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32A |= uint32(c4)
|
||||
//
|
||||
return true
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
// BtmDataMessageTimeBFrame 数据帧-时间戳B
|
||||
// offset = 0x0e
|
||||
type BtmDataMessageTimeBFrame struct {
|
||||
@ -33,6 +151,90 @@ type BtmDataMessageTimeBFrame struct {
|
||||
Crc32B uint32
|
||||
}
|
||||
|
||||
func NewBtmDataMessageTimeBFrame(sn byte) *BtmDataMessageTimeBFrame {
|
||||
return &BtmDataMessageTimeBFrame{
|
||||
FId: *NewCanFrameId(CAN_ADDR_RSP_ATP, CAN_ADDR_RSP_BTM, 0x80+0x0e, sn),
|
||||
}
|
||||
}
|
||||
func (f *BtmDataMessageTimeBFrame) Encode() CanBusData {
|
||||
writer := NewCanBitsWriter(12)
|
||||
//
|
||||
f.FId.Encode(writer)
|
||||
//
|
||||
byteMsk := uint32(0x00_00_00_ff)
|
||||
//
|
||||
writer.AddByte(byte((f.TimeB >> 24) & byteMsk))
|
||||
writer.AddByte(byte((f.TimeB >> 16) & byteMsk))
|
||||
writer.AddByte(byte((f.TimeB >> 8) & byteMsk))
|
||||
writer.AddByte(byte(f.TimeB & byteMsk))
|
||||
//
|
||||
writer.AddByte(byte((f.Crc32B >> 24) & byteMsk))
|
||||
writer.AddByte(byte((f.Crc32B >> 16) & byteMsk))
|
||||
writer.AddByte(byte((f.Crc32B >> 8) & byteMsk))
|
||||
writer.AddByte(byte(f.Crc32B & byteMsk))
|
||||
//
|
||||
return writer.(CanBusData)
|
||||
}
|
||||
func (f *BtmDataMessageTimeBFrame) Decode(reader CanBitsReader) bool {
|
||||
if !f.FId.Decode(reader) {
|
||||
return false
|
||||
}
|
||||
//
|
||||
f.TimeB = 0
|
||||
a1, a1Ok := reader.ReadByte()
|
||||
if !a1Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeB |= uint32(a1) << 24
|
||||
//
|
||||
a2, a2Ok := reader.ReadByte()
|
||||
if !a2Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeB |= uint32(a2) << 16
|
||||
//
|
||||
a3, a3Ok := reader.ReadByte()
|
||||
if !a3Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeB |= uint32(a3) << 8
|
||||
//
|
||||
a4, a4Ok := reader.ReadByte()
|
||||
if !a4Ok {
|
||||
return false
|
||||
}
|
||||
f.TimeB |= uint32(a4)
|
||||
//
|
||||
f.Crc32B = 0
|
||||
c1, c1Ok := reader.ReadByte()
|
||||
if !c1Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32B |= uint32(c1) << 24
|
||||
//
|
||||
c2, c2Ok := reader.ReadByte()
|
||||
if !c2Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32B |= uint32(c2) << 16
|
||||
//
|
||||
c3, c3Ok := reader.ReadByte()
|
||||
if !c3Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32B |= uint32(c3) << 8
|
||||
//
|
||||
c4, c4Ok := reader.ReadByte()
|
||||
if !c4Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32B |= uint32(c4)
|
||||
//
|
||||
return true
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
// BtmDataMessageEndFrame 数据帧-结束
|
||||
// offset = 0x7f
|
||||
type BtmDataMessageEndFrame struct {
|
||||
@ -44,3 +246,85 @@ type BtmDataMessageEndFrame struct {
|
||||
//1个状态应答帧 + 13个BtmDataMessageFrame + 1个BtmDataMessageTimeAFrame + 1个BtmDataMessageTimeBFrame + 1个BtmDataMessageEndFrame
|
||||
Crc32C uint32
|
||||
}
|
||||
|
||||
func NewBtmDataMessageEndFrame(sn byte) *BtmDataMessageEndFrame {
|
||||
return &BtmDataMessageEndFrame{
|
||||
FId: *NewCanFrameId(CAN_ADDR_RSP_ATP, CAN_ADDR_RSP_BTM, 0x80+0x7f, sn),
|
||||
}
|
||||
}
|
||||
func (f *BtmDataMessageEndFrame) Encode() CanBusData {
|
||||
writer := NewCanBitsWriter(12)
|
||||
//
|
||||
f.FId.Encode(writer)
|
||||
//
|
||||
byteMsk := uint32(0x00_00_00_ff)
|
||||
//
|
||||
writer.AddByte(byte((f.TkB >> 24) & byteMsk))
|
||||
writer.AddByte(byte((f.TkB >> 16) & byteMsk))
|
||||
writer.AddByte(byte((f.TkB >> 8) & byteMsk))
|
||||
writer.AddByte(byte(f.TkB & byteMsk))
|
||||
//
|
||||
writer.AddByte(byte((f.Crc32C >> 24) & byteMsk))
|
||||
writer.AddByte(byte((f.Crc32C >> 16) & byteMsk))
|
||||
writer.AddByte(byte((f.Crc32C >> 8) & byteMsk))
|
||||
writer.AddByte(byte(f.Crc32C & byteMsk))
|
||||
//
|
||||
return writer.(CanBusData)
|
||||
}
|
||||
func (f *BtmDataMessageEndFrame) Decode(reader CanBitsReader) bool {
|
||||
if !f.FId.Decode(reader) {
|
||||
return false
|
||||
}
|
||||
//
|
||||
f.TkB = 0
|
||||
a1, a1Ok := reader.ReadByte()
|
||||
if !a1Ok {
|
||||
return false
|
||||
}
|
||||
f.TkB |= uint32(a1) << 24
|
||||
//
|
||||
a2, a2Ok := reader.ReadByte()
|
||||
if !a2Ok {
|
||||
return false
|
||||
}
|
||||
f.TkB |= uint32(a2) << 16
|
||||
//
|
||||
a3, a3Ok := reader.ReadByte()
|
||||
if !a3Ok {
|
||||
return false
|
||||
}
|
||||
f.TkB |= uint32(a3) << 8
|
||||
//
|
||||
a4, a4Ok := reader.ReadByte()
|
||||
if !a4Ok {
|
||||
return false
|
||||
}
|
||||
f.TkB |= uint32(a4)
|
||||
//
|
||||
f.Crc32C = 0
|
||||
c1, c1Ok := reader.ReadByte()
|
||||
if !c1Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32C |= uint32(c1) << 24
|
||||
//
|
||||
c2, c2Ok := reader.ReadByte()
|
||||
if !c2Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32C |= uint32(c2) << 16
|
||||
//
|
||||
c3, c3Ok := reader.ReadByte()
|
||||
if !c3Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32C |= uint32(c3) << 8
|
||||
//
|
||||
c4, c4Ok := reader.ReadByte()
|
||||
if !c4Ok {
|
||||
return false
|
||||
}
|
||||
f.Crc32C |= uint32(c4)
|
||||
//
|
||||
return true
|
||||
}
|
||||
|
9
third_party/message/can_bus.go
vendored
9
third_party/message/can_bus.go
vendored
@ -5,11 +5,12 @@ package message
|
||||
// CanBits 可以在CAN总线上传输的bit流
|
||||
// 按bit位来存储数据
|
||||
// 一个字节中bit位编号,从高位到低位依次为bit7-bit0
|
||||
// 对于一个CAN帧:29bits帧ID+64bits帧数据,以bit为单位,最后一字节即第12个字节的低位3bits为无用数据
|
||||
type CanBits struct {
|
||||
Data []byte
|
||||
LastBitsLen int //Data中最后一个字节中从高位到低位存储数据的有效位数,值范围[1,8],8-LastBitsLen则为最后一个字节中低位剩余的空位数量
|
||||
readRowIndex int //行读指针,Data中的一个字节为一行,从0开始;当前值表示当前可读位置
|
||||
readColIndex int //列读指针,字节中的bit位为列,从7开始到0,字节中最左侧bit为最高位编号7;当前值表示当前可读位置;当值为-1时表示已经读结束
|
||||
Data []byte //bits
|
||||
LastBitsLen int //Data中最后一个字节中从高位到低位存储数据的有效位数,值范围[1,8],8-LastBitsLen则为最后一个字节中低位剩余的空位数量
|
||||
readRowIndex int //行读指针,Data中的一个字节为一行,从0开始;当前值表示当前可读位置
|
||||
readColIndex int //列读指针,字节中的bit位为列,从7开始到0,字节中最左侧bit为最高位编号7;当前值表示当前可读位置;当值为-1时表示已经读结束
|
||||
}
|
||||
|
||||
// CanBusData CAN总线上传输的数据
|
||||
|
Loading…
Reference in New Issue
Block a user