rts-sim-testing-service/third_party/message/can_btm_time_sync_rsp.go
2023-11-27 09:14:20 +08:00

117 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package message
import (
"fmt"
"strings"
)
// BtmTimeSyncCheckFrame BTM发往ATP的时间校验帧
type BtmTimeSyncCheckFrame struct {
//帧ID
FId CanFrameId
//T2时刻
//当收到某一流水号的ATP查询帧后BTM将记录接收到该查询帧的时间值做为T2时刻。
T2 uint32
//T3时刻
//BTM将在T3时刻发送回复帧给ATP并保持流水号与ATP查询帧一致。
T3 uint32
}
func NewBtmTimeSyncCheckFrame(sn byte) *BtmTimeSyncCheckFrame {
return &BtmTimeSyncCheckFrame{
FId: *NewCanFrameId(CAN_ADDR_RSP_ATP, CAN_ADDR_RSP_BTM, CAN_FRAME_TIME_SYNC_RSP, sn),
}
}
func (f *BtmTimeSyncCheckFrame) Decode(cf *CanetFrame) bool {
f.FId = cf.CanId
//
reader := NewCanBitsReader(cf.CanData, 8)
//T2
t21, t21Ok := reader.ReadByte()
if !t21Ok {
return false
}
t22, t22Ok := reader.ReadByte()
if !t22Ok {
return false
}
t23, t23Ok := reader.ReadByte()
if !t23Ok {
return false
}
t24, t24Ok := reader.ReadByte()
if !t24Ok {
return false
}
f.T2 = 0
f.T2 |= uint32(t21) << 24
f.T2 |= uint32(t22) << 16
f.T2 |= uint32(t23) << 8
f.T2 |= uint32(t24)
//T3
t31, t31Ok := reader.ReadByte()
if !t31Ok {
return false
}
t32, t32Ok := reader.ReadByte()
if !t32Ok {
return false
}
t33, t33Ok := reader.ReadByte()
if !t33Ok {
return false
}
t34, t34Ok := reader.ReadByte()
if !t34Ok {
return false
}
f.T3 = 0
f.T3 |= uint32(t31) << 24
f.T3 |= uint32(t32) << 16
f.T3 |= uint32(t33) << 8
f.T3 |= uint32(t34)
//
return true
}
func (f *BtmTimeSyncCheckFrame) Encode() *CanetFrame {
cf := &CanetFrame{}
cf.CanId = f.FId
cf.CanLen = 8
cf.FF = true
cf.RTR = false
//
writer := NewCanBitsWriter(8)
//
timeByteMsk := uint32(0x00_00_00_ff)
//t2
t21 := byte((f.T2 >> 24) & timeByteMsk)
t22 := byte((f.T2 >> 16) & timeByteMsk)
t23 := byte((f.T2 >> 8) & timeByteMsk)
t24 := byte(f.T2 & timeByteMsk)
writer.AddByte(t21)
writer.AddByte(t22)
writer.AddByte(t23)
writer.AddByte(t24)
//t3
t31 := byte((f.T3 >> 24) & timeByteMsk)
t32 := byte((f.T3 >> 16) & timeByteMsk)
t33 := byte((f.T3 >> 8) & timeByteMsk)
t34 := byte(f.T3 & timeByteMsk)
writer.AddByte(t31)
writer.AddByte(t32)
writer.AddByte(t33)
writer.AddByte(t34)
//
cf.CanData = writer.(CanBusData).GetData()
return cf
}
func (f *BtmTimeSyncCheckFrame) String() string {
sb := strings.Builder{}
sb.WriteString(fmt.Sprintf("BtmTimeSyncCheckFrame ID1 = 0x%0x, ID2 = 0x%0x, ID3 = 0x%0x, ID4 = 0x%0x,",
f.FId.ID1, f.FId.ID2, f.FId.ID3, f.FId.ID4))
sb.WriteString(fmt.Sprintf("T2 = %d", f.T2))
sb.WriteString(fmt.Sprintf(",T3 = %d", f.T3))
return sb.String()
}