mirror of
https://github.com/bettercap/bettercap
synced 2025-08-14 02:36:57 -07:00
new: implemented can.obd2 builtin parser
This commit is contained in:
parent
cf6fba6151
commit
c3999d6bb5
11 changed files with 520 additions and 52 deletions
54
modules/can/can_obd2.go
Normal file
54
modules/can/can_obd2.go
Normal file
|
@ -0,0 +1,54 @@
|
|||
package can
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type OBD2 struct {
|
||||
sync.RWMutex
|
||||
|
||||
enabled bool
|
||||
}
|
||||
|
||||
func (obd *OBD2) Enabled() bool {
|
||||
obd.RLock()
|
||||
defer obd.RUnlock()
|
||||
return obd.enabled
|
||||
}
|
||||
|
||||
func (obd *OBD2) Enable(enable bool) {
|
||||
obd.RLock()
|
||||
defer obd.RUnlock()
|
||||
obd.enabled = enable
|
||||
}
|
||||
|
||||
func (obd *OBD2) Parse(mod *CANModule, msg *Message) bool {
|
||||
obd.RLock()
|
||||
defer obd.RUnlock()
|
||||
|
||||
// did we load any DBC database?
|
||||
if !obd.enabled {
|
||||
return false
|
||||
}
|
||||
|
||||
odbMessage := &OBD2Message{}
|
||||
|
||||
if msg.Frame.ID == OBD2BroadcastRequestID {
|
||||
// parse as request
|
||||
if odbMessage.ParseRequest(msg.Frame) {
|
||||
msg.OBD2 = odbMessage
|
||||
return true
|
||||
}
|
||||
} else if msg.Frame.ID >= OBD2ECUResponseMinID && msg.Frame.ID <= OBD2ECUResponseMaxID {
|
||||
// parse as response
|
||||
if odbMessage.ParseResponse(msg.Frame) {
|
||||
msg.OBD2 = odbMessage
|
||||
// add CAN source if new
|
||||
_, msg.Source = mod.Session.CAN.AddIfNew(fmt.Sprintf("ECU_%d", odbMessage.ECU), "", msg.Frame.Data[:])
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue