You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
967 B
48 lines
967 B
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strconv"
|
|
)
|
|
|
|
type CanFrame struct {
|
|
canid uint16
|
|
payload []uint8
|
|
date string
|
|
}
|
|
|
|
// (2022-07-08 16:54:15.587099) can0 100 [8] 00 00 00 00 00 00 64 00
|
|
const expr = "\\((.*)\\)\\s+can\\d+\\s+(\\d+)\\s+\\[\\d\\]\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)"
|
|
const length = 11
|
|
|
|
var pattern = regexp.MustCompile(expr)
|
|
|
|
func FromString(text *string) *CanFrame {
|
|
submatch := pattern.FindStringSubmatch(*text)
|
|
if len(submatch) == length {
|
|
canid, err := strconv.Atoi(submatch[2])
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
payload := make([]uint8, 8)
|
|
for idx, octet := range submatch[3:] {
|
|
val, err := strconv.ParseUint(octet, 16, 0)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
continue
|
|
}
|
|
|
|
payload[idx] = uint8(val)
|
|
}
|
|
|
|
return &CanFrame{
|
|
date: submatch[1],
|
|
canid: uint16(canid),
|
|
payload: payload,
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|