Module_LcmControl.c 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294
  1. #include <stdio.h> /*標準輸入輸出定義*/
  2. #include <stdlib.h> /*標準函數庫定義*/
  3. #include <stdint.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <termios.h>
  7. #include <fcntl.h>
  8. #include <time.h>
  9. #include <sys/ioctl.h>
  10. #include <sys/timeb.h>
  11. #include "Module_LcmControl.h"
  12. #include "../Log/log.h"
  13. #include "../ShareMemory/shmMem.h"
  14. #include "../Define/define.h"
  15. #include "../Config.h"
  16. #include "../SelectGun/SelectGun.h"
  17. #define uSEC_VAL (1000000)
  18. //------------------------------------------------------------------------------
  19. //struct SysConfigAndInfo *ShmSysConfigAndInfo;
  20. //struct StatusCodeData *ShmStatusCodeData;
  21. static struct SysConfigData *pSysConfig = NULL;
  22. static struct SysInfoData *pSysInfo = NULL;
  23. static struct WARNING_CODE_INFO *pSysWarning = NULL;
  24. static struct FanModuleData *ShmFanModuleData;
  25. static struct PrimaryMcuData *ShmPrimaryMcuData;
  26. static SelectGunInfo *ShmSelectGunInfo = NULL;
  27. static struct ChargingInfoData *pDcChargingInfo = NULL;
  28. static DcCommonInfo *ShmDcCommonData = NULL;
  29. short _currentPage = _LCM_NONE;
  30. uint8_t _totalCount;
  31. uint8_t _showInformIndex = 0;
  32. float ChargeMaxPower_0 = 0;
  33. float ChargeMaxPower_1 = 0;
  34. int _port;
  35. //char* pPortName = "/dev/ttyO2";
  36. char *pPortName = "/dev/ttyS3";
  37. char *moduleName = "DMT80480T070_09WT";
  38. bool is_show = false;
  39. uint8_t _everyPageRollChange;
  40. //==========================================
  41. // Open and Close RS232 and R/W
  42. //==========================================
  43. unsigned long GetClockTimeoutValue(struct timespec _start_time)
  44. {
  45. struct timespec ts_end;
  46. unsigned long ret = 0;
  47. clock_gettime(CLOCK_MONOTONIC, &ts_end);
  48. ret = ((unsigned long)(ts_end.tv_sec - _start_time.tv_sec) * 1000000) + ((unsigned long)((ts_end.tv_nsec / 1000) - (_start_time.tv_nsec/ 1000)));
  49. return ret;
  50. }
  51. int CreateCommunicationLcmPort()
  52. {
  53. int fd;
  54. struct termios tios;
  55. fd = open(pPortName, O_RDWR);
  56. if (fd <= 0) {
  57. log_error("open /dev/ttyS3 NG ");
  58. return -1;
  59. }
  60. ioctl(fd, TCGETS, &tios);
  61. tios.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
  62. tios.c_lflag = 0;
  63. tios.c_iflag = 0;
  64. tios.c_oflag = 0;
  65. tios.c_cc[VMIN] = 0;
  66. tios.c_cc[VTIME] = (uint8_t) 5;
  67. tios.c_lflag = 0;
  68. tcflush(fd, TCIFLUSH);
  69. ioctl(fd, TCSETS, &tios);
  70. return fd;
  71. }
  72. void CloseCommunicationLcmPort()
  73. {
  74. close(_port);
  75. }
  76. void WriteCmdToLcm(uint8_t *cmd, uint8_t cmdLen)
  77. {
  78. int len = write(_port, cmd, cmdLen);
  79. if (len < sizeof(cmd)) {
  80. log_error("Write cmd to LCM Failure. ");
  81. }
  82. }
  83. void ReadMsgFromLcm(uint8_t *msg, uint8_t readLen)
  84. {
  85. read(_port, msg, readLen);
  86. if (*msg == CMD_TITLE_1 && *(msg + 1) == CMD_TITLE_2) {
  87. if (*(msg + 3) == CMD_WRITE) {
  88. switch (*(msg + 4)) {
  89. case CMD_REGISTER: {
  90. // 頁面
  91. strcpy((char *)pSysInfo->LcmHwRev, moduleName);
  92. _currentPage = *(msg + 7);
  93. }
  94. break;
  95. }
  96. } else if (*(msg + 3) == CMD_MULTI_READ) {
  97. // switch ((unsigned short) (*(msg + 4) << 8) + (unsigned short) *(msg + 5))
  98. // {
  99. // case BUTTON_GUN_INDEX:
  100. // {
  101. // // 當前選的槍號
  102. // _curGunIndex = (*(msg + 8));
  103. // }
  104. // break;
  105. // }
  106. }
  107. }
  108. }
  109. void GetHrFormTimeString(char* time,char* hr)
  110. {
  111. //char tm[] = "2021-12-06 17:29:08:084";
  112. int _temp_hr;
  113. for(int i = 0 ; i < 2 ; i++) {
  114. hr[i] = time[i+11];
  115. }
  116. if ((atoi(hr) + 8) > 23) {
  117. _temp_hr = atoi(hr) + 8 - 24;
  118. sprintf(hr, "%02d", _temp_hr);
  119. } else if( atoi(hr) == NULL ) {
  120. strcmp(hr,"");
  121. }
  122. }
  123. void GetMinFormTimeString(char* time,char* min)
  124. {
  125. //char tm[] = "2021-12-06 17:29:08:084";
  126. for(int i = 0 ; i < 2 ; i++) {
  127. min[i] = time[i+14];
  128. }
  129. if( atoi(min) == NULL || atoi(min) > 60) {
  130. strcmp(min,"");
  131. }
  132. }
  133. //================================================
  134. // Function
  135. //================================================
  136. void ChangeToOtherPage(short newPage)
  137. {
  138. uint8_t cmd[7];
  139. memset(cmd, 0x00, sizeof(cmd));
  140. cmd[0] = CMD_TITLE_1;
  141. cmd[1] = CMD_TITLE_2;
  142. cmd[2] = 0x02 + sizeof(newPage);
  143. cmd[3] = CMD_READ;
  144. cmd[4] = CMD_REGISTER;
  145. cmd[5] = newPage >> 8;
  146. cmd[6] = newPage & 0x00FF;
  147. WriteCmdToLcm(cmd, ARRAY_SIZE(cmd));
  148. usleep(100000);
  149. }
  150. void ChangeBackLight(bool islight)
  151. {
  152. uint8_t value = 0x01;
  153. if (islight) {
  154. value = 0x20;
  155. }
  156. uint8_t cmd[7];
  157. memset(cmd, 0x00, sizeof(cmd));
  158. cmd[0] = CMD_TITLE_1;
  159. cmd[1] = CMD_TITLE_2;
  160. cmd[2] = 0x03;
  161. cmd[3] = CMD_READ;
  162. cmd[4] = CMD_BACKLIGHT;
  163. cmd[5] = value;
  164. WriteCmdToLcm(cmd, ARRAY_SIZE(cmd));
  165. usleep(100000);
  166. }
  167. void GetCurrentPage()
  168. {
  169. uint8_t cmd[6];
  170. memset(cmd, 0x00, sizeof(cmd));
  171. uint8_t msg[8];
  172. memset(msg, 0x00, sizeof(msg));
  173. cmd[0] = CMD_TITLE_1;
  174. cmd[1] = CMD_TITLE_2;
  175. cmd[2] = 0x03; // 底下總長度
  176. cmd[3] = CMD_WRITE;
  177. cmd[4] = CMD_REGISTER;
  178. cmd[5] = 0x02;
  179. WriteCmdToLcm(cmd, ARRAY_SIZE(cmd));
  180. usleep(5000);
  181. ReadMsgFromLcm(msg, ARRAY_SIZE(msg));
  182. }
  183. void DisplayValueToLcm(short address, uint8_t *data, uint8_t len)
  184. {
  185. uint8_t cmd[256];
  186. memset(cmd, 0x00, sizeof(cmd));
  187. cmd[0] = CMD_TITLE_1;
  188. cmd[1] = CMD_TITLE_2;
  189. cmd[2] = 0x03 + len;
  190. cmd[3] = CMD_MULTI_WRITE;
  191. cmd[4] = address >> 8;
  192. cmd[5] = address & 0x00FF;
  193. for (uint8_t count = 0; count < len; count++) {
  194. cmd[6 + count] = *(data + count);
  195. }
  196. WriteCmdToLcm(cmd, cmd[2] + 3);
  197. }
  198. void ChangeDisplay2Value(short address, short value)
  199. {
  200. uint8_t data[2];
  201. data[0] = value >> 8;
  202. data[1] = value & 0x00FF;
  203. //log_info("Addr:0x%x, value:%d",address,value);
  204. DisplayValueToLcm(address, data, sizeof(data));
  205. }
  206. //================================================
  207. // Warning process
  208. //================================================
  209. void string2ByteArray(uint8_t *input, uint8_t *output)
  210. {
  211. int loop;
  212. int i;
  213. loop = 0;
  214. i = 0;
  215. while (input[loop] != '\0') {
  216. output[i++] = input[loop++];
  217. }
  218. output[loop] = '\0';
  219. }
  220. void RefreshProgressAnimation(uint8_t progress_index)
  221. {
  222. if(_everyPageRollChange % 2) {
  223. progress_index+=1;
  224. }
  225. ChangeDisplay2Value(_ProgressBar_LEVEL,progress_index);
  226. _everyPageRollChange++;
  227. }
  228. //================================================
  229. // Change current page
  230. //================================================
  231. void ChangeCurPage()
  232. {
  233. //log_info("cur = %d ,system = %d, lcm = %d ",_currentPage, pSysInfo->SystemPage, pSysInfo->PageIndex);
  234. struct ChargingInfoData *pDcChargingInfo_0 = (struct ChargingInfoData *)GetDcChargingInfoData(LEFT_GUN_NUM);
  235. struct ChargingInfoData *pDcChargingInfo_1 = (struct ChargingInfoData *)GetDcChargingInfoData(RIGHT_GUN_NUM);
  236. switch (pSysInfo->SystemPage) {
  237. case _LCM_VIEW:
  238. if (pDcChargingInfo_0->SystemStatus == S_IDLE && pDcChargingInfo_1->SystemStatus == S_IDLE ) {
  239. pSysInfo->PageIndex = __VIEW_ALL_IDLE_;
  240. } else if(pDcChargingInfo_0->SystemStatus == S_CHARGING && pDcChargingInfo_1->SystemStatus != S_CHARGING) {
  241. pSysInfo->PageIndex = __VIEW_LEFT_CHARGE_;
  242. } else if(pDcChargingInfo_0->SystemStatus != S_CHARGING && pDcChargingInfo_1->SystemStatus == S_CHARGING) {
  243. pSysInfo->PageIndex = __VIEW_RIGHT_CHARGE_;
  244. } else if(pDcChargingInfo_0->SystemStatus == S_CHARGING && pDcChargingInfo_1->SystemStatus == S_CHARGING) {
  245. pSysInfo->PageIndex = __VIEW_ALL_CHARGE_;
  246. }
  247. break;
  248. case _LCM_START_SCAN:
  249. log_info("Gun%d Enter Start Scan", pSysInfo->CurGunSelected);
  250. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM)
  251. pSysInfo->PageIndex = __START_SCAN_LEFT;
  252. else
  253. pSysInfo->PageIndex = __START_SCAN_RIGHT;
  254. break;
  255. case _LCM_START_AUTHORIZING:
  256. pSysInfo->PageIndex = __START_AUTHORIZE_;
  257. break;
  258. case _LCM_START_AUTHORIZE_FAIL:
  259. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM)
  260. pSysInfo->PageIndex = __START_AUTHORIZE_FAIL_LEFT;
  261. else
  262. pSysInfo->PageIndex = __START_AUTHORIZE_FAIL_RIGHT;
  263. break;
  264. case _LCM_WAIT_PLUGIN:
  265. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM)
  266. pSysInfo->PageIndex = __WAIT_PLUGIN_;
  267. else
  268. pSysInfo->PageIndex = __WAIT_PLUGIN_RIGHT;
  269. break;
  270. case _LCM_PRECHARGE:
  271. pSysInfo->PageIndex =__PRE_CHARGE_;
  272. break;
  273. case _LCM_LINK_ERROR:
  274. if(pSysInfo->CurGunSelected == LEFT_GUN_NUM)
  275. pSysInfo->PageIndex = __LINKING_ERROR_LEFT;
  276. else
  277. pSysInfo->PageIndex = __LINKING_ERROR_RIGHT;
  278. break;
  279. case _LCM_DETAIL_VIEW:
  280. pSysInfo->PageIndex =__DETAIL_VIEW_;
  281. break;
  282. case _LCM_STOP_RFID:
  283. pSysInfo->PageIndex =__STOP_SCAN_RFID_;
  284. break;
  285. case _LCM_STOP_APP:
  286. pSysInfo->PageIndex =__STOP_SCAN_APP_;
  287. break;
  288. case _LCM_STOP_RFID_FAIL:
  289. pSysInfo->PageIndex =__STOP_RFID_FAIL_;
  290. break;
  291. case _LCM_STOPPING:
  292. pSysInfo->PageIndex =__STOP_AUTHORIZE_;
  293. break;
  294. case _LCM_WAIT_PLUGOUT:
  295. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM)
  296. pSysInfo->PageIndex = __WAIT_PLUGOUT_LEFT;
  297. else
  298. pSysInfo->PageIndex = __WAIT_PLUGOUT_RIGHT;
  299. break;
  300. case _LCM_SUMMARY:
  301. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM)
  302. pSysInfo->PageIndex = __SUMMARY_LEFT;
  303. else
  304. pSysInfo->PageIndex = __SUMMARY_RIGHT;
  305. break;
  306. case _LCM_MAINTAIN:
  307. pSysInfo->PageIndex =__MAINTAIN_PAGE_;
  308. break;
  309. case _LCM_ERROR:
  310. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM)
  311. pSysInfo->PageIndex = __ERROR_PAGE_LEFT;
  312. else
  313. pSysInfo->PageIndex = __ERROR_PAGE_RIGHT;
  314. break;
  315. case _LCM_EMERGENCY:
  316. pSysInfo->PageIndex =__EMERGENCY_BUTTON_;
  317. break;
  318. case _LCM_CONFIRM_STOP:
  319. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM) {
  320. pSysInfo->PageIndex = __CONFIRM_STOP_LEFT;
  321. } else
  322. pSysInfo->PageIndex = __CONFIRM_STOP_RIGHT;
  323. break;
  324. case _LCM_COMMUNICATION:
  325. pSysInfo->PageIndex = __COMMUNICATION_PROCESS;
  326. break;
  327. case _LCM_CHARGING_DETECT:
  328. pSysInfo->PageIndex = __GFD_PROCESS;
  329. break;
  330. case _LCM_PREPARECHARE:
  331. pSysInfo->PageIndex = __PRECHARGE_PROCESS;
  332. break;
  333. }
  334. if (_currentPage != pSysInfo->PageIndex) {
  335. _currentPage = pSysInfo->PageIndex;
  336. ChangeToOtherPage(pSysInfo->PageIndex);
  337. }
  338. }
  339. /*
  340. * View Page
  341. *
  342. */
  343. void ShowViewChargingSoc(uint8_t gunIndex,int soc)
  344. {
  345. uint8_t digits = soc % 10;
  346. uint8_t tens = (soc / 10) %10;
  347. uint8_t hundreds = soc / 100;
  348. if (gunIndex == LEFT_GUN_NUM) {
  349. ChangeDisplay2Value(_LeftGun_Soc_Digits,(short)_ICON_Red_Num_0+digits);
  350. ChangeDisplay2Value(_LeftGun_Soc_Tens,(short)_ICON_Red_Num_0+tens);
  351. if (hundreds == 0 ) {
  352. ChangeDisplay2Value(_LeftGun_Soc_Hundreds,(short)_ICON_Empty);
  353. if (tens == 0 )
  354. ChangeDisplay2Value(_LeftGun_Soc_Tens,(short)_ICON_Empty);
  355. }
  356. else
  357. ChangeDisplay2Value(_LeftGun_Soc_Hundreds,(short)_ICON_Red_Num_1);
  358. } else {
  359. //log_info("%d %d %d",hundreds,tens,digits);
  360. ChangeDisplay2Value(_RightGun_Soc_Digits,(short)_ICON_Red_Num_0+digits);
  361. ChangeDisplay2Value(_RightGun_Soc_Tens,(short)_ICON_Red_Num_0+tens);
  362. if (hundreds == 0 ) {
  363. ChangeDisplay2Value(_RightGun_Soc_Hundreds,(short)_ICON_Empty);
  364. if (tens == 0)
  365. ChangeDisplay2Value(_RightGun_Soc_Tens,(short)_ICON_Empty);
  366. }
  367. else
  368. ChangeDisplay2Value(_RightGun_Soc_Hundreds,(short)_ICON_Red_Num_1);
  369. }
  370. }
  371. void ShowViewChargingTime(uint8_t gunIndex,int time)
  372. {
  373. uint8_t value[10] = {0};
  374. int min;
  375. min = time/60;
  376. sprintf((char *)value,"%d",min);
  377. if (gunIndex == LEFT_GUN_NUM) {
  378. DisplayValueToLcm(_LeftGun_info_time, (uint8_t *)value, sizeof(value));
  379. } else
  380. DisplayValueToLcm(_RightGun_info_time, (uint8_t *)value, sizeof(value));
  381. }
  382. void ShowViewChargingEngery(uint8_t gunIndex, float energy)
  383. {
  384. uint8_t value[10] = { 0 };
  385. int min;
  386. sprintf((char*)value, "%.1f", energy);
  387. //log_info("gun[%d] energy:%.1f", gunIndex, energy);
  388. if (gunIndex == LEFT_GUN_NUM) {
  389. DisplayValueToLcm(_LeftGun_info_cap, (uint8_t*)value, sizeof(value));
  390. }
  391. else
  392. DisplayValueToLcm(_RightGun_info_cap, (uint8_t*)value, sizeof(value));
  393. }
  394. void ShowViewCharingMoney(uint8_t gunIndex,float money)
  395. {
  396. uint8_t value[10] = {0};
  397. sprintf((char *)value,"%.1f",money);
  398. //log_info("gun[%d] money:%.1f", gunIndex, money);
  399. if (gunIndex == LEFT_GUN_NUM) {
  400. DisplayValueToLcm(_LeftGun_info_money, (uint8_t *)value, sizeof(value));
  401. } else
  402. DisplayValueToLcm(_RightGun_info_money, (uint8_t *)value, sizeof(value));
  403. }
  404. void ShowViewChargingPower(uint8_t gunIndex,float power)
  405. {
  406. uint8_t value[10] = {0};
  407. float _data = power * 10;
  408. sprintf((char *)value,"%.1f",power);
  409. //log_info("gun[%d] power:%.1f",gunIndex,power);
  410. if (power >= 0 && power <= POWER_MAX_KW) {
  411. if (gunIndex == LEFT_GUN_NUM) {
  412. ChangeDisplay2Value(_LeftGun_info_power_number, _data);
  413. //DisplayValueToLcm(_LeftGun_info_power_number, (uint8_t *)value, sizeof(value));
  414. } else {
  415. //DisplayValueToLcm(_RightGun_info_power_number, (uint8_t*)value, sizeof(value));
  416. ChangeDisplay2Value(_RightGun_info_power_number, _data);
  417. }
  418. }
  419. }
  420. void ShowConnectId()
  421. {
  422. if (ShmDcCommonData->ConnectorId[0] <= 2) {
  423. ChangeDisplay2Value(_LeftGun_ConnectorId, _ICON_CONNECTOR_1);
  424. ChangeDisplay2Value(_RightGun_ConnectorId, _ICON_CONNECTOR_1);
  425. } else {
  426. ChangeDisplay2Value(_LeftGun_ConnectorId, _ICON_CONNECTOR_2);
  427. ChangeDisplay2Value(_RightGun_ConnectorId, _ICON_CONNECTOR_2);
  428. }
  429. }
  430. void ShowViewLeftGunInfo()
  431. {
  432. char value[5];
  433. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(LEFT_GUN_NUM);
  434. if (pDcChargingInfo->SystemStatus == S_IDLE ) {
  435. switch (pDcChargingInfo->CCSGunType) {
  436. case _TYPE_CCS1_Liquid:
  437. case _TYPE_CCS1_Natural:
  438. ChangeDisplay2Value(_LeftGun_type_pic_U,_ICON_CCS1_GUN_U);
  439. ChangeDisplay2Value(_LeftGun_type_pic_L,_ICON_CCS1_GUN_L);
  440. ChangeDisplay2Value(_LeftGun_type_name,_ICON_CCS1_Name);
  441. if (pDcChargingInfo->CCSGunType == _TYPE_CCS1_Liquid) {
  442. ChangeDisplay2Value(_LeftGun_type_speed,_ICON_High_Speed);
  443. } else {
  444. ChangeDisplay2Value(_LeftGun_type_speed,_ICON_Speed);
  445. }
  446. break;
  447. case _TYPE_CCS2_Liquid:
  448. case _TYPE_CCS2_Natural:
  449. ChangeDisplay2Value(_LeftGun_type_pic_U,_ICON_CCS2_GUN_U);
  450. ChangeDisplay2Value(_LeftGun_type_pic_L,_ICON_CCS2_GUN_L);
  451. ChangeDisplay2Value(_LeftGun_type_name,_ICON_CCS2_Name);
  452. if (pDcChargingInfo->CCSGunType == _TYPE_CCS2_Liquid) {
  453. ChangeDisplay2Value(_LeftGun_type_speed,_ICON_High_Speed);
  454. } else {
  455. ChangeDisplay2Value(_LeftGun_type_speed,_ICON_Speed);
  456. }
  457. break;
  458. default:
  459. log_error("CCS Gun Type Error! Not Show in LCM!!");
  460. }
  461. memset(value, 0x00, sizeof(value));
  462. sprintf((char *)value,"1 A");
  463. DisplayValueToLcm(_LeftGun_location, (uint8_t *)value, sizeof(value));
  464. } else if (pDcChargingInfo->SystemStatus == S_CHARGING ) {
  465. ShowViewChargingSoc(LEFT_GUN_NUM,pDcChargingInfo->EvBatterySoc);
  466. ShowViewChargingTime(LEFT_GUN_NUM,pDcChargingInfo->PresentChargedDuration);
  467. ShowViewCharingMoney(LEFT_GUN_NUM,pDcChargingInfo->ChargingFee);
  468. ShowViewChargingPower(LEFT_GUN_NUM,pDcChargingInfo->PresentChargingPower);
  469. ShowViewChargingEngery(LEFT_GUN_NUM, pDcChargingInfo->PresentChargedEnergy);
  470. switch (pDcChargingInfo->CCSGunType) {
  471. case _TYPE_CCS1_Liquid:
  472. case _TYPE_CCS1_Natural:
  473. ChangeDisplay2Value(_LeftGun_type_name, _ICON_CCS1_Name);
  474. break;
  475. case _TYPE_CCS2_Liquid:
  476. case _TYPE_CCS2_Natural:
  477. ChangeDisplay2Value(_LeftGun_type_name, _ICON_CCS2_Name);
  478. break;
  479. }
  480. }
  481. }
  482. void ShowViewRightGunInfo()
  483. {
  484. char value[5];
  485. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(RIGHT_GUN_NUM);
  486. if (pDcChargingInfo->SystemStatus == S_IDLE ) {
  487. switch (pDcChargingInfo->CCSGunType) {
  488. case _TYPE_CCS1_Liquid:
  489. case _TYPE_CCS1_Natural:
  490. ChangeDisplay2Value(_RightGun_type_pic_U,_ICON_CCS1_GUN_U);
  491. ChangeDisplay2Value(_RightGun_type_pic_L,_ICON_CCS1_GUN_L);
  492. ChangeDisplay2Value(_RightGun_type_name,_ICON_CCS1_Name);
  493. if (pDcChargingInfo->CCSGunType == _TYPE_CCS1_Liquid) {
  494. ChangeDisplay2Value(_RightGun_type_speed,_ICON_High_Speed);
  495. } else {
  496. ChangeDisplay2Value(_RightGun_type_speed,_ICON_Speed);
  497. }
  498. break;
  499. case _TYPE_CCS2_Liquid:
  500. case _TYPE_CCS2_Natural:
  501. ChangeDisplay2Value(_RightGun_type_pic_U,_ICON_CCS2_GUN_U);
  502. ChangeDisplay2Value(_RightGun_type_pic_L,_ICON_CCS2_GUN_L);
  503. ChangeDisplay2Value(_RightGun_type_name,_ICON_CCS2_Name);
  504. if (pDcChargingInfo->CCSGunType == _TYPE_CCS2_Liquid) {
  505. ChangeDisplay2Value(_RightGun_type_speed,_ICON_High_Speed);
  506. } else {
  507. ChangeDisplay2Value(_RightGun_type_speed,_ICON_Speed);
  508. }
  509. break;
  510. default:
  511. log_error("CCS Gun Type Error! Not Show in LCM!!");
  512. }
  513. memset(value, 0x00, sizeof(value));
  514. sprintf((char *)value,"1 B");
  515. DisplayValueToLcm(_RightGun_location, (uint8_t *)value, sizeof(value));
  516. } else if (pDcChargingInfo->SystemStatus == S_CHARGING ) {
  517. ShowViewChargingSoc(RIGHT_GUN_NUM,pDcChargingInfo->EvBatterySoc);
  518. ShowViewChargingTime(RIGHT_GUN_NUM,pDcChargingInfo->PresentChargedDuration);
  519. ShowViewCharingMoney(RIGHT_GUN_NUM,pDcChargingInfo->ChargingFee);
  520. ShowViewChargingPower(RIGHT_GUN_NUM,pDcChargingInfo->PresentChargingPower);
  521. ShowViewChargingEngery(RIGHT_GUN_NUM, pDcChargingInfo->PresentChargedEnergy);
  522. switch (pDcChargingInfo->CCSGunType) {
  523. case _TYPE_CCS1_Liquid:
  524. case _TYPE_CCS1_Natural:
  525. ChangeDisplay2Value(_RightGun_type_name, _ICON_CCS1_Name);
  526. break;
  527. case _TYPE_CCS2_Liquid:
  528. case _TYPE_CCS2_Natural:
  529. ChangeDisplay2Value(_RightGun_type_name, _ICON_CCS2_Name);
  530. break;
  531. }
  532. }
  533. }
  534. void SetViewPage()
  535. {
  536. // Set Background pic.
  537. if (pSysConfig->TotalConnectorCount == 1) {
  538. } else if (pSysConfig->TotalConnectorCount == 2) {
  539. ShowConnectId();
  540. ShowViewLeftGunInfo();
  541. ShowViewRightGunInfo();
  542. }
  543. }
  544. void ShowSelectGunIcon()
  545. {
  546. uint8_t value[5] = {0};
  547. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  548. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM) {
  549. if (pDcChargingInfo->CCSGunType == _TYPE_CCS1_Liquid ||
  550. pDcChargingInfo->CCSGunType == _TYPE_CCS1_Natural) {
  551. ChangeDisplay2Value(_Confirm_Gun_Left_symbol,_ICON_CCS1_Symbol);
  552. } else if (pDcChargingInfo->CCSGunType == _TYPE_CCS2_Liquid ||
  553. pDcChargingInfo->CCSGunType == _TYPE_CCS2_Natural) {
  554. ChangeDisplay2Value(_Confirm_Gun_Left_symbol,_ICON_CCS2_Symbol);
  555. }
  556. ChangeDisplay2Value(_Confirm_Gun_Right_symbol,_ICON_Empty);
  557. sprintf((char *)value,"%s",LEFT_GUN_LOCAL_NAME);
  558. DisplayValueToLcm(_Confirm_Gun_Left_name, (uint8_t *)value, sizeof(value));
  559. memset(value, 0x00, sizeof(value));
  560. DisplayValueToLcm(_Confirm_Gun_Right_name, (uint8_t *)value, sizeof(value));
  561. } else if (pSysInfo->CurGunSelected == RIGHT_GUN_NUM) {
  562. if (pDcChargingInfo->CCSGunType == _TYPE_CCS1_Liquid ||
  563. pDcChargingInfo->CCSGunType == _TYPE_CCS1_Natural) {
  564. ChangeDisplay2Value(_Confirm_Gun_Right_symbol,_ICON_CCS1_Symbol);
  565. } else if (pDcChargingInfo->CCSGunType == _TYPE_CCS2_Liquid ||
  566. pDcChargingInfo->CCSGunType == _TYPE_CCS2_Natural) {
  567. ChangeDisplay2Value(_Confirm_Gun_Right_symbol,_ICON_CCS2_Symbol);
  568. }
  569. ChangeDisplay2Value(_Confirm_Gun_Left_symbol,_ICON_Empty);
  570. sprintf((char *)value,"%s",RIGHT_GUN_LOCAL_NAME);
  571. DisplayValueToLcm(_Confirm_Gun_Right_name, (uint8_t *)value, sizeof(value));
  572. memset(value, 0x00, sizeof(value));
  573. DisplayValueToLcm(_Confirm_Gun_Left_name, (uint8_t *)value, sizeof(value));
  574. }
  575. }
  576. /*
  577. * Detail View Page
  578. */
  579. void SetDetailViewPage()
  580. {
  581. uint8_t data;
  582. float float_data;
  583. uint8_t value[10] = {0};
  584. ShowSelectGunIcon();
  585. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  586. if (pDcChargingInfo->SystemStatus != S_CHARGING) {
  587. SetViewPage();
  588. return;
  589. }
  590. log_info("PowerConsumption:%.1f",pDcChargingInfo->PowerConsumption);
  591. uint8_t digits = pDcChargingInfo->EvBatterySoc % 10;
  592. uint8_t tens = (pDcChargingInfo->EvBatterySoc / 10) %10;
  593. uint8_t hundreds = pDcChargingInfo->EvBatterySoc / 100;
  594. // Show Numbers.
  595. ChangeDisplay2Value(_Percent_Number_Digits,_ICON_White_Num_0+digits);
  596. ChangeDisplay2Value(_Percent_Number_Tens,_ICON_White_Num_0+tens);
  597. if (hundreds == 0 ) {
  598. ChangeDisplay2Value(_Percent_Number_Hundreds,_ICON_Empty);
  599. if (tens == 0)
  600. ChangeDisplay2Value(_Percent_Number_Tens,_ICON_Empty);
  601. } else {
  602. ChangeDisplay2Value(_Percent_Number_Hundreds,_ICON_White_Num_1);
  603. }
  604. // Show Progress Bar
  605. if (hundreds) {
  606. ChangeDisplay2Value(_ProgressBar_LEVEL, _ICON_BTY_100);
  607. }
  608. else {
  609. // 0 ~ 19 % show in progress bar 10%
  610. if (pDcChargingInfo->EvBatterySoc < 10) {
  611. if (_everyPageRollChange % 3 == 0)
  612. ChangeDisplay2Value(_ProgressBar_LEVEL, _ICON_BTY_10);
  613. else if (_everyPageRollChange % 3 == 1)
  614. ChangeDisplay2Value(_ProgressBar_LEVEL, _ICON_BTY_12);
  615. else
  616. ChangeDisplay2Value(_ProgressBar_LEVEL, _ICON_BTY_14);
  617. }
  618. else {
  619. ChangeDisplay2Value(_ProgressBar_LEVEL, _ICON_BTY_10 + (tens * 10) + (_everyPageRollChange % 5) * 2);
  620. }
  621. /*
  622. if (tens == 1)
  623. tens = 0;
  624. if (_everyPageRollChange%2 == 0)
  625. ChangeDisplay2Value(_ProgressBar_LEVEL,_ICON_ProgressBar_10+tens*2);
  626. else
  627. ChangeDisplay2Value(_ProgressBar_LEVEL,_ICON_ProgressBar_10+tens*2+1);
  628. */
  629. _everyPageRollChange++;
  630. }
  631. // Show Power
  632. if (pDcChargingInfo->PresentChargingPower >= 0 &&
  633. pDcChargingInfo->PresentChargingPower <= POWER_MAX_KW) {
  634. float_data = pDcChargingInfo->PresentChargingPower;
  635. } else {
  636. float_data = 0;
  637. }
  638. sprintf((char *)value,"%.1f",float_data);
  639. DisplayValueToLcm(_Detail_Power_Num,value, sizeof(value));
  640. // Show Time
  641. data = (pDcChargingInfo->PresentChargedDuration)/60;
  642. sprintf((char *)value,"%d",data);
  643. DisplayValueToLcm(_Detail_Time_Num,value, sizeof(value));
  644. // Show Energy
  645. if (pDcChargingInfo->PresentChargedEnergy >= 0.1 &&
  646. pDcChargingInfo->PresentChargedEnergy <= ENERGY_MAX_KWH) {
  647. float_data = pDcChargingInfo->PresentChargedEnergy;
  648. } else
  649. float_data = 0;
  650. sprintf((char *)value,"%.1f",float_data);
  651. log_info("Energy:%s",value);
  652. DisplayValueToLcm(_Detail_Cap_Num,value, sizeof(value));
  653. // Show Money
  654. //data = pDcChargingInfo->ChargingFee;
  655. sprintf((char *)value,"%.1f",pDcChargingInfo->ChargingFee);
  656. DisplayValueToLcm(_Detail_Money_Num,value, sizeof(value));
  657. }
  658. void ShowCountDownTimer()
  659. {
  660. int min,sec;
  661. uint8_t value[10] = {0};
  662. int tm = 120 - (GetClockTimeoutValue(pSysInfo->SystemTimeoutTimer) / uSEC_VAL);
  663. // GetClockTimeoutValue(pSysInfo->SystemTimeoutTimer) / uSEC_VAL
  664. min = tm/60;
  665. sec = tm%60;
  666. sprintf((char *)value,"%02d:%02d",min,sec);
  667. if (pSysInfo->SystemPage == _LCM_SUMMARY) {
  668. sprintf((char*)value, "");
  669. DisplayValueToLcm(_Count_Down_Time, (uint8_t*)value, sizeof(value));
  670. }
  671. else
  672. DisplayValueToLcm(_Count_Down_Time, (uint8_t *)value, sizeof(value));
  673. }
  674. unsigned long GetTimeoutValue(struct timeval _sour_time)
  675. {
  676. struct timeval _end_time;
  677. gettimeofday(&_end_time, NULL);
  678. return 1000000 * (_end_time.tv_sec - _sour_time.tv_sec) + _end_time.tv_usec - _sour_time.tv_usec;
  679. }
  680. void ShowGunCountDownTimer()
  681. {
  682. int min,sec;
  683. uint8_t value[10] = {0};
  684. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  685. int tm = 30 - (GetTimeoutValue(pDcChargingInfo->TimeoutTimer) / uSEC_VAL);
  686. // GetClockTimeoutValue(pSysInfo->SystemTimeoutTimer) / uSEC_VAL
  687. min = tm/60;
  688. sec = tm%60;
  689. sprintf((char *)value,"%02d:%02d",min,sec);
  690. DisplayValueToLcm(_Count_Down_Time, (uint8_t *)value, sizeof(value));
  691. }
  692. void ShowProgressBar()
  693. {
  694. /*
  695. for(int i = 0 ; i <= 19 ; i++) {
  696. ChangeDisplay2Value(_ProgressBar_LEVEL,_ICON_ProgressBar_10+i);
  697. usleep(100000);
  698. }*/
  699. }
  700. void ShowSummaryPage()
  701. {
  702. float data;
  703. uint8_t value[10] = {0};
  704. char start_hr[3],start_min[3],end_hr[3],end_min[3];
  705. int t_hr;
  706. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  707. // Show Money
  708. data = pDcChargingInfo->ChargingFee;
  709. sprintf((char *)value,"%.1f",data);
  710. //int discount,settlement = 0;
  711. //DisplayValueToLcm(_Summary_total_money, (uint8_t *)value, sizeof(value));
  712. //DisplayValueToLcm(_Summary_cal_Total_money, (uint8_t *)value, sizeof(value));
  713. ChangeDisplay2Value(_Summary_total_money, (int)pDcChargingInfo->ChargingFee);
  714. ChangeDisplay2Value(_Summary_cal_Total_money, (int)pDcChargingInfo->ChargingFee);
  715. /*
  716. log_info("start time:%s",pDcChargingInfo->StartDateTime);
  717. log_info("stop time:%s",pDcChargingInfo->StopDateTime);*/
  718. GetHrFormTimeString(pDcChargingInfo->StartDateTime,start_hr);
  719. GetMinFormTimeString(pDcChargingInfo->StartDateTime,start_min);
  720. GetHrFormTimeString(pDcChargingInfo->StopDateTime,end_hr);
  721. GetMinFormTimeString(pDcChargingInfo->StopDateTime,end_min);
  722. t_hr = atoi(start_hr) + (ShmDcCommonData->TzOffset / 60);
  723. if (t_hr >= 24)
  724. t_hr -= 24;
  725. ChangeDisplay2Value(_Summary_Start_time_hr, t_hr);
  726. ChangeDisplay2Value(_Summary_Start_time_min, atoi(start_min));
  727. t_hr = atoi(end_hr) + (ShmDcCommonData->TzOffset / 60);
  728. if (t_hr >= 24)
  729. t_hr -= 24;
  730. ChangeDisplay2Value(_Summary_end_time_hr, t_hr);
  731. ChangeDisplay2Value(_Summary_end_time_min, atoi(end_min));
  732. /*
  733. DisplayValueToLcm(_Summary_Start_time_hr, (uint8_t *)start_hr, sizeof(start_hr));
  734. DisplayValueToLcm(_Summary_Start_time_min, (uint8_t *)start_min, sizeof(start_min));
  735. DisplayValueToLcm(_Summary_end_time_hr, (uint8_t *)end_hr, sizeof(end_hr));
  736. DisplayValueToLcm(_Summary_end_time_min, (uint8_t *)end_min, sizeof(end_min));
  737. */
  738. uint8_t min = (pDcChargingInfo->PresentChargedDuration)/60;
  739. /*
  740. sprintf((char *)value,"%d",min);
  741. DisplayValueToLcm(_Summary_duration_time, (uint8_t *)value, sizeof(value));
  742. */
  743. ChangeDisplay2Value(_Summary_duration_time, (int)min);
  744. if (pDcChargingInfo->PresentChargedEnergy >= 0.1 &&
  745. pDcChargingInfo->PresentChargedEnergy <= ENERGY_MAX_KWH) {
  746. data = pDcChargingInfo->PresentChargedEnergy*10;
  747. } else
  748. data = 0;
  749. //sprintf((char *)value,"%.1f",data);
  750. ChangeDisplay2Value(_Summary_cap, data);
  751. //DisplayValueToLcm(_Summary_cap, (uint8_t *)value, sizeof(value));
  752. /*
  753. sprintf((char *)value,"%.1f",discount);
  754. DisplayValueToLcm(_Summary_cal_discount, (uint8_t *)value, sizeof(value));
  755. settlement = pDcChargingInfo->ChargingFee - discount;
  756. sprintf((char *)value,"%.1f",settlement);
  757. DisplayValueToLcm(_Summary_cal_Settlement, (char *)value, sizeof(value));
  758. if(pSysInfo->CurGunSelected == LEFT_GUN_NUM) {
  759. sprintf((char *)value,"%.1f",ChargeMaxPower_0);
  760. } else if (pSysInfo->CurGunSelected == RIGHT_GUN_NUM) {
  761. sprintf((char *)value,"%.1f",ChargeMaxPower_1);
  762. }
  763. DisplayValueToLcm(_Summary_max_power, (uint8_t *)value, sizeof(value));
  764. */
  765. if (pSysInfo->CurGunSelected == LEFT_GUN_NUM) {
  766. ChangeDisplay2Value(_Summary_max_power, (int)ChargeMaxPower_0);
  767. }
  768. else if (pSysInfo->CurGunSelected == RIGHT_GUN_NUM) {
  769. ChangeDisplay2Value(_Summary_max_power, (int)ChargeMaxPower_1);
  770. }
  771. if (pDcChargingInfo->PowerConsumption >= 0.1 ) {
  772. data = pDcChargingInfo->PowerConsumption / pDcChargingInfo->PresentChargedDuration;
  773. } else
  774. data = 0;
  775. //sprintf((char *)value,"%.1f",data);
  776. ChangeDisplay2Value(_Summary_average_power, (int)data);
  777. //DisplayValueToLcm(_Summary_average_power, (uint8_t *)value, sizeof(value));
  778. }
  779. void ProcessPageInfo()
  780. {
  781. if (pSysWarning->Level == WARN_LV_ER) {
  782. pSysInfo->SystemPage = _LCM_MAINTAIN;
  783. if (ShmPrimaryMcuData->InputDet.bits.EmergencyButton)
  784. pSysInfo->SystemPage = _LCM_EMERGENCY;
  785. return;;
  786. }
  787. switch (pSysInfo->SystemPage) {
  788. case _LCM_VIEW:
  789. // Confirm Charging Gun Number.
  790. SetViewPage();
  791. break;
  792. case _LCM_DETAIL_VIEW:
  793. ShowGunCountDownTimer();
  794. SetDetailViewPage();
  795. break;
  796. case _LCM_START_SCAN:
  797. case _LCM_STOP_RFID:
  798. case _LCM_STOP_APP:
  799. ShowSelectGunIcon();
  800. ShowCountDownTimer();
  801. break;
  802. case _LCM_START_AUTHORIZING:
  803. case _LCM_PRECHARGE:
  804. case _LCM_STOPPING:
  805. //ShowProgressBar();
  806. ChangeDisplay2Value(_Animation_Running, 1);
  807. break;
  808. case _LCM_START_AUTHORIZE_FAIL:
  809. case _LCM_STOP_RFID_FAIL:
  810. case _LCM_LINK_ERROR:
  811. ShowCountDownTimer();
  812. break;
  813. case _LCM_SUMMARY:
  814. ShowCountDownTimer();
  815. ShowSummaryPage();
  816. break;
  817. case _LCM_ERROR:
  818. break;
  819. case _LCM_MAINTAIN:
  820. break;
  821. case _LCM_WAIT_PLUGIN:
  822. case _LCM_WAIT_PLUGOUT:
  823. ShowSelectGunIcon();
  824. break;
  825. case _LCM_EMERGENCY:
  826. break;
  827. case _LCM_COMMUNICATION:
  828. ChangeDisplay2Value(_Animation_Communcation, 1);
  829. break;
  830. case _LCM_CHARGING_DETECT:
  831. ChangeDisplay2Value(_Animation_GFD, 1);
  832. break;
  833. case _LCM_PREPARECHARE:
  834. ChangeDisplay2Value(_Animation_Precharge, 1);
  835. break;
  836. }
  837. }
  838. void DemoFunction()
  839. {
  840. int i;
  841. uint8_t value[10];
  842. struct timeb SeqEndTime;
  843. struct tm *tm;
  844. switch (pSysInfo->PageIndex) {
  845. case __VIEW_ALL_IDLE_:
  846. memset(value, 0x00, sizeof(value));
  847. sprintf((char *)value,"1 A");
  848. DisplayValueToLcm(_LeftGun_location, (uint8_t *)value, sizeof(value));
  849. sprintf((char *)value,"1 B");
  850. DisplayValueToLcm(_RightGun_location, (uint8_t *)value, sizeof(value));
  851. sleep(1);
  852. ChangeDisplay2Value(_LeftGun_type_pic_U,_ICON_CCS2_GUN_U);
  853. ChangeDisplay2Value(_LeftGun_type_pic_L,_ICON_CCS2_GUN_L);
  854. ChangeDisplay2Value(_LeftGun_type_name,_ICON_CCS2_Name);
  855. ChangeDisplay2Value(_LeftGun_type_speed,_ICON_High_Speed);
  856. ChangeDisplay2Value(_RightGun_type_pic_U,_ICON_CCS2_GUN_U);
  857. ChangeDisplay2Value(_RightGun_type_pic_L,_ICON_CCS2_GUN_L);
  858. ChangeDisplay2Value(_RightGun_type_name,_ICON_CCS2_Name);
  859. ChangeDisplay2Value(_RightGun_type_speed,_ICON_High_Speed);
  860. sleep(1);
  861. ChangeDisplay2Value(_LeftGun_type_pic_U,_ICON_CCS1_GUN_U);
  862. ChangeDisplay2Value(_LeftGun_type_pic_L,_ICON_CCS1_GUN_L);
  863. ChangeDisplay2Value(_LeftGun_type_name,_ICON_CCS1_Name);
  864. ChangeDisplay2Value(_LeftGun_type_speed,_ICON_Speed);
  865. ChangeDisplay2Value(_RightGun_type_pic_U,_ICON_CCS1_GUN_U);
  866. ChangeDisplay2Value(_RightGun_type_pic_L,_ICON_CCS1_GUN_L);
  867. ChangeDisplay2Value(_RightGun_type_name,_ICON_CCS1_Name);
  868. ChangeDisplay2Value(_RightGun_type_speed,_ICON_Speed);
  869. break;
  870. case __VIEW_LEFT_CHARGE_:
  871. for(i=0;i<=100;i++) {
  872. ShowViewChargingSoc(LEFT_GUN_NUM,i);
  873. ShowViewChargingTime(LEFT_GUN_NUM,i*60);
  874. ShowViewCharingMoney(LEFT_GUN_NUM,i);
  875. ShowViewChargingPower(LEFT_GUN_NUM,i);
  876. usleep(100000);
  877. }
  878. break;
  879. case __VIEW_RIGHT_CHARGE_:
  880. for(i=0;i<=100;i++) {
  881. ShowViewChargingSoc(RIGHT_GUN_NUM,i);
  882. ShowViewChargingTime(RIGHT_GUN_NUM,i*60);
  883. ShowViewCharingMoney(RIGHT_GUN_NUM,i);
  884. ShowViewChargingPower(RIGHT_GUN_NUM,i);
  885. usleep(100000);
  886. }
  887. break;
  888. case __VIEW_ALL_CHARGE_:
  889. for(i=0;i<=100;i++) {
  890. ShowViewChargingSoc(LEFT_GUN_NUM,i);
  891. ShowViewChargingTime(LEFT_GUN_NUM,i*60);
  892. ShowViewCharingMoney(LEFT_GUN_NUM,i);
  893. ShowViewChargingPower(LEFT_GUN_NUM,i);
  894. ShowViewChargingSoc(RIGHT_GUN_NUM,i);
  895. ShowViewChargingTime(RIGHT_GUN_NUM,i*60);
  896. ShowViewCharingMoney(RIGHT_GUN_NUM,i);
  897. ShowViewChargingPower(RIGHT_GUN_NUM,i);
  898. usleep(100000);
  899. }
  900. break;
  901. case 7:
  902. case 9:
  903. break;
  904. case 11:
  905. for(i = 0 ; i <= 100 ; i++) {
  906. // RefreshProgressAnimation(_ICON_ProgressBar_10+((i/10)*2));
  907. uint8_t digits = i % 10;
  908. uint8_t tens = (i / 10) %10;
  909. uint8_t hundreds = i / 100;
  910. ChangeDisplay2Value(_Percent_Number_Digits,(short)_ICON_White_Num_0+digits);
  911. ChangeDisplay2Value(_Percent_Number_Tens,(short)_ICON_White_Num_0+tens);
  912. if (hundreds == 0 )
  913. ChangeDisplay2Value(_Percent_Number_Hundreds,(short)_ICON_Empty);
  914. else
  915. ChangeDisplay2Value(_Percent_Number_Hundreds,(short)_ICON_White_Num_1);
  916. sprintf((char *)value,"%03d",i);
  917. DisplayValueToLcm(_Detail_Power_Num, (uint8_t *)value, sizeof(value));
  918. DisplayValueToLcm(_Detail_Time_Num, (uint8_t *)value, sizeof(value));
  919. DisplayValueToLcm(_Detail_Cap_Num, (uint8_t *)value, sizeof(value));
  920. DisplayValueToLcm(_Detail_Money_Num, (uint8_t *)value, sizeof(value));
  921. if (i%2 == 0 ) {
  922. ChangeDisplay2Value(_Confirm_Gun_Left_symbol,_ICON_CCS1_Symbol);
  923. ChangeDisplay2Value(_Confirm_Gun_Right_symbol,_ICON_Empty);
  924. memset(value, 0x00, sizeof(value));
  925. DisplayValueToLcm(_Confirm_Gun_Right_name, (uint8_t *)value, sizeof(value));
  926. sprintf((char *)value,"1 A");
  927. DisplayValueToLcm(_Confirm_Gun_Left_name, (uint8_t *)value, sizeof(value));
  928. } else {
  929. ChangeDisplay2Value(_Confirm_Gun_Left_symbol,_ICON_Empty);
  930. ChangeDisplay2Value(_Confirm_Gun_Right_symbol,_ICON_CCS2_Symbol);
  931. memset(value, 0x00, sizeof(value));
  932. DisplayValueToLcm(_Confirm_Gun_Left_name, (uint8_t *)value, sizeof(value));
  933. sprintf((char *)value,"1 B");
  934. DisplayValueToLcm(_Confirm_Gun_Right_name, (uint8_t *)value, sizeof(value));
  935. }
  936. usleep(100000);
  937. }
  938. break;
  939. case 12:
  940. case 13:
  941. case 15:
  942. case 17:
  943. ftime(&SeqEndTime);
  944. SeqEndTime.time = time(NULL);
  945. tm = localtime(&SeqEndTime.time);
  946. memset(value, 0x00, sizeof(value));
  947. sprintf((char *)value,"%02d:%02d",tm->tm_hour,tm->tm_min);
  948. DisplayValueToLcm(_Count_Down_Time, (uint8_t *)value, sizeof(value));
  949. if (pSysInfo->PageIndex == 17 ) {
  950. }
  951. break;
  952. case __START_AUTHORIZE_:
  953. case __PRE_CHARGE_:
  954. case __STOP_AUTHORIZE_:
  955. for( i = 0 ; i <= 20 ; i++) {
  956. //RefreshProgressAnimation(_ICON_ProgressBar_10);
  957. usleep(100000);
  958. }
  959. for( i = 0 ; i <= 20 ; i++) {
  960. //RefreshProgressAnimation(_ICON_ProgressBar_20);
  961. usleep(100000);
  962. }
  963. break;
  964. case 8:
  965. case 16:
  966. case 18:
  967. case 19:
  968. case 20:
  969. break;
  970. case 21:
  971. ShowCabientVersion();
  972. break;
  973. case 22:
  974. ShowDispenserVersion();
  975. break;
  976. }
  977. }
  978. void ShowCabientVersionDefaultText()
  979. {
  980. char value[16];
  981. memset(value, 0x00, sizeof(value));
  982. sprintf((char *)value,"%s","Cabient:");
  983. DisplayValueToLcm(_Version_Cabient_Name_Text, (uint8_t *)value, sizeof(value));
  984. sprintf((char *)value,"%s","BootLoader:");
  985. DisplayValueToLcm(_Version_Cabient_BootLoader_Text, (uint8_t *)value, sizeof(value));
  986. sprintf((char *)value,"%s","Kernel Fw:");
  987. DisplayValueToLcm(_Version_Cabient_Kernel_Text, (uint8_t *)value, sizeof(value));
  988. sprintf((char *)value,"%s","CSU Fw:");
  989. DisplayValueToLcm(_Version_Cabient_CSU_Text, (uint8_t *)value, sizeof(value));
  990. sprintf((char *)value,"%s","Priamry Fw:");
  991. DisplayValueToLcm(_Version_Cabient_Priamry_Text, (uint8_t *)value, sizeof(value));
  992. sprintf((char *)value,"%s","Relay(0) Fw:");
  993. DisplayValueToLcm(_Version_Cabient_Relay0_Text, (uint8_t *)value, sizeof(value));
  994. sprintf((char *)value,"%s","Relay(1) Fw:");
  995. DisplayValueToLcm(_Version_Cabient_Relay1_Text, (uint8_t *)value, sizeof(value));
  996. sprintf((char *)value,"%s","Fan Fw:");
  997. DisplayValueToLcm(_Version_Cabient_Fan_Text, (uint8_t *)value, sizeof(value));
  998. sprintf((char *)value,"%s","IP Addr:");
  999. DisplayValueToLcm(_Version_Cabient_IPAddr_Text, (uint8_t *)value, sizeof(value));
  1000. if (ShmDcCommonData->PSU_Number > 0 && ShmDcCommonData->PSU_Number <= 12) {
  1001. sprintf((char *)value,"%s","Primary");
  1002. DisplayValueToLcm(_Version_Cabient_Primary_Text, (uint8_t *)value, sizeof(value));
  1003. sprintf((char *)value,"%s","Secondary");
  1004. DisplayValueToLcm(_Version_Cabient_Secondary_Text, (uint8_t *)value, sizeof(value));
  1005. for(uint8_t i = 0 ; i < ShmDcCommonData->PSU_Number ; i++) {
  1006. sprintf((char *)value,"PSU(%d):",i+1);
  1007. DisplayValueToLcm(_Version_Cabient_PSU1_Text+i*0x10, (uint8_t *)value, sizeof(value));
  1008. }
  1009. }
  1010. }
  1011. void ShowDispenserVersionDefautlText()
  1012. {
  1013. char value[16];
  1014. memset(value, 0x00, sizeof(value));
  1015. sprintf((char *)value,"%s","Dispenser:");
  1016. DisplayValueToLcm(_Version_Dispenser_Name_Text, (uint8_t *)value, sizeof(value));
  1017. sprintf((char *)value,"%s","BootLoader:");
  1018. DisplayValueToLcm(_Version_Dispenser_BootLoader_Text, (uint8_t *)value, sizeof(value));
  1019. sprintf((char *)value,"%s","Kernel Fw:");
  1020. DisplayValueToLcm(_Version_Dispenser_Kernel_Text, (uint8_t *)value, sizeof(value));
  1021. sprintf((char *)value,"%s","CSU Fw:");
  1022. DisplayValueToLcm(_Version_Dispenser_CSU_Text, (uint8_t *)value, sizeof(value));
  1023. sprintf((char *)value,"%s","Relay Fw:");
  1024. DisplayValueToLcm(_Version_Dispenser_Relay_Text, (uint8_t *)value, sizeof(value));
  1025. sprintf((char *)value,"%s","Fan Fw:");
  1026. DisplayValueToLcm(_Version_Dispenser_Fan_Text, (uint8_t *)value, sizeof(value));
  1027. sprintf((char *)value,"%s","Prim Fw:");
  1028. DisplayValueToLcm(_Version_Dispenser_Priamry_Text, (uint8_t *)value, sizeof(value));
  1029. sprintf((char *)value,"%s","LCM Hw:");
  1030. DisplayValueToLcm(_Version_Dispenser_LCM_Text, (uint8_t *)value, sizeof(value));
  1031. sprintf((char *)value,"%s","LED Fw:");
  1032. DisplayValueToLcm(_Version_Dispenser_LED_Text, (uint8_t *)value, sizeof(value));
  1033. sprintf((char *)value,"%s","Connector(0):");
  1034. DisplayValueToLcm(_Version_Dispenser_Connector0_Text, (uint8_t *)value, sizeof(value));
  1035. sprintf((char *)value,"%s","Connector(1):");
  1036. DisplayValueToLcm(_Version_Dispenser_Connector1_Text, (uint8_t *)value, sizeof(value));
  1037. sprintf((char *)value,"%s","IP Addr:");
  1038. DisplayValueToLcm(_Version_Dispenser_IPAddr_Text, (uint8_t *)value, sizeof(value));
  1039. }
  1040. void ShowCabientVersion()
  1041. {
  1042. char value[16];
  1043. memset(value, 0x00, sizeof(value));
  1044. sprintf((char *)value,"%s",ShmDcCommonData->CabinetModelName);
  1045. DisplayValueToLcm(_Version_Cabient_Model_value, (uint8_t *)value, sizeof(value));
  1046. sprintf((char *)value,"%s",ShmDcCommonData->CabinetBoolLoaderVersion);
  1047. DisplayValueToLcm(_Version_Cabient_BootLoader_value, (uint8_t *)value, sizeof(value));
  1048. sprintf((char *)value,"%s",ShmDcCommonData->CabinetKernelVersion);
  1049. DisplayValueToLcm(_Version_Cabient_Kernel_value, (uint8_t *)value, sizeof(value));
  1050. sprintf((char *)value,"%s",ShmDcCommonData->CabinetRFSystemVersion);
  1051. DisplayValueToLcm(_Version_Cabient_CSU_value, (uint8_t *)value, sizeof(value));
  1052. sprintf((char *)value,"%s",ShmDcCommonData->CabinetPrimaryVersion);
  1053. DisplayValueToLcm(_Version_Cabient_Priamry_value, (uint8_t *)value, sizeof(value));
  1054. sprintf((char *)value,"%s",ShmDcCommonData->CabinetRelay0Version);
  1055. DisplayValueToLcm(_Version_Cabient_Relay0_value, (uint8_t *)value, sizeof(value));
  1056. sprintf((char *)value,"%s",ShmDcCommonData->CabinetRelay1Version);
  1057. DisplayValueToLcm(_Version_Cabient_Relay1_value, (uint8_t *)value, sizeof(value));
  1058. sprintf((char *)value,"%s",ShmDcCommonData->CabinetFanVersion);
  1059. DisplayValueToLcm(_Version_Cabient_Fan_value, (uint8_t *)value, sizeof(value));
  1060. sprintf((char *)value,"%s",ShmDcCommonData->CabinetIPAddr);
  1061. DisplayValueToLcm(_Version_Cabient_IPAddr_value, (uint8_t *)value, sizeof(value));
  1062. if (ShmDcCommonData->PSU_Number > 0 && ShmDcCommonData->PSU_Number < 12) {
  1063. for(uint8_t i = 0 ; i < ShmDcCommonData->PSU_Number ; i++) {
  1064. if (i>=6) {
  1065. sprintf((char *)value,"%s",ShmDcCommonData->PsuVer[(i-6)].DCVersion);
  1066. DisplayValueToLcm(_Version_Cabient_PSU_Prim7_value+(i-6)*0x10, (uint8_t *)value, sizeof(value));
  1067. sprintf((char *)value,"%s",ShmDcCommonData->PsuVer[(i-6)].FPCVersion);
  1068. DisplayValueToLcm(_Version_Cabient_PSU_Sec7_value+(i-6)*0x10, (uint8_t *)value, sizeof(value));
  1069. continue;
  1070. }
  1071. sprintf((char *)value,"%s",ShmDcCommonData->PsuVer[i].DCVersion);
  1072. DisplayValueToLcm(_Version_Cabient_PSU_Prim1_value+i*0x10, (uint8_t *)value, sizeof(value));
  1073. sprintf((char *)value,"%s",ShmDcCommonData->PsuVer[i].FPCVersion);
  1074. DisplayValueToLcm(_Version_Cabient_PSU_Sec1_value+i*0x10, (uint8_t *)value, sizeof(value));
  1075. }
  1076. }
  1077. }
  1078. void ShowDispenserVersion()
  1079. {
  1080. char value[32];
  1081. memset(value, 0x00, sizeof(value));
  1082. sprintf((char *)value,"%s",pSysConfig->ModelName);
  1083. DisplayValueToLcm(_Version_Dispenser_Model_value, (uint8_t *)value, sizeof(value));
  1084. sprintf((char *)value,"%s",pSysInfo->CsuBootLoadFwRev);
  1085. DisplayValueToLcm(_Version_Dispenser_BootLoader_value, (uint8_t *)value, sizeof(value));
  1086. sprintf((char *)value,"%s",pSysInfo->CsuKernelFwRev);
  1087. DisplayValueToLcm(_Version_Dispenser_Kernel_value, (uint8_t *)value, sizeof(value));
  1088. sprintf((char *)value,"%s",pSysInfo->CsuRootFsFwRev);
  1089. DisplayValueToLcm(_Version_Dispenser_CSU_value, (uint8_t *)value, sizeof(value));
  1090. sprintf((char *)value,"%s",pSysInfo->RelayModuleFwRev);
  1091. DisplayValueToLcm(_Version_Dispenser_Relay_value, (uint8_t *)value, sizeof(value));
  1092. sprintf((char *)value,"%s",pSysInfo->FanModuleFwRev);
  1093. DisplayValueToLcm(_Version_Dispenser_Fan_value, (uint8_t *)value, sizeof(value));
  1094. sprintf((char *)value,"%s",pSysInfo->CsuPrimFwRev);
  1095. DisplayValueToLcm(_Version_Dispenser_Priamry_value, (uint8_t *)value, sizeof(value));
  1096. sprintf((char *)value,"%s",pSysInfo->LcmHwRev);
  1097. DisplayValueToLcm(_Version_Dispenser_LCM_value, (uint8_t *)value, sizeof(value));
  1098. sprintf((char *)value,"%s",pSysInfo->LedModuleFwRev);
  1099. DisplayValueToLcm(_Version_Dispenser_LED_value, (uint8_t *)value, sizeof(value));
  1100. sprintf((char *)value,"%s",pSysInfo->Connector1FwRev);
  1101. DisplayValueToLcm(_Version_Dispenser_Connector0_value, (uint8_t *)value, sizeof(value));
  1102. sprintf((char *)value,"%s",pSysInfo->Connector2FwRev);
  1103. DisplayValueToLcm(_Version_Dispenser_Connector1_value, (uint8_t *)value, sizeof(value));
  1104. sprintf((char *)value,"%s",pSysConfig->Eth0Interface.EthIpAddress);
  1105. DisplayValueToLcm(_Version_Dispenser_IPAddr_value, (uint8_t *)value, sizeof(value));
  1106. }
  1107. void InformationShow()
  1108. {
  1109. is_show = true;
  1110. if (_showInformIndex == 0 ) {
  1111. pSysInfo->PageIndex = __SHOW_CABIENT_VERSION;
  1112. } else {
  1113. pSysInfo->PageIndex = __SHOW_DISPENSER_VERASION;
  1114. ShowDispenserVersion();
  1115. }
  1116. }
  1117. int main(void)
  1118. {
  1119. bool defaulttext = false;
  1120. if (CreateAllCsuShareMemory() == FAIL) {
  1121. log_error("create share memory error");
  1122. return FAIL;
  1123. }
  1124. MappingGunChargingInfo("LCM Control Task");
  1125. pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  1126. pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  1127. pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo();
  1128. ShmFanModuleData = (struct FanModuleData *)GetShmFanModuleData();;
  1129. ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
  1130. ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
  1131. ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
  1132. struct StatusCodeData *ShmStatusCodeData = (struct StatusCodeData *)GetShmStatusCodeData();;
  1133. struct ChargingInfoData *pDcChargingInfo_0 = (struct ChargingInfoData *)GetDcChargingInfoData(LEFT_GUN_NUM);
  1134. struct ChargingInfoData *pDcChargingInfo_1 = (struct ChargingInfoData *)GetDcChargingInfoData(RIGHT_GUN_NUM);
  1135. _port = CreateCommunicationLcmPort();
  1136. ChangeBackLight(true);
  1137. _totalCount = pSysConfig->TotalConnectorCount;
  1138. _everyPageRollChange = 0;
  1139. //Initialization();
  1140. //printf("_LCM_COMPLETE ");
  1141. //ChangeToOtherPage(_LCM_COMPLETE);
  1142. //return 0;
  1143. //uint8_t index = 21;
  1144. ShmDcCommonData->PSU_Number = 12;
  1145. while (_port != -1) {
  1146. if (strcmp((char *)pSysInfo->LcmHwRev, moduleName) != 0x00) {
  1147. GetCurrentPage();
  1148. sleep(1);
  1149. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LcmModuleCommFail = true;
  1150. } else {
  1151. // Show Default Text
  1152. if (!defaulttext) {
  1153. ShowCabientVersionDefaultText();
  1154. ShowDispenserVersionDefautlText();
  1155. defaulttext = true;
  1156. }
  1157. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LcmModuleCommFail = false;
  1158. if(pSysConfig->TotalConnectorCount>=2) {
  1159. if (pDcChargingInfo_0->SystemStatus == S_IDLE) {
  1160. ChargeMaxPower_0 = 0;
  1161. } else if (pDcChargingInfo_0->SystemStatus == S_CHARGING) {
  1162. if (pDcChargingInfo_0->PresentChargingPower > ChargeMaxPower_0 &&
  1163. pDcChargingInfo_0->PresentChargingPower >= 0 &&
  1164. pDcChargingInfo_0->PresentChargingPower <= POWER_MAX_KW)
  1165. ChargeMaxPower_0 = pDcChargingInfo_0->PresentChargingPower;
  1166. }
  1167. if (pDcChargingInfo_1->SystemStatus == S_IDLE) {
  1168. ChargeMaxPower_1 = 0;
  1169. } else if (pDcChargingInfo_1->SystemStatus == S_CHARGING) {
  1170. if (pDcChargingInfo_1->PresentChargingPower > ChargeMaxPower_1 &&
  1171. pDcChargingInfo_1->PresentChargingPower >= 0 &&
  1172. pDcChargingInfo_1->PresentChargingPower <= POWER_MAX_KW)
  1173. ChargeMaxPower_1 = pDcChargingInfo_1->PresentChargingPower;
  1174. }
  1175. }
  1176. // 頁面資訊處理
  1177. ProcessPageInfo();
  1178. // 換頁處理
  1179. //GetCurrentPage(); //DS60-120 add
  1180. /*
  1181. if (pSysConfig->ShowInformation == YES && pSysInfo->SystemPage == _LCM_VIEW) {
  1182. InformationShow();
  1183. ChangeToOtherPage(pSysInfo->PageIndex);
  1184. usleep(100000);
  1185. continue;
  1186. } else {
  1187. if (is_show)
  1188. _showInformIndex >= 1 ? _showInformIndex = 0 : _showInformIndex++;
  1189. is_show = false;
  1190. }
  1191. */
  1192. GetCurrentPage(); //DS60-120 add
  1193. ChangeCurPage();
  1194. /*
  1195. pSysInfo->PageIndex = index;
  1196. GetCurrentPage();
  1197. ChangeToOtherPage(index);
  1198. GetCurrentPage();
  1199. DemoFunction();
  1200. index >= 22 ? index = 21 : index++;
  1201. */
  1202. //usleep(100000);
  1203. usleep(1000000);
  1204. }
  1205. } //while
  1206. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LcmModuleCommFail = true;
  1207. log_info("Close LCM Uart Port");
  1208. CloseCommunicationLcmPort();
  1209. return FAIL;
  1210. }