Пример #1
0
func (s *HackSession) InjectPacket(user api.User, TxPkt api.TransmitPacket) error {
	if s.Device == nil {
		return logger.Err("Device not set")
	}
	var err error
	pkt := api.CanData{}
	pkt.Src = user.GetName()
	pkt.ArbID = TxPkt.ArbId
	pkt.Network = TxPkt.Network
	pkt.B1, err = api.Atoui8(TxPkt.B1)
	if err != nil {
		return err
	}
	pkt.B2, err = api.Atoui8(TxPkt.B2)
	if err != nil {
		return err
	}
	pkt.B3, err = api.Atoui8(TxPkt.B3)
	if err != nil {
		return err
	}
	pkt.B4, err = api.Atoui8(TxPkt.B4)
	if err != nil {
		return err
	}
	pkt.B5, err = api.Atoui8(TxPkt.B5)
	if err != nil {
		return err
	}
	pkt.B6, err = api.Atoui8(TxPkt.B6)
	if err != nil {
		return err
	}
	pkt.B7, err = api.Atoui8(TxPkt.B7)
	if err != nil {
		return err
	}
	pkt.B8, err = api.Atoui8(TxPkt.B8)
	if err != nil {
		return err
	}
	err = s.Device.InjectPacket(pkt)
	return err
}
Пример #2
0
func (e *Elm327) addPacket(canpkt api.CanData) {
	pkt := api.CanData{}
	pkt.SeqNo = e.seqNo
	e.seqNo += 1
	pkt.Src = canpkt.Src
	pkt.AbsTime = time.Now().Format("10:00:00pm (EST)")
	pkt.RelTime = "TODO" // TODO
	pkt.Status = canpkt.Status
	pkt.Error = canpkt.Error
	pkt.Transmit = canpkt.Transmit
	pkt.Desc = canpkt.Desc
	pkt.Network = canpkt.Network
	pkt.Node = canpkt.Node
	pkt.ArbID = canpkt.ArbID
	pkt.Remote = canpkt.Remote
	pkt.Extended = canpkt.Extended
	pkt.B1 = canpkt.B1
	pkt.B2 = canpkt.B2
	pkt.B3 = canpkt.B3
	pkt.B4 = canpkt.B4
	pkt.B5 = canpkt.B5
	pkt.B6 = canpkt.B6
	pkt.B7 = canpkt.B7
	pkt.B8 = canpkt.B8
	pkt.Value = canpkt.Value
	pkt.Trigger = canpkt.Trigger
	e.Packets[e.packetIdx] = pkt
	e.packetIdx += 1
	if e.packetIdx >= MAX_BUFFER {
		e.packetIdx = 0
	}
}
Пример #3
0
func (e *Elm327) parsePacket(data string) api.CanData {
	b := []byte(data)
	var p string
	gotArbId := false
	gotB1 := false
	gotB2 := false
	gotB3 := false
	gotB4 := false
	gotB5 := false
	gotB6 := false
	gotB7 := false
	gotB8 := false
	pkt := api.CanData{}
	idx := 0
	done := false
	for done == false && idx < len(b) {
		if b[idx] == 60 { // < char
			done = true
		} else if !gotArbId {
			if b[idx] == 32 {
				gotArbId = true
				pkt.ArbID = p
				p = ""
			} else {
				p = p + string(b[idx])
			}
		} else if !gotB1 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB1 = true
				pkt.B1, _ = api.Hextoui8(p)
				p = ""
				if b[idx] == 13 {
					done = true
				}
			} else {
				p = p + string(b[idx])
			}
		} else if !gotB2 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB2 = true
				pkt.B2, _ = api.Hextoui8(p)
				p = ""
				if b[idx] == 13 {
					done = true
				}
			} else {
				p = p + string(b[idx])
			}
		} else if !gotB3 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB3 = true
				pkt.B3, _ = api.Hextoui8(p)
				p = ""
				if b[idx] == 13 {
					done = true
				}
			} else {
				p = p + string(b[idx])
			}
		} else if !gotB4 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB4 = true
				pkt.B4, _ = api.Hextoui8(p)
				p = ""
				if b[idx] == 13 {
					done = true
				}
			} else {
				p = p + string(b[idx])
			}
		} else if !gotB5 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB5 = true
				pkt.B5, _ = api.Hextoui8(p)
				p = ""
				if b[idx] == 13 {
					done = true
				}
			} else {
				p = p + string(b[idx])
			}
		} else if !gotB6 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB6 = true
				pkt.B6, _ = api.Hextoui8(p)
				p = ""
				if b[idx] == 13 {
					done = true
				}
			} else {
				p = p + string(b[idx])
			}
		} else if !gotB7 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB7 = true
				pkt.B7, _ = api.Hextoui8(p)
				p = ""
				if b[idx] == 13 {
					done = true
				}
			} else {
				p = p + string(b[idx])
			}

		} else if !gotB8 {
			if b[idx] == 32 || b[idx] == 13 {
				gotB8 = true
				pkt.B8, _ = api.Hextoui8(p)
				done = true
			} else {
				p = p + string(b[idx])
			}
		}
		idx += 1
	}
	pkt.Network = e.Protocol
	return pkt
}