main.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  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. /*************** GPIO 0 ***************************************/
  218. /***************************************************************/
  219. /* GPMC_AD8 => GPIO0_22 */ /*ID BD1_1*/
  220. system("echo 22 > /sys/class/gpio/export");
  221. system("echo \"in\" > /sys/class/gpio/gpio22/direction");
  222. /* GPMC_AD9 => GPIO0_23 */ /*ID BD1_2*/
  223. system("echo 23 > /sys/class/gpio/export");
  224. system("echo \"in\" > /sys/class/gpio/gpio23/direction");
  225. /* GPMC_AD10 => GPIO0_26 */ /*IO BD1_1*/
  226. system("echo 26 > /sys/class/gpio/export");
  227. system("echo \"in\" > /sys/class/gpio/gpio26/direction");
  228. /* GPMC_AD11 => GPIO0_27 */ /*IO BD1_2*/
  229. system("echo 27 > /sys/class/gpio/export");
  230. system("echo \"in\" > /sys/class/gpio/gpio27/direction");
  231. /* RMII1_REF_CLK => GPIO0_29 */ /*USB 0 OCP detection*/
  232. system("echo 29 > /sys/class/gpio/export");
  233. system("echo \"in\" > /sys/class/gpio/gpio29/direction");
  234. /*XDMA_EVENT_INTR0 => GPIO0_19 */ /*AM_RFID_RST*/
  235. system("echo 19 > /sys/class/gpio/export");
  236. system("echo \"out\" > /sys/class/gpio/gpio19/direction");
  237. system("echo 0 > /sys/class/gpio/gpio19/value");
  238. /*XDMA_EVENT_INTR1 => GPIO0_20 */ /*AM_RFID_ICC*/
  239. system("echo 20 > /sys/class/gpio/export");
  240. system("echo \"in\" > /sys/class/gpio/gpio20/direction");
  241. /***************************************************************/
  242. /*************** GPIO 1 ***************************************/
  243. /***************************************************************/
  244. /* GPMC_AD12 => GPIO1_12 */ /*ID BD2_1*/
  245. system("echo 44 > /sys/class/gpio/export");
  246. system("echo \"in\" > /sys/class/gpio/gpio44/direction");
  247. /* GPMC_AD13 => GPIO1_13 */ /*ID BD2_2*/
  248. system("echo 45 > /sys/class/gpio/export");
  249. system("echo \"in\" > /sys/class/gpio/gpio45/direction");
  250. /* GPMC_AD14 => GPIO1_14 */ /*IO BD2_1*/
  251. system("echo 46 > /sys/class/gpio/export");
  252. system("echo \"in\" > /sys/class/gpio/gpio46/direction");
  253. /* GPMC_AD15 => GPIO1_15 */ /*IO BD2_2*/
  254. system("echo 47 > /sys/class/gpio/export");
  255. system("echo \"in\" > /sys/class/gpio/gpio47/direction");
  256. /***************************************************************/
  257. /*************** GPIO 2 ***************************************/
  258. /***************************************************************/
  259. /*LCD_AC_BIAS_EN => GPIO2_25*/ /*RS-485 for module DE control*/
  260. system("echo 89 > /sys/class/gpio/export");
  261. system("echo \"out\" > /sys/class/gpio/gpio89/direction");
  262. system("echo 0 > /sys/class/gpio/gpio89/value");
  263. /*LCD_HSYNC => GPIO2_23*/ /*RS-485 for module RE control*/
  264. system("echo 87 > /sys/class/gpio/export");
  265. system("echo \"out\" > /sys/class/gpio/gpio87/direction");
  266. system("echo 0 > /sys/class/gpio/gpio87/value");
  267. /*LCD_PCLK => GPIO2_24*/ /*CCS communication board 1 proximity*/
  268. system("echo 88 > /sys/class/gpio/export");
  269. system("echo \"in\" > /sys/class/gpio/gpio88/direction");
  270. /*LCD_VSYNC => GPIO2_22*/ /*CCS communication board 2 proximity*/
  271. system("echo 86 > /sys/class/gpio/export");
  272. system("echo \"in\" > /sys/class/gpio/gpio86/direction");
  273. /***************************************************************/
  274. /*************** GPIO 3 ***************************************/
  275. /***************************************************************/
  276. /*MCASP0_FSX => GPIO3_15*/ /*Emergency Stop button detect*/
  277. system("echo 111 > /sys/class/gpio/export");
  278. system("echo \"in\" > /sys/class/gpio/gpio111/direction");
  279. /*MCASP0_ACLKR => GPIO3_18*/ /*USB1 OCP detect*/
  280. system("echo 114 > /sys/class/gpio/export");
  281. system("echo \"in\" > /sys/class/gpio/gpio114/direction");
  282. /*MCASP0_AHCLKR => GPIO3_17*/ /*Emergency IO for AM3352 and STM32F407*/
  283. system("echo 113 > /sys/class/gpio/export");
  284. system("echo \"in\" > /sys/class/gpio/gpio113/direction");
  285. /*MCASP0_ACLKX => GPIO3_14*/ /*Ethernet PHY reset*/
  286. system("echo 110 > /sys/class/gpio/export");
  287. system("echo \"out\" > /sys/class/gpio/gpio110/direction");
  288. system("echo 0 > /sys/class/gpio/gpio110/value");
  289. /* MCASP0_FSR => GPIO3_19 */ /*SMR Enable control_1*/
  290. system("echo 115 > /sys/class/gpio/export");
  291. system("echo \"out\" > /sys/class/gpio/gpio115/direction");
  292. system("echo 0 > /sys/class/gpio/gpio115/value");
  293. /* MCASP0_AXR0 => GPIO3_16 */ /*CSU board function OK indicator.*/
  294. system("echo 112 > /sys/class/gpio/export");
  295. system("echo \"out\" > /sys/class/gpio/gpio112/direction");
  296. system("echo 0 > /sys/class/gpio/gpio112/value");
  297. /* MCASP0_AXR1 => GPIO3_20 */ /*SMR Enable control_2*/
  298. system("echo 116 > /sys/class/gpio/export");
  299. system("echo \"out\" > /sys/class/gpio/gpio116/direction");
  300. system("echo 0 > /sys/class/gpio/gpio116/value");
  301. #ifdef SystemLogMessage
  302. StoreLogMsg("[main]InitGPIO: Initial GPIO OK");
  303. #endif
  304. }
  305. int LoadSysConfigAndInfo(struct SysConfigData *ptr)
  306. {
  307. int fd,wrd;
  308. struct SysConfigData *buf;
  309. unsigned char *PtrBuf;
  310. unsigned int ChkSum,ChkSumOrg;
  311. if((buf=malloc(sizeof(struct SysConfigData)))==NULL)
  312. {
  313. #ifdef SystemLogMessage
  314. StoreLogMsg("[main]LoadSysConfigAndInfo:malloc buffer NG,rebooting..");
  315. #endif
  316. if(ShmStatusCodeData!=NULL)
  317. {
  318. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  319. }
  320. sleep(5);
  321. system("reboot -f");
  322. sleep(5);
  323. system("reboot -f");
  324. }
  325. memset(buf, 0, sizeof(struct SysConfigData));
  326. fd = open("/dev/mtdblock10", O_RDWR);
  327. if (fd < 0)
  328. {
  329. free(buf);
  330. #ifdef SystemLogMessage
  331. StoreLogMsg("[main]LoadSysConfigAndInfo:open mtdblock10 NG,rebooting..");
  332. #endif
  333. if(ShmStatusCodeData!=NULL)
  334. {
  335. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  336. }
  337. sleep(5);
  338. system("reboot -f");
  339. sleep(5);
  340. system("reboot -f");
  341. }
  342. wrd=read(fd, buf,sizeof(struct SysConfigData));
  343. close(fd);
  344. if(wrd!=(sizeof(struct SysConfigData)))
  345. {
  346. free(buf);
  347. #ifdef SystemLogMessage
  348. StoreLogMsg("[main]LoadSysConfigAndInfo: read SysConfigData data NG,rebooting..");
  349. #endif
  350. if(ShmStatusCodeData!=NULL)
  351. {
  352. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  353. }
  354. sleep(5);
  355. system("reboot -f");
  356. sleep(5);
  357. system("reboot -f");
  358. }
  359. PtrBuf=(unsigned char *)buf;
  360. ChkSum=0;
  361. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  362. {
  363. ChkSum+=PtrBuf[wrd];
  364. }
  365. ChkSumOrg=buf->Checksum;
  366. if(ChkSum!=ChkSumOrg)
  367. {
  368. #ifdef SystemLogMessage
  369. StoreLogMsg("[main]LoadSysConfigAndInfo: Primary SysConfigData checksum NG, read backup");
  370. #endif
  371. fd = open("/dev/mtdblock11", O_RDWR);
  372. if (fd < 0)
  373. {
  374. free(buf);
  375. #ifdef SystemLogMessage
  376. StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock11 (backup) NG,rebooting..");
  377. #endif
  378. if(ShmStatusCodeData!=NULL)
  379. {
  380. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  381. }
  382. sleep(5);
  383. system("reboot -f");
  384. sleep(5);
  385. system("reboot -f");
  386. }
  387. memset(buf, 0, sizeof(struct SysConfigData));
  388. wrd=read(fd, buf,sizeof(struct SysConfigData));
  389. close(fd);
  390. if(wrd!=sizeof(struct SysConfigData))
  391. {
  392. free(buf);
  393. #ifdef SystemLogMessage
  394. StoreLogMsg("[main]LoadSysConfigAndInfo: read backup SysConfigData data NG,rebooting..");
  395. #endif
  396. if(ShmStatusCodeData!=NULL)
  397. {
  398. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  399. }
  400. sleep(5);
  401. system("reboot -f");
  402. sleep(5);
  403. system("reboot -f");
  404. }
  405. PtrBuf=(unsigned char *)buf;
  406. ChkSum=0;
  407. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  408. {
  409. ChkSum+=PtrBuf[wrd];
  410. }
  411. ChkSumOrg=buf->Checksum;
  412. if(ChkSum!=ChkSumOrg)
  413. {
  414. #ifdef SystemLogMessage
  415. StoreLogMsg("[main]LoadSysConfigAndInfo: backup SysConfigData checksum NG, read Factory default");
  416. #endif
  417. fd = open("/dev/mtdblock12", O_RDWR);
  418. if (fd < 0)
  419. {
  420. free(buf);
  421. #ifdef SystemLogMessage
  422. StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock12 (Factory default) NG,rebooting..");
  423. #endif
  424. if(ShmStatusCodeData!=NULL)
  425. {
  426. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  427. }
  428. sleep(5);
  429. system("reboot -f");
  430. sleep(5);
  431. system("reboot -f");
  432. }
  433. memset(buf, 0, sizeof(struct SysConfigData));
  434. wrd=read(fd, buf,sizeof(struct SysConfigData));
  435. close(fd);
  436. if(wrd!=sizeof(struct SysConfigData))
  437. {
  438. free(buf);
  439. #ifdef SystemLogMessage
  440. StoreLogMsg("[main]LoadSysConfigAndInfo: read factory default SysConfigData data NG,rebooting..");
  441. #endif
  442. if(ShmStatusCodeData!=NULL)
  443. {
  444. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  445. }
  446. sleep(5);
  447. system("reboot -f");
  448. sleep(5);
  449. system("reboot -f");
  450. }
  451. PtrBuf=(unsigned char *)buf;
  452. ChkSum=0;
  453. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  454. {
  455. ChkSum+=PtrBuf[wrd];
  456. }
  457. ChkSumOrg=buf->Checksum;
  458. if(ChkSum!=ChkSumOrg)
  459. {
  460. #ifdef SystemLogMessage
  461. StoreLogMsg("[main]LoadSysConfigAndInfo: factory default SysConfigData checksum NG, restore factory default");
  462. #endif
  463. goto DefaultShm;
  464. }
  465. }
  466. }
  467. //load OK
  468. memcpy((struct SysConfigData *)ptr,(struct SysConfigData *)buf,sizeof(struct SysConfigData));
  469. free(buf);
  470. #ifdef SystemLogMessage
  471. StoreLogMsg("[main]LoadSysConfigAndInfo: Load SysConfigData OK");
  472. #endif
  473. return 1;
  474. DefaultShm:
  475. system("cd /root;./FactoryConfig");
  476. system("sync");
  477. sleep(5);
  478. system("reboot -f");
  479. sleep(5);
  480. system("reboot -f");
  481. }
  482. void InitEthernet()
  483. {
  484. char tmpbuf[256];
  485. unsigned int address;
  486. system("echo 1 > /sys/class/gpio/gpio110/value");//reset PHY
  487. sleep(2);
  488. //Init Eth0 for internet
  489. memset(tmpbuf,0,256);
  490. sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up",
  491. ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
  492. ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
  493. system(tmpbuf);
  494. memset(tmpbuf,0,256);
  495. sprintf(tmpbuf,"route add default gw %s eth0 ",
  496. ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress);
  497. system(tmpbuf);
  498. //Init Eth1 for administrator tool
  499. memset(tmpbuf,0,256);
  500. sprintf(tmpbuf,"/sbin/ifconfig eth1 %s netmask %s up",
  501. ShmSysConfigAndInfo->SysConfig.Eth1Interface.EthIpAddress,
  502. ShmSysConfigAndInfo->SysConfig.Eth1Interface.EthSubmaskAddress);
  503. system(tmpbuf);
  504. //Run DHCP client if enabled
  505. system("killall udhcpc");
  506. system("rm -rf /etc/resolv.conf");
  507. system("echo nameserver 8.8.8.8 > /etc/resolv.conf"); //Google DNS server
  508. system("echo nameserver 180.76.76.76 > /etc/resolv.conf"); //Baidu DNS server
  509. if(ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthDhcpClient==0)
  510. system("/sbin/udhcpc -i eth0 -s /root/simple.script > /dev/null &");
  511. #ifdef SystemLogMessage
  512. StoreLogMsg("[main]InitEthernet: Initial Ethernet OK");
  513. #endif
  514. }
  515. int Initialization()
  516. {
  517. InitGPIO();
  518. LoadSysConfigAndInfo(&ShmSysConfigAndInfo->SysConfig);
  519. InitEthernet();
  520. #ifdef SystemLogMessage
  521. StoreLogMsg("[main]Initialization: Initialization OK");
  522. #endif
  523. }
  524. int SpawnTask()
  525. {
  526. system("/root/EventLogging &");
  527. system("/root/LcmControl &");
  528. system("/root/InternalComm &");
  529. system("/root/PrimaryComm &");
  530. system("/root/EvComm &");
  531. system("/root/OcppBackend &");
  532. /*
  533. if 4G model
  534. system("/root/4gModem &");
  535. else if WiFi model
  536. system("/root/WiFiModem &");
  537. */
  538. }
  539. int StoreUsrConfigData(struct SysConfigData *UsrData)
  540. {
  541. int fd,wrd;
  542. unsigned int i,Chk;
  543. unsigned char *ptr;
  544. Chk=0;
  545. ptr=(unsigned char *)UsrData;
  546. for(i=0;i<sizeof(struct SysConfigData)-4;i++)
  547. {
  548. Chk+=*(ptr+i);
  549. }
  550. UsrData->Checksum=Chk;
  551. fd = open("/dev/mtdblock10", O_RDWR);
  552. if (fd < 0)
  553. {
  554. #ifdef SystemLogMessage
  555. StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock10 NG");
  556. #endif
  557. return 0;
  558. }
  559. wrd=write(fd, UsrData, sizeof(struct SysConfigData));
  560. close(fd);
  561. if(wrd!=(sizeof(struct SysConfigData)))
  562. {
  563. #ifdef SystemLogMessage
  564. StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock10 NG");
  565. #endif
  566. return 0;
  567. }
  568. fd = open("/dev/mtdblock11", O_RDWR);
  569. if (fd < 0)
  570. {
  571. #ifdef SystemLogMessage
  572. StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock11(backup) NG");
  573. #endif
  574. return 0;
  575. }
  576. wrd=write(fd, UsrData, sizeof(struct SysConfigData));
  577. close(fd);
  578. if(wrd!=(sizeof(struct SysConfigData)))
  579. {
  580. #ifdef SystemLogMessage
  581. StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock11(backup) NG");
  582. #endif
  583. return 0;
  584. }
  585. return 1;
  586. }
  587. /**************************************************************/
  588. /************** main function********************************/
  589. /*************************************************************/
  590. int main(int argc,char *argv[])
  591. {
  592. int Rtn=0;
  593. unsigned int StartTime;
  594. struct timeb StartChargingTime,CurrentChargingTime,ChargingLoopTime;
  595. float ChargingPower,ChargingEnergy;
  596. //Create all share memory
  597. if(CreatShareMemory()==0)
  598. {
  599. #ifdef SystemLogMessage
  600. StoreLogMsg("[main]main:CreatShareMemory NG");
  601. #endif
  602. if(ShmStatusCodeData!=NULL)
  603. {
  604. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
  605. }
  606. sleep(5);
  607. system("reboot -f");
  608. sleep(5);
  609. system("reboot -f");
  610. }
  611. //CSU Initialization
  612. Initialization();
  613. //task spawn
  614. //SpawnTask();
  615. /**************************************************************/
  616. /************** main Loop********************************/
  617. /*****************************************************************/
  618. while(1)
  619. {
  620. sleep(10);
  621. }//main while
  622. }