main.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  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 CcsData *ShmCcsData;
  25. #ifdef SystemLogMessage
  26. int StoreLogMsg(unsigned char *DataString)
  27. {
  28. unsigned char Buf[256];
  29. time_t CurrentTime;
  30. struct tm *tm;
  31. memset(Buf,0,sizeof(Buf));
  32. CurrentTime = time(NULL);
  33. tm=localtime(&CurrentTime);
  34. sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
  35. tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
  36. DataString,
  37. tm->tm_year+1900,tm->tm_mon+1);
  38. system(Buf);
  39. #ifdef Debug
  40. printf("%s \n",DataString);
  41. #endif
  42. }
  43. #endif
  44. int DiffTimeb(struct timeb ST, struct timeb ET)
  45. {
  46. //return milli-second
  47. unsigned int StartTime,StopTime;
  48. StartTime=(unsigned int)ST.time;
  49. StopTime=(unsigned int)ET.time;
  50. return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
  51. }
  52. /**************************************************************************************/
  53. /**************************Create all share memory *********************************/
  54. /**************************************************************************************/
  55. int CreatShareMemory()
  56. {
  57. int MeterSMId;
  58. //creat ShmSysConfigAndInfo
  59. if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0)
  60. {
  61. #ifdef SystemLogMessage
  62. StoreLogMsg("[main]CreatShareMemory:shmget ShmSysConfigAndInfo NG");
  63. #endif
  64. return 0;
  65. }
  66. else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  67. {
  68. #ifdef SystemLogMessage
  69. StoreLogMsg("[main]CreatShareMemory:shmat ShmSysConfigAndInfo NG");
  70. #endif
  71. return 0;
  72. }
  73. memset(ShmSysConfigAndInfo,0,sizeof(struct SysConfigAndInfo));
  74. //creat ShmStatusCodeData
  75. if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0)
  76. {
  77. #ifdef SystemLogMessage
  78. StoreLogMsg("[main]CreatShareMemory:shmget ShmStatusCodeData NG");
  79. #endif
  80. return 0;
  81. }
  82. else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  83. {
  84. #ifdef SystemLogMessage
  85. StoreLogMsg("[main]CreatShareMemory:shmat ShmStatusCodeData NG");
  86. #endif
  87. return 0;
  88. }
  89. memset(ShmStatusCodeData,0,sizeof(struct StatusCodeData));
  90. //creat ShmCcsData
  91. if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData), IPC_CREAT | 0777)) < 0)
  92. {
  93. #ifdef SystemLogMessage
  94. StoreLogMsg("[main]CreatShareMemory:shmget ShmCcsData NG");
  95. #endif
  96. return 0;
  97. }
  98. else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  99. {
  100. #ifdef SystemLogMessage
  101. StoreLogMsg("[main]CreatShareMemory:shmat ShmCcsData NG");
  102. #endif
  103. return 0;
  104. }
  105. memset(ShmCcsData,0,sizeof(struct CcsData));
  106. return 1;
  107. }
  108. /**************************************************************************************/
  109. /****************Following functions are CSU initialization***************************/
  110. /**************************************************************************************/
  111. void InitGPIO()
  112. {
  113. /*****************0~3, 4 bank, bank x 32+ num*********************/
  114. /***************************************************************/
  115. /*************** INPUT PIN ***************************************/
  116. /***************************************************************/
  117. /*GPIO2_0: QCA7000 interrupt */
  118. system("echo 64 > /sys/class/gpio/export");
  119. system("echo \"in\" > /sys/class/gpio/gpio64/direction");
  120. /***************************************************************/
  121. /*************** OUTPUT PIN ************************************/
  122. /***************************************************************/
  123. /*GPIO2_25: AM_IO_2, H: ?; L: ?*/
  124. system("echo 89 > /sys/class/gpio/export");
  125. system("echo \"out\" > /sys/class/gpio/gpio89/direction");
  126. system("echo 0 > /sys/class/gpio/gpio89/value");
  127. /*GPIO2_23: AM_IO_1, H: ?; L: ?*/
  128. system("echo 87 > /sys/class/gpio/export");
  129. system("echo \"out\" > /sys/class/gpio/gpio87/direction");
  130. system("echo 0 > /sys/class/gpio/gpio87/value");
  131. /*GPIO2_24: AM_QCA_PWR_RST, H: reset, L: noraml*/
  132. system("echo 88 > /sys/class/gpio/export");
  133. system("echo \"out\" > /sys/class/gpio/gpio88/direction");
  134. system("echo 0 > /sys/class/gpio/gpio88/value");
  135. /*GPIO2_22: Pilot_state E, H: state E, L: normal*/
  136. system("echo 86 > /sys/class/gpio/export");
  137. system("echo \"out\" > /sys/class/gpio/gpio86/direction");
  138. system("echo 0 > /sys/class/gpio/gpio86/value");
  139. #ifdef SystemLogMessage
  140. StoreLogMsg("[main]InitGPIO: Initial GPIO OK");
  141. #endif
  142. }
  143. int LoadSysConfigAndInfo(struct SysConfigData *ptr)
  144. {
  145. int fd,wrd;
  146. struct SysConfigData *buf;
  147. unsigned char *PtrBuf;
  148. unsigned int ChkSum,ChkSumOrg;
  149. if((buf=malloc(sizeof(struct SysConfigData)))==NULL)
  150. {
  151. #ifdef SystemLogMessage
  152. StoreLogMsg("[main]LoadSysConfigAndInfo:malloc buffer NG,rebooting..");
  153. #endif
  154. if(ShmStatusCodeData!=NULL)
  155. {
  156. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  157. }
  158. sleep(5);
  159. system("reboot -f");
  160. sleep(5);
  161. system("reboot -f");
  162. }
  163. memset(buf, 0, sizeof(struct SysConfigData));
  164. fd = open("/dev/mtdblock10", O_RDWR);
  165. if (fd < 0)
  166. {
  167. free(buf);
  168. #ifdef SystemLogMessage
  169. StoreLogMsg("[main]LoadSysConfigAndInfo:open mtdblock10 NG,rebooting..");
  170. #endif
  171. if(ShmStatusCodeData!=NULL)
  172. {
  173. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  174. }
  175. sleep(5);
  176. system("reboot -f");
  177. sleep(5);
  178. system("reboot -f");
  179. }
  180. wrd=read(fd, buf,sizeof(struct SysConfigData));
  181. close(fd);
  182. if(wrd!=(sizeof(struct SysConfigData)))
  183. {
  184. free(buf);
  185. #ifdef SystemLogMessage
  186. StoreLogMsg("[main]LoadSysConfigAndInfo: read SysConfigData data NG,rebooting..");
  187. #endif
  188. if(ShmStatusCodeData!=NULL)
  189. {
  190. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  191. }
  192. sleep(5);
  193. system("reboot -f");
  194. sleep(5);
  195. system("reboot -f");
  196. }
  197. PtrBuf=(unsigned char *)buf;
  198. ChkSum=0;
  199. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  200. {
  201. ChkSum+=PtrBuf[wrd];
  202. }
  203. ChkSumOrg=buf->Checksum;
  204. if(ChkSum!=ChkSumOrg)
  205. {
  206. #ifdef SystemLogMessage
  207. StoreLogMsg("[main]LoadSysConfigAndInfo: Primary SysConfigData checksum NG, read backup");
  208. #endif
  209. fd = open("/dev/mtdblock11", O_RDWR);
  210. if (fd < 0)
  211. {
  212. free(buf);
  213. #ifdef SystemLogMessage
  214. StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock11 (backup) NG,rebooting..");
  215. #endif
  216. if(ShmStatusCodeData!=NULL)
  217. {
  218. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  219. }
  220. sleep(5);
  221. system("reboot -f");
  222. sleep(5);
  223. system("reboot -f");
  224. }
  225. memset(buf, 0, sizeof(struct SysConfigData));
  226. wrd=read(fd, buf,sizeof(struct SysConfigData));
  227. close(fd);
  228. if(wrd!=sizeof(struct SysConfigData))
  229. {
  230. free(buf);
  231. #ifdef SystemLogMessage
  232. StoreLogMsg("[main]LoadSysConfigAndInfo: read backup SysConfigData data NG,rebooting..");
  233. #endif
  234. if(ShmStatusCodeData!=NULL)
  235. {
  236. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  237. }
  238. sleep(5);
  239. system("reboot -f");
  240. sleep(5);
  241. system("reboot -f");
  242. }
  243. PtrBuf=(unsigned char *)buf;
  244. ChkSum=0;
  245. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  246. {
  247. ChkSum+=PtrBuf[wrd];
  248. }
  249. ChkSumOrg=buf->Checksum;
  250. if(ChkSum!=ChkSumOrg)
  251. {
  252. #ifdef SystemLogMessage
  253. StoreLogMsg("[main]LoadSysConfigAndInfo: backup SysConfigData checksum NG, read Factory default");
  254. #endif
  255. fd = open("/dev/mtdblock12", O_RDWR);
  256. if (fd < 0)
  257. {
  258. free(buf);
  259. #ifdef SystemLogMessage
  260. StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock12 (Factory default) NG,rebooting..");
  261. #endif
  262. if(ShmStatusCodeData!=NULL)
  263. {
  264. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  265. }
  266. sleep(5);
  267. system("reboot -f");
  268. sleep(5);
  269. system("reboot -f");
  270. }
  271. memset(buf, 0, sizeof(struct SysConfigData));
  272. wrd=read(fd, buf,sizeof(struct SysConfigData));
  273. close(fd);
  274. if(wrd!=sizeof(struct SysConfigData))
  275. {
  276. free(buf);
  277. #ifdef SystemLogMessage
  278. StoreLogMsg("[main]LoadSysConfigAndInfo: read factory default SysConfigData data NG,rebooting..");
  279. #endif
  280. if(ShmStatusCodeData!=NULL)
  281. {
  282. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  283. }
  284. sleep(5);
  285. system("reboot -f");
  286. sleep(5);
  287. system("reboot -f");
  288. }
  289. PtrBuf=(unsigned char *)buf;
  290. ChkSum=0;
  291. for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
  292. {
  293. ChkSum+=PtrBuf[wrd];
  294. }
  295. ChkSumOrg=buf->Checksum;
  296. if(ChkSum!=ChkSumOrg)
  297. {
  298. #ifdef SystemLogMessage
  299. StoreLogMsg("[main]LoadSysConfigAndInfo: factory default SysConfigData checksum NG, restore factory default");
  300. #endif
  301. goto DefaultShm;
  302. }
  303. }
  304. }
  305. //load OK
  306. memcpy((struct SysConfigData *)ptr,(struct SysConfigData *)buf,sizeof(struct SysConfigData));
  307. free(buf);
  308. #ifdef SystemLogMessage
  309. StoreLogMsg("[main]LoadSysConfigAndInfo: Load SysConfigData OK");
  310. #endif
  311. return 1;
  312. DefaultShm:
  313. system("cd /root;./FactoryConfig");
  314. system("sync");
  315. sleep(5);
  316. system("reboot -f");
  317. sleep(5);
  318. system("reboot -f");
  319. }
  320. int Initialization()
  321. {
  322. unsigned char str[256];
  323. //init GPIO
  324. InitGPIO();
  325. //init ecap0
  326. memset(str,0,sizeof(str));
  327. system("echo 0 > /sys/class/pwm/pwmchip0/export");
  328. system("echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable");
  329. system("echo 1000000 > /sys /class/pwm/pwmchip0/pwm0/period");// nano seconds =>1k Hz
  330. system("echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle"); //default 100%
  331. system("echo 1 > /sys /class/pwm/pwmchip0/pwm0/polarity");
  332. LoadSysConfigAndInfo(&ShmSysConfigAndInfo->SysConfig);
  333. #ifdef SystemLogMessage
  334. StoreLogMsg("[main]Initialization: Initialization OK");
  335. #endif
  336. }
  337. int SpawnTask()
  338. {
  339. system("/root/EventLogging &");
  340. system("/root/CsuComm &");
  341. system("/root/EvComm &");
  342. }
  343. int StoreUsrConfigData(struct SysConfigData *UsrData)
  344. {
  345. int fd,wrd;
  346. unsigned int i,Chk;
  347. unsigned char *ptr;
  348. Chk=0;
  349. ptr=(unsigned char *)UsrData;
  350. for(i=0;i<sizeof(struct SysConfigData)-4;i++)
  351. {
  352. Chk+=*(ptr+i);
  353. }
  354. UsrData->Checksum=Chk;
  355. fd = open("/dev/mtdblock10", O_RDWR);
  356. if (fd < 0)
  357. {
  358. #ifdef SystemLogMessage
  359. StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock10 NG");
  360. #endif
  361. return 0;
  362. }
  363. wrd=write(fd, UsrData, sizeof(struct SysConfigData));
  364. close(fd);
  365. if(wrd!=(sizeof(struct SysConfigData)))
  366. {
  367. #ifdef SystemLogMessage
  368. StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock10 NG");
  369. #endif
  370. return 0;
  371. }
  372. fd = open("/dev/mtdblock11", O_RDWR);
  373. if (fd < 0)
  374. {
  375. #ifdef SystemLogMessage
  376. StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock11(backup) NG");
  377. #endif
  378. return 0;
  379. }
  380. wrd=write(fd, UsrData, sizeof(struct SysConfigData));
  381. close(fd);
  382. if(wrd!=(sizeof(struct SysConfigData)))
  383. {
  384. #ifdef SystemLogMessage
  385. StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock11(backup) NG");
  386. #endif
  387. return 0;
  388. }
  389. return 1;
  390. }
  391. /**************************************************************/
  392. /************** main function********************************/
  393. /*************************************************************/
  394. int main(int argc,char *argv[])
  395. {
  396. int Rtn=0;
  397. unsigned int StartTime;
  398. struct timeb StartChargingTime,CurrentChargingTime,ChargingLoopTime;
  399. float ChargingPower,ChargingEnergy;
  400. //Create all share memory
  401. if(CreatShareMemory()==0)
  402. {
  403. #ifdef SystemLogMessage
  404. StoreLogMsg("[main]main:CreatShareMemory NG");
  405. #endif
  406. if(ShmStatusCodeData!=NULL)
  407. {
  408. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
  409. }
  410. sleep(5);
  411. system("reboot -f");
  412. sleep(5);
  413. system("reboot -f");
  414. }
  415. //CSU Initialization
  416. Initialization();
  417. //task spawn
  418. //SpawnTask();
  419. /**************************************************************/
  420. /************** main Loop********************************/
  421. /*****************************************************************/
  422. while(1)
  423. {
  424. }//main while
  425. }