Signed-off-by: didinst <9f6129a2ddff0d0c6d03169eaa75e3fea1c1770f>pull/1/head
parent
8642581449
commit
9e504185ee
@ -0,0 +1,15 @@ |
|||||||
|
//go:build windows
|
||||||
|
// +build windows
|
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
func StartCan(canbus string) (<-chan *CanFrame, error) { |
||||||
|
return nil, &NotImplError{} |
||||||
|
} |
||||||
|
|
||||||
|
type NotImplError struct { |
||||||
|
} |
||||||
|
|
||||||
|
func (e *NotImplError) Error() string { |
||||||
|
return "Not implemented for windows platform" |
||||||
|
} |
@ -0,0 +1,71 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"bufio" |
||||||
|
"fmt" |
||||||
|
"os" |
||||||
|
"regexp" |
||||||
|
"strconv" |
||||||
|
) |
||||||
|
|
||||||
|
// (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 Readfile(filename *string) <-chan *CanFrame { |
||||||
|
c := make(chan *CanFrame) |
||||||
|
|
||||||
|
go func() { |
||||||
|
defer close(c) |
||||||
|
|
||||||
|
file, err := os.Open(*filename) |
||||||
|
if err != nil { |
||||||
|
fmt.Println(err) |
||||||
|
return |
||||||
|
} |
||||||
|
defer file.Close() |
||||||
|
|
||||||
|
scanner := bufio.NewScanner(file) |
||||||
|
for scanner.Scan() { |
||||||
|
text := scanner.Text() |
||||||
|
c <- fromString(&text) |
||||||
|
} |
||||||
|
|
||||||
|
if err := scanner.Err(); err != nil { |
||||||
|
fmt.Println(err) |
||||||
|
} |
||||||
|
}() |
||||||
|
|
||||||
|
return c |
||||||
|
} |
||||||
|
|
||||||
|
func fromString(text *string) *CanFrame { |
||||||
|
submatch := pattern.FindStringSubmatch(*text) |
||||||
|
if len(submatch) == length { |
||||||
|
canid, err := strconv.ParseUint(submatch[2], 16, 0) |
||||||
|
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: uint32(canid), |
||||||
|
payload: payload, |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return nil |
||||||
|
} |
@ -0,0 +1,175 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
const ( |
||||||
|
CAN_ID_100 = 0x100 |
||||||
|
CAN_ID_101 = 0x101 |
||||||
|
CAN_ID_102 = 0x102 |
||||||
|
CAN_ID_108 = 0x108 |
||||||
|
CAN_ID_109 = 0x109 |
||||||
|
|
||||||
|
DISABLED VehicleChargingEnabled = iota |
||||||
|
ENABLED |
||||||
|
|
||||||
|
PARKING ShiftLeverPosition = iota |
||||||
|
OTHER |
||||||
|
|
||||||
|
NORMAL SystemFault = iota |
||||||
|
FAULT |
||||||
|
|
||||||
|
CONTACTOR_CLOSED ContactorVehicleStatus = iota |
||||||
|
CONTACTOR_OPEN |
||||||
|
|
||||||
|
NO_REQUEST StopRequest = iota |
||||||
|
STOP_REQUEST |
||||||
|
|
||||||
|
VEHICLE_WELDING_DETECTION_SUPPORTED SuppVehicleWeldingDetection = iota |
||||||
|
VEHICLE_WELDING_DETECTION_NOT_SUPPORTED |
||||||
|
|
||||||
|
STANDBY StationState = iota |
||||||
|
CHARGING |
||||||
|
|
||||||
|
CONNECTOR_LOCKED ConnectorLock = iota |
||||||
|
CONNECTOR_UNLOCKED |
||||||
|
|
||||||
|
BATTERY_COMPATIBLE BatteryCompatible = iota |
||||||
|
BATTERY_INCOMPATIBLE |
||||||
|
|
||||||
|
OPERATING StopControl = iota |
||||||
|
SHUTDOWN_STOP |
||||||
|
) |
||||||
|
|
||||||
|
type VehicleChargingEnabled uint8 |
||||||
|
|
||||||
|
type ShiftLeverPosition uint8 |
||||||
|
|
||||||
|
type SystemFault uint8 |
||||||
|
|
||||||
|
type ContactorVehicleStatus uint8 |
||||||
|
|
||||||
|
type StopRequest uint8 |
||||||
|
|
||||||
|
type SuppVehicleWeldingDetection uint8 |
||||||
|
|
||||||
|
type StationState uint8 |
||||||
|
|
||||||
|
type ConnectorLock uint8 |
||||||
|
|
||||||
|
type BatteryCompatible uint8 |
||||||
|
|
||||||
|
type StopControl uint8 |
||||||
|
|
||||||
|
type CanFrame struct { |
||||||
|
canid uint32 |
||||||
|
payload []uint8 |
||||||
|
date string |
||||||
|
} |
||||||
|
|
||||||
|
func (v VehicleChargingEnabled) String() string { |
||||||
|
switch v { |
||||||
|
case DISABLED: |
||||||
|
return "disabled" |
||||||
|
case ENABLED: |
||||||
|
return "enabled" |
||||||
|
default: |
||||||
|
panic("VehicleChargingEnabled not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (s ShiftLeverPosition) String() string { |
||||||
|
switch s { |
||||||
|
case PARKING: |
||||||
|
return "parking" |
||||||
|
case OTHER: |
||||||
|
return "other" |
||||||
|
default: |
||||||
|
panic("ShiftLeverPosition not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (s SystemFault) String() string { |
||||||
|
switch s { |
||||||
|
case NORMAL: |
||||||
|
return "normal" |
||||||
|
case FAULT: |
||||||
|
return "fault" |
||||||
|
default: |
||||||
|
panic("SystemFault not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (c ContactorVehicleStatus) String() string { |
||||||
|
switch c { |
||||||
|
case CONTACTOR_CLOSED: |
||||||
|
return "contactor closed" |
||||||
|
case CONTACTOR_OPEN: |
||||||
|
return "contactor open" |
||||||
|
default: |
||||||
|
panic("ContactorVehicleStatus not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (s StopRequest) String() string { |
||||||
|
switch s { |
||||||
|
case NO_REQUEST: |
||||||
|
return "no request" |
||||||
|
case STOP_REQUEST: |
||||||
|
return "stop request" |
||||||
|
default: |
||||||
|
panic("StopRequest not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (s SuppVehicleWeldingDetection) String() string { |
||||||
|
switch s { |
||||||
|
case VEHICLE_WELDING_DETECTION_NOT_SUPPORTED: |
||||||
|
return "not supported" |
||||||
|
case VEHICLE_WELDING_DETECTION_SUPPORTED: |
||||||
|
return "supported" |
||||||
|
default: |
||||||
|
panic("SuppVehicleWeldingDetection not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (s StationState) String() string { |
||||||
|
switch s { |
||||||
|
case CHARGING: |
||||||
|
return "charging" |
||||||
|
case STANDBY: |
||||||
|
return "standby" |
||||||
|
default: |
||||||
|
panic("StationState not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (c ConnectorLock) String() string { |
||||||
|
switch c { |
||||||
|
case CONNECTOR_LOCKED: |
||||||
|
return "locked" |
||||||
|
case CONNECTOR_UNLOCKED: |
||||||
|
return "unlocked" |
||||||
|
default: |
||||||
|
panic("ConnectorLock not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (b BatteryCompatible) String() string { |
||||||
|
switch b { |
||||||
|
case BATTERY_COMPATIBLE: |
||||||
|
return "compatible" |
||||||
|
case BATTERY_INCOMPATIBLE: |
||||||
|
return "incompatible" |
||||||
|
default: |
||||||
|
panic("BatteryCompatible not implemented") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func (s StopControl) String() string { |
||||||
|
switch s { |
||||||
|
case OPERATING: |
||||||
|
return "operating" |
||||||
|
case SHUTDOWN_STOP: |
||||||
|
return "shutdown or stop charging" |
||||||
|
default: |
||||||
|
panic("StopControl not implemented") |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue