69 #define I165C_FSM_SHORT_TIME (1u)
176 .receptionTries = 0u,
177 .receptionTriesMessage = 0u,
178 #if false == I165C_IS_165C_USED
180 .negativeRelayClosed =
true,
181 .positiveRelayClosed =
true,
184 .negativeRelayClosed =
false,
185 .positiveRelayClosed =
false,
194 .receptionTries = 0u,
195 .receptionTriesMessage = 0u,
203 .receptionTries = 0u,
204 .receptionTriesMessage = 0u,
213 .receptionTries = 0u,
214 .receptionTriesMessage = 0u,
441 pImdState->
timer = idleTime;
458 pImdState->
timer = idleTime;
475 pImdState->
timer = idleTime;
492 pImdState->
timer = idleTime;
505 for (uint8_t i = 0u; i <
CAN_DLC; i++) {
506 pCanMessage->
data[i] = 0u;
582 pCanMessage->
id = id;
589 bool messageReceived =
false;
590 uint8_t numberItems = 0u;
596 if (numberItems > 0u) {
600 messageReceived =
true;
606 }
while ((numberItems > 0u) && (queueReadTries > 0u));
608 return messageReceived;
613 bool imdInfoReceived =
false;
614 uint8_t numberItems = 0u;
620 if (numberItems > 0u) {
624 imdInfoReceived =
true;
630 }
while ((numberItems > 0u) && (queueReadTries > 0u));
632 return imdInfoReceived;
636 bool initialized =
true;
652 if (insulationMeasurementState != 0u) {
656 #ifdef I165C_SELF_TEST_LONG
659 if (selfTestExecuted != 0u) {
666 if (selfTestExecuted != 0u) {
675 bool anySelfTestExecuted =
false;
683 if (overallSelfTestExecuted == 0u) {
685 anySelfTestExecuted =
true;
689 if (parameterSelfTestExecuted == 0u) {
691 anySelfTestExecuted =
true;
693 return anySelfTestExecuted;
723 bool checkSuccess =
true;
730 checkSuccess =
false;
735 if (relayState != data) {
737 checkSuccess =
false;
755 bool measurementModeMatches =
false;
756 uint16_t dVIFCStatus = 0u;
764 if (actualMeasurementMode == mode) {
766 measurementModeMatches =
true;
768 return measurementModeMatches;
790 bool acknowledgeReceived =
false;
795 acknowledgeReceived =
true;
797 return acknowledgeReceived;
802 bool earlyExit =
false;
811 if (earlyExit ==
false) {
948 #ifdef I165C_SELF_TEST_LONG
1123 bool earlyExit =
false;
1132 if (earlyExit ==
false) {
1227 bool earlyExit =
false;
1228 uint16_t resistance_kOhm = 0u;
1229 uint16_t statusFlags = 0u;
1240 if (earlyExit ==
false) {
1370 bool earlyExit =
false;
1379 if (earlyExit ==
false) {
1491 #ifdef UNITY_UNIT_TEST
1495 extern void TEST_I165C_WriteDataWord(uint8_t dataWord, uint16_t data,
CAN_BUFFERELEMENT_s *canMessage) {
1498 extern void TEST_I165C_ReadDataWord(uint8_t dataWord, uint16_t *data,
CAN_BUFFERELEMENT_s canMessage) {
1501 extern void TEST_I165C_ReadDataWordImdInfo(uint8_t dataWord, uint16_t *data,
CAN_BUFFERELEMENT_s canMessage) {
1504 extern void TEST_I165C_ReadDataByte(uint8_t dataByte, uint8_t *data,
CAN_BUFFERELEMENT_s canMessage) {
1507 extern void TEST_I165C_WriteCmd(uint8_t
id, uint8_t command,
CAN_BUFFERELEMENT_s *canMessage) {
1519 extern bool TEST_I165C_CheckAcknowledgeArrived(uint8_t command, uint8_t *tries,
CAN_BUFFERELEMENT_s *canMessage) {
static void I165C_ReadDataWordImdInfo(uint8_t dataWord, uint16_t *pData, CAN_BUFFERELEMENT_s canMessage)
Get data in data word from CAN transmission, for the specific IMD_Info message.
static IMD_FSM_STATES_e I165C_Initialize(void)
static CAN_BUFFERELEMENT_s i165c_canTxMessage
IMD_FSM_STATES_e IMD_ProcessInitializationState(void)
Processes the initialization state.
static CAN_BUFFERELEMENT_s i165c_canRxMessage
static IMD_FSM_STATES_e I165C_Disable(void)
static bool I165C_IsSelfTestFinished(CAN_BUFFERELEMENT_s canMessage)
Check if iso165c was initialized and is running.
I165C_FSM_INITIALIZATION_STATES_e
@ I165C_FSM_STATE_INITIALIZATION_SET_ERROR_THRESHOLD
@ I165C_FSM_STATE_INITIALIZATION_UNLOCK_WAIT_ACK
@ I165C_FSM_STATE_INITIALIZATION_DUMMY
@ I165C_FSM_STATE_INITIALIZATION_ERROR_THRESHOLD_WAIT_ACK
@ I165C_FSM_STATE_INITIALIZATION_AVERAGING_FACTOR_WAIT_ACK
@ I165C_FSM_STATE_INITIALIZATION_SET_WARNING_THRESHOLD
@ I165C_FSM_STATE_INITIALIZATION_WARNING_THRESHOLD_WAIT_ACK
@ I165C_FSM_STATE_INITIALIZATION_CHECK_MEASUREMENT_STATE
@ I165C_FSM_STATE_INITIALIZATION_DISABLE_MEASUREMENT_WAIT_ACK
@ I165C_FSM_STATE_INITIALIZATION_DISABLE_MEASUREMENT
@ I165C_FSM_STATE_INITIALIZATION_REQUEST_HV_RELAY_OPENING
@ I165C_FSM_STATE_INITIALIZATION_SELF_TEST_WAIT_ACK
@ I165C_FSM_STATE_INITIALIZATION_ENABLE_MEASUREMENT_WAIT_ACK
@ I165C_FSM_STATE_INITIALIZATION_CHECK_NEGATIVE_HV_RELAY_STATE
@ I165C_FSM_STATE_INITIALIZATION_SET_AVERAGING_FACTOR
@ I165C_FSM_STATE_INITIALIZATION_WAIT_SELF_TEST
@ I165C_FSM_STATE_INITIALIZATION_REQUEST_SELF_TEST
@ I165C_FSM_STATE_INITIALIZATION_CHECK_POSITIVE_HV_RELAY_STATE
@ I165C_FSM_STATE_INITIALIZATION_REQUEST_NEGATIVE_HV_RELAY_STATE
@ I165C_FSM_STATE_INITIALIZATION_HAS_NEVER_RUN
static void I165C_SetDisableState(I165C_DISABLE_STATE_s *pImdState, I165C_FSM_DISABLE_STATES_e nextState, uint16_t idleTime)
Sets the next state the timer value of the disable state variable.
static I165C_INITIALIZATION_STATE_s i165c_initializationState
static void I165C_SetMeasurementMode(uint8_t mode)
Set measurement mode.
IMD_FSM_STATES_e IMD_ProcessShutdownState(void)
Processes the shutdown state.
static void I165C_SetEnableState(I165C_ENABLE_STATE_s *pImdState, I165C_FSM_ENABLE_STATES_e nextState, uint16_t idleTime)
Sets the next state the timer value of the enable state variable.
I165C_FSM_DISABLE_STATES_e
@ I165C_FSM_STATE_DISABLE_SET_HV_RELAY_STATE
@ I165C_FSM_STATE_MEASUREMENT_STOPPED_WAIT_ACK
@ I165C_FSM_STATE_DISABLE_CHECK_NEGATIVE_HV_RELAY_STATE
@ I165C_FSM_STATE_DISABLE_HAS_NEVER_RUN
@ I165C_FSM_STATE_DISABLE_DUMMY
@ I165C_FSM_STATE_DISABLE_REQUEST_NEGATIVE_HV_RELAY_STATE
@ I165C_FSM_STATE_DISABLE_CHECK_POSITIVE_HV_RELAY_STATE
static void I165C_SetRunningState(I165C_RUNNING_STATE_s *pImdState, I165C_FSM_RUNNING_STATES_e nextState, uint16_t idleTime)
Sets the next state the timer value of the running state variable.
I165C_FSM_RUNNING_STATES_e
@ I165C_FSM_STATE_RUNNING_HAS_NEVER_RUN
@ I165C_FSM_STATE_RUNNING_GET_MEASUREMENT
@ I165C_FSM_STATE_RUNNING_READ_RESISTANCE_WAIT_ACK
@ I165C_FSM_STATE_RUNNING_DUMMY
@ I165C_FSM_STATE_RUNNING_READ_RESISTANCE
I165C_FSM_ENABLE_STATES_e
@ I165C_FSM_STATE_ENABLE_HAS_NEVER_RUN
@ I165C_FSM_STATE_ENABLE_CHECK_NEGATIVE_HV_RELAY_STATE
@ I165C_FSM_STATE_ENABLE_START_MEASUREMENT_WAIT_ACK
@ I165C_FSM_STATE_ENABLE_DUMMY
@ I165C_FSM_STATE_ENABLE_START_MEASUREMENT
@ I165C_FSM_STATE_ENABLE_REQUEST_NEGATIVE_HV_RELAY_STATE
@ I165C_FSM_STATE_ENABLE_CHECK_POSITIVE_HV_RELAY_STATE
IMD_FSM_STATES_e IMD_ProcessEnableState(void)
Processes the IMD enable state.
static void I165C_WriteCmd(uint8_t id, uint8_t command, CAN_BUFFERELEMENT_s *pCanMessage)
Compose CAN message for CAN transmission.
static IMD_FSM_STATES_e I165C_Running(DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring)
trigger function for the i165c driver state machine.
static void I165C_SetInitializationState(I165C_INITIALIZATION_STATE_s *pImdState, I165C_FSM_INITIALIZATION_STATES_e nextState, uint16_t idleTime)
Sets the next state the timer value of the initialization state variable.
static I165C_RUNNING_STATE_s i165c_runningState
static I165C_DISABLE_STATE_s i165c_disableState
static void I165C_SetRelayState(uint8_t relay, uint8_t relayState)
Set state of HV relay.
static bool I165C_CheckRelayState(CAN_BUFFERELEMENT_s canMessage, uint8_t relay, uint8_t relayState)
Check state of HV relay.
#define I165C_FSM_SHORT_TIME
static bool I165C_CheckMeasurementMode(CAN_BUFFERELEMENT_s canMessage, uint8_t mode)
Check measurement mode.
static void I165C_RequestRelayState(uint8_t relay)
Request state of HV relay.
static bool I165C_GetImdInfo(CAN_BUFFERELEMENT_s *pCanMessage)
Get IMD Info from iso165c.
static bool I165C_HasSelfTestBeenExecuted(CAN_BUFFERELEMENT_s canMessage)
Check if iso165c has already been performed previously.
static void I165C_ReadDataWord(uint8_t dataWord, uint16_t *pData, CAN_BUFFERELEMENT_s canMessage)
Get data in data word from CAN transmission.
static void I165C_WriteDataWord(uint8_t dataWord, uint16_t data, CAN_BUFFERELEMENT_s *pCanMessage)
Write data in data word for CAN transmission.
static IMD_FSM_STATES_e I165C_Enable(void)
static void I165C_SetAveragingFactor(uint8_t averagingFactor)
Set average factor of the insulation resistance averaging algorithm.
static void I165C_ReadDataByte(uint8_t dataByte, uint8_t *pData, CAN_BUFFERELEMENT_s canMessage)
Get data in data byte from CAN transmission.
static void I165C_ResetCanData(CAN_BUFFERELEMENT_s *pCanMessage)
Reset CAN data.
static bool I165C_CheckAcknowledgeArrived(uint8_t command, uint8_t *pTries, CAN_BUFFERELEMENT_s *pCanMessage)
Check if iso165c acknowledged reception of command.
static I165C_ENABLE_STATE_s i165c_enableState
IMD_FSM_STATES_e IMD_ProcessRunningState(DATA_BLOCK_INSULATION_MONITORING_s *pTableInsulationMonitoring)
Processes the running state.
static bool I165C_CheckResponse(uint8_t command, CAN_BUFFERELEMENT_s *pCanMessage)
Check if iso165c acknowledged reception of sent message and get corresponding data.
Headers for the driver for the insulation monitoring.
#define I165C_D_VIFC_HV_RELAIS_STATE_GET_RESPONSE
#define I165C_INSULATION_FAULT_SHIFT
#define I165C_D_VIFC_HV_RELAIS_SET_REQUEST
#define I165C_D_IMC_MEAN_FACTOR_SET_REQUEST
#define I165C_D_VIFC_HV_RELAIS_POSITIVE
#define I165C_BIAS_TO_HV_PLUS
#define I165C_UNLOCK_PASSWORD
#define I165C_IMC_SELFTEST_PARAMETERCONFIG_SCENARIO_SHIFT
#define I165C_CMD_S_IMC_SET_R_ISO_ERR_THR
#define I165C_RELAY_STATE_CLOSED
#define I165C_D_VIFC_HV_RELAIS_GET_REQUEST
#define I165C_INSULATION_MEASUREMENT_STATUS_SHIFT
#define I165C_LOCKMODE_UNLOCKED
#define I165C_DW_VIFC_CTL_MEASUREMENT_REQUEST
#define I165C_CMD_S_VIFC_CTL_MEASUREMENT
#define I165C_CMD_S_IMC_SET_R_ISO_ERR_WRN
#define I165C_CMD_S_IMC_SET_MEAN_FACTOR
#define I165C_D_IMC_R_ISO_CNT_GET_RESPONSE
#define I165C_CMD_S_IMC_CTL_SELFTEST
#define I165C_MAX_QUEUE_READS
#define I165C_SELFTEST_SCENARIO_PARAMETERCONFIG
#define I165C_SELFTEST_SCENARIO_OVERALL
#define I165C_CMD_S_IMC_GET_R_ISO
#define I165C_D_VIFC_HV_RELAIS_GET_RESPONSE
#define I165C_D_IMC_SELFTEST_SCR_CTL_REQUEST
#define I165C_SYSTEM_FAILURE_SHIFT
#define I165C_D_VIFC_LOCK_MODE_CTL_REQUEST
#define I165C_TRANSMISSION_ATTEMPTS
#define I165C_MESSAGETYPE_IMD_INFO
#define I165C_CMD_S_VIFC_SET_HV_RELAIS
#define I165C_WARNING_THRESHOLD_kOhm
#define I165C_BIAS_TO_HV_MINUS
#define I165C_MESSAGETYPE_IMD_REQUEST
#define I165C_D_IMC_R_ISO_ERR_WRN_SET_REQUEST
#define I165C_DISABLE_MEASUREMENT
#define I165C_SELFTEST_RUNNING_SHIFT
#define I165C_IMD_INFO_RECEIVE_ATTEMPTS
#define I165C_RELAY_STATE_OPEN
#define I165C_CHASSIS_FAULT_SHIFT
#define I165C_D_VIFC_HV_RELAIS_STATE_SET_REQUEST
#define I165C_ERROR_THRESHOLD_kOhm
#define I165C_INSULATION_WARNING_SHIFT
#define I165C_D_VIFC_LOCK_PWD_CTL_REQUEST
#define I165C_D_IMC_R_ISO_BIAS_GET_RESPONSE
#define I165C_IMC_SELFTEST_OVERALL_SCENARIO_SHIFT
#define I165C_CMD_S_VIFC_GET_HV_RELAIS
#define I165C_ENABLE_MEASUREMENT
#define I165C_D_VIFC_HV_RELAIS_NEGATIVE
#define I165C_RESISTANCE_VALUE_OUTDATED_SHIFT
#define I165C_CMD_S_VIFC_CTL_LOCK
#define I165C_MEASUREMENT_AVERAGING_FACTOR
#define I165C_D_IMC_R_ISO_ERR_THR_SET_REQUEST
STD_RETURN_TYPE_e CAN_DataSend(canBASE_t *pNode, uint32_t id, uint8 *pData)
Sends over CAN the data passed in parameters. This function goes over the messageboxes and marks the ...
Header for the driver for the CAN module.
#define CAN_ID_IMD_RESPONSE
Headers for the helper functions for the CAN module.
#define CAN_BYTE_2_POSITION
#define CAN_BYTE_4_POSITION
#define CAN_BYTE_0_POSITION
#define CAN_BYTE_6_POSITION
#define CAN_BYTE_3_POSITION
#define CAN_BYTE_5_POSITION
#define CAN_BYTE_1_POSITION
Database configuration header.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
#define FAS_TRAP
Define that evaluates to essential boolean false thus tripping an assert.
#define NULL_PTR
Null pointer.
Header of task driver implementation.
QueueHandle_t ftsk_imdCanDataQueue
@ IMD_FSM_STATE_INITIALIZATION
@ IMD_FSM_STATE_IMD_ENABLE
OS_STD_RETURN_e OS_ReceiveFromQueue(OS_QUEUE xQueue, void *const pvBuffer, uint32_t ticksToWait)
Receive an item from a queue.
uint32_t OS_GetNumberOfStoredMessagesInQueue(OS_QUEUE xQueue)
Check if messages are waiting for queue.
uint8_t data[CAN_MAX_DLC]
bool dfIsDeviceErrorDetected
bool dfIsWarnableResistanceDetected
bool dfIsCriticalResistanceDetected
bool dfIsMeasurmentedUpToDate
bool isInsulationMeasurementValid
uint32_t insulationResistance_kOhm
bool dfIsChassisFaultDetected
bool dfIsChassisShortToHvPlus
bool dfIsChassisShortToHvMinus
uint8_t receptionTriesMessage
I165C_FSM_DISABLE_STATES_e previousState
I165C_FSM_DISABLE_STATES_e currentState
I165C_FSM_ENABLE_STATES_e previousState
I165C_FSM_ENABLE_STATES_e currentState
uint8_t receptionTriesMessage
I165C_FSM_INITIALIZATION_STATES_e currentState
uint8_t receptionTriesMessage
I165C_FSM_INITIALIZATION_STATES_e previousState
uint8_t receptionTriesMessage
I165C_FSM_RUNNING_STATES_e currentState
I165C_FSM_RUNNING_STATES_e previousState