12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072 |
- #include "../../define.h"
- #include "main.h"
- //==========================
- // System basic sample constant
- //==========================
- #define is_error(ptr) ((unsigned long)ptr > (unsigned long)-4000L)
- #define ARRAY_SIZE(A) (sizeof(A) / sizeof(A[0]))
- #define PASS 1
- #define FAIL -1
- #define YES 1
- #define NO 0
- #define ON 1
- #define OFF 0
- #define BUFFER_SIZE 128
- #define MtdBlockSize 0x300000
- #define TMR_IDX_CHECK_TASK 0
- #define EMSS_TEST_TASK 1
- #define BMS_Relay1_TASK 2
- #define BMS_Relay2_TASK 3
- #define BMS_Relay3_TASK 4
- #define BMS_Relay4_TASK 5
- #define BMS_BATDIS_TASK 6
- #define BMS_PREPARING_TASK 7
- int wtdFd = -1;
- int CanFd = -1;
- int pollingStep = 0;
- int ADC_Index=0;
- //==========================
- // Declare share memory
- //==========================
- struct SysConfigAndInfo *ShmSysConfigAndInfo;
- struct StatusCodeData *ShmStatusCodeData;
- struct BatteryInfoData *ShmBatteryInfo;
- struct EMSSInfoData *ShmEMSSInfo;
- struct timespec timerStartTime[10];
- struct SysConfigData SysConfigOrg;
- char *valid_Internet[2] = {"8.8.8.8", "180.76.76.76"};
- //=================================
- // Common routine
- //=================================
- int StoreLogMsg(const char *fmt, ...)
- {
- char Buf[4096+256];
- char buffer[4096];
- time_t CurrentTime;
- struct tm *tm;
- struct timeval tv;
- va_list args;
- va_start(args, fmt);
- int rc = vsnprintf(buffer, sizeof(buffer), fmt, args);
- va_end(args);
- memset(Buf,0,sizeof(Buf));
- CurrentTime = time(NULL);
- tm=localtime(&CurrentTime);
- gettimeofday(&tv, NULL); // get microseconds, 10^-6
- sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%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,tv.tv_usec,
- buffer,
- tm->tm_year+1900,tm->tm_mon+1);
- #ifdef SystemLogMessage
- system(Buf);
- #endif
- #ifdef ConsloePrintLog
- printf("[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec, buffer);
- #endif
- return rc;
- }
- void substr(char *dest, const char* src, unsigned int start, unsigned int cnt)
- {
- strncpy(dest, src + start, cnt);
- dest[cnt] = 0;
- }
- void refreshStartTimer(struct timespec *timer)
- {
- clock_gettime(CLOCK_MONOTONIC, timer);
- }
- int getDiffSecNow(struct timespec timer)
- {
- struct timespec timerNow;
- clock_gettime(CLOCK_MONOTONIC, &timerNow);
- return (int)((((unsigned long)(timerNow.tv_sec - timer.tv_sec) * 1000) + ((unsigned long)((timerNow.tv_nsec / 1000000) - (timer.tv_nsec / 1000000))))/1000);
- }
- int getDiffSecBetween(struct timespec start, struct timespec end)
- {
- return (int)((((unsigned long)(end.tv_sec - start.tv_sec) * 1000) + ((unsigned long)((end.tv_nsec / 1000000) - (start.tv_nsec / 1000000))))/1000);
- }
- int getEth0MacAddress()
- {
- int result = PASS;
- FILE *fp;
- char cmd[256];
- char buf[512];
- char tmp[512];
- strcpy(cmd, "ifconfig eth0");
- fp = popen(cmd, "r");
- if(fp != NULL)
- {
- while(fgets(buf, sizeof(buf), fp) != NULL)
- {
- if(strstr(buf, "eth0") > 0)
- {
- result = PASS;
- }
- if(strstr(buf, "eth0 Link encap:Ethernet HWaddr") > 0)
- {
- sscanf(buf, "%*s%*s%*s%*s%s", tmp);
- strcpy((char*)ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthMacAddress, tmp);
- }
- }
- }
- pclose(fp);
- return result;
- }
- //======================================================
- // Network interface related function
- //======================================================
- int isInterfaceUp(const char *interface)
- {
- int result = FAIL;
- FILE *fp;
- char cmd[256];
- char buf[512];
- strcpy(cmd, "ifconfig");;
- fp = popen(cmd, "r");
- if(fp != NULL)
- {
- while(fgets(buf, sizeof(buf), fp) != NULL)
- {
- if(strstr(buf, interface) > 0)
- {
- result = PASS;
- }
- }
- }
- pclose(fp);
- return result;
- }
- int isReachableInternet()
- {
- int result = FAIL;
- FILE *fp;
- char cmd[256];
- char buf[512];
- char tmp[512];
- // Get ip address & net mask
- strcpy(cmd, "ifconfig eth0");
- fp = popen(cmd, "r");
- if (fp != NULL)
- {
- while(fgets(buf, sizeof(buf), fp) != NULL)
- {
- if (strstr(buf, "inet addr:") > 0)
- {
- sscanf(buf, "%*s%s", tmp);
- substr(tmp, tmp, strspn(tmp, "addr:"), strlen(buf)-strspn(tmp, "addr:"));
- if (strcmp(tmp, (char *)ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress) != 0)
- {
- strcpy((char *) ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress, tmp);
- }
- sscanf(buf, "%*s%*s%*s%s", tmp);
- substr(tmp, tmp, strspn(tmp, "Mask:"), strlen(buf)-strspn(tmp, "Mask:"));
- if (strcmp(tmp, (char *)ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress) != 0)
- {
- strcpy((char *) ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress, tmp);
- }
- }
- }
- }
- pclose(fp);
- memset(buf, 0x00, sizeof(buf));
- // Get gateway
- fp = popen("ip route", "r");
- if(fp == NULL)
- result = FAIL;
- else
- {
- while(fgets(buf, sizeof(buf), fp) != NULL)
- {
- if((strstr(buf, "default") != NULL) && (strstr(buf, "eth0") != NULL))
- break;
- }
- if(strstr(buf, "default") != NULL)
- {
- sscanf(buf, "%*s%*s%s", tmp);
- substr((char*)ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress, tmp, 0, strlen(tmp));
- }
- }
- pclose(fp);
- memset(buf, 0x00, sizeof(buf));
- for(int idx=0;idx<ARRAY_SIZE(valid_Internet);idx++)
- {
- sprintf(cmd, "ping -c 1 -w 3 -I eth0 %s", valid_Internet[idx]);
- fp = popen(cmd, "r");
- if(fp != NULL)
- {
- while(fgets(buf, sizeof(buf), fp) != NULL)
- {
- if(strstr(buf, "transmitted") > 0)
- {
- //sscanf(buf, "%*s%*s%*s%*s%*s%*s%s", tmp);
- if(strstr(buf,"100%") != NULL)
- {
- }
- else
- {
- result = PASS;
- }
- //DEBUG_INFO("%s",buf);
- //DEBUG_INFO("%s\n",tmp);
- }
- }
- }
- pclose(fp);
- }
- return result;
- }
- int isRouteFail()
- {
- int result = YES;
- FILE *fp;
- char buf[512];
- fp = popen("route -n", "r");
- if(fp != NULL)
- {
- while(fgets(buf, sizeof(buf), fp) != NULL)
- {
- if(strstr(buf, "eth0") != NULL)
- result = NO;
- }
- }
- pclose(fp);
- return result;
- }
- //======================================================
- // Create all share memory
- //======================================================
- int CreatShareMemory()
- {
- int result = PASS;
- int MeterSMId;
- //creat ShmSysConfigAndInfo
- if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0)
- {
- DEBUG_ERROR("shmget ShmSysConfigAndInfo NG\n");
- result = FAIL;
- }
- else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
- {
- DEBUG_ERROR("shmat ShmSysConfigAndInfo NG\n");
- result = FAIL;
- }
- memset(ShmSysConfigAndInfo,0,sizeof(struct SysConfigAndInfo));
- //creat ShmStatusCodeData
- if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0)
- {
- DEBUG_ERROR("shmget ShmStatusCodeData NG\n");
- result = FAIL;
- }
- else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
- {
- DEBUG_ERROR("shmat ShmStatusCodeData NG\n");
- result = FAIL;
- }
- memset(ShmStatusCodeData, 0, sizeof(struct StatusCodeData));
- //creat ShmBatteryInfo
- if ((MeterSMId = shmget(ShmBatteryInfoKey, sizeof(struct BatteryInfoData), IPC_CREAT | 0777)) < 0)
- {
- DEBUG_ERROR("shmget ShmBatteryInfo NG\n");
- result = FAIL;
- }
- else if ((ShmBatteryInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
- {
- DEBUG_ERROR("shmat ShmBatteryInfo NG\n");
- result = FAIL;
- }
- memset(ShmBatteryInfo,0,sizeof(struct BatteryInfoData));
- //creat ShmEMSSInfo
- if ((MeterSMId = shmget(ShmEMSSInfoKey, sizeof(struct EMSSInfoData), IPC_CREAT | 0777)) < 0)
- {
- DEBUG_ERROR("shmget ShmEMSSInfo NG\n");
- result = FAIL;
- }
- else if ((ShmEMSSInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
- {
- DEBUG_ERROR("shmat ShmEMSSInfo NG\n");
- result = FAIL;
- }
- memset(ShmEMSSInfo,0,sizeof(struct EMSSInfoData));
- return result;
- }
- int LoadSysConfigAndInfo(struct SysConfigData *ptr)
- {
- int fd,wrd;
- unsigned char *buf;
- unsigned int ChkSum,ChkSumOrg;
- if((buf=malloc(MtdBlockSize))==NULL)
- {
- DEBUG_ERROR("malloc buffer NG,rebooting..\n");
- if(ShmStatusCodeData!=NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- memset(buf, 0, MtdBlockSize);
- //================================================
- // Load configuration from mtdblock10
- //================================================
- system("nanddump /dev/mtd10 -f /mnt/EvseConfig.bin");
- fd = open("/mnt/EvseConfig.bin", O_RDWR);
- if (fd < 0)
- {
- free(buf);
- DEBUG_ERROR("open mtdblock10 NG,rebooting..\n");
- if(ShmStatusCodeData!=NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- wrd=read(fd, buf, MtdBlockSize);
- close(fd);
- if(wrd<MtdBlockSize)
- {
- free(buf);
- DEBUG_ERROR("read SysConfigData data NG,rebooting..\n");
- if(ShmStatusCodeData!=NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- ChkSum=0;
- for(wrd=ARRAY_SIZE(ptr->CsuBootLoadFwRev);wrd<MtdBlockSize-4;wrd++)
- {
- ChkSum+=buf[wrd];
- }
- memcpy(&ChkSumOrg,buf+(MtdBlockSize-4),sizeof(ChkSumOrg));
- memcpy(&ptr->ModelName,buf+(ARRAY_SIZE(ptr->CsuBootLoadFwRev)),ARRAY_SIZE(ptr->ModelName));
- memcpy(&ptr->SerialNumber,buf+(ARRAY_SIZE(ptr->CsuBootLoadFwRev)+ARRAY_SIZE(ptr->ModelName)+ARRAY_SIZE(ptr->AcModelName)),ARRAY_SIZE(ptr->SerialNumber));
- //================================================
- // Load configuration from mtdblock11
- //================================================
- if(ChkSum!=ChkSumOrg)
- {
- DEBUG_ERROR("Primary SysConfigData checksum NG, read backup\n");
- system("nanddump /dev/mtd11 -f /mnt/EvseConfig.bin");
- fd = open("/mnt/EvseConfig.bin", O_RDWR);
- if (fd < 0)
- {
- free(buf);
- DEBUG_ERROR("open mtdblock11 (backup) NG,rebooting..\n");
- if(ShmStatusCodeData!=NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- memset(buf, 0, MtdBlockSize);
- wrd=read(fd, buf,MtdBlockSize);
- close(fd);
- if(wrd<MtdBlockSize)
- {
- free(buf);
- DEBUG_ERROR("read backup SysConfigData data NG,rebooting..\n");
- if(ShmStatusCodeData!=NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- ChkSum=0;
- for(wrd=ARRAY_SIZE(ptr->CsuBootLoadFwRev);wrd<MtdBlockSize-4;wrd++)
- {
- ChkSum+=buf[wrd];
- }
- memcpy(&ChkSumOrg,buf+(MtdBlockSize-4),sizeof(ChkSumOrg));
- //================================================
- // Load configuration from mtdblock12 (Factory default)
- //================================================
- if(ChkSum!=ChkSumOrg)
- {
- DEBUG_WARN("backup SysConfigData checksum NG, read Factory default\n");
- system("nanddump /dev/mtd12 -f /mnt/EvseConfig.bin");
- fd = open("/mnt/EvseConfig.bin", O_RDWR);
- if (fd < 0)
- {
- DEBUG_ERROR("open mtdblock12 (Factory default) NG,rebooting..\n");
-
- free(buf);
- if(ShmStatusCodeData!=NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- memset(buf, 0, MtdBlockSize);
- wrd=read(fd, buf,MtdBlockSize);
- close(fd);
- if(wrd<MtdBlockSize)
- {
- DEBUG_ERROR("read factory default SysConfigData data NG,rebooting..\n");
-
- free(buf);
- if(ShmStatusCodeData!=NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- ChkSum=0;
- for(wrd=ARRAY_SIZE(ptr->CsuBootLoadFwRev);wrd<MtdBlockSize-4;wrd++)
- {
- ChkSum+=buf[wrd];
- }
- memcpy(&ChkSumOrg,buf+(MtdBlockSize-4),sizeof(ChkSumOrg));
- memcpy(buf+(ARRAY_SIZE(ptr->CsuBootLoadFwRev)), &ptr->ModelName, ARRAY_SIZE(ptr->ModelName));
- memcpy(buf+(ARRAY_SIZE(ptr->CsuBootLoadFwRev)+ARRAY_SIZE(ptr->ModelName)+ARRAY_SIZE(ptr->AcModelName)), &ptr->SerialNumber, ARRAY_SIZE(ptr->SerialNumber));
- if(ChkSum!=ChkSumOrg)
- {
- DEBUG_WARN("factory default SysConfigData checksum NG, restore factory default\n");
- free(buf);
- system("cd /root;./Module_FactoryConfig -m");
- system("rm -f /Storage/OCPP/OCPPConfiguration");
- system("sync");
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- return FAIL;
- }
- }
- }
- //load OK
- memcpy((struct SysConfigData *)ptr,buf,sizeof(struct SysConfigData));
- free(buf);
- system("rm -f /mnt/EvseConfig.bin");
-
- // SysConfig in flash is empty (0xffffffff)
- if((strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) > ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.ModelName)) ||
- (strlen((char*)ShmSysConfigAndInfo->SysConfig.SerialNumber) > ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.SerialNumber)) ||
- (strlen((char*)ShmSysConfigAndInfo->SysConfig.SystemId) > ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.SystemId)) ||
- (ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient == 0xff))
- {
- if(strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) > ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.ModelName))
- {
- memset(ShmSysConfigAndInfo->SysConfig.ModelName, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.ModelName));
- }
- if(strlen((char*)ShmSysConfigAndInfo->SysConfig.SerialNumber) > ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.SerialNumber))
- {
- memset(ShmSysConfigAndInfo->SysConfig.SerialNumber, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.SerialNumber));
- }
- if(strlen((char*)ShmSysConfigAndInfo->SysConfig.SystemId) > ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.SystemId))
- {
- memset(ShmSysConfigAndInfo->SysConfig.SystemId, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.SystemId));
- }
- if(ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient == 0xff)
- {
- DEBUG_INFO("Ethernet dhcp config is null.\n");
- }
- if(strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) == 0x00)
- {
- DEBUG_INFO("Model name over length.\n");
- }
- if(strlen((char*)ShmSysConfigAndInfo->SysConfig.SerialNumber) == 0x00)
- {
- DEBUG_INFO("Model serial number over length.\n");
- }
- if(strlen((char*)ShmSysConfigAndInfo->SysConfig.SystemId) == 0x00)
- {
- DEBUG_INFO("SystemId over length.\n");
- }
- system("cd /root;./Module_FactoryConfig -m");
- sleep(3);
- system("/usr/bin/run_evse_restart.sh");
- }
- DEBUG_INFO("Load SysConfigData OK\n");
- return PASS;
- }
- int StoreUsrConfigData(struct SysConfigData *UsrData)
- {
- int result = PASS;
- int fd,wrd;
- unsigned int i,Chk;
- unsigned char *ptr, *BufTmp;
- Chk=0;
- ptr=(unsigned char *)UsrData;
- if((BufTmp=malloc(MtdBlockSize))!=NULL)
- {
- memset(BufTmp,0,MtdBlockSize);
- memcpy(BufTmp,ptr,sizeof(struct SysConfigData));
- for(i=0;i<MtdBlockSize-4;i++)
- Chk+=*(BufTmp+i);
- memcpy(BufTmp+MtdBlockSize-4, &Chk, 4);
- // Output configuration to file.
- fd = open("/mnt/EvseConfig.bin", O_RDWR|O_CREAT);
- if (fd < 0)
- {
- DEBUG_ERROR("open /mnt/EvseConfig.bin NG\n");
- free(BufTmp);
- return 0;
- }
- wrd=write(fd, BufTmp, MtdBlockSize);
- close(fd);
- if(wrd<MtdBlockSize)
- {
- DEBUG_ERROR("write /mnt/EvseConfig.bin NG\n");
- free(BufTmp);
- return 0;
- }
- DEBUG_INFO("EvseConfig write to file in /mnt OK.\n");
- DEBUG_INFO("Erase /dev/mtd10.\n");
- runShellCmd("flash_erase /dev/mtd10 0 0");
- DEBUG_INFO("Write /dev/mtd10.\n");
- runShellCmd("nandwrite -p /dev/mtd10 /mnt/EvseConfig.bin");
- DEBUG_INFO("Erase /dev/mtd11.\n");
- runShellCmd("flash_erase /dev/mtd11 0 0");
- DEBUG_INFO("Write /dev/mtd11.\n");
- runShellCmd("nandwrite -p /dev/mtd11 /mnt/EvseConfig.bin");
- system("rm -f /mnt/EvseConfig.bin");
- DEBUG_INFO("EvseConfig write to flash OK\n");
- }
- else
- {
- DEBUG_ERROR("alloc BlockSize NG\r\n");
- result = FAIL;
- }
- if(BufTmp!=NULL)
- free(BufTmp);
- return result;
- }
- // GOPIO
- const int System_GPIO_Pin_Table[ ] =
- {
- PIN_IO_BD1_1, PIN_IO_BD1_2, PIN_IO_BD2_1, PIN_IO_BD2_2, PIN_ID_BD1_1, PIN_ID_BD1_2, PIN_ID_BD2_1,
- PIN_ID_BD2_2, PIN_AM_RFID_RST, PIN_AM_RFID_ICC, PIN_BOARD1_PROXIMITY, PIN_BOARD2_PROXIMITY, PIN_AM_DE_1, PIN_AM_RE_1, PIN_ENG_BNT
- };
- void gpio_export(int pin)
- {
- char buffer[64];
- snprintf(buffer, sizeof(buffer), "echo %d > /sys/class/gpio/export", pin);
- system(buffer);
- }
- void gpio_unexport(int pin)
- {
- char buffer[64];
- snprintf(buffer, sizeof(buffer), "echo %d > /sys/class/gpio/unexport", pin);
- system(buffer);
- }
- void gpio_set_direction(int pin, unsigned char dir)
- {
- /*
- char buffer[64];
- snprintf(buffer, sizeof(buffer), "echo %s > /sys/class/gpio/gpio%d/direction", dir == GPIO_DIR_INPUT ? "in" : "out", pin);
- system(buffer);
- */
- int fd;
- char buffer[64];
- snprintf(buffer, sizeof(buffer), "/sys/class/gpio/gpio%d/direction", pin);
- fd = open(buffer, O_WRONLY);
- if (fd < 0)
- {
- gpio_export(pin);
- fd = open(buffer, O_WRONLY);
- if(fd < 0)
- {
- printf("\r\nFailed to open gpio%d direction for writing!", pin);
- return;
- }
- }
- write(fd, dir == GPIO_DIR_INPUT ? "in" : "out", dir == GPIO_DIR_INPUT ? 2 : 3);
- close(fd);
- }
- void gpio_write(int pin, unsigned char value)
- {
- char buffer[64];
- snprintf(buffer, sizeof(buffer), "echo %d > /sys/class/gpio/gpio%d/value", value > 0 ? 1 : 0, pin);
- system(buffer);
- }
- int gpio_read(int pin)
- {
- int fd, value = 0;
- char ch;
- char buffer[64];
- snprintf(buffer, sizeof(buffer), "/sys/class/gpio/gpio%d/value", pin);
- fd = open(buffer, O_RDONLY);
- if (fd < 0)
- {
- return -1;
- }
- if (read(fd, &ch, 4) < 0)
- {
- return -1;
- }
- value = atoi(&ch);
- close(fd);
- return value;
- }
- void InitIO(void)
- {
- printf("GPIO INIT \n");
- /* GPMC_AD8 => GPIO0_22 *//*ID BD1_1*/
- gpio_set_direction(PIN_ID_BD1_1, GPIO_DIR_OUTPUT);
- gpio_write(PIN_ID_BD1_1, 0);
- /* GPMC_AD9 => GPIO0_23 *//*ID BD1_2*/
- gpio_set_direction(PIN_ID_BD1_2, GPIO_DIR_OUTPUT);
- gpio_write(PIN_ID_BD1_2, 0);
- /* GPMC_AD10 => GPIO0_26 *//*IO BD1_1*/
- gpio_set_direction(PIN_IO_BD1_1, GPIO_DIR_OUTPUT);
- gpio_write(PIN_IO_BD1_1, 0);
- /* GPMC_AD11 => GPIO0_27 *//*IO BD1_2*/
- //gpio_set_direction(PIN_IO_BD1_2, GPIO_DIR_OUTPUT);
- //gpio_write(PIN_IO_BD1_2, 0);
- /* GPMC_AD12 => GPIO1_12 *//*ID BD2_1*/
- gpio_set_direction(PIN_ID_BD2_1, GPIO_DIR_OUTPUT);
- gpio_write(PIN_ID_BD2_1, 0);
- /* GPMC_AD13 => GPIO1_13 *//*ID BD2_2*/
- gpio_set_direction(PIN_ID_BD2_2, GPIO_DIR_OUTPUT);
- gpio_write(PIN_ID_BD2_2, 0);
- /* GPMC_AD14 => GPIO1_14 *//*IO BD2_1*/
- gpio_set_direction(PIN_IO_BD2_1, GPIO_DIR_OUTPUT);
- gpio_write(PIN_IO_BD2_1, 0);
- /* GPMC_AD15 => GPIO1_15 *//*IO BD2_2*/
- gpio_set_direction(PIN_IO_BD2_2, GPIO_DIR_OUTPUT);
- gpio_write(PIN_IO_BD2_2, 0);
- /*XDMA_EVENT_INTR0 => GPIO0_19 *//*AM_RFID_RST*/
- gpio_set_direction(PIN_AM_RFID_RST, GPIO_DIR_OUTPUT);
- gpio_write(PIN_AM_RFID_RST, 0);
- /*XDMA_EVENT_INTR1 => GPIO0_20 *//*AM_RFID_ICC*/
- gpio_set_direction(PIN_AM_RFID_ICC, GPIO_DIR_OUTPUT);
- gpio_write(PIN_AM_RFID_ICC, 0);
- gpio_set_direction(PIN_BOARD1_PROXIMITY, GPIO_DIR_INPUT);
- gpio_set_direction(PIN_BOARD2_PROXIMITY, GPIO_DIR_INPUT);
- /* GPIO3_15 */ /*ENG_BNT_DET*/
- gpio_set_direction(PIN_ENG_BNT, GPIO_DIR_INPUT);
- gpio_set_direction(PIN_IO_BD1_2, GPIO_DIR_INPUT);
- #if 0
-
- if(gpio_read(PIN_AM_RFID_RST) == 1)
- {
- printf("PIN_AM_RFID_RST Test OK\n");
- }else
- {
- printf("PIN_AM_RFID_RST Low Test 0\n");
-
- }
- if(gpio_read(PIN_AM_RFID_ICC) == 1)
- {
- printf("PIN_AM_RFID_ICC Test OK\n");
- }else
- {
- printf("PIN_AM_RFID_ICC Low Test 0\n");
-
- }
- #endif
- }
- // ADC
- int adc_read(int adc_port)
- {
- int fd, value = 0;
- char ch[5];
- char buffer[64];
- snprintf(buffer,sizeof(buffer), "/sys/bus/iio/devices/iio\:device0/in_voltage%d_raw", adc_port);
- fd = open(buffer, O_RDONLY);
- if(fd < 0)
- {
- return -1;
- }
- if(read(fd, ch, 4) < 0)
- {
- return -1;
- }
- value = atoi(ch);
- printf("\r\nAIN%d = %d",adc_port,value);
- close(fd);
- return value;
- }
- void DoIOTest(void)
- {
- int ADC_Value=0;
- #if 1
- if(gpio_read(PIN_ID_BD1_1) == 1)
- {
- printf("\r\nPIN_ID_BD1_1 HIGH");
- }
- usleep(5000);
- if(gpio_read(PIN_IO_BD1_1) == 1)
- {
- printf("\r\nPIN_IO_BD1_1 HIGH");
- }
- usleep(5000);
- if(gpio_read(PIN_ID_BD2_1) == 1)
- {
- printf("\r\nPIN_ID_BD2_1 HIGH");
- }
- if(gpio_read(PIN_AM_RFID_RST) == 1)
- {
- printf("\r\PIN_AM_RFID_RST HIGH");
- }
- usleep(5000);
- if(gpio_read(PIN_AM_RFID_ICC) == 1)
- {
- printf("\r\PIN_AM_RFID_ICC HIGH");
- }
- usleep(5000);
- if(gpio_read(PIN_IO_BD2_2) == 1)
- {
- printf("\r\PIN_IO_BD2_2 HIGH");
- }
- #endif
- usleep(5000);
- if(gpio_read(PIN_IO_BD2_1) == 1)
- {
- printf("\r\PIN_IO_BD2_1 HIGH");
- }
-
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- {
- printf("\r\nRelay1 CLOSE OK");
- }
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- {
- printf("\r\nRelay2 CLOSE OK");
- }
- if(gpio_read(PIN_ENG_BNT) == 0)
- {
- printf("\r\nRelay3 CLOSE OK");
- }
- if(gpio_read(PIN_IO_BD1_2) == 0)
- {
- printf("\r\nRelay4 CLOSE OK");
- }
-
- ADC_Value=adc_read(ADC_Index);
- printf("\r\nAIN%d = %d",ADC_Index,ADC_Value);
- ADC_Index++;
- if(ADC_Index>=4)
- ADC_Index=0;
- #if 0
- for(ADC_Index=0;ADC_Index<4;ADC_Index++)
- {
- ADC_Value=adc_read(ADC_Index);
- printf("\r\nAIN%d = %d",ADC_Index,ADC_Value);
- usleep(10000);
- }
-
- //usleep(100000);
- if(adc_read(ADC_AIN0) < 100 && adc_read(ADC_AIN1) < 100 && adc_read(ADC_AIN2) < 100 && adc_read(ADC_AIN3) < 100)
- {
- gpio_write(PIN_AM_RFID_ICC, 0);
- usleep(100000);
- if(adc_read(ADC_AIN0) > 4000 && adc_read(ADC_AIN1) > 4000 && adc_read(ADC_AIN2) > 4000 && adc_read(ADC_AIN3) > 4000)
- {
- printf("\r\nAIN0, AIN1, AIN2, AIN3 Test OK");
- }
- else
- {
- printf("\r\nAIN0, AIN1, AIN2, AIN3 High Test Fail");
- return;
- }
- }
- else
- {
- printf("\r\nAIN0, AIN1, AIN2, AIN3 Low Test Fail");
- return;
- }
- gpio_write(PIN_AM_OK_FLAG, 1);
- #endif
- printf("\r\nIO Test Done!");
- printf("\r\nSuccess!\r\n");
- }
- void InitEthernet()
- {
- pid_t pid;
- uint8_t cnt_pingDNS_Fail;
- char tmpbuf[256];
- //Init Eth0 for internet
- memset(tmpbuf,0,256);
- strcpy(ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,"192.168.2.21");
- strcpy(ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress,"255.255.255.0");
- sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up &",
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
- DEBUG_INFO("eth0 config as ip: %s, netmask: %s\n", ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
- system(tmpbuf);
- memset(tmpbuf,0,256);
- sprintf(tmpbuf,"route add default gw %s eth0 &",
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
- system(tmpbuf);
- system("ifconfig lo up &");
- system("/sbin/ifconfig eth0:1 192.168.201.201 netmask 255.255.255.248 up &");
- //system("/sbin/ethtool -s eth0 speed 10 duplex full autoneg off");
- //Run DHCP client if enabled
- system("killall udhcpc");
- system("rm -rf /etc/resolv.conf");
- system("echo nameserver 8.8.8.8 >> /etc/resolv.conf"); //Google DNS server
- system("echo nameserver 180.76.76.76 >> /etc/resolv.conf"); //Baidu DNS server
- if(ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0)
- {
- sprintf(tmpbuf, "/sbin/udhcpc -i eth0 -x hostname:CSU3_%s -s /root/dhcp_script/eth0.script > /dev/null &", ShmSysConfigAndInfo->SysConfig.SystemId);
- system(tmpbuf);
- }
- // Upgrade system id to /etc/hostname
- sprintf(tmpbuf, "echo %s > /etc/hostname", ShmSysConfigAndInfo->SysConfig.SystemId);
- system(tmpbuf);
- // Ethernet MAC address
- getEth0MacAddress();
- //check internet status
- pid = fork();
- if(pid == 0)
- {
- for(;;)
- {
- if(isRouteFail())
- {
- //DEBUG_ERROR("eth0 not in route, restart eth0.\n");
- system("/sbin/ifconfig eth0 down;/sbin/ifconfig eth0 up");
- if((ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0))
- {
- system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
- sprintf(tmpbuf, "/sbin/udhcpc -i eth0 -x hostname:CSU3_%s -s /root/dhcp_script/eth0.script > /dev/null &", ShmSysConfigAndInfo->SysConfig.SystemId);
- system(tmpbuf);
- }
- else
- {
- system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
- memset(tmpbuf,0,256);
- sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up &",
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
- system(tmpbuf);
- memset(tmpbuf,0,256);
- sprintf(tmpbuf,"route add default gw %s eth0 &",
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
- system(tmpbuf);
- }
- }
- if(isReachableInternet() == PASS)
- {
- ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet=OFF;
- cnt_pingDNS_Fail = 0;
- }
- else
- {
- if(cnt_pingDNS_Fail >= 3)
- {
- ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet=ON;
- if((ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0))
- {
- system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
- sprintf(tmpbuf, "/sbin/udhcpc -i eth0 -x hostname:CSU3_%s -s /root/dhcp_script/eth0.script > /dev/null &", ShmSysConfigAndInfo->SysConfig.SystemId);
- system(tmpbuf);
- }
- else
- {
- system("pgrep -f \"udhcpc -i eth0\" | xargs kill");
- memset(tmpbuf,0,256);
- sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up &",
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
- system(tmpbuf);
- memset(tmpbuf,0,256);
- sprintf(tmpbuf,"route add default gw %s eth0 &",
- ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
- system(tmpbuf);
- }
- cnt_pingDNS_Fail = 0;
- }
- else
- {
- cnt_pingDNS_Fail++;
- }
- }
- if(ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet &&
- ((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 0) || ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi) &&
- ((ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomEnabled == 0) || ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi))
- {
- ShmSysConfigAndInfo->SysInfo.InternetConn = OFF;
- }
- else
- {
- ShmSysConfigAndInfo->SysInfo.InternetConn = ON;
- }
- //============================================================
- // Priority for internet 0 : First / 1 : Second / 2: Third
- //============================================================
- if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet)
- {
- system("/sbin/ifmetric eth0 0");
- if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
- {
- system("/sbin/ifmetric mlan0 1");
- }
- if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
- {
- system("/sbin/ifmetric ppp0 2");
- }
- }
- else if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi)
- {
- if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
- {
- system("/sbin/ifmetric eth0 1");
- system("/sbin/ifmetric mlan0 0");
- }
- if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
- {
- system("/sbin/ifmetric ppp0 2");
- }
- }
- else if(!ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi)
- {
- if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
- {
- system("/sbin/ifmetric mlan0 2");
- }
- if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D'))
- {
- system("/sbin/ifmetric eth0 1");
- system("/sbin/ifmetric ppp0 0");
- }
- }
- else
- {}
- sleep(5);
- }
- }
- DEBUG_INFO("Initial Ethernet OK\n");
- }
- int InitWatchDog()
- {
- int fd;
- int timeout = 330;
- system("/usr/bin/fuser -k /dev/watchdog");
- sleep(1);
- system("echo V > /dev/watchdog");
- sleep(1);
- fd=open("/dev/watchdog", O_RDWR);
- if(fd<=0)
- {
- DEBUG_ERROR("System watch dog initial fail.\n");
- }
- ioctl(fd, _IOWR('W', 6, int), &timeout);
- return fd;
- }
- int InitCanBus()
- {
- int s0,nbytes;
- struct timeval tv;
- struct ifreq ifr0;
- struct sockaddr_can addr0;
- system("/sbin/ip link set can1 down");
- system("/sbin/ip link set can1 type can bitrate 250000 restart-ms 100");
- system("/sbin/ip link set can1 up");
- s0 = socket(PF_CAN, SOCK_RAW, CAN_RAW);
- tv.tv_sec = 0;
- tv.tv_usec = 10000;
- if (setsockopt(s0, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)) < 0)
- {
- DEBUG_ERROR("Set SO_RCVTIMEO NG");
- }
- nbytes=40960;
- if (setsockopt(s0, SOL_SOCKET, SO_RCVBUF, &nbytes, sizeof(int)) < 0)
- {
- DEBUG_ERROR("Set SO_RCVBUF NG");
- }
- nbytes=40960;
- if (setsockopt(s0, SOL_SOCKET, SO_SNDBUF, &nbytes, sizeof(int)) < 0)
- {
- DEBUG_ERROR("Set SO_SNDBUF NG");
- }
- strcpy(ifr0.ifr_name, "can1" );
- ioctl(s0, SIOCGIFINDEX, &ifr0); /* ifr.ifr_ifindex gets filled with that device's index */
- addr0.can_family = AF_CAN;
- addr0.can_ifindex = ifr0.ifr_ifindex;
- bind(s0, (struct sockaddr *)&addr0, sizeof(addr0));
- return s0;
- }
- int Initialization()
- {
- int result = PASS;
- InitEthernet();
- if((wtdFd = InitWatchDog()) == FAIL)
- {
- DEBUG_ERROR("Watchdog initial fail.\n");
- result = FAIL;
- }
- #if 0
- CanFd = InitCanBus();
- if(result == PASS)
- DEBUG_INFO("Initialization OK.\n");
- else
- DEBUG_INFO("Initialization Fail.\n");
- #endif
- InitIO();
- return result;
- }
- //=====================================================
- // System common routine
- //=====================================================
- char* getSystemModeName(unsigned char mode)
- {
- char* result;
- switch(mode)
- {
- case SYS_MODE_BOOTING:
- result = "booting";
- break;
- case SYS_MODE_IDLE:
- result = "idle";
- break;
- case SYS_MODE_AUTHORIZING:
- result = "authorizing";
- break;
- case SYS_MODE_PREPARING:
- result = "preparing";
- break;
- case SYS_MODE_CHARGING:
- result = "charging";
- break;
- case SYS_MODE_TERMINATING:
- result = "terminating";
- break;
- case SYS_MODE_COMPLETE:
- result = "complete";
- break;
- case SYS_MODE_ALARM:
- result = "alarm";
- break;
- case SYS_MODE_FAULT:
- result = "fault";
- break;
- case SYS_MODE_MAINTAIN:
- result = "maintain";
- break;
- case SYS_MODE_RESERVATION:
- result = "reservation";
- break;
- case SYS_MODE_BOOKING:
- result = "booking";
- break;
- case SYS_MODE_DEBUG:
- result = "debug";
- break;
- case SYS_MODE_UPDATE:
- result = "upgrade";
- break;
- case SYS_MODE_BATTERY_CHARGE:
- result = "battery charging";
- break;
- case SYS_MODE_BATTERY_DISCHARGE:
- result = "battery discharging";
- break;
- case SYS_MODE_BATTERY_ALARM:
- result = "battery alarm";
- break;
- default:
- result = "unknown";
- break;
- }
- return result;
- }
- void setChargerMode(unsigned char mode)
- {
- ShmEMSSInfo->PreviousSystemStatus = ShmEMSSInfo->SystemStatus;
- ShmEMSSInfo->SystemStatus = mode;
- //DEBUG_INFO("System mode switch from %s to %s\n", getSystemModeName(ShmBatteryInfo->PreviousSystemStatus), getSystemModeName(ShmBatteryInfo->SystemStatus));
- printf("System mode switch from %s to %s\n", getSystemModeName(ShmEMSSInfo->PreviousSystemStatus), getSystemModeName(ShmEMSSInfo->SystemStatus));
- }
- unsigned char isMode(unsigned char mode)
- {
- return ((ShmEMSSInfo->SystemStatus == mode)?YES:NO);
- }
- unsigned char isModeChange()
- {
- unsigned char result = NO;
- if(!isMode(ShmEMSSInfo->PreviousSystemStatus))
- {
- result = YES;
- ShmEMSSInfo->PreviousSystemStatus = ShmEMSSInfo->SystemStatus;
- }
- return result;
- }
- //==========================================
- // Check routine
- //==========================================
- void checkTask()
- {
- /*
- * TODO:
- * 1. What task main need to monitor
- */
- if((system("pidof -s Module_Dispenser > /dev/null") != 0))
- {
- DEBUG_INFO("Module_Dispenser not running, restart it.\n");
- //system ("/root/Module_Dispenser &");
- }
- }
- int SpawnTask()
- {
- system("/root/EMSS_BMSComm &");
- system("/root/EMSS_InternalComm &");
- //system("/root/Module_EvComm &");
- //system("/root/Module_LcmControl &");
- //system("/root/Module_InternalComm &");
- //system("/root/Module_PsuComm &");
- return PASS;
- }
- void KillTask()
- {
- system("killall EMSS_BMSComm");
- system("killall EMSS_InternalComm");
- //system("killall Module_EvComm");
- //system("killall Module_LcmControl");
- //system("killall Module_InternalComm");
- }
- void AllRelay_OFF()
- {
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- Relay1_off;
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- Relay2_off;
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
- if(gpio_read(PIN_IO_BD1_2) == 0)
- Relay4_off;
-
- }
- //======================================================
- // Main process
- //======================================================
- int main(void)
- {
- //==================================================
- // Create all share memory
- //==================================================
- if(CreatShareMemory() == FAIL)
- {
- DEBUG_ERROR("Create ShareMemory NG\n");
- if(ShmStatusCodeData != NULL)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
- }
- sleep(5);
- system("reboot -f");
- sleep(5);
- system("reboot -f");
- }
- else
- {
- //LoadSysConfigAndInfo(&ShmSysConfigAndInfo->SysConfig);
- //DEBUG_INFO("Create ShareMemory OK\n");
- printf("Create ShareMemory OK\n");
- }
- printf("Initializing. \n");
- if(Initialization() != PASS)
- {
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = ON;
- }
- printf("Spawn all Task. \n");
- SpawnTask();
-
- //==================================================
- // Main loop
- //==================================================
- for(;;)
- {
- //==============================================
- // Period check for 10 seconds
- //==============================================
- if(getDiffSecNow(timerStartTime[TMR_IDX_CHECK_TASK]) > 10)
- {
- //==============================================
- // Check task processing
- //==============================================
- if(ShmEMSSInfo->SystemStatus != SYS_MODE_BOOTING)
- checkTask();
- refreshStartTimer(&timerStartTime[TMR_IDX_CHECK_TASK]);
- }
- //==============================================
- // State machine loop
- //==============================================
- switch(ShmEMSSInfo->SystemStatus)
- {
- case SYS_MODE_BOOTING:
- //if(isModeChange())
- {
- /*
- * TODO:
- * 1. Only run one time, if previous system mode is different
- */
- printf("BOOKING MODE \r\n");
- }
-
- setChargerMode(SYS_MODE_PREPARING);
- refreshStartTimer(&timerStartTime[BMS_PREPARING_TASK]);
- break;
- case SYS_MODE_PREPARING:
- if(isModeChange())
- {
- /*
- * TODO:
- * 1. Only run one time, if previous system mode is different
- */
- printf("PREPARING MODE \r\n");
- }
- #if 1
- if(getDiffSecNow(timerStartTime[BMS_PREPARING_TASK]) > 10)
- {
- if(ShmBatteryInfo->AlarmInfo.AlarmValue==0)
- {
- if(ShmBatteryInfo->RelayInfo.RelayValue==0 )
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2On = 1;
- ShmEMSSInfo->BATStatus = POLLING_STEP_0;
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_0;
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_0;
- setChargerMode(SYS_MODE_IDLE);
-
- }else
- {
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- Relay1_off;
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- Relay2_off;
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
- #if 1
- if(gpio_read(PIN_IO_BD1_2) == 0)
- Relay4_off;
- #else
- if(gpio_read(PIN_IO_BD1_2) == 1)
- {
- usleep(100000);
- Relay4_on;
- usleep(1000000);
- ACTODC_Start_charging;
- }
- #endif
-
- if(ShmBatteryInfo->RelayInfo.RelayValue==1)
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay1Off = 1;
- if(ShmBatteryInfo->RelayInfo.RelayValue==2)
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2Off = 1;
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_0;
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_0;
- setChargerMode(SYS_MODE_BATTERY_ALARM);
- }
- }
-
- #else
- setChargerMode(SYS_MODE_IDLE);
- #endif
- break;
- case SYS_MODE_IDLE:
- {
- if(isModeChange())
- {
- /*
- * TODO:
- * 1. Only run one time, if previous system mode is different
- */
- printf("IDLE MODE \r\n");
- }
-
- #if 1
- if(ShmBatteryInfo->SOC>=1 &&
- ShmBatteryInfo->SOC<=10 &&
- ShmBatteryInfo->AlarmInfo.AlarmValue==0 &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Fault) && \
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Fault) && \
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Fault) && \
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Fault)
-
- )
- {
- AllRelay_OFF();
- if(ShmBatteryInfo->RelayInfo.RelayValue==2)
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2Off = 1;
- ShmEMSSInfo->BATStatus = POLLING_STEP_0;
- setChargerMode(SYS_MODE_BATTERY_CHARGE);
- break;
-
- }else if((ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus==ChargerSystemStatus_Preparing ||
- ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus==ChargerSystemStatus_Preparing ) &&
- ShmBatteryInfo->AlarmInfo.AlarmValue==0)
- {
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off
- if(gpio_read(PIN_IO_BD1_2) == 0)
- Relay4_off;
-
- if(ShmBatteryInfo->RelayInfo.RelayValue!=0x2)
- {
- //ShmBatteryInfo->packActionCmd.packAction.bits.Relay1Off = 1;
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2On = 1;
- }
- //ShmEMSSInfo->BATStatus = POLLING_STEP_1;
- //refreshStartTimer(&timerStartTime[BMS_BATDIS_TASK]);
- }else if(
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus <=ChargerSystemStatus_Authorizing || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Fault) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus <=ChargerSystemStatus_Authorizing || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Fault) &&
- (ShmBatteryInfo->AlarmInfo.AlarmValue!=0)
- )
- {
- //printf("battery alarm MODE 1 \n");
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- Relay1_off;
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- Relay2_off;
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
- #if 1
- if(gpio_read(PIN_IO_BD1_2) == 0)
- Relay4_off;
- #else
- if(gpio_read(PIN_IO_BD1_2) == 1)
- {
- usleep(100000);
- Relay4_on;
- usleep(1000000);
- ACTODC_Start_charging;
- }
- #endif
- if(ShmBatteryInfo->RelayInfo.RelayValue==1)
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay1Off = 1;
- if(ShmBatteryInfo->RelayInfo.RelayValue==2)
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2Off = 1;
-
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_0;
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_0;
- setChargerMode(SYS_MODE_BATTERY_ALARM);
-
- }
- if( ShmBatteryInfo->SOC <= 10 && ShmBatteryInfo->AlarmInfo.AlarmValue==0)
- {
- //AllRelay_OFF();
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
- if(gpio_read(PIN_IO_BD1_2) == 0)
- Relay4_off;
-
- if(ShmBatteryInfo->RelayInfo.RelayValue==1)
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay1Off = 1;
- if(ShmBatteryInfo->RelayInfo.RelayValue==2)
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2Off = 1;
- //ShmEMSSInfo->BATStatus = POLLING_STEP_1;
- //refreshStartTimer(&timerStartTime[BMS_BATDIS_TASK]);
- }
-
- /*if(ShmEMSSInfo->BATStatus == POLLING_STEP_1 && getDiffSecNow(timerStartTime[BMS_BATDIS_TASK]) > 1) //BATTERY Discharging
- {
- if(ShmBatteryInfo->RelayInfo.RelayValue==0 )
- {
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2On = 1;
- refreshStartTimer(&timerStartTime[BMS_BATDIS_TASK]);
-
- }else if(ShmBatteryInfo->RelayInfo.RelayValue==0x2)
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_2;
- refreshStartTimer(&timerStartTime[BMS_BATDIS_TASK]);
-
- }
- if(ShmBatteryInfo->AlarmInfo.AlarmValue!=0)
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_0;
- }
- refreshStartTimer(&timerStartTime[BMS_BATDIS_TASK]);
- }else if(ShmEMSSInfo->BATStatus == POLLING_STEP_2 && getDiffSecNow(timerStartTime[BMS_BATDIS_TASK]) > 1)
- {
- if(ShmBatteryInfo->SOC <= 10 || ShmBatteryInfo->AlarmInfo.AlarmValue==0)
- {
- if(ShmBatteryInfo->RelayInfo.RelayValue!=0)
- {
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay2Off = 1;
-
- }else
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_0;
- }
-
- }
-
- if(ShmBatteryInfo->AlarmInfo.AlarmValue!=0)
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_0;
- }
- refreshStartTimer(&timerStartTime[BMS_BATDIS_TASK]);
-
- }*/
-
- if( ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus==ChargerSystemStatus_Preparing &&
- /*(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus < ChargerSystemStatus_Preparing || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating) && \ */
- ShmEMSSInfo->ATOD1Status == POLLING_STEP_0
- )
- {
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 1)
- Relay1_on;
- //if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- //Relay2_off;
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
- if(gpio_read(PIN_IO_BD1_2) == 0)
- Relay4_off;
-
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_1;
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
-
- }else if(ShmEMSSInfo->ATOD1Status == POLLING_STEP_1 && getDiffSecNow(timerStartTime[BMS_Relay1_TASK]) > 1)
- {
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- {
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_2;
-
- }else
- {
- Relay1_on;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
- }else if(ShmEMSSInfo->ATOD1Status == POLLING_STEP_2 && getDiffSecNow(timerStartTime[BMS_Relay1_TASK]) > 1)
- {
- if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating)
- {
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_3;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
- }else if(ShmEMSSInfo->ATOD1Status == POLLING_STEP_3 && getDiffSecNow(timerStartTime[BMS_Relay1_TASK]) > 1)
- {
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- {
- Relay1_off;
- }else
- {
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_0;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
- }
-
- if( ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus==ChargerSystemStatus_Preparing &&
- ShmEMSSInfo->ATOD2Status == POLLING_STEP_0
- )
- {
- //if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- //Relay1_off;
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 1)
- Relay2_on;
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
- if(gpio_read(PIN_IO_BD1_2) == 0)
- Relay4_off;
-
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_1;
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
-
- }else if(ShmEMSSInfo->ATOD2Status == POLLING_STEP_1 && getDiffSecNow(timerStartTime[BMS_Relay2_TASK]) > 1)
- {
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- {
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_2;
- }else
- {
- Relay2_on;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
- }else if(ShmEMSSInfo->ATOD2Status == POLLING_STEP_2 && getDiffSecNow(timerStartTime[BMS_Relay2_TASK]) > 1)
- {
- if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating)
- {
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_3;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
- }else if(ShmEMSSInfo->ATOD2Status == POLLING_STEP_3 && getDiffSecNow(timerStartTime[BMS_Relay2_TASK]) > 1)
- {
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- {
- Relay2_off;
- }else
- {
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_0;
-
- }
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
- }
-
-
- #else
- if(getDiffSecNow(timerStartTime[EMSS_TEST_TASK]) > 2)
- {
- DoIOTest(); //for test
- refreshStartTimer(&timerStartTime[EMSS_TEST_TASK]);
- }
- #endif
- }
- break;
- case SYS_MODE_BATTERY_CHARGE:
- {
- if(isModeChange())
- {
- /*
- * TODO:
- * 1. Only run one time, if previous system mode is different
- */
- printf("SYS_MODE_BATTERY_CHARGE MODE \r\n");
- }
- if(ShmEMSSInfo->BATStatus == POLLING_STEP_0)
- {
- if(ShmBatteryInfo->RelayInfo.RelayValue==0 && getDiffSecNow(timerStartTime[BMS_Relay3_TASK]) > 1)
- {
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay1On = 1;
-
- }else if(ShmBatteryInfo->RelayInfo.RelayValue==1 && getDiffSecNow(timerStartTime[BMS_Relay3_TASK]) > 2)
- {
- if(gpio_read(PIN_ENG_BNT) == 1)
- {
- Relay3_on;
- }else
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_1;
- }
-
- }
- refreshStartTimer(&timerStartTime[BMS_Relay3_TASK]);
- }else if(ShmEMSSInfo->BATStatus == POLLING_STEP_1 && getDiffSecNow(timerStartTime[BMS_Relay3_TASK]) > 2)
- {
- Battery_Start_charging;
- ShmEMSSInfo->BATStatus = POLLING_STEP_2;
- refreshStartTimer(&timerStartTime[BMS_Relay3_TASK]);
-
- }else if(ShmEMSSInfo->BATStatus == POLLING_STEP_2 && getDiffSecNow(timerStartTime[BMS_Relay3_TASK]) > 1)
- {
- if(ShmBatteryInfo->SOC >=90 || ShmBatteryInfo->AlarmInfo.AlarmValue!=0)
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_3;
- Battery_Stop_charging;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay3_TASK]);
- }else if(ShmEMSSInfo->BATStatus == POLLING_STEP_3 && getDiffSecNow(timerStartTime[BMS_Relay3_TASK]) > 1)
- {
- if(ShmBatteryInfo->RelayInfo.RelayValue==1 )
- {
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay1Off = 1;
- }else
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_END;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay3_TASK]);
- }else if(ShmEMSSInfo->BATStatus == POLLING_STEP_END && getDiffSecNow(timerStartTime[BMS_Relay3_TASK]) > 1)
- {
- if(gpio_read(PIN_ENG_BNT) == 0)
- {
- Relay3_off;
- }else
- {
- ShmEMSSInfo->BATStatus = POLLING_STEP_0;
- setChargerMode(SYS_MODE_PREPARING);
- }
- refreshStartTimer(&timerStartTime[BMS_Relay3_TASK]);
- }
-
- if(ShmBatteryInfo->AlarmInfo.AlarmValue != 0 || ShmEMSSInfo->AlarmInfo.bits.isTransmissionFailure==1)
- {
- Battery_Stop_charging;
- usleep(1000000);
- Relay3_off;
- usleep(1000000);
- if(ShmBatteryInfo->RelayInfo.RelayValue==1 )
- {
- ShmBatteryInfo->packActionCmd.packAction.bits.Relay1Off = 1;
- }
- setChargerMode(SYS_MODE_PREPARING);
- }
- }
- break;
- case SYS_MODE_BATTERY_ALARM:
- {
- if(isModeChange())
- {
- /*
- * TODO:
- * 1. Only run one time, if previous system mode is different
- */
- printf("SYS_MODE_BATTERY_ALARM MODE \r\n");
- }
- //printf("SYS_MODE_BATTERY_ALARM MODE 1 \n");
- #if 1
- if( ShmBatteryInfo->AlarmInfo.AlarmValue==0 &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus <=ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Terminating) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus <=ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Terminating) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus <=ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Terminating) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus <=ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus >=ChargerSystemStatus_Terminating)
- )
- {
- setChargerMode(SYS_MODE_PREPARING);
-
- }
- if( ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus == ChargerSystemStatus_Preparing &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating) &&
- ShmEMSSInfo->ATOD1Status == POLLING_STEP_0
- )
- {
- #if 0
- if(gpio_read(PIN_IO_BD1_2) == 0)
- {
- ACTODC_Stop_charging;
- usleep(1000000);
- Relay4_off;
- }
- usleep(1000000);
- #endif
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 1)
- {
- Relay1_on;
- printf("Relay1 ON \r\n");
- }
- //if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- //Relay2_off;
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
-
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_1;
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
-
- }else if(ShmEMSSInfo->ATOD1Status == POLLING_STEP_1 && getDiffSecNow(timerStartTime[BMS_Relay1_TASK]) > 1)
- {
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- {
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_2;
-
- }else
- {
- Relay1_on;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
- }else if(ShmEMSSInfo->ATOD1Status == POLLING_STEP_2 && getDiffSecNow(timerStartTime[BMS_Relay1_TASK]) > 1)
- {
- if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating)
- {
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_3;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
- }else if(ShmEMSSInfo->ATOD1Status == POLLING_STEP_3 && getDiffSecNow(timerStartTime[BMS_Relay1_TASK]) > 1)
- {
- #if 1
- Relay1_off;
- #else
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- {
- Relay1_off;
- }else
- {
- ShmEMSSInfo->ATOD1Status = POLLING_STEP_0;
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 1)
- {
- Relay4_on;
- usleep(1000000);
- ACTODC_Start_charging;
- }
- }
- #endif
- refreshStartTimer(&timerStartTime[BMS_Relay1_TASK]);
- }
- printf("GUN 2 %d \r\n",ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus);
- if( ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus == ChargerSystemStatus_Preparing &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Alarm) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Alarm) &&
- ShmEMSSInfo->ATOD2Status == POLLING_STEP_0
- )
- {
- #if 0
- if(gpio_read(PIN_IO_BD1_2) == 0)
- {
- ACTODC_Stop_charging;
- usleep(1000000);
- Relay4_off;
- }
- usleep(1000000);
- #endif
- //if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- //Relay1_off;
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 1)
- {
- Relay2_on;
- printf("Relay 2 on \r\n");
- }
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
-
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_1;
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
-
- }else if(ShmEMSSInfo->ATOD2Status == POLLING_STEP_1 && getDiffSecNow(timerStartTime[BMS_Relay2_TASK]) > 1)
- {
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- {
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_2;
- }else
- {
- Relay2_on;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
- }else if(ShmEMSSInfo->ATOD2Status == POLLING_STEP_2 && getDiffSecNow(timerStartTime[BMS_Relay2_TASK]) > 1)
- {
- if(ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating)
- {
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_3;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
- }else if(ShmEMSSInfo->ATOD2Status == POLLING_STEP_3 && getDiffSecNow(timerStartTime[BMS_Relay2_TASK]) > 1)
- {
- #if 1
- Relay2_off;
- #else
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- {
- Relay2_off;
- }else
- {
- ShmEMSSInfo->ATOD2Status = POLLING_STEP_0;
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 1)
- {
- Relay4_on;
- usleep(1000000);
- ACTODC_Start_charging;
- }
- }
- #endif
- refreshStartTimer(&timerStartTime[BMS_Relay2_TASK]);
- }
- #if 0
- if((ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus==ChargerSystemStatus_Preparing ||
- ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus==ChargerSystemStatus_Preparing ) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating) &&
- ShmEMSSInfo->DTODStatus == POLLING_STEP_0)
- {
-
- if(gpio_read(PIN_BOARD1_PROXIMITY) == 0)
- Relay1_off;
- if(gpio_read(PIN_BOARD2_PROXIMITY) == 0)
- Relay2_off;
- if(gpio_read(PIN_ENG_BNT) == 0)
- Relay3_off;
- if(gpio_read(PIN_IO_BD1_2) == 1)
- {
- usleep(1000000);
- Relay4_on;
- usleep(1000000);
- ACTODC_Start_charging;
- }
- ShmEMSSInfo->DTODStatus = POLLING_STEP_1;
- refreshStartTimer(&timerStartTime[BMS_Relay4_TASK]);
-
- }else if(ShmEMSSInfo->DTODStatus == POLLING_STEP_1 && getDiffSecNow(timerStartTime[BMS_Relay4_TASK]) > 1)
- {
- if(gpio_read(PIN_IO_BD1_2) == 0)
- {
- ShmEMSSInfo->DTODStatus = POLLING_STEP_2;
-
- }else
- {
- Relay4_on;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay4_TASK]);
- }else if(ShmEMSSInfo->DTODStatus == POLLING_STEP_2 && getDiffSecNow(timerStartTime[BMS_Relay4_TASK]) > 1)
- {
- if((ShmSysConfigAndInfo->SysInfo.ConnectorInfo[2].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[0].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating) &&
- (ShmSysConfigAndInfo->SysInfo.ConnectorInfo[3].GeneralChargingData.SystemStatus <= ChargerSystemStatus_Idle || ShmSysConfigAndInfo->SysInfo.ConnectorInfo[1].GeneralChargingData.SystemStatus >= ChargerSystemStatus_Terminating)
- )
- {
- //ACTODC_Stop_charging;
- ShmEMSSInfo->DTODStatus = POLLING_STEP_0;
- }
- refreshStartTimer(&timerStartTime[BMS_Relay4_TASK]);
- }/*else if(ShmEMSSInfo->DTODStatus == POLLING_STEP_3 && getDiffSecNow(timerStartTime[BMS_Relay4_TASK]) > 1)
- {
- if(gpio_read(PIN_IO_BD1_2) == 1)
- {
- ShmEMSSInfo->DTODStatus = POLLING_STEP_0;
-
- }
- refreshStartTimer(&timerStartTime[BMS_Relay4_TASK]);
- }*/
- #endif
-
-
- #endif
- }
- break;
-
- case SYS_MODE_FAULT:
- if(isModeChange())
- {
- /*
- * TODO:
- * 1. Only run one time, if previous system mode is different
- */
- printf("FAULT MODE");
- }
- /*
- * TODO:
- * 1. Run some thing here
- */
- break;
- case SYS_MODE_UPDATE:
- if(isModeChange())
- {
- /*
- * TODO:
- * 1. Only run one time, if previous system mode is different
- */
- printf("UPDATE MODE");
- }
- /*
- * TODO:
- * 1. Run some thing here
- */
- break;
- default:
- break;
- }
- // System watch dog feed
- write(wtdFd, "a", 1);
- usleep(50000);
- }
- return FAIL;
- }
|