main.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <linux/termios.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <time.h>
  8. #include <stdlib.h>
  9. #include <sys/ipc.h>
  10. #include <sys/shm.h>
  11. #include <sys/mman.h>
  12. #include <linux/sockios.h>
  13. #include <linux/socket.h>
  14. #include <sys/socket.h>
  15. #include <netinet/in.h>
  16. #include <sys/time.h>
  17. #include <sys/timeb.h>
  18. #include <math.h>//for pow
  19. #include <unistd.h>
  20. #include "../../define.h"
  21. //#define Debug
  22. struct SysConfigAndInfo *ShmSysConfigAndInfo;
  23. struct StatusCodeData *ShmStatusCodeData;
  24. struct PsuData *ShmPsuData ;
  25. struct CHAdeMOData *ShmCHAdeMOData;
  26. struct CcsData *ShmCcsData;
  27. struct PrimaryMcuData *ShmPrimaryMcuData;
  28. struct FanModuleData *ShmFanModuleData;
  29. struct RelayModuleData *ShmRelayModuleData;
  30. struct OCPP16Data *ShmOCPP16Data;
  31. #ifdef SystemLogMessage
  32. int StoreLogMsg(unsigned char *DataString)
  33. {
  34. unsigned char Buf[256];
  35. time_t CurrentTime;
  36. struct tm *tm;
  37. memset(Buf,0,sizeof(Buf));
  38. CurrentTime = time(NULL);
  39. tm=localtime(&CurrentTime);
  40. sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
  41. tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
  42. DataString,
  43. tm->tm_year+1900,tm->tm_mon+1);
  44. system(Buf);
  45. #ifdef Debug
  46. printf("%s \n",DataString);
  47. #endif
  48. }
  49. #endif
  50. int DiffTimeb(struct timeb ST, struct timeb ET)
  51. {
  52. //return milli-second
  53. unsigned int StartTime,StopTime;
  54. StartTime=(unsigned int)ST.time;
  55. StopTime=(unsigned int)ET.time;
  56. return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
  57. }
  58. /**************************************************************************************/
  59. /**************************Create all share memory *********************************/
  60. /**************************************************************************************/
  61. int CreatShareMemory()
  62. {
  63. int MeterSMId;
  64. //creat ShmSysConfigAndInfo
  65. if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0)
  66. {
  67. #ifdef SystemLogMessage
  68. StoreLogMsg("[main]CreatShareMemory:shmget ShmSysConfigAndInfo NG");
  69. #endif
  70. return 0;
  71. }
  72. else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  73. {
  74. #ifdef SystemLogMessage
  75. StoreLogMsg("[main]CreatShareMemory:shmat ShmSysConfigAndInfo NG");
  76. #endif
  77. return 0;
  78. }
  79. memset(ShmSysConfigAndInfo,0,sizeof(struct SysConfigAndInfo));
  80. //creat ShmStatusCodeData
  81. if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0)
  82. {
  83. #ifdef SystemLogMessage
  84. StoreLogMsg("[main]CreatShareMemory:shmget ShmStatusCodeData NG");
  85. #endif
  86. return 0;
  87. }
  88. else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  89. {
  90. #ifdef SystemLogMessage
  91. StoreLogMsg("[main]CreatShareMemory:shmat ShmStatusCodeData NG");
  92. #endif
  93. return 0;
  94. }
  95. memset(ShmStatusCodeData,0,sizeof(struct StatusCodeData));
  96. //creat ShmPsuData
  97. if ((MeterSMId = shmget(ShmPsuKey, sizeof(struct PsuData), IPC_CREAT | 0777)) < 0)
  98. {
  99. #ifdef SystemLogMessage
  100. StoreLogMsg("[main]CreatShareMemory:shmget ShmPsuData NG");
  101. #endif
  102. return 0;
  103. }
  104. else if ((ShmPsuData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  105. {
  106. #ifdef SystemLogMessage
  107. StoreLogMsg("[main]CreatShareMemory:shmat ShmPsuData NG");
  108. #endif
  109. return 0;
  110. }
  111. memset(ShmPsuData,0,sizeof(struct PsuData));
  112. //creat ShmCHAdeMOData
  113. if ((MeterSMId = shmget(ShmCHAdeMOCommKey, sizeof(struct CHAdeMOData), IPC_CREAT | 0777)) < 0)
  114. {
  115. #ifdef SystemLogMessage
  116. StoreLogMsg("[main]CreatShareMemory:shmget ShmCHAdeMOData NG");
  117. #endif
  118. return 0;
  119. }
  120. else if ((ShmCHAdeMOData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  121. {
  122. #ifdef SystemLogMessage
  123. StoreLogMsg("[main]CreatShareMemory:shmat ShmCHAdeMOData NG");
  124. #endif
  125. return 0;
  126. }
  127. memset(ShmCHAdeMOData,0,sizeof(struct CHAdeMOData));
  128. //creat ShmCcsData
  129. if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData), IPC_CREAT | 0777)) < 0)
  130. {
  131. #ifdef SystemLogMessage
  132. StoreLogMsg("[main]CreatShareMemory:shmget ShmCcsData NG");
  133. #endif
  134. return 0;
  135. }
  136. else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  137. {
  138. #ifdef SystemLogMessage
  139. StoreLogMsg("[main]CreatShareMemory:shmat ShmCcsData NG");
  140. #endif
  141. return 0;
  142. }
  143. memset(ShmCcsData,0,sizeof(struct CcsData));
  144. //creat ShmPrimaryMcuData
  145. if ((MeterSMId = shmget(ShmPrimaryMcuKey, sizeof(struct PrimaryMcuData), IPC_CREAT | 0777)) < 0)
  146. {
  147. #ifdef SystemLogMessage
  148. StoreLogMsg("[main]CreatShareMemory:shmget ShmPrimaryMcuData NG");
  149. #endif
  150. return 0;
  151. }
  152. else if ((ShmPrimaryMcuData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  153. {
  154. #ifdef SystemLogMessage
  155. StoreLogMsg("[main]CreatShareMemory:shmat ShmPrimaryMcuData NG");
  156. #endif
  157. return 0;
  158. }
  159. memset(ShmPrimaryMcuData,0,sizeof(struct PrimaryMcuData));
  160. //creat ShmFanModuleData
  161. if ((MeterSMId = shmget(ShmFanBdKey, sizeof(struct FanModuleData), IPC_CREAT | 0777)) < 0)
  162. {
  163. #ifdef SystemLogMessage
  164. StoreLogMsg("[main]CreatShareMemory:shmget ShmFanModuleData NG");
  165. #endif
  166. return 0;
  167. }
  168. else if ((ShmFanModuleData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  169. {
  170. #ifdef SystemLogMessage
  171. StoreLogMsg("[main]CreatShareMemory:shmat ShmFanModuleData NG");
  172. #endif
  173. return 0;
  174. }
  175. memset(ShmFanModuleData,0,sizeof(struct FanModuleData));
  176. //creat ShmRelayModuleData
  177. if ((MeterSMId = shmget(ShmRelayBdKey, sizeof(struct RelayModuleData), IPC_CREAT | 0777)) < 0)
  178. {
  179. #ifdef SystemLogMessage
  180. StoreLogMsg("[main]CreatShareMemory:shmget ShmRelayModuleData NG");
  181. #endif
  182. return 0;
  183. }
  184. else if ((ShmRelayModuleData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  185. {
  186. #ifdef SystemLogMessage
  187. StoreLogMsg("[main]CreatShareMemory:shmat ShmRelayModuleData NG");
  188. #endif
  189. return 0;
  190. }
  191. memset(ShmRelayModuleData,0,sizeof(struct RelayModuleData));
  192. //creat ShmOCPP16Data
  193. if ((MeterSMId = shmget(ShmOcppModuleKey, sizeof(struct OCPP16Data), IPC_CREAT | 0777)) < 0)
  194. {
  195. #ifdef SystemLogMessage
  196. StoreLogMsg("[main]CreatShareMemory:shmget ShmOCPP16Data NG");
  197. #endif
  198. return 0;
  199. }
  200. else if ((ShmOCPP16Data = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  201. {
  202. #ifdef SystemLogMessage
  203. StoreLogMsg("[main]CreatShareMemory:shmat ShmOCPP16Data NG");
  204. #endif
  205. return 0;
  206. }
  207. // memset(ShmOCPP16Data,0,sizeof(struct OCPP16Data));
  208. return 1;
  209. }
  210. /**************************************************************************************/
  211. /****************Following functions are CSU initialization***************************/
  212. /**************************************************************************************/
  213. void InitGPIO()
  214. {
  215. /*****************0~3, 4 bank, bank x 32+ num*********************/
  216. /***************************************************************/
  217. /*************** INPUT PIN ***************************************/
  218. /***************************************************************/
  219. /*SECOND_BREAKER_feedback.:GPIO0_28:input => H:OFF; L: ON*/
  220. system("echo 28 > /sys/class/gpio/export");
  221. system("echo \"in\" > /sys/class/gpio/gpio28/direction");
  222. /*GFD Alarm1:GPIO2_20:input => H: Normal operation; L: GFD alarm*/
  223. system("echo 84 > /sys/class/gpio/export");
  224. system("echo \"in\" > /sys/class/gpio/gpio84/direction");
  225. /*GFD Alarm2:GPIO2_19:input => H: Normal operation; L: GFD alarm*/
  226. system("echo 83 > /sys/class/gpio/export");
  227. system("echo \"in\" > /sys/class/gpio/gpio83/direction");
  228. /*AC Drop:GPIO2_18:input => H: Normal operation; L: AC drop*/
  229. system("echo 82 > /sys/class/gpio/export");
  230. system("echo \"in\" > /sys/class/gpio/gpio82/direction");
  231. /*Emergency Stop:GPIO2_7:input => H: Normal operation; L: Emergency stop*/
  232. system("echo 71 > /sys/class/gpio/export");
  233. system("echo \"in\" > /sys/class/gpio/gpio71/direction");
  234. /*Main breaker SPD:GPIO0_27:input => H: Normal SPD operation; L: Interrupt from SPD*/
  235. system("echo 27 > /sys/class/gpio/export");
  236. system("echo \"in\" > /sys/class/gpio/gpio27/direction");
  237. /*MAIN_BREAKER_feedback:GPIO1_15:input =>H: OFF; L: ON*/
  238. system("echo 47 > /sys/class/gpio/export");
  239. system("echo \"in\" > /sys/class/gpio/gpio47/direction");
  240. /*GUN1 Permission (signal J):GPIO0_29:input => H: No EV permission; L: Permitted */
  241. system("echo 29 > /sys/class/gpio/export");
  242. system("echo \"in\" > /sys/class/gpio/gpio29/direction");
  243. /*GUN1 Proximity detection:GPIO1_28:input => H: Gun unconnected; L: Gun connected*/
  244. system("echo 60 > /sys/class/gpio/export");
  245. system("echo \"in\" > /sys/class/gpio/gpio60/direction");
  246. /*GUN1 LOCK CHECK - CHAdeMO :GPIO2_23:input => H: Gun unlock; L: Gun locked*/
  247. system("echo 87 > /sys/class/gpio/export");
  248. system("echo \"in\" > /sys/class/gpio/gpio87/direction");
  249. /*Input contactor feedback.:GPIO3_20:input:H: ON; L: OFF*/
  250. system("echo 116 > /sys/class/gpio/export");
  251. system("echo \"in\" > /sys/class/gpio/gpio116/direction");
  252. /*DOOR_Sensor: GPIO1_14:input:H: Door close; L: Door open */
  253. system("echo 46 > /sys/class/gpio/export");
  254. system("echo \"in\" > /sys/class/gpio/gpio46/direction");
  255. /***************************************************************/
  256. /*************** OUTPUT PIN ************************************/
  257. /***************************************************************/
  258. /*all system module power switch:GPIO0_16:output => H: power off all modules; L: power on all module*/
  259. system("echo 16 > /sys/class/gpio/export");
  260. system("echo \"out\" > /sys/class/gpio/gpio16/direction");
  261. system("echo 0 > /sys/class/gpio/gpio16/value");
  262. /*Input contactor Drive: GPIO2_9:output =>H: ON; L: OFF*/
  263. system("echo 73 > /sys/class/gpio/export");
  264. system("echo \"out\" > /sys/class/gpio/gpio73/direction");
  265. system("echo 0 > /sys/class/gpio/gpio73/value");
  266. /*EV1 12V Enable (CHAdeMO1 D1): GPIO0_19:output=>H: Enable 12V for EV (ON); L: Disable 12V for EV (OFF)*/
  267. system("echo 19 > /sys/class/gpio/export");
  268. system("echo \"out\" > /sys/class/gpio/gpio19/direction");
  269. system("echo 0 > /sys/class/gpio/gpio19/value");
  270. /*EV1 GND Enable (CHAdeMO1 D2): GPIO2_12:output=>H: Enable GND for EV(ON); L: Disable GND for EV(OFF) */
  271. system("echo 76 > /sys/class/gpio/export");
  272. system("echo \"out\" > /sys/class/gpio/gpio76/direction");
  273. system("echo 0 > /sys/class/gpio/gpio76/value");
  274. /*GUN1_MPU_Permission :GPIO0_11:output => Low: CHAdeMO1 signal J be controled by EV, High:signal J always low (charging permitted)*/
  275. system("echo 11 > /sys/class/gpio/export");
  276. system("echo \"out\" > /sys/class/gpio/gpio11/direction");
  277. system("echo 0 > /sys/class/gpio/gpio11/value");
  278. /*CHAdeMO GUN1 lock:GPIO2_10:output => H: Lock gun; L: Unlock gun*/
  279. system("echo 74 > /sys/class/gpio/export");
  280. system("echo \"out\" > /sys/class/gpio/gpio74/direction");
  281. system("echo 0 > /sys/class/gpio/gpio74/value");
  282. /*CHILLER ENABLE:GPIO1_31:output => H: Enable chiller; L: Disable chiller*/
  283. system("echo 63 > /sys/class/gpio/export");
  284. system("echo \"out\" > /sys/class/gpio/gpio63/direction");
  285. system("echo 0 > /sys/class/gpio/gpio63/value");
  286. /*Buzzer:GPIO3_18:output => H: buzz; L:silent*/
  287. system("echo 114 > /sys/class/gpio/export");
  288. system("echo \"out\" > /sys/class/gpio/gpio114/direction");
  289. system("echo 0 > /sys/class/gpio/gpio114/value");
  290. /*RS485_DE GPIO2_13:output=>H: Transmit RS485 data; L: Receive RS485 data*/
  291. system("echo 77 > /sys/class/gpio/export");
  292. system("echo \"out\" > /sys/class/gpio/gpio77/direction");
  293. system("echo 0 > /sys/class/gpio/gpio77/value");
  294. #ifdef SystemLogMessage
  295. StoreLogMsg("[main]InitGPIO: Initial GPIO OK");
  296. #endif
  297. }
  298. int LoadSysConfigAndInfo(struct SysConfigData *ptr)
  299. {
  300. int fd,wrd;
  301. struct SysConfigData *buf;
  302. unsigned char *PtrBuf;
  303. unsigned int ChkSum,ChkSumOrg;
  304. if((buf=malloc(sizeof(struct SysConfigData)))==NULL)
  305. {
  306. #ifdef SystemLogMessage
  307. StoreLogMsg("[main]LoadSysConfigAndInfo:malloc buffer NG,rebooting..");
  308. #endif
  309. if(ShmStatusCodeData!=NULL)
  310. {
  311. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  312. }
  313. sleep(5);
  314. system("reboot -f");
  315. sleep(5);
  316. system("reboot -f");
  317. }
  318. memset(buf, 0, sizeof(struct SysConfigData));
  319. fd = open("/dev/mtdblock10", O_RDWR);
  320. if (fd < 0)
  321. {
  322. free(buf);
  323. #ifdef SystemLogMessage
  324. StoreLogMsg("[main]LoadSysConfigAndInfo:open mtdblock10 NG,rebooting..");
  325. #endif
  326. if(ShmStatusCodeData!=NULL)
  327. {
  328. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  329. }
  330. sleep(5);
  331. system("reboot -f");
  332. sleep(5);
  333. system("reboot -f");
  334. }
  335. wrd=read(fd, buf,sizeof(struct SysConfigData));
  336. close(fd);
  337. if(wrd!=(sizeof(struct SysConfigData)))
  338. {
  339. free(buf);
  340. #ifdef SystemLogMessage
  341. StoreLogMsg("[main]LoadSysConfigAndInfo: read SysConfigData data NG,rebooting..");
  342. #endif
  343. if(ShmStatusCodeData!=NULL)
  344. {
  345. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  346. }
  347. sleep(5);
  348. system("reboot -f");
  349. sleep(5);
  350. system("reboot -f");
  351. }
  352. PtrBuf=(unsigned char *)buf;
  353. ChkSum=0;
  354. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  355. {
  356. ChkSum+=PtrBuf[wrd];
  357. }
  358. ChkSumOrg=buf->Checksum;
  359. if(ChkSum!=ChkSumOrg)
  360. {
  361. #ifdef SystemLogMessage
  362. StoreLogMsg("[main]LoadSysConfigAndInfo: Primary SysConfigData checksum NG, read backup");
  363. #endif
  364. fd = open("/dev/mtdblock11", O_RDWR);
  365. if (fd < 0)
  366. {
  367. free(buf);
  368. #ifdef SystemLogMessage
  369. StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock11 (backup) NG,rebooting..");
  370. #endif
  371. if(ShmStatusCodeData!=NULL)
  372. {
  373. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  374. }
  375. sleep(5);
  376. system("reboot -f");
  377. sleep(5);
  378. system("reboot -f");
  379. }
  380. memset(buf, 0, sizeof(struct SysConfigData));
  381. wrd=read(fd, buf,sizeof(struct SysConfigData));
  382. close(fd);
  383. if(wrd!=sizeof(struct SysConfigData))
  384. {
  385. free(buf);
  386. #ifdef SystemLogMessage
  387. StoreLogMsg("[main]LoadSysConfigAndInfo: read backup SysConfigData data NG,rebooting..");
  388. #endif
  389. if(ShmStatusCodeData!=NULL)
  390. {
  391. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  392. }
  393. sleep(5);
  394. system("reboot -f");
  395. sleep(5);
  396. system("reboot -f");
  397. }
  398. PtrBuf=(unsigned char *)buf;
  399. ChkSum=0;
  400. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  401. {
  402. ChkSum+=PtrBuf[wrd];
  403. }
  404. ChkSumOrg=buf->Checksum;
  405. if(ChkSum!=ChkSumOrg)
  406. {
  407. #ifdef SystemLogMessage
  408. StoreLogMsg("[main]LoadSysConfigAndInfo: backup SysConfigData checksum NG, read Factory default");
  409. #endif
  410. fd = open("/dev/mtdblock12", O_RDWR);
  411. if (fd < 0)
  412. {
  413. free(buf);
  414. #ifdef SystemLogMessage
  415. StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock12 (Factory default) NG,rebooting..");
  416. #endif
  417. if(ShmStatusCodeData!=NULL)
  418. {
  419. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  420. }
  421. sleep(5);
  422. system("reboot -f");
  423. sleep(5);
  424. system("reboot -f");
  425. }
  426. memset(buf, 0, sizeof(struct SysConfigData));
  427. wrd=read(fd, buf,sizeof(struct SysConfigData));
  428. close(fd);
  429. if(wrd!=sizeof(struct SysConfigData))
  430. {
  431. free(buf);
  432. #ifdef SystemLogMessage
  433. StoreLogMsg("[main]LoadSysConfigAndInfo: read factory default SysConfigData data NG,rebooting..");
  434. #endif
  435. if(ShmStatusCodeData!=NULL)
  436. {
  437. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  438. }
  439. sleep(5);
  440. system("reboot -f");
  441. sleep(5);
  442. system("reboot -f");
  443. }
  444. PtrBuf=(unsigned char *)buf;
  445. ChkSum=0;
  446. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  447. {
  448. ChkSum+=PtrBuf[wrd];
  449. }
  450. ChkSumOrg=buf->Checksum;
  451. if(ChkSum!=ChkSumOrg)
  452. {
  453. #ifdef SystemLogMessage
  454. StoreLogMsg("[main]LoadSysConfigAndInfo: factory default SysConfigData checksum NG, restore factory default");
  455. #endif
  456. goto DefaultShm;
  457. }
  458. }
  459. }
  460. //load OK
  461. memcpy((struct SysConfigData *)ptr,(struct SysConfigData *)buf,sizeof(struct SysConfigData));
  462. free(buf);
  463. #ifdef SystemLogMessage
  464. StoreLogMsg("[main]LoadSysConfigAndInfo: Load SysConfigData OK");
  465. #endif
  466. return 1;
  467. DefaultShm:
  468. system("cd /root;./FactoryConfig");
  469. system("sync");
  470. sleep(5);
  471. system("reboot -f");
  472. sleep(5);
  473. system("reboot -f");
  474. }
  475. void InitEthernet()
  476. {
  477. char tmpbuf[256];
  478. unsigned int address;
  479. //Init Eth0 for internet
  480. memset(tmpbuf,0,256);
  481. sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up",
  482. ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
  483. ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
  484. system(tmpbuf);
  485. memset(tmpbuf,0,256);
  486. sprintf(tmpbuf,"route add default gw %s eth0 ",
  487. ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
  488. system(tmpbuf);
  489. //Init Eth1 for administrator tool
  490. memset(tmpbuf,0,256);
  491. sprintf(tmpbuf,"/sbin/ifconfig eth1 %s netmask %s up",
  492. ShmSysConfigAndInfo->SysConfig.Eth1Interface.EthIpAddress,
  493. ShmSysConfigAndInfo->SysConfig.Eth1Interface.EthSubmaskAddress);
  494. system(tmpbuf);
  495. //Run DHCP client if enabled
  496. system("killall udhcpc");
  497. system("rm -rf /etc/resolv.conf");
  498. system("echo nameserver 8.8.8.8 > /etc/resolv.conf"); //Google DNS server
  499. system("echo nameserver 180.76.76.76 > /etc/resolv.conf"); //Baidu DNS server
  500. if(ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0)
  501. system("/sbin/udhcpc -i eth0 -s /root/simple.script > /dev/null &");
  502. #ifdef SystemLogMessage
  503. StoreLogMsg("[main]InitEthernet: Initial Ethernet OK");
  504. #endif
  505. }
  506. int Initialization()
  507. {
  508. InitGPIO();
  509. LoadSysConfigAndInfo(&ShmSysConfigAndInfo->SysConfig);
  510. InitEthernet();
  511. #ifdef SystemLogMessage
  512. StoreLogMsg("[main]Initialization: Initialization OK");
  513. #endif
  514. }
  515. int SpawnTask()
  516. {
  517. system("/root/EventLogging &");
  518. system("/root/LcmControl &");
  519. system("/root/InternalComm &");
  520. system("/root/PrimaryComm &");
  521. system("/root/EvComm &");
  522. system("/root/OcppBackend &");
  523. /*
  524. if 4G model
  525. system("/root/4gModem &");
  526. else if WiFi model
  527. system("/root/WiFiModem &");
  528. */
  529. }
  530. int StoreUsrConfigData(struct SysConfigData *UsrData)
  531. {
  532. int fd,wrd;
  533. unsigned int i,Chk;
  534. unsigned char *ptr;
  535. Chk=0;
  536. ptr=(unsigned char *)UsrData;
  537. for(i=0;i<sizeof(struct SysConfigData)-4;i++)
  538. {
  539. Chk+=*(ptr+i);
  540. }
  541. UsrData->Checksum=Chk;
  542. fd = open("/dev/mtdblock10", O_RDWR);
  543. if (fd < 0)
  544. {
  545. #ifdef SystemLogMessage
  546. StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock10 NG");
  547. #endif
  548. return 0;
  549. }
  550. wrd=write(fd, UsrData, sizeof(struct SysConfigData));
  551. close(fd);
  552. if(wrd!=(sizeof(struct SysConfigData)))
  553. {
  554. #ifdef SystemLogMessage
  555. StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock10 NG");
  556. #endif
  557. return 0;
  558. }
  559. fd = open("/dev/mtdblock11", O_RDWR);
  560. if (fd < 0)
  561. {
  562. #ifdef SystemLogMessage
  563. StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock11(backup) NG");
  564. #endif
  565. return 0;
  566. }
  567. wrd=write(fd, UsrData, sizeof(struct SysConfigData));
  568. close(fd);
  569. if(wrd!=(sizeof(struct SysConfigData)))
  570. {
  571. #ifdef SystemLogMessage
  572. StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock11(backup) NG");
  573. #endif
  574. return 0;
  575. }
  576. return 1;
  577. }
  578. /**************************************************************/
  579. /************** main function********************************/
  580. /*************************************************************/
  581. int main(int argc,char *argv[])
  582. {
  583. int Rtn=0;
  584. unsigned int StartTime;
  585. struct timeb StartChargingTime,CurrentChargingTime,ChargingLoopTime;
  586. float ChargingPower,ChargingEnergy;
  587. //Create all share memory
  588. if(CreatShareMemory()==0)
  589. {
  590. #ifdef SystemLogMessage
  591. StoreLogMsg("[main]main:CreatShareMemory NG");
  592. #endif
  593. if(ShmStatusCodeData!=NULL)
  594. {
  595. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
  596. }
  597. sleep(5);
  598. system("reboot -f");
  599. sleep(5);
  600. system("reboot -f");
  601. }
  602. //CSU Initialization
  603. Initialization();
  604. //task spawn
  605. //SpawnTask();
  606. /**************************************************************/
  607. /************** main Loop********************************/
  608. /*****************************************************************/
  609. while(1)
  610. {
  611. }//main while
  612. }