#include "main.h" void CApuStartReady(void); void CApuStopProcedure(Uint16 Level); void CSetEngineActualRpm(Uint16 Rpm); static void CSetGcuCommand(Uint16 Command); void CSetEcuCommand(Uint16 Command); Uint16 CStartSwitchCheck(void); void CApuOperProcedure(void) { if (CApuSystemAlarmCheck() > 0U || KeyOperValue.KeyList.bit.Emergency == 1U) { // ¾Ë¶÷À¸·Î ÀÎÇÑ Á¤Áö »óÅÂ(ºñ»óÁ¤Áö¿¡ ÁØÇÔ, Áï½ÃÁ¤Áö) CSetApuOperIndex(APU_OPER_IDX_EMERGENCY); CActiveChipSelect(0U); } else { CSetApuOperIndex(APU_OPER_IDX_STANDBY); switch (CGetApuOperIndex()) { case APU_OPER_IDX_STANDBY: { if (KeyOperValue.KeyList.bit.EngineStartStop == 1U) { CSetApuOperIndex(APU_OPER_IDX_START_CHECK); CActiveChipSelect(1U); // ½Ãµ¿Å°°¡ ÀԷµǸé CS ON if (CGetEngCoolantTemperature() < -10) // ³Ã°¢¼ö ¿Âµµ üũ { CSetApuOperIndex(APU_OPER_IDX_ENGINE_PREHEAT); } else { CSetApuOperIndex(APU_OPER_IDX_CRANKING); } } break; } case APU_OPER_IDX_ENGINE_PREHEAT: { break; } case APU_OPER_IDX_CRANKING: { CSetGcuCommand(GCU_OPER_CMD_CRANKING); if (CGetGeneratorRpm() > 800) { CSetGcuCommand(GCU_OPER_CMD_STOP_CRANKING); CSetApuOperIndex(APU_OPER_IDX_CHECK_OPERATION); } break; } case APU_OPER_IDX_CHECK_OPERATION: { } } } } void CSetApuOperIndex(eApuOperIdx idx) { GeneralOperValue.uiApuState = (Uint16) idx; } eApuOperIdx CGetApuOperIndex(void) { return (eApuOperIdx)GeneralOperValue.uiApuState; } Uint16 CStartSwitchCheck(void) { return KeyOperValue.KeyList.bit.EngineStartStop; } Uint16 CApuSystemAlarmCheck(void) { return ((FaultBitValue.ulTotal | Rx210.GcuFault.uiTotal | Rx310.EcuFault.uiTotal) > 0) ? 1U : 0U; } void CSetEngineActualRpm(Uint16 Rpm) { float32 fTemp = (float32) Rpm / 0.125f; // 0.125 mean : J1939 Scaling Factor. Tx103.EcuCommand.RpmSetpoint = (Uint16) fTemp; } Uint16 CGetEngineActualRpm(void) { float32 fTemp = (float32) Rx320.EcuData.ActualRpm * 0.125f; return (Uint16) fTemp; } Uint16 CGetGeneratorRpm(void) { return Rx220.GcuData.Rpm; } static void CSetGcuCommand(Uint16 Command) { GeneralOperValue.GcuCommand.PlayCmd = Command; } void CSetEcuCommand(Uint16 Command) { if (Command == ECU_OPER_CMD_STOP) { GeneralOperValue.EcuCommand.EngineStart = 0U; GeneralOperValue.EcuCommand.EngineStop = 1U; CSetEngineActualRpm(2400U); } else if (Command == ECU_OPER_CMD_START) { GeneralOperValue.EcuCommand.EngineStart = 1U; GeneralOperValue.EcuCommand.EngineStop = 0U; CSetEngineActualRpm(2400U); } else { // Emergency GeneralOperValue.EcuCommand.EngineStart = 0U; GeneralOperValue.EcuCommand.EngineStop = 1U; CSetEngineActualRpm(0U); } } int16 CGetEngCoolantTemperature(void) { return (int16) Rx321.EcuData.CoolantTemperature - 40; // ¿Âµµ ¿ÀÇÁ¼Â -40µµ } void CDebugModeProcedure(void) { if (GeneralOperValue.Maintenence.ManualCranking == 1U) { if (CApuSystemAlarmCheck() == 0U) { ; // ¾Ë¶÷ÀÌ ¾øÀ» °æ¿ì¸¸ µ¿ÀÛ Çϵµ·Ï ÇÔ. } } else { ; } if (GeneralOperValue.Maintenence.LampTest == 1U) { GPIO_CPU_LED_OPERATION(1U); GPIO_CPU_LED_FAULT(1U); GPIO_CPU_LED_STOP(1U); } else { GPIO_CPU_LED_OPERATION(0U); GPIO_CPU_LED_FAULT(0U); GPIO_CPU_LED_STOP(0U); } if (GeneralOperValue.Maintenence.KeyTest == 1U) { if ((GPIO_KEY_UP() == 1U) && (GPIO_KEY_DOWN() == 1U)) { GeneralOperValue.Maintenence.KeyTest = 0U; OledOperValue.uiPageNum = OLED_PAGE_MAINTENENCE; } } } void CLedControlProcedure(void) { switch (CGetApuOperIndex()) { case APU_OPER_IDX_EMERGENCY: { GPIO_CPU_LED_FAULT(1U); GPIO_CPU_LED_STOP(1U); GPIO_CPU_LED_OPERATION(0U); break; } case APU_OPER_IDX_STANDBY: { GPIO_CPU_LED_STOP(1U); GPIO_CPU_LED_FAULT(0U); GPIO_CPU_LED_OPERATION(0U); break; } case APU_OPER_IDX_ENGINE_STABLED: { GPIO_CPU_LED_OPERATION(1U); GPIO_CPU_LED_FAULT(0U); GPIO_CPU_LED_STOP(0U); break; } default: { break; } } }