#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //for pow #include #include "../../define.h" //#define Debug struct SysConfigAndInfo *ShmSysConfigAndInfo; struct StatusCodeData *ShmStatusCodeData; #ifdef SystemLogMessage int StoreLogMsg(unsigned char *DataString) { unsigned char Buf[256]; time_t CurrentTime; struct tm *tm; memset(Buf,0,sizeof(Buf)); CurrentTime = time(NULL); tm=localtime(&CurrentTime); sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec, DataString, tm->tm_year+1900,tm->tm_mon+1); system(Buf); #ifdef Debug printf("%s \n",DataString); #endif } #endif int StoreEventLogMsg(unsigned char *EventCodeString) { unsigned char Buf[256]; time_t CurrentTime; struct tm *tm; memset(Buf,0,sizeof(Buf)); CurrentTime = time(NULL); tm=localtime(&CurrentTime); sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/EventLog/[%04d.%02d]EventLog", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec, EventCodeString, tm->tm_year+1900,tm->tm_mon+1); system(Buf); #ifdef Debug printf("%s \n",Buf); #endif } int DiffTimeb(struct timeb ST, struct timeb ET) { //return milli-second unsigned int StartTime,StopTime; StartTime=(unsigned int)ST.time; StopTime=(unsigned int)ET.time; return (StopTime-StartTime)*1000+ET.millitm-ST.millitm; } /**************************************************************************************/ /**************************Init all share memory *********************************/ /**************************************************************************************/ int InitShareMemory() { int MeterSMId; //creat ShmSysConfigAndInfo if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), 0777)) < 0) { #ifdef SystemLogMessage StoreLogMsg("[EventLogging]InitShareMemory:shmget ShmSysConfigAndInfo NG"); #endif return 0; } else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage StoreLogMsg("[EventLogging]InitShareMemory:shmat ShmSysConfigAndInfo NG"); #endif return 0; } //creat ShmStatusCodeData if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), 0777)) < 0) { #ifdef SystemLogMessage StoreLogMsg("[EventLogging]InitShareMemory:shmget ShmStatusCodeData NG"); #endif return 0; } else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1) { #ifdef SystemLogMessage StoreLogMsg("[EventLogging]InitShareMemory:shmat ShmStatusCodeData NG"); #endif return 0; } return 1; } int main(int argc,char *argv[]) { int ByteCount,BitCount; unsigned char tmp, EventCodeTmp[7]; //Initialization if(InitShareMemory()==0) { #ifdef SystemLogMessage StoreLogMsg("[EventLogging]main:InitShareMemory NG"); #endif if(ShmStatusCodeData!=NULL) { ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1; } sleep(5); return 0; } while(1) { //check Fault Status for(ByteCount=0;ByteCount<4;ByteCount++) { if(ShmStatusCodeData->FaultCode.FaultEvents.FaultVal[ByteCount] != ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount]) { tmp=ShmStatusCodeData->FaultCode.FaultEvents.FaultVal[ByteCount]; //prevent be modified during following process for(BitCount=0;BitCount<8;BitCount++) { if(((tmp>>BitCount)&0x01) != ((ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount]>>BitCount)&0x01)) { memset(EventCodeTmp,0,sizeof(EventCodeTmp)); memcpy(EventCodeTmp,FaultStatusCode[ByteCount*8+BitCount],sizeof(EventCodeTmp)-1); if(((tmp>>BitCount)&0x01)==0)//Recovered { EventCodeTmp[0]=1; ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount]&=(0<FaultCode.PreviousFaultVal[ByteCount]|=(1<AlarmCode.AlarmEvents.AlarmVal[ByteCount] != ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount]) { tmp=ShmStatusCodeData->AlarmCode.AlarmEvents.AlarmVal[ByteCount]; //prevent be modified during following process for(BitCount=0;BitCount<8;BitCount++) { if(((tmp>>BitCount)&0x01) != ((ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount]>>BitCount)&0x01)) { memset(EventCodeTmp,0,sizeof(EventCodeTmp)); memcpy(EventCodeTmp,AlarmStatusCode[ByteCount*8+BitCount],sizeof(EventCodeTmp)-1); if(((tmp>>BitCount)&0x01)==0)//Recovered { EventCodeTmp[0]=1; ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount]&=(0<AlarmCode.PreviousAlarmVal[ByteCount]|=(1<InfoCode.InfoEvents.InfoVal[ByteCount] != ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount]) { tmp=ShmStatusCodeData->InfoCode.InfoEvents.InfoVal[ByteCount]; //prevent be modified during following process for(BitCount=0;BitCount<8;BitCount++) { if(((tmp>>BitCount)&0x01) != ((ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount]>>BitCount)&0x01)) { memset(EventCodeTmp,0,sizeof(EventCodeTmp)); memcpy(EventCodeTmp,InfoStatusCode[ByteCount*8+BitCount],sizeof(EventCodeTmp)-1); if(((tmp>>BitCount)&0x01)==0)//Recovered { EventCodeTmp[0]=1; ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount]&=(0<InfoCode.PreviousInfoVal[ByteCount]|=(1<