Field und parameters names as constants, small fixes

refactor
Terekhin Alexandr 3 years ago
parent c7d660a762
commit 8c81bc8e24
Signed by: didinst
GPG Key ID: D2EF94423C23BF12
  1. 281
      yabl/const.go
  2. 354
      yabl/init.go
  3. 668
      yabl/protocol.go
  4. 45
      yabl/protocol_test.go
  5. 2
      yabl/setters.go
  6. 253
      yabl/types.go

@ -0,0 +1,281 @@
package yabl
const (
CONVERTERS_MAX = 18 + 1
CONTACTOR_MAX = 18 + 1
CONNECTOR_COUNT = 6
CONNECTOR_MAX = CONNECTOR_COUNT + 1
ALL_BITS = 0xFFFFFFFFFFFFFFFF
UNIT_ID_OFFSET = 12
UNIT_ID_MASK = 0b111111111111 << UNIT_ID_OFFSET
ACTION_ID_MASK = 0b111111111111
BOARD_READY_OK BoardReadyType = 0
BOARD_READY_INFO BoardReadyType = 1
BOARD_READY_WARNING BoardReadyType = 2
BOARD_READY_DEBUG BoardReadyType = 3
BOARD_READY_DEP_ERROR BoardReadyType = 4
BOARD_READY_ERROR BoardReadyType = 5
BOARD_READY_CRITICAL BoardReadyType = 6
OFF BooleanType = 0
ON BooleanType = 1
NO_ERROR ErrorType = 0
ERROR ErrorType = 1
OTHER_NO_ERROR ContactorInternalOtherErrorType = 0
NO_PENDING_CHANGES ContactorGroupChangedType = 0
INITIALIZED_CHANGE ContactorGroupChangedType = 1
CHANGE_IN_PROGRESS ContactorGroupChangedType = 2
V2G_MODE_G2V V2GModeType = 0
V2G_MODE_V2G V2GModeType = 1
V2G_MODE_INV V2GModeType = 2
NOT_ENABLE CpLineLevelType = 0
TWELVE CpLineLevelType = 1
NINE CpLineLevelType = 2
SIX CpLineLevelType = 3
THREE CpLineLevelType = 4
MINUS_TWELVE CpLineLevelType = 5
ISOLATION_STATE_UNKNOWN IsolationStateType = 0
ONGOING IsolationStateType = 1
PASSED IsolationStateType = 2
WARNING IsolationStateType = 3
FAILED IsolationStateType = 4
AUTH AuthModeType = 0
PNC AuthModeType = 1
AUTH_STATE_UNKNOWN AuthStateType = 0
AUTH_STATE_ALLOW AuthStateType = 1
AUTH_STATE_DENY AuthStateType = 2
CONTACTOR_NO_MODE ContactorModeType = 0
CONTACTOR_TRANSACTION_PROCESS ContactorModeType = 1
CONTACTOR_CUSTOM_MODE ContactorModeType = 2
CONTACTOR_ONLY_ONE_OUT_MODE ContactorModeType = 3
CONTACTOR_ONE_TO_ONE_OUT_MODE ContactorModeType = 4
CONTACTOR_SIMPLE_DYNAMIC_MODE ContactorModeType = 5
DEBUG_SWITCH_MODE_AUTO DebugSwitchModeType = 0
DEBUG_SWITCH_MODE_OFF DebugSwitchModeType = 1
DEBUG_SWITCH_MODE_ON DebugSwitchModeType = 2
DEBUG_SWITCH_MODE_PERMANENT_OFF DebugSwitchModeType = 4
DEBUG_SWITCH_MODE_PERMANENT_ON DebugSwitchModeType = 5
PCpuPresentEnergy PName = "CpuPresentEnergy"
PCpuPeriphery PName = "CpuPeriphery"
PCpuEnergySettings PName = "CpuEnergySettings"
PCpuErrors PName = "CpuErrors"
PCpuDebug PName = "CpuDebug"
PPuPresentEnergy PName = "PuPresentEnergy"
PPuPeriphery PName = "PuPeriphery"
PPuErrors PName = "PuErrors"
PPuDebug PName = "PuDebug"
PSeccTargetEnergy PName = "SeccTargetEnergy"
PSeccErrors PName = "SeccErrors"
PLogicAuth PName = "LogicAuth"
PLogicEnergyMode PName = "LogicEnergyMode"
PLogicErrors PName = "LogicErrors"
PLogicWorkingMode PName = "LogicWorkingMode"
PContactorInternalState PName = "ContactorInternalState"
PContactorInternalErrors PName = "ContactorInternalErrors"
PContactorsInternalForce PName = "ContactorsInternalForce"
PContactorInternalDebug PName = "ContactorInternalDebug"
PPeripheryState PName = "PeripheryState"
PPeripheryInfo PName = "PeripheryInfo"
PPeripheryDebug PName = "PeripheryDebug"
PConverterPresentEnergy PName = "ConverterPresentEnergy"
PConverterErrors PName = "ConverterErrors"
PConverterDebug PName = "ConverterDebug"
FContactorReady FName = "FContactorReady"
FContactorOn FName = "ContactorOn"
FUnexpectedState FName = "UnexpectedState"
FIsolated FName = "Isolated"
FDebugEnabled FName = "DebugEnabled"
FBoardReady FName = "BoardReady"
FOtherError FName = "OtherError"
FContactorGroupChanged FName = "ContactorGroupChanged"
FUnexpectedFormation FName = "UnexpectedFormation"
FCpuNotReady FName = "CpuNotReady"
FPuNotReady FName = "PuNotReady"
FDebug FName = "Debug"
FPresentContactorMode FName = "PresentContactorMode"
FForceModeEnabled FName = "ForceModeEnabled"
FForceModeValue FName = "ForceModeValue"
FDebugModeOn FName = "DebugModeOn"
FDebugContactorOn FName = "DebugContactorOn"
FV2GMode FName = "V2GMode"
FVoltageBefore FName = "VoltageBefore"
FVoltageAfter FName = "VoltageAfter"
FPresentCurrent FName = "PresentCurrent"
FConnectorInsert FName = "ConnectorInsert"
// FContactorOn FName = "ContactorOn"
FConnectorLocked FName = "ConnectorLocked"
FCpLineLevel FName = "CpLineLevel"
FIsolationState FName = "IsolationState"
FChargingAllowed FName = "ChargingAllowed"
FPwmEnabled FName = "PwmEnabled"
FCpLineVoltage FName = "CpLineVoltage"
FAuthMode FName = "AuthMode"
FAuthState FName = "AuthState"
FV2gMode FName = "V2gMode"
FCurrentMax FName = "CurrentMax"
FVoltageMax FName = "VoltageMax"
FPowerMax FName = "PowerMax"
// FBoardReady FName = "BoardReady"
FNotReadySettings FName = "NotReadySettings"
FTargetContactorMode FName = "TargetContactorMode"
FAvailability FName = "Availability"
FPowerDirectionMode FName = "PowerDirectionMode"
// FPresentCurrent FName = "PresentCurrent"
FPresentVoltage FName = "PresentVoltage"
FContactorInput FName = "ContactorInput"
FCircuitBreakerInput FName = "CircuitBreakerInput"
FCircuitBreakerPowerCBInput FName = "CircuitBreakerPowerCBInput"
// FCurrentMax FName = "CurrentMax"
// FVoltageMax FName = "VoltageMax"
// FPowerMax FName = "PowerMax"
FTargetBatteryVoltage FName = "TargetBatteryVoltage"
FTargetGoalVoltage FName = "TargetGoalVoltage"
// FBoardReady FName = "BoardReady"
// FOtherError FName = "OtherError"
FRedButtonHard FName = "RedButtonHard"
FRedButtonSoft FName = "RedButtonSoft"
FModulesGone FName = "ModulesGone"
FGridVoltageHighErr FName = "GridVoltageHighErr"
FGridVoltageHighWarn FName = "GridVoltageHighWarn"
FGridVoltageLowWarn FName = "GridVoltageLowWarn"
FGridVoltageLowErr FName = "GridVoltageLowErr"
FGridVoltageLow FName = "GridVoltageLow"
FGridVoltageHigh FName = "GridVoltageHigh"
FGridVoltageEmpty FName = "GridVoltageEmpty"
FNotReadySecc FName = "NotReadySecc"
FNotReadyPu FName = "NotReadyPu"
FNotReadyContactors FName = "NotReadyContactors"
FDebugConvertersEnabled FName = "DebugConvertersEnabled"
FContactorInputError FName = "ContactorInputError"
FNotReadyPeriphery FName = "NotReadyPeriphery"
// FDebugModeOn FName = "DebugModeOn"
FDebugContactorInputOn FName = "DebugContactorInputOn"
FDebugCircuitBreakerOn FName = "DebugCircuitBreakerOn"
FDebugRedButtonSoftware FName = "DebugRedButtonSoftware"
// FBoardReady FName = "BoardReady"
// FOtherError FName = "OtherError"
FIncorrectVoltage FName = "IncorrectVoltage"
FIncorrectVoltageValue FName = "IncorrectVoltageValue"
FIncorrectCurrent FName = "IncorrectCurrent"
FIncorrectCurrentValue FName = "IncorrectCurrentValue"
FIsolationBroken FName = "IsolationBroken"
FCpLineBroken FName = "CpLineBroken"
FCpLineGap69 FName = "CpLineGap69"
FCableReady FName = "CableReady"
FNotReadyCpu FName = "NotReadyCpu"
// FNotReadySecc FName = "NotReadySecc"
FContactorOutputError FName = "ContactorOutputError"
FDebugContactorOutputEnabled FName = "DebugContactorOutputEnabled"
FOutputCircuitBreakerEnabled FName = "OutputCircuitBreakerEnabled"
FOutputCircuitBreakerEnabledValue FName = "OutputCircuitBreakerEnabledValue"
// FDebugModeOn FName = "DebugModeOn"
FDebugContactorOutputOn FName = "DebugContactorOutputOn"
FTargetChargingAllow FName = "TargetChargingAllow"
// FTargetBatteryVoltage FName = "TargetBatteryVoltage"
// FTargetGoalVoltage FName = "TargetGoalVoltage"
FTargetCurrent FName = "TargetCurrent"
// FBoardReady FName = "BoardReady"
FNotReadyLogic FName = "NotReadyLogic"
FOtherErrorSeverity FName = "OtherErrorSeverity"
// FOtherError FName = "OtherError"
FErrorShakeSensor FName = "ErrorShakeSensor"
FErrorCoolingGroup FName = "ErrorCoolingGroup"
FPeripheryErrorCoolingGroup FName = "PeripheryErrorCoolingGroup"
FErrorFireEmergency FName = "ErrorFireEmergency"
FErrorFireEmergencyRun FName = "ErrorFireEmergencyRun"
FErrorFireEmergencyControl FName = "ErrorFireEmergencyControl"
FErrorOvervoltageIn FName = "ErrorOvervoltageIn"
FPeripheryErrorPowerSupply FName = "PeripheryErrorPowerSupply"
FErrorFan FName = "ErrorFan"
FErrorOvervoltageOut FName = "ErrorOvervoltageOut"
FErrorStateRemoteMode FName = "ErrorStateRemoteMode"
FDebugShsnFanEnabled FName = "DebugShsnFanEnabled"
FDebugShptFanEnabled FName = "DebugShptFanEnabled"
FDebugIoBoardTestLampEnabled FName = "DebugIoBoardTestLampEnabled"
FErrorFireEmergencyCircuitBreaker FName = "ErrorFireEmergencyCircuitBreaker"
FErrorExtLightCircuitBreaker FName = "ErrorExtLightCircuitBreaker"
FErrorIndicationCircuitBreaker FName = "ErrorIndicationCircuitBreaker"
FErrorLowVoltagePowerCircuitBreaker FName = "ErrorLowVoltagePowerCircuitBreaker"
FErrorContactorsInternalCircuitBreaker FName = "ErrorContactorsInternalCircuitBreaker"
FErrorPlcCircuitBreaker FName = "ErrorPlcCircuitBreaker"
FInfoDoorOpen FName = "InfoDoorOpen"
FTempAirIn FName = "TempAirIn"
FTempAirOut FName = "TempAirOut"
FStateShsnFan FName = "StateShsnFan"
FStateShptFan FName = "StateShptFan"
// FDebugModeOn FName = "DebugModeOn"
FDebugShsnFan FName = "DebugShsnFan"
FDebugShptFan FName = "DebugShptFan"
FDebugIoBoardTestLamp FName = "DebugIoBoardTestLamp"
// FV2gMode FName = "V2gMode"
// FPresentVoltage FName = "PresentVoltage"
// FPresentCurrent FName = "PresentCurrent"
FConnectedOut FName = "ConnectedOut"
// FBoardReady FName = "BoardReady"
// FOtherError FName = "OtherError"
FNotConnectedOut FName = "NotConnectedOut"
FNoCommunicationConverter FName = "NoCommunicationConverter"
FNoCommunicationPuConverter FName = "NoCommunicationPuConverter"
FInputGridVoltageHigh FName = "InputGridVoltageHigh"
FInputGridVoltageLow FName = "InputGridVoltageLow"
FOutputGridVoltageHigh FName = "OutputGridVoltageHigh"
FOutputGridVoltageLow FName = "OutputGridVoltageLow"
FInputGridVoltage FName = "InputGridVoltage"
FOutputGridVoltage FName = "OutputGridVoltage"
FShortCircuit FName = "ShortCircuit"
FOverHeat FName = "OverHeat"
FFanBroken FName = "FanBroken"
FOtherHardwareError FName = "OtherHardwareError"
FDebugConvEnabled FName = "DebugConvEnabled"
FDebugConvDisabled FName = "DebugConvDisabled"
// FDebugModeOn FName = "DebugModeOn"
FDebugEnergyOn FName = "DebugEnergyOn"
FDebugTargetVoltage FName = "DebugTargetVoltage"
FDebugTargetCurrent FName = "DebugTargetCurrent"
)

@ -0,0 +1,354 @@
package yabl
import "cli-mon/can"
func init() {
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_011, uint(i)}
cpe := CpuPresentEnergy{}
cpuPresentEnergyArray[i] = &cpe
fields := []field{
{length: 2, setter: cpe.setPowerDirectionMode},
{length: 10, setter: cpe.setPresentCurrent},
{length: 11, setter: cpe.setPresentVoltage},
}
protocolMap[key] = parameters{fields: fields, interval: 50, name: PCpuPresentEnergy}
}
cpuPeripheryInstance = &CpuPeriphery{}
fields := []field{
{length: 2, setter: cpuPeripheryInstance.setContactorInput},
{length: 2, setter: cpuPeripheryInstance.setCircuitBreakerInput},
{length: 2, setter: cpuPeripheryInstance.setCircuitBreakerPowerCBInput},
}
protocolMap[key{can.CAN_ID_014, 0}] = parameters{fields: fields, interval: 1000, name: PCpuPeriphery}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_015, uint(i)}
ces := CpuEnergySettings{}
cpuEnergySettingsArray[i] = &ces
fields := []field{
{length: 10, setter: ces.setCurrentMax},
{length: 11, setter: ces.setVoltageMax},
{length: 14, setter: ces.setPowerMax},
{length: 11, setter: ces.setTargetBatteryVoltage},
{length: 11, setter: ces.setTargetGoalVoltage},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PCpuEnergySettings}
}
cpuErrorsInstance = &CpuErrors{}
fields = []field{
{length: 3, setter: cpuErrorsInstance.setBoardReady},
{length: 4, setter: cpuErrorsInstance.setOtherError},
{length: 2, setter: cpuErrorsInstance.setRedButtonHard},
{length: 2, setter: cpuErrorsInstance.setRedButtonSoft},
{length: 2, setter: cpuErrorsInstance.setModulesGone},
{length: 2, setter: cpuErrorsInstance.setGridVoltageHighErr},
{length: 2, setter: cpuErrorsInstance.setGridVoltageHighWarn},
{length: 2, setter: cpuErrorsInstance.setGridVoltageLowWarn},
{length: 2, setter: cpuErrorsInstance.setGridVoltageLowErr},
{length: 11, setter: cpuErrorsInstance.setGridVoltageLow},
{length: 11, setter: cpuErrorsInstance.setGridVoltageHigh},
{length: 2, setter: cpuErrorsInstance.setGridVoltageEmpty},
{length: 2, setter: cpuErrorsInstance.setNotReadySecc},
{length: 2, setter: cpuErrorsInstance.setNotReadyPu},
{length: 2, setter: cpuErrorsInstance.setNotReadyContactors},
{length: 2, setter: cpuErrorsInstance.setDebugConvertersEnabled},
{length: 2, setter: cpuErrorsInstance.setContactorInputError},
{length: 2, setter: cpuErrorsInstance.setNotReadyPeriphery},
}
protocolMap[key{can.CAN_ID_016, 0}] = parameters{fields: fields, interval: 1000, name: PCpuErrors}
cpuDebugInstance = &CpuDebug{}
fields = []field{
{length: 2, setter: cpuDebugInstance.setDebugModeOn},
{length: 3, setter: cpuDebugInstance.setDebugContactorInputOn},
{length: 3, setter: cpuDebugInstance.setDebugCircuitBreakerOn},
{length: 3, setter: cpuDebugInstance.setDebugRedButtonSoftware},
}
protocolMap[key{can.CAN_ID_01A, 0}] = parameters{fields: fields, interval: 1000, name: PCpuDebug}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_021, uint(i)}
ppe := PuPresentEnergy{}
puPresentEnergyArray[i] = &ppe
fields := []field{
{length: 2, setter: ppe.setV2GMode},
{length: 11, setter: ppe.setVoltageBefore},
{length: 11, setter: ppe.setVoltageAfter},
{length: 10, setter: ppe.setPresentCurrent},
}
protocolMap[key] = parameters{fields: fields, interval: 50, name: PPuPresentEnergy}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_022, uint(i)}
pp := PuPeriphery{}
puPeripheryArray[i] = &pp
fields := []field{
{length: 2, setter: pp.setConnectorInsert},
{length: 2, setter: pp.setContactorOn},
{length: 2, setter: pp.setConnectorLocked},
{length: 3, setter: pp.setCpLineLevel},
{length: 3, setter: pp.setIsolationState},
{length: 2, setter: pp.setChargingAllowed},
{length: 2, setter: pp.setPwmEnabled},
{length: 9, setter: pp.setCpLineVoltage},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PPuPeriphery}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_023, uint(i)}
pe := PuErrors{}
puErrorsArray[i] = &pe
fields := []field{
{length: 3, setter: pe.setBoardReady},
{length: 4, setter: pe.setOtherError},
{length: 2, setter: pe.setIncorrectVoltage},
{length: 11, setter: pe.setIncorrectVoltageValue},
{length: 2, setter: pe.setIncorrectCurrent},
{length: 10, setter: pe.setIncorrectCurrentValue},
{length: 2, setter: pe.setIsolationBroken},
{length: 2, setter: pe.setCpLineBroken},
{length: 2, setter: pe.setCpLineGap69},
{length: 3, setter: pe.setCableReady},
{length: 2, setter: pe.setNotReadyCpu},
{length: 2, setter: pe.setNotReadySecc},
{length: 2, setter: pe.setContactorOutputError},
{length: 2, setter: pe.setDebugContactorOutputEnabled},
{length: 2, setter: pe.setOutputCircuitBreakerEnabled},
{length: 12, setter: pe.setOutputCircuitBreakerEnabledValue},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PPuErrors}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_02A, uint(i)}
pd := PuDebug{}
puDebugArray[i] = &pd
fields = []field{
{length: 2, setter: pd.setDebugModeOn},
{length: 3, setter: pd.setDebugContactorOutputOn},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PPuDebug}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_041, uint(i)}
ste := SeccTargetEnergy{}
seccTargetEnergyArray[i] = &ste
fields = []field{
{length: 2, setter: ste.setTargetChargingAllow},
{length: 11, setter: ste.setTargetBatteryVoltage},
{length: 11, setter: ste.setTargetGoalVoltage},
{length: 10, setter: ste.setTargetCurrent},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PSeccTargetEnergy}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_042, uint(i)}
se := SeccErrors{}
seccErrorsArray[i] = &se
fields = []field{
{length: 3, setter: se.setBoardReady},
{length: 2, setter: se.setNotReadyLogic},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PSeccErrors}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_046, uint(i)}
la := LogicAuth{}
logicAuthArray[i] = &la
fields = []field{
{length: 2, setter: la.setAuthMode},
{length: 3, setter: la.setAuthState},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PLogicAuth}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_047, uint(i)}
la := LogicEnergyMode{}
logicEnergyMode[i] = &la
fields = []field{
{length: 2, setter: la.setV2gMode},
{length: 10, setter: la.setCurrentMax},
{length: 11, setter: la.setVoltageMax},
{length: 14, setter: la.setPowerMax},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PLogicEnergyMode}
}
logicErrorsInstance = &LogicErrors{}
fields = []field{
{length: 3, setter: logicErrorsInstance.setBoardReady},
{length: 2, setter: logicErrorsInstance.setNotReadySettings},
}
protocolMap[key{can.CAN_ID_048, 0}] = parameters{fields: fields, interval: 1000, name: PLogicErrors}
logicWorkingMode = &LogicWorkingMode{}
fields = []field{
{length: 5, setter: logicWorkingMode.setTargetContactorMode},
{length: 2, setter: logicWorkingMode.setAvailability},
}
protocolMap[key{can.CAN_ID_049, 0}] = parameters{fields: fields, interval: 1000, name: PLogicWorkingMode}
for i := 0; i <= CONTACTOR_MAX; i++ {
key := key{can.CAN_ID_071, uint(i)}
cis := ContactorInternalState{}
contactorInternalStateArray[i] = &cis
fields = []field{
{length: 3, setter: cis.setContactorReady},
{length: 2, setter: cis.setContactorOn},
{length: 2, setter: cis.setUnexpectedState},
{length: 2, setter: cis.setIsolated},
{length: 2, setter: cis.setDebugEnabled},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PContactorInternalState}
}
contactorInternalErrorsInstance = &ContactorInternalErrors{}
fields = []field{
{length: 3, setter: contactorInternalErrorsInstance.setBoardReady},
{length: 4, setter: contactorInternalErrorsInstance.setOtherError},
{length: 3, setter: contactorInternalErrorsInstance.setContactorGroupChanged},
{length: 4, setter: contactorInternalErrorsInstance.setUnexpectedFormation},
{length: 2, setter: contactorInternalErrorsInstance.setCpuNotReady},
{length: 2, setter: contactorInternalErrorsInstance.setPuNotReady},
{length: 2, setter: contactorInternalErrorsInstance.setDebug},
{length: 5, setter: contactorInternalErrorsInstance.setPresentContactorMode},
}
protocolMap[key{can.CAN_ID_073, 0}] = parameters{fields: fields, interval: 1000, name: PContactorInternalErrors}
contactorsInternalForce = &ContactorsInternalForce{}
fields = []field{
{length: 2, setter: contactorsInternalForce.setForceModeEnabled},
{length: 4, setter: contactorsInternalForce.setForceModeValue},
}
protocolMap[key{can.CAN_ID_074, 0}] = parameters{fields: fields, interval: 1000, name: PContactorsInternalForce}
for i := 0; i <= CONTACTOR_MAX; i++ {
key := key{can.CAN_ID_075, uint(i)}
cid := ContactorInternalDebug{}
contactorInternalDebugArray[i] = &cid
fields = []field{
{length: 2, setter: cid.setDebugModeOn},
{length: 3, setter: cid.setDebugContactorOn},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PContactorInternalDebug}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_067, uint(i)}
ps := PeripheryState{}
peripheryStateArray[i] = &ps
fields = []field{
{length: 3, setter: ps.setOtherErrorSeverity},
{length: 4, setter: ps.setOtherError},
{length: 2, setter: ps.setErrorShakeSensor},
{length: 2, setter: ps.setErrorCoolingGroup},
{length: 2, setter: ps.setPeripheryErrorCoolingGroup},
{length: 2, setter: ps.setErrorFireEmergency},
{length: 2, setter: ps.setErrorFireEmergencyRun},
{length: 2, setter: ps.setErrorFireEmergencyControl},
{length: 2, setter: ps.setErrorOvervoltageIn},
{length: 2, setter: ps.setPeripheryErrorPowerSupply},
{length: 2, setter: ps.setErrorFan},
{length: 2, setter: ps.setErrorOvervoltageOut},
{length: 2, setter: ps.setErrorStateRemoteMode},
{length: 2, setter: ps.setDebugShsnFanEnabled},
{length: 2, setter: ps.setDebugShptFanEnabled},
{length: 2, setter: ps.setDebugIoBoardTestLampEnabled},
{length: 2, setter: ps.setErrorFireEmergencyCircuitBreaker},
{length: 2, setter: ps.setErrorExtLightCircuitBreaker},
{length: 2, setter: ps.setErrorIndicationCircuitBreaker},
{length: 2, setter: ps.setErrorLowVoltagePowerCircuitBreaker},
{length: 2, setter: ps.setErrorContactorsInternalCircuitBreaker},
{length: 2, setter: ps.setErrorPlcCircuitBreaker},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PPeripheryState}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_068, uint(i)}
pi := PeripheryInfo{}
peripheryInfoArray[i] = &pi
fields = []field{
{length: 2, setter: pi.setInfoDoorOpen},
{length: 8, setter: pi.setTempAirIn},
{length: 8, setter: pi.setTempAirOut},
{length: 2, setter: pi.setStateShsnFan},
{length: 2, setter: pi.setStateShptFan},
}
protocolMap[key] = parameters{fields: fields, interval: 5000, name: PPeripheryInfo}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_06C, uint(i)}
pd := PeripheryDebug{}
peripheryDebugArray[i] = &pd
fields = []field{
{length: 2, setter: pd.setDebugModeOn},
{length: 3, setter: pd.setDebugShsnFan},
{length: 3, setter: pd.setDebugShptFan},
{length: 3, setter: pd.setDebugIoBoardTestLamp},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PPeripheryDebug}
}
for i := 1; i <= CONVERTERS_MAX; i++ {
key := key{can.CAN_ID_061, uint(i)}
cpe := ConverterPresentEnergy{}
converterPresentEnergyArray[i] = &cpe
fields = []field{
{length: 2, setter: cpe.setV2gMode},
{length: 11, setter: cpe.setPresentVoltage},
{length: 10, setter: cpe.setPresentCurrent},
{length: 8, setter: cpe.setConnectedOut},
}
protocolMap[key] = parameters{fields: fields, interval: 500, name: PConverterPresentEnergy}
}
for i := 1; i <= CONVERTERS_MAX; i++ {
key := key{can.CAN_ID_062, uint(i)}
ce := ConverterErrors{}
converterErrorsArray[i] = &ce
fields = []field{
{length: 3, setter: ce.setBoardReady},
{length: 4, setter: ce.setOtherError},
{length: 2, setter: ce.setNotConnectedOut},
{length: 2, setter: ce.setNoCommunicationConverter},
{length: 2, setter: ce.setNoCommunicationPuConverter},
{length: 2, setter: ce.setInputGridVoltageHigh},
{length: 2, setter: ce.setInputGridVoltageLow},
{length: 2, setter: ce.setOutputGridVoltageHigh},
{length: 2, setter: ce.setOutputGridVoltageLow},
{length: 11, setter: ce.setInputGridVoltage},
{length: 11, setter: ce.setOutputGridVoltage},
{length: 2, setter: ce.setShortCircuit},
{length: 2, setter: ce.setOverHeat},
{length: 2, setter: ce.setFanBroken},
{length: 2, setter: ce.setOtherHardwareError},
{length: 2, setter: ce.setDebugConvEnabled},
{length: 2, setter: ce.setDebugConvDisabled},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PConverterErrors}
}
for i := 0; i <= CONVERTERS_MAX; i++ {
key := key{can.CAN_ID_065, uint(i)}
cd := ConverterDebug{}
converterDebugArray[i] = &cd
fields = []field{
{length: 3, setter: cd.setDebugModeOn},
{length: 4, setter: cd.setDebugEnergyOn},
{length: 2, setter: cd.setDebugTargetVoltage},
{length: 2, setter: cd.setDebugTargetCurrent},
}
protocolMap[key] = parameters{fields: fields, interval: 1000, name: PConverterDebug}
}
}

@ -6,318 +6,10 @@ import (
"time" "time"
) )
const (
CONVERTERS_MAX = 18 + 1
CONTACTOR_MAX = 18 + 1
CONNECTOR_COUNT = 6
CONNECTOR_MAX = CONNECTOR_COUNT + 1
ALL_BITS = 0xFFFFFFFFFFFFFFFF
UNIT_ID_OFFSET = 12
UNIT_ID_MASK = 0b111111111111 << UNIT_ID_OFFSET
ACTION_ID_MASK = 0b111111111111
BOARD_READY_OK BoardReadyType = 0
BOARD_READY_INFO BoardReadyType = 1
BOARD_READY_WARNING BoardReadyType = 2
BOARD_READY_DEBUG BoardReadyType = 3
BOARD_READY_DEP_ERROR BoardReadyType = 4
BOARD_READY_ERROR BoardReadyType = 5
BOARD_READY_CRITICAL BoardReadyType = 6
OFF BooleanType = 0
ON BooleanType = 1
NO_ERROR ErrorType = 0
ERROR ErrorType = 1
OTHER_NO_ERROR ContactorInternalOtherErrorType = 0
NO_PENDING_CHANGES ContactorGroupChangedType = 0
INITIALIZED_CHANGE ContactorGroupChangedType = 1
CHANGE_IN_PROGRESS ContactorGroupChangedType = 2
V2G_MODE_G2V V2GModeType = 0
V2G_MODE_V2G V2GModeType = 1
V2G_MODE_INV V2GModeType = 2
NOT_ENABLE CpLineLevelType = 0
TWELVE CpLineLevelType = 1
NINE CpLineLevelType = 2
SIX CpLineLevelType = 3
THREE CpLineLevelType = 4
MINUS_TWELVE CpLineLevelType = 5
ISOLATION_STATE_UNKNOWN IsolationStateType = 0
ONGOING IsolationStateType = 1
PASSED IsolationStateType = 2
WARNING IsolationStateType = 3
FAILED IsolationStateType = 4
AUTH AuthModeType = 0
PNC AuthModeType = 1
AUTH_STATE_UNKNOWN AuthStateType = 0
AUTH_STATE_ALLOW AuthStateType = 1
AUTH_STATE_DENY AuthStateType = 2
CONTACTOR_NO_MODE ContactorModeType = 0
CONTACTOR_TRANSACTION_PROCESS ContactorModeType = 1
CONTACTOR_CUSTOM_MODE ContactorModeType = 2
CONTACTOR_ONLY_ONE_OUT_MODE ContactorModeType = 3
CONTACTOR_ONE_TO_ONE_OUT_MODE ContactorModeType = 4
CONTACTOR_SIMPLE_DYNAMIC_MODE ContactorModeType = 5
DEBUG_SWITCH_MODE_AUTO DebugSwitchModeType = 0
DEBUG_SWITCH_MODE_OFF DebugSwitchModeType = 1
DEBUG_SWITCH_MODE_ON DebugSwitchModeType = 2
DEBUG_SWITCH_MODE_PERMANENT_OFF DebugSwitchModeType = 4
DEBUG_SWITCH_MODE_PERMANENT_ON DebugSwitchModeType = 5
)
type Packet interface { type Packet interface {
GetUnitId() uint GetUnitId() uint
} }
type ContactorInternalState struct {
UnitId uint
ContactorReady BoardReadyType
ContactorOn BooleanType
UnexpectedState ErrorType
Isolated ErrorType
DebugEnabled BooleanType
}
type ContactorInternalErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError ContactorInternalOtherErrorType
ContactorGroupChanged ContactorGroupChangedType
UnexpectedFormation ContactorInternalOtherErrorType
CpuNotReady ErrorType
PuNotReady ErrorType
Debug BooleanType
PresentContactorMode ContactorModeType
}
type ContactorsInternalForce struct {
UnitId uint
ForceModeEnabled BooleanType
ForceModeValue ForceModeType
}
type ContactorInternalDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugContactorOn DebugSwitchModeType
}
type PuPresentEnergy struct {
UnitId uint
V2GMode V2GModeType
VoltageBefore Voltage11BitType
VoltageAfter Voltage11BitType
PresentCurrent Current10BitType
}
type PuPeriphery struct {
UnitId uint
ConnectorInsert BooleanType
ContactorOn BooleanType
ConnectorLocked BooleanType
CpLineLevel CpLineLevelType
IsolationState IsolationStateType
ChargingAllowed BooleanType
PwmEnabled BooleanType
CpLineVoltage Voltage9BitType
}
type LogicAuth struct {
UnitId uint
AuthMode AuthModeType
AuthState AuthStateType
}
type LogicEnergyMode struct {
UnitId uint
V2gMode V2GModeType
CurrentMax Current10BitType
VoltageMax Voltage11BitType
PowerMax Power14BitType
}
type LogicErrors struct {
UnitId uint
BoardReady BoardReadyType
NotReadySettings ErrorType
}
type LogicWorkingMode struct {
UnitId uint
TargetContactorMode ContactorModeType
Availability BooleanType
}
type CpuPresentEnergy struct {
UnitId uint
PowerDirectionMode V2GModeType
PresentCurrent Current10BitType
PresentVoltage Voltage11BitType
}
type CpuPeriphery struct {
UnitId uint
ContactorInput BooleanType
CircuitBreakerInput BooleanType
CircuitBreakerPowerCBInput BooleanType
}
type CpuEnergySettings struct {
UnitId uint
CurrentMax Current10BitType
VoltageMax Voltage11BitType
PowerMax Power14BitType
TargetBatteryVoltage Voltage11BitType
TargetGoalVoltage Voltage11BitType
}
type CpuErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError OtherError4BitType
RedButtonHard ErrorType
RedButtonSoft ErrorType
ModulesGone ErrorType
GridVoltageHighErr ErrorType
GridVoltageHighWarn ErrorType
GridVoltageLowWarn ErrorType
GridVoltageLowErr ErrorType
GridVoltageLow Voltage11BitType
GridVoltageHigh Voltage11BitType
GridVoltageEmpty ErrorType
NotReadySecc ErrorType
NotReadyPu ErrorType
NotReadyContactors ErrorType
DebugConvertersEnabled ErrorType
ContactorInputError ErrorType
NotReadyPeriphery ErrorType
}
type CpuDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugContactorInputOn DebugSwitchModeType
DebugCircuitBreakerOn DebugSwitchModeType
DebugRedButtonSoftware DebugSwitchModeType
}
type PuErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError OtherError4BitType
IncorrectVoltage ErrorType
IncorrectVoltageValue Voltage11BitType
IncorrectCurrent ErrorType
IncorrectCurrentValue Current10BitType
IsolationBroken ErrorType
CpLineBroken ErrorType
CpLineGap69 ErrorType
CableReady BoardReadyType
NotReadyCpu ErrorType
NotReadySecc ErrorType
ContactorOutputError ErrorType
DebugContactorOutputEnabled BooleanType
OutputCircuitBreakerEnabled ErrorType
OutputCircuitBreakerEnabledValue SignedVoltage12bitType
}
type PuDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugContactorOutputOn DebugSwitchModeType
}
type SeccTargetEnergy struct {
UnitId uint
TargetChargingAllow BooleanType
TargetBatteryVoltage Voltage11BitType
TargetGoalVoltage Voltage11BitType
TargetCurrent Current10BitType
}
type SeccErrors struct {
UnitId uint
BoardReady BoardReadyType
NotReadyLogic ErrorType
}
type PeripheryState struct {
UnitId uint
OtherErrorSeverity BoardReadyType
OtherError OtherError4BitType
ErrorShakeSensor ErrorType
ErrorCoolingGroup ErrorType
PeripheryErrorCoolingGroup ErrorType
ErrorFireEmergency ErrorType
ErrorFireEmergencyRun ErrorType
ErrorFireEmergencyControl ErrorType
ErrorOvervoltageIn ErrorType
PeripheryErrorPowerSupply ErrorType
ErrorFan ErrorType
ErrorOvervoltageOut ErrorType
ErrorStateRemoteMode ErrorType
DebugShsnFanEnabled BooleanType
DebugShptFanEnabled BooleanType
DebugIoBoardTestLampEnabled BooleanType
ErrorFireEmergencyCircuitBreaker ErrorType
ErrorExtLightCircuitBreaker ErrorType
ErrorIndicationCircuitBreaker ErrorType
ErrorLowVoltagePowerCircuitBreaker ErrorType
ErrorContactorsInternalCircuitBreaker ErrorType
ErrorPlcCircuitBreaker ErrorType
}
type PeripheryInfo struct {
UnitId uint
InfoDoorOpen BooleanType
TempAirIn SignedAirTemp8BitType
TempAirOut SignedAirTemp8BitType
StateShsnFan BooleanType
StateShptFan BooleanType
}
type PeripheryDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugShsnFan DebugSwitchModeType
DebugShptFan DebugSwitchModeType
DebugIoBoardTestLamp DebugSwitchModeType
}
type ConverterPresentEnergy struct {
UnitId uint
V2gMode V2GModeType
PresentVoltage Voltage11BitType
PresentCurrent Current10BitType
ConnectedOut ConnectedOut8bitType
}
type ConverterErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError OtherError4BitType
NotConnectedOut ErrorType
NoCommunicationConverter ErrorType
NoCommunicationPuConverter ErrorType
InputGridVoltageHigh ErrorType
InputGridVoltageLow ErrorType
OutputGridVoltageHigh ErrorType
OutputGridVoltageLow ErrorType
InputGridVoltage Voltage11BitType
OutputGridVoltage Voltage11BitType
ShortCircuit ErrorType
OverHeat ErrorType
FanBroken ErrorType
OtherHardwareError ErrorType
DebugConvEnabled BooleanType
DebugConvDisabled BooleanType
}
type ConverterDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugEnergyOn DebugSwitchModeType
DebugTargetVoltage Voltage11BitType
DebugTargetCurrent Current10BitType
}
type SignedAirTemp8BitType int type SignedAirTemp8BitType int
type ConnectedOut8bitType uint type ConnectedOut8bitType uint
type ForceModeType uint type ForceModeType uint
@ -340,16 +32,21 @@ type CpLineLevelType uint
type IsolationStateType uint type IsolationStateType uint
type Voltage9BitType float32 type Voltage9BitType float32
type PName string
type FName string
type parameters struct { type parameters struct {
fields []content fields []field
interval uint interval uint
name PName
} }
type content struct { type field struct {
length uint8 length uint8
setter func(uint64 uint64) setter func(uint64 uint64)
value uint64 value uint64
last time.Time last time.Time
name FName
} }
type key struct { type key struct {
@ -383,357 +80,6 @@ var converterPresentEnergyArray [CONVERTERS_MAX]*ConverterPresentEnergy
var converterErrorsArray [CONVERTERS_MAX]*ConverterErrors var converterErrorsArray [CONVERTERS_MAX]*ConverterErrors
var converterDebugArray [CONVERTERS_MAX]*ConverterDebug var converterDebugArray [CONVERTERS_MAX]*ConverterDebug
func init() {
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_011, uint(i)}
cpe := CpuPresentEnergy{}
cpuPresentEnergyArray[i] = &cpe
fields := []content{
{length: 2, setter: cpe.setPowerDirectionMode},
{length: 10, setter: cpe.setPresentCurrent},
{length: 11, setter: cpe.setPresentVoltage},
}
protocolMap[key] = parameters{fields: fields, interval: 50}
}
cpuPeripheryInstance = &CpuPeriphery{}
fields := []content{
{length: 2, setter: cpuPeripheryInstance.setContactorInput},
{length: 2, setter: cpuPeripheryInstance.setCircuitBreakerInput},
{length: 2, setter: cpuPeripheryInstance.setCircuitBreakerPowerCBInput},
}
protocolMap[key{can.CAN_ID_014, 0}] = parameters{fields: fields, interval: 1000}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_015, uint(i)}
ces := CpuEnergySettings{}
cpuEnergySettingsArray[i] = &ces
fields := []content{
{length: 10, setter: ces.setCurrentMax},
{length: 11, setter: ces.setVoltageMax},
{length: 14, setter: ces.setPowerMax},
{length: 11, setter: ces.setTargetBatteryVoltage},
{length: 11, setter: ces.setTargetGoalVoltage},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
cpuErrorsInstance = &CpuErrors{}
fields = []content{
{length: 3, setter: cpuErrorsInstance.setBoardReady},
{length: 4, setter: cpuErrorsInstance.setOtherError},
{length: 2, setter: cpuErrorsInstance.setRedButtonHard},
{length: 2, setter: cpuErrorsInstance.setRedButtonSoft},
{length: 2, setter: cpuErrorsInstance.setModulesGone},
{length: 2, setter: cpuErrorsInstance.setGridVoltageHighErr},
{length: 2, setter: cpuErrorsInstance.setGridVoltageHighWarn},
{length: 2, setter: cpuErrorsInstance.setGridVoltageLowWarn},
{length: 2, setter: cpuErrorsInstance.setGridVoltageLowErr},
{length: 11, setter: cpuErrorsInstance.setGridVoltageLow},
{length: 11, setter: cpuErrorsInstance.setGridVoltageHigh},
{length: 2, setter: cpuErrorsInstance.setGridVoltageEmpty},
{length: 2, setter: cpuErrorsInstance.setNotReadySecc},
{length: 2, setter: cpuErrorsInstance.setNotReadyPu},
{length: 2, setter: cpuErrorsInstance.setNotReadyContactors},
{length: 2, setter: cpuErrorsInstance.setDebugConvertersEnabled},
{length: 2, setter: cpuErrorsInstance.setContactorInputError},
{length: 2, setter: cpuErrorsInstance.setNotReadyPeriphery},
}
protocolMap[key{can.CAN_ID_016, 0}] = parameters{fields: fields, interval: 1000}
cpuDebugInstance = &CpuDebug{}
fields = []content{
{length: 2, setter: cpuDebugInstance.setDebugModeOn},
{length: 3, setter: cpuDebugInstance.setDebugContactorInputOn},
{length: 3, setter: cpuDebugInstance.setDebugCircuitBreakerOn},
{length: 3, setter: cpuDebugInstance.setDebugRedButtonSoftware},
}
protocolMap[key{can.CAN_ID_01A, 0}] = parameters{fields: fields, interval: 1000}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_021, uint(i)}
ppe := PuPresentEnergy{}
puPresentEnergyArray[i] = &ppe
fields := []content{
{length: 2, setter: ppe.setV2GMode},
{length: 11, setter: ppe.setVoltageBefore},
{length: 11, setter: ppe.setVoltageAfter},
{length: 10, setter: ppe.setPresentCurrent},
}
protocolMap[key] = parameters{fields: fields, interval: 50}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_022, uint(i)}
pp := PuPeriphery{}
puPeripheryArray[i] = &pp
fields := []content{
{length: 2, setter: pp.setConnectorInsert},
{length: 2, setter: pp.setContactorOn},
{length: 2, setter: pp.setConnectorLocked},
{length: 3, setter: pp.setCpLineLevel},
{length: 3, setter: pp.setIsolationState},
{length: 2, setter: pp.setChargingAllowed},
{length: 2, setter: pp.setPwmEnabled},
{length: 9, setter: pp.setCpLineVoltage},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_023, uint(i)}
pe := PuErrors{}
puErrorsArray[i] = &pe
fields := []content{
{length: 3, setter: pe.setBoardReady},
{length: 4, setter: pe.setOtherError},
{length: 2, setter: pe.setIncorrectVoltage},
{length: 11, setter: pe.setIncorrectVoltageValue},
{length: 2, setter: pe.setIncorrectCurrent},
{length: 10, setter: pe.setIncorrectCurrentValue},
{length: 2, setter: pe.setIsolationBroken},
{length: 2, setter: pe.setCpLineBroken},
{length: 2, setter: pe.setCpLineGap69},
{length: 3, setter: pe.setCableReady},
{length: 2, setter: pe.setNotReadyCpu},
{length: 2, setter: pe.setNotReadySecc},
{length: 2, setter: pe.setContactorOutputError},
{length: 2, setter: pe.setDebugContactorOutputEnabled},
{length: 2, setter: pe.setOutputCircuitBreakerEnabled},
{length: 12, setter: pe.setOutputCircuitBreakerEnabledValue},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_02A, uint(i)}
pd := PuDebug{}
puDebugArray[i] = &pd
fields = []content{
{length: 2, setter: pd.setDebugModeOn},
{length: 3, setter: pd.setDebugContactorOutputOn},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_041, uint(i)}
ste := SeccTargetEnergy{}
seccTargetEnergyArray[i] = &ste
fields = []content{
{length: 2, setter: ste.setTargetChargingAllow},
{length: 11, setter: ste.setTargetBatteryVoltage},
{length: 11, setter: ste.setTargetGoalVoltage},
{length: 10, setter: ste.setTargetCurrent},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 1; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_042, uint(i)}
se := SeccErrors{}
seccErrorsArray[i] = &se
fields = []content{
{length: 3, setter: se.setBoardReady},
{length: 2, setter: se.setNotReadyLogic},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_046, uint(i)}
la := LogicAuth{}
logicAuthArray[i] = &la
fields = []content{
{length: 2, setter: la.setAuthMode},
{length: 3, setter: la.setAuthState},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_047, uint(i)}
la := LogicEnergyMode{}
logicEnergyMode[i] = &la
fields = []content{
{length: 2, setter: la.setV2gMode},
{length: 10, setter: la.setCurrentMax},
{length: 11, setter: la.setVoltageMax},
{length: 14, setter: la.setPowerMax},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
logicErrorsInstance = &LogicErrors{}
fields = []content{
{length: 3, setter: logicErrorsInstance.setBoardReady},
{length: 2, setter: logicErrorsInstance.setNotReadySettings},
}
protocolMap[key{can.CAN_ID_048, 0}] = parameters{fields: fields, interval: 1000}
logicWorkingMode = &LogicWorkingMode{}
fields = []content{
{length: 5, setter: logicWorkingMode.setTargetContactorMode},
{length: 2, setter: logicWorkingMode.setAvailability},
}
protocolMap[key{can.CAN_ID_049, 0}] = parameters{fields: fields, interval: 1000}
for i := 0; i <= CONTACTOR_MAX; i++ {
key := key{can.CAN_ID_071, uint(i)}
cis := ContactorInternalState{}
contactorInternalStateArray[i] = &cis
fields = []content{
{length: 3, setter: cis.setContactorReady},
{length: 2, setter: cis.setContactorOn},
{length: 2, setter: cis.setUnexpectedState},
{length: 2, setter: cis.setIsolated},
{length: 2, setter: cis.setDebugEnabled},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
contactorInternalErrorsInstance = &ContactorInternalErrors{}
fields = []content{
{length: 3, setter: contactorInternalErrorsInstance.setBoardReady},
{length: 4, setter: contactorInternalErrorsInstance.setOtherError},
{length: 3, setter: contactorInternalErrorsInstance.setContactorGroupChanged},
{length: 4, setter: contactorInternalErrorsInstance.setUnexpectedFormation},
{length: 2, setter: contactorInternalErrorsInstance.setCpuNotReady},
{length: 2, setter: contactorInternalErrorsInstance.setPuNotReady},
{length: 2, setter: contactorInternalErrorsInstance.setDebug},
{length: 5, setter: contactorInternalErrorsInstance.setPresentContactorMode},
}
protocolMap[key{can.CAN_ID_073, 0}] = parameters{fields: fields, interval: 1000}
contactorsInternalForce = &ContactorsInternalForce{}
fields = []content{
{length: 2, setter: contactorsInternalForce.setForceModeEnabled},
{length: 4, setter: contactorsInternalForce.setForceModeValue},
}
protocolMap[key{can.CAN_ID_074, 0}] = parameters{fields: fields, interval: 1000}
for i := 0; i <= CONTACTOR_MAX; i++ {
key := key{can.CAN_ID_075, uint(i)}
cid := ContactorInternalDebug{}
contactorInternalDebugArray[i] = &cid
fields = []content{
{length: 2, setter: cid.setDebugModeOn},
{length: 3, setter: cid.setDebugContactorOn},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_067, uint(i)}
ps := PeripheryState{}
peripheryStateArray[i] = &ps
fields = []content{
{length: 3, setter: ps.setOtherErrorSeverity},
{length: 4, setter: ps.setOtherError},
{length: 2, setter: ps.setErrorShakeSensor},
{length: 2, setter: ps.setErrorCoolingGroup},
{length: 2, setter: ps.setPeripheryErrorCoolingGroup},
{length: 2, setter: ps.setErrorFireEmergency},
{length: 2, setter: ps.setErrorFireEmergencyRun},
{length: 2, setter: ps.setErrorFireEmergencyControl},
{length: 2, setter: ps.setErrorOvervoltageIn},
{length: 2, setter: ps.setPeripheryErrorPowerSupply},
{length: 2, setter: ps.setErrorFan},
{length: 2, setter: ps.setErrorOvervoltageOut},
{length: 2, setter: ps.setErrorStateRemoteMode},
{length: 2, setter: ps.setDebugShsnFanEnabled},
{length: 2, setter: ps.setDebugShptFanEnabled},
{length: 2, setter: ps.setDebugIoBoardTestLampEnabled},
{length: 2, setter: ps.setErrorFireEmergencyCircuitBreaker},
{length: 2, setter: ps.setErrorExtLightCircuitBreaker},
{length: 2, setter: ps.setErrorIndicationCircuitBreaker},
{length: 2, setter: ps.setErrorLowVoltagePowerCircuitBreaker},
{length: 2, setter: ps.setErrorContactorsInternalCircuitBreaker},
{length: 2, setter: ps.setErrorPlcCircuitBreaker},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_068, uint(i)}
pi := PeripheryInfo{}
peripheryInfoArray[i] = &pi
fields = []content{
{length: 2, setter: pi.setInfoDoorOpen},
{length: 8, setter: pi.setTempAirIn},
{length: 8, setter: pi.setTempAirOut},
{length: 2, setter: pi.setStateShsnFan},
{length: 2, setter: pi.setStateShptFan},
}
protocolMap[key] = parameters{fields: fields, interval: 5000}
}
for i := 0; i <= CONNECTOR_COUNT; i++ {
key := key{can.CAN_ID_06C, uint(i)}
pd := PeripheryDebug{}
peripheryDebugArray[i] = &pd
fields = []content{
{length: 2, setter: pd.setDebugModeOn},
{length: 3, setter: pd.setDebugShsnFan},
{length: 3, setter: pd.setDebugShptFan},
{length: 3, setter: pd.setDebugIoBoardTestLamp},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 1; i <= CONVERTERS_MAX; i++ {
key := key{can.CAN_ID_061, uint(i)}
cpe := ConverterPresentEnergy{}
converterPresentEnergyArray[i] = &cpe
fields = []content{
{length: 2, setter: cpe.setV2gMode},
{length: 11, setter: cpe.setPresentVoltage},
{length: 10, setter: cpe.setPresentCurrent},
{length: 8, setter: cpe.setConnectedOut},
}
protocolMap[key] = parameters{fields: fields, interval: 500}
}
for i := 1; i <= CONVERTERS_MAX; i++ {
key := key{can.CAN_ID_062, uint(i)}
ce := ConverterErrors{}
converterErrorsArray[i] = &ce
fields = []content{
{length: 3, setter: ce.setBoardReady},
{length: 4, setter: ce.setOtherError},
{length: 2, setter: ce.setNotConnectedOut},
{length: 2, setter: ce.setNoCommunicationConverter},
{length: 2, setter: ce.setNoCommunicationPuConverter},
{length: 2, setter: ce.setInputGridVoltageHigh},
{length: 2, setter: ce.setInputGridVoltageLow},
{length: 2, setter: ce.setOutputGridVoltageHigh},
{length: 2, setter: ce.setOutputGridVoltageLow},
{length: 11, setter: ce.setInputGridVoltage},
{length: 11, setter: ce.setOutputGridVoltage},
{length: 2, setter: ce.setShortCircuit},
{length: 2, setter: ce.setOverHeat},
{length: 2, setter: ce.setFanBroken},
{length: 2, setter: ce.setOtherHardwareError},
{length: 2, setter: ce.setDebugConvEnabled},
{length: 2, setter: ce.setDebugConvDisabled},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
for i := 0; i <= CONVERTERS_MAX; i++ {
key := key{can.CAN_ID_065, uint(i)}
cd := ConverterDebug{}
converterDebugArray[i] = &cd
fields = []content{
{length: 3, setter: cd.setDebugModeOn},
{length: 4, setter: cd.setDebugEnergyOn},
{length: 2, setter: cd.setDebugTargetVoltage},
{length: 2, setter: cd.setDebugTargetCurrent},
}
protocolMap[key] = parameters{fields: fields, interval: 1000}
}
}
func StartProtocolParsing(frames <-chan *can.CanFrame) <-chan Packet { func StartProtocolParsing(frames <-chan *can.CanFrame) <-chan Packet {
result := make(chan Packet) result := make(chan Packet)

@ -1,45 +0,0 @@
package yabl
import (
"cli-mon/can"
"log"
"testing"
"time"
)
type parameters struct {
fields []content
interval uint
}
type content struct {
length uint8
setter func(uint64 uint64)
last time.Time
}
func TestStartProtocolParsing(t *testing.T) {
var cis = ContactorInternalState{}
var cisMsg = parameters{fields: []content{
{length: 3, setter: cis.setContactorReady},
{length: 2, setter: cis.setContactorOn},
{length: 2, setter: cis.setUnexpectedState},
{length: 2, setter: cis.setIsolated},
{length: 2, setter: cis.setDebugEnabled},
}}
var messages = map[uint]parameters{
can.CAN_ID_071: cisMsg,
}
// try to use
var values = messages[can.CAN_ID_071]
for num, item := range values.fields {
item.setter(uint64(num))
log.Println(cis)
}
}

@ -97,7 +97,7 @@ func (t *PuPeriphery) setPwmEnabled(val uint64) {
} }
func (t *PuPeriphery) setCpLineVoltage(val uint64) { func (t *PuPeriphery) setCpLineVoltage(val uint64) {
t.CpLineVoltage = Voltage9BitType(val)/10 - 15 t.CpLineVoltage = Voltage9BitType(val)*0.1 - 15
} }
func (t *LogicAuth) setAuthMode(val uint64) { func (t *LogicAuth) setAuthMode(val uint64) {

@ -0,0 +1,253 @@
package yabl
type ContactorInternalState struct {
UnitId uint
ContactorReady BoardReadyType
ContactorOn BooleanType
UnexpectedState ErrorType
Isolated ErrorType
DebugEnabled BooleanType
}
type ContactorInternalErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError ContactorInternalOtherErrorType
ContactorGroupChanged ContactorGroupChangedType
UnexpectedFormation ContactorInternalOtherErrorType
CpuNotReady ErrorType
PuNotReady ErrorType
Debug BooleanType
PresentContactorMode ContactorModeType
}
type ContactorsInternalForce struct {
UnitId uint
ForceModeEnabled BooleanType
ForceModeValue ForceModeType
}
type ContactorInternalDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugContactorOn DebugSwitchModeType
}
type PuPresentEnergy struct {
UnitId uint
V2GMode V2GModeType
VoltageBefore Voltage11BitType
VoltageAfter Voltage11BitType
PresentCurrent Current10BitType
}
type PuPeriphery struct {
UnitId uint
ConnectorInsert BooleanType
ContactorOn BooleanType
ConnectorLocked BooleanType
CpLineLevel CpLineLevelType
IsolationState IsolationStateType
ChargingAllowed BooleanType
PwmEnabled BooleanType
CpLineVoltage Voltage9BitType
}
type LogicAuth struct {
UnitId uint
AuthMode AuthModeType
AuthState AuthStateType
}
type LogicEnergyMode struct {
UnitId uint
V2gMode V2GModeType
CurrentMax Current10BitType
VoltageMax Voltage11BitType
PowerMax Power14BitType
}
type LogicErrors struct {
UnitId uint
BoardReady BoardReadyType
NotReadySettings ErrorType
}
type LogicWorkingMode struct {
UnitId uint
TargetContactorMode ContactorModeType
Availability BooleanType
}
type CpuPresentEnergy struct {
UnitId uint
PowerDirectionMode V2GModeType
PresentCurrent Current10BitType
PresentVoltage Voltage11BitType
}
type CpuPeriphery struct {
UnitId uint
ContactorInput BooleanType
CircuitBreakerInput BooleanType
CircuitBreakerPowerCBInput BooleanType
}
type CpuEnergySettings struct {
UnitId uint
CurrentMax Current10BitType
VoltageMax Voltage11BitType
PowerMax Power14BitType
TargetBatteryVoltage Voltage11BitType
TargetGoalVoltage Voltage11BitType
}
type CpuErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError OtherError4BitType
RedButtonHard ErrorType
RedButtonSoft ErrorType
ModulesGone ErrorType
GridVoltageHighErr ErrorType
GridVoltageHighWarn ErrorType
GridVoltageLowWarn ErrorType
GridVoltageLowErr ErrorType
GridVoltageLow Voltage11BitType
GridVoltageHigh Voltage11BitType
GridVoltageEmpty ErrorType
NotReadySecc ErrorType
NotReadyPu ErrorType
NotReadyContactors ErrorType
DebugConvertersEnabled ErrorType
ContactorInputError ErrorType
NotReadyPeriphery ErrorType
}
type CpuDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugContactorInputOn DebugSwitchModeType
DebugCircuitBreakerOn DebugSwitchModeType
DebugRedButtonSoftware DebugSwitchModeType
}
type PuErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError OtherError4BitType
IncorrectVoltage ErrorType
IncorrectVoltageValue Voltage11BitType
IncorrectCurrent ErrorType
IncorrectCurrentValue Current10BitType
IsolationBroken ErrorType
CpLineBroken ErrorType
CpLineGap69 ErrorType
CableReady BoardReadyType
NotReadyCpu ErrorType
NotReadySecc ErrorType
ContactorOutputError ErrorType
DebugContactorOutputEnabled BooleanType
OutputCircuitBreakerEnabled ErrorType
OutputCircuitBreakerEnabledValue SignedVoltage12bitType
}
type PuDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugContactorOutputOn DebugSwitchModeType
}
type SeccTargetEnergy struct {
UnitId uint
TargetChargingAllow BooleanType
TargetBatteryVoltage Voltage11BitType
TargetGoalVoltage Voltage11BitType
TargetCurrent Current10BitType
}
type SeccErrors struct {
UnitId uint
BoardReady BoardReadyType
NotReadyLogic ErrorType
}
type PeripheryState struct {
UnitId uint
OtherErrorSeverity BoardReadyType
OtherError OtherError4BitType
ErrorShakeSensor ErrorType
ErrorCoolingGroup ErrorType
PeripheryErrorCoolingGroup ErrorType
ErrorFireEmergency ErrorType
ErrorFireEmergencyRun ErrorType
ErrorFireEmergencyControl ErrorType
ErrorOvervoltageIn ErrorType
PeripheryErrorPowerSupply ErrorType
ErrorFan ErrorType
ErrorOvervoltageOut ErrorType
ErrorStateRemoteMode ErrorType
DebugShsnFanEnabled BooleanType
DebugShptFanEnabled BooleanType
DebugIoBoardTestLampEnabled BooleanType
ErrorFireEmergencyCircuitBreaker ErrorType
ErrorExtLightCircuitBreaker ErrorType
ErrorIndicationCircuitBreaker ErrorType
ErrorLowVoltagePowerCircuitBreaker ErrorType
ErrorContactorsInternalCircuitBreaker ErrorType
ErrorPlcCircuitBreaker ErrorType
}
type PeripheryInfo struct {
UnitId uint
InfoDoorOpen BooleanType
TempAirIn SignedAirTemp8BitType
TempAirOut SignedAirTemp8BitType
StateShsnFan BooleanType
StateShptFan BooleanType
}
type PeripheryDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugShsnFan DebugSwitchModeType
DebugShptFan DebugSwitchModeType
DebugIoBoardTestLamp DebugSwitchModeType
}
type ConverterPresentEnergy struct {
UnitId uint
V2gMode V2GModeType
PresentVoltage Voltage11BitType
PresentCurrent Current10BitType
ConnectedOut ConnectedOut8bitType
}
type ConverterErrors struct {
UnitId uint
BoardReady BoardReadyType
OtherError OtherError4BitType
NotConnectedOut ErrorType
NoCommunicationConverter ErrorType
NoCommunicationPuConverter ErrorType
InputGridVoltageHigh ErrorType
InputGridVoltageLow ErrorType
OutputGridVoltageHigh ErrorType
OutputGridVoltageLow ErrorType
InputGridVoltage Voltage11BitType
OutputGridVoltage Voltage11BitType
ShortCircuit ErrorType
OverHeat ErrorType
FanBroken ErrorType
OtherHardwareError ErrorType
DebugConvEnabled BooleanType
DebugConvDisabled BooleanType
}
type ConverterDebug struct {
UnitId uint
DebugModeOn BooleanType
DebugEnergyOn DebugSwitchModeType
DebugTargetVoltage Voltage11BitType
DebugTargetCurrent Current10BitType
}
Loading…
Cancel
Save