/* * Brief: Handle all chassis function in this file. Such as: Fan control, update power_good status, update chassis health status. * Author: Jimbo_Zhang@outlook.com * Date: 2019-9-18 */ #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ChassisTimerTask.h" #include "ChassisDevice.h" #include "com_IPMI_Chassis.h" #include "com_IPMI_LANConfig.h" #include "com_IPMI_DeviceConfig.h" #include "SensorMonitor.h" #include "time.h" #include "com_IPMI_App.h" #include "hal_interface_api.h" void *IdentifyTask(void *param); //int gFd_ChassisPwrHndlrQue; void *ChassisTimerTask(void* pArg) { MsgPkt_T ReqPkt; MsgPkt_T ResPkt; uint32_t preChassisSeconds; uint32_t preFanSeconds; uint32_t preIdentifySeconds = 0; char cmdStr[100] = {0}; SetLanConfigReq_T *pSetLanCfg; int i; prctl(PR_SET_NAME,__FUNCTION__,0,0,0); printf("ChassisTimerTask Started... \n"); preChassisSeconds = g_BMCInfo.CurTimerSecond; preFanSeconds = g_BMCInfo.CurTimerSecond; //sleep(5); while(1) { //Chassis timer interval if((g_BMCInfo.CurTimerSecond != preChassisSeconds) &&((g_BMCInfo.CurTimerSecond - preChassisSeconds) >= g_BMCInfo.IpmiConfig.ChassisTimerInterval)) { //log("Chassis interval\r\n"); preChassisSeconds = g_BMCInfo.CurTimerSecond; //TODO: //g_BMCInfo.PowerGoodFlag = 1; g_BMCInfo.IpmiConfig.ChassisPowerState.PowerState = g_BMCInfo.PowerGoodFlag; // ReqPkt.NetFnLUN = 0x2e<<2; // ReqPkt.Cmd = 0x01; // ReqPkt.Size = 0; // if(0 == API_BridgeInternal(&ReqPkt, &ResPkt, 0x40, 6)) // { // printf("---> Access 0x40 successful: "); // } // else // { // printf("---> Access 0x40 failed: "); // } // for(i=0;i0) { g_BMCInfo.ChassisIdentifyTimeout--; } } //恢复LED灯的状态 stm32_gpio_write(IDENTIFY_PORT, IDENTIFY_PIN, OldPinState); printf("Chassis Identify finish.\n"); pthread_exit(0); }