Module_LcmControl.c 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176
  1. #include <sys/time.h>
  2. #include <sys/timeb.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <sys/types.h>
  6. #include <sys/ioctl.h>
  7. #include <sys/socket.h>
  8. #include <sys/ipc.h>
  9. #include <sys/shm.h>
  10. #include <sys/shm.h>
  11. #include <sys/mman.h>
  12. #include <linux/wireless.h>
  13. #include <arpa/inet.h>
  14. #include <netinet/in.h>
  15. #include <unistd.h>
  16. #include <stdarg.h>
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <unistd.h>
  20. #include <fcntl.h>
  21. #include <termios.h>
  22. #include <errno.h>
  23. #include <errno.h>
  24. #include <string.h>
  25. #include <time.h>
  26. #include <ctype.h>
  27. #include <ifaddrs.h>
  28. #include "define.h"
  29. #include "main.h"
  30. #include "lcmComm.h"
  31. #include "Image.h"
  32. #include "qrcode.h"
  33. #define ARRAY_SIZE(A) (sizeof(A) / sizeof(A[0]))
  34. #define PASS 1
  35. #define FAIL -1
  36. #define YES 1
  37. #define NO 0
  38. #define ON 1
  39. #define OFF 0
  40. #define PAGE_DISPLAY_PERIOD 3
  41. struct SysConfigAndInfo *ShmSysConfigAndInfo;
  42. struct StatusCodeData *ShmStatusCodeData;
  43. struct Charger *ShmCharger;
  44. void trim(char *s);
  45. int mystrcmp(char *p1,char *p2);
  46. void substr(char *dest, const char* src, unsigned int start, unsigned int cnt);
  47. void split(char **arr, char *str, const char *del);
  48. int Uart1Fd;
  49. QRCode qrcode;
  50. //=================================
  51. // Common routine
  52. //=================================
  53. int StoreLogMsg(const char *fmt, ...)
  54. {
  55. char Buf[4096+256];
  56. char buffer[4096];
  57. time_t CurrentTime;
  58. struct tm *tm;
  59. struct timeval tv;
  60. va_list args;
  61. va_start(args, fmt);
  62. int rc = vsnprintf(buffer, sizeof(buffer), fmt, args);
  63. va_end(args);
  64. memset(Buf,0,sizeof(Buf));
  65. CurrentTime = time(NULL);
  66. tm=localtime(&CurrentTime);
  67. gettimeofday(&tv, NULL); // get microseconds, 10^-6
  68. sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >> /Storage/SystemLog/[%04d.%02d]Module_LcmControl",
  69. tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
  70. buffer,
  71. tm->tm_year+1900,tm->tm_mon+1);
  72. #ifdef SystemLogMessage
  73. system(Buf);
  74. #endif
  75. #ifdef ConsloePrintLog
  76. printf("[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec, buffer);
  77. #endif
  78. return rc;
  79. }
  80. int DiffTimeb(struct timeb ST, struct timeb ET)
  81. {
  82. //return milli-second
  83. unsigned int StartTime,StopTime;
  84. StartTime=(unsigned int)ST.time;
  85. StopTime=(unsigned int)ET.time;
  86. return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
  87. }
  88. void trim(char *s)
  89. {
  90. int i=0, j, k, l=0;
  91. while((s[i]==' ')||(s[i]=='\t')||(s[i]=='\n'))
  92. i++;
  93. j = strlen(s)-1;
  94. while((s[j]==' ')||(s[j]=='\t')||(s[j]=='\n'))
  95. j--;
  96. if(i==0 && j==strlen(s)-1) { }
  97. else if(i==0) s[j+1] = '\0';
  98. else {
  99. for(k=i; k<=j; k++) s[l++] = s[k];
  100. s[l] = '\0';
  101. }
  102. }
  103. int mystrcmp(char *p1,char *p2)
  104. {
  105. while(*p1==*p2)
  106. {
  107. if(*p1=='\0' || *p2=='\0')
  108. break;
  109. p1++;
  110. p2++;
  111. }
  112. if(*p1=='\0' && *p2=='\0')
  113. return(PASS);
  114. else
  115. return(FAIL);
  116. }
  117. void substr(char *dest, const char* src, unsigned int start, unsigned int cnt)
  118. {
  119. strncpy(dest, src + start, cnt);
  120. dest[cnt] = 0;
  121. }
  122. void split(char **arr, char *str, const char *del)
  123. {
  124. char *s = strtok(str, del);
  125. while(s != NULL)
  126. {
  127. *arr++ = s;
  128. s = strtok(NULL, del);
  129. }
  130. }
  131. //==========================================
  132. // Page routine
  133. //==========================================
  134. void page_booting()
  135. {
  136. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  137. {
  138. case LCD_LANG_CHT:
  139. case LCD_LANG_CHS:
  140. case LCD_LANG_JAPANESE:
  141. case LCD_LANG_FRENCH:
  142. case LCD_LANG_ITALIAN:
  143. case LCD_LANG_SPANISH:
  144. case LCD_LANG_GERMAN:
  145. case LCD_LANG_DUTCH:
  146. case LCD_LANG_NORWEGIAN:
  147. case LCD_LANG_FINNISH:
  148. case LCD_LANG_SWEDISH:
  149. case LCD_LANG_SLOVENIAN:
  150. case LCD_LANG_THAI:
  151. case LCD_LANG_ENGLISH:
  152. default:
  153. dispGraphicConfig(Uart1Fd, AREAD_ID_0, YES, 0, 8, 128, 64);
  154. dispGraphicPartial(Uart1Fd, AREAD_ID_0, YES, 0, 0, 0, 8, 128, 64, IMG_ADDR_INIT);
  155. break;
  156. }
  157. }
  158. void page_idle()
  159. {
  160. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  161. {
  162. case LCD_LANG_CHT:
  163. case LCD_LANG_CHS:
  164. case LCD_LANG_JAPANESE:
  165. case LCD_LANG_FRENCH:
  166. case LCD_LANG_ITALIAN:
  167. case LCD_LANG_SPANISH:
  168. case LCD_LANG_GERMAN:
  169. case LCD_LANG_DUTCH:
  170. case LCD_LANG_NORWEGIAN:
  171. case LCD_LANG_FINNISH:
  172. case LCD_LANG_SWEDISH:
  173. case LCD_LANG_SLOVENIAN:
  174. case LCD_LANG_THAI:
  175. case LCD_LANG_ENGLISH:
  176. default:
  177. dispGraphicArea(Uart1Fd, AREAD_ID_0, YES, 4, 8, 64, 64, IMG_ADDR_QRCODE);
  178. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 70, 18, 70+48, 18+38, IMG_ADDR_TAP_RFID);
  179. break;
  180. }
  181. }
  182. void page_authorizing()
  183. {
  184. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  185. {
  186. case LCD_LANG_CHT:
  187. case LCD_LANG_CHS:
  188. case LCD_LANG_JAPANESE:
  189. case LCD_LANG_FRENCH:
  190. case LCD_LANG_ITALIAN:
  191. case LCD_LANG_SPANISH:
  192. case LCD_LANG_GERMAN:
  193. case LCD_LANG_DUTCH:
  194. case LCD_LANG_NORWEGIAN:
  195. case LCD_LANG_FINNISH:
  196. case LCD_LANG_SWEDISH:
  197. case LCD_LANG_SLOVENIAN:
  198. case LCD_LANG_THAI:
  199. case LCD_LANG_ENGLISH:
  200. default:
  201. dispGraphicConfig(Uart1Fd, AREAD_ID_0, YES, 0, 8, 128, 64);
  202. dispGraphicPartial(Uart1Fd, AREAD_ID_0, YES, 0, 0, 0, 8, 128, 64, IMG_ADDR_VERIFY);
  203. break;
  204. }
  205. }
  206. void page_preparing()
  207. {
  208. static uint8_t idxPage = 0;
  209. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  210. {
  211. case LCD_LANG_CHT:
  212. case LCD_LANG_CHS:
  213. case LCD_LANG_JAPANESE:
  214. case LCD_LANG_FRENCH:
  215. case LCD_LANG_ITALIAN:
  216. case LCD_LANG_SPANISH:
  217. case LCD_LANG_GERMAN:
  218. case LCD_LANG_DUTCH:
  219. case LCD_LANG_NORWEGIAN:
  220. case LCD_LANG_FINNISH:
  221. case LCD_LANG_SWEDISH:
  222. case LCD_LANG_SLOVENIAN:
  223. case LCD_LANG_THAI:
  224. case LCD_LANG_ENGLISH:
  225. default:
  226. dispGraphicConfig(Uart1Fd, AREAD_ID_0, YES, 0, 15, 128, 64);
  227. dispGraphicPartial(Uart1Fd, AREAD_ID_0, YES, 0, 0, 0, 10, 128, 54, IMG_ADDR_HANDSHAKE_1+idxPage);
  228. break;
  229. }
  230. idxPage ^= 1;
  231. }
  232. void page_charging()
  233. {
  234. uint8_t buf[128];
  235. static uint8_t idxBatt = 0;
  236. static uint8_t idxPage = 0;
  237. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  238. {
  239. case LCD_LANG_CHT:
  240. case LCD_LANG_CHS:
  241. case LCD_LANG_JAPANESE:
  242. case LCD_LANG_FRENCH:
  243. case LCD_LANG_ITALIAN:
  244. case LCD_LANG_SPANISH:
  245. case LCD_LANG_GERMAN:
  246. case LCD_LANG_DUTCH:
  247. case LCD_LANG_NORWEGIAN:
  248. case LCD_LANG_FINNISH:
  249. case LCD_LANG_SWEDISH:
  250. case LCD_LANG_SLOVENIAN:
  251. case LCD_LANG_THAI:
  252. case LCD_LANG_ENGLISH:
  253. default:
  254. dispGraphicArea(Uart1Fd, AREAD_ID_0, YES, 0, 19, 48, 36, IMG_ADDR_ICON_B0+idxBatt);
  255. //dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 0, 40, 48, 64, IMG_ADDR_ICON_COMPLETE);
  256. switch(idxPage/PAGE_DISPLAY_PERIOD)
  257. {
  258. case 0:
  259. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 48, 14, 70, 38, IMG_ADDR_ICON_ENERGY);
  260. sprintf((char*)buf, " 000.0000");
  261. dispCharacterArea(Uart1Fd, AREAD_ID_2, 72, 22, 128, 40, FONT_ASCII_6X8, buf, strlen((char*)buf));
  262. dispGraphicArea(Uart1Fd, AREAD_ID_3, YES, 48, 40, 81, 64, IMG_ADDR_ICON_TIME);
  263. sprintf((char*)buf, " 000:00");
  264. dispCharacterArea(Uart1Fd, AREAD_ID_4, 84, 48, 128, 64, FONT_ASCII_6X8, buf, strlen((char*)buf));
  265. idxPage++;
  266. break;
  267. case 1:
  268. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 48, 14, 70, 38, IMG_ADDR_ICON_COST);
  269. sprintf((char*)buf, " 0.45");
  270. dispCharacterArea(Uart1Fd, AREAD_ID_2, 72, 22, 128, 40, FONT_ASCII_6X8, buf, strlen((char*)buf));
  271. dispGraphicArea(Uart1Fd, AREAD_ID_3, YES, 48, 40, 81, 64, IMG_ADDR_ICON_PRICE);
  272. sprintf((char*)buf, " 123.88");
  273. dispCharacterArea(Uart1Fd, AREAD_ID_4, 84, 48, 128, 64, FONT_ASCII_6X8, buf, strlen((char*)buf));
  274. idxPage++;
  275. break;
  276. default:
  277. idxPage = 0;
  278. break;
  279. }
  280. break;
  281. }
  282. if(idxBatt<5)
  283. idxBatt++;
  284. else
  285. idxBatt =0;
  286. }
  287. void page_complete()
  288. {
  289. uint8_t buf[128];
  290. static uint8_t idxPage = 0;
  291. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  292. {
  293. case LCD_LANG_CHT:
  294. case LCD_LANG_CHS:
  295. case LCD_LANG_JAPANESE:
  296. case LCD_LANG_FRENCH:
  297. case LCD_LANG_ITALIAN:
  298. case LCD_LANG_SPANISH:
  299. case LCD_LANG_GERMAN:
  300. case LCD_LANG_DUTCH:
  301. case LCD_LANG_NORWEGIAN:
  302. case LCD_LANG_FINNISH:
  303. case LCD_LANG_SWEDISH:
  304. case LCD_LANG_SLOVENIAN:
  305. case LCD_LANG_THAI:
  306. case LCD_LANG_ENGLISH:
  307. default:
  308. dispGraphicArea(Uart1Fd, AREAD_ID_0, YES, 0, 20, 48, 36, IMG_ADDR_ICON_B100);
  309. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 0, 40, 48, 64, IMG_ADDR_ICON_COMPLETE);
  310. switch(idxPage/PAGE_DISPLAY_PERIOD)
  311. {
  312. case 0:
  313. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 48, 14, 70, 38, IMG_ADDR_ICON_ENERGY);
  314. sprintf((char*)buf, " 000.0000");
  315. dispCharacterArea(Uart1Fd, AREAD_ID_2, 72, 22, 128, 40, FONT_ASCII_6X8, buf, strlen((char*)buf));
  316. dispGraphicArea(Uart1Fd, AREAD_ID_3, YES, 48, 40, 81, 64, IMG_ADDR_ICON_TIME);
  317. sprintf((char*)buf, " 000:00");
  318. dispCharacterArea(Uart1Fd, AREAD_ID_4, 84, 48, 128, 64, FONT_ASCII_6X8, buf, strlen((char*)buf));
  319. idxPage++;
  320. break;
  321. case 1:
  322. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 48, 14, 70, 38, IMG_ADDR_ICON_COST);
  323. sprintf((char*)buf, " 0.45");
  324. dispCharacterArea(Uart1Fd, AREAD_ID_2, 72, 22, 128, 40, FONT_ASCII_6X8, buf, strlen((char*)buf));
  325. dispGraphicArea(Uart1Fd, AREAD_ID_3, YES, 48, 40, 81, 64, IMG_ADDR_ICON_PRICE);
  326. sprintf((char*)buf, " 123.88");
  327. dispCharacterArea(Uart1Fd, AREAD_ID_4, 84, 48, 128, 64, FONT_ASCII_6X8, buf, strlen((char*)buf));
  328. idxPage++;
  329. break;
  330. }
  331. break;
  332. }
  333. }
  334. void page_terminating()
  335. {
  336. uint8_t buf[128];
  337. static uint8_t idxPage = 0;
  338. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  339. {
  340. case LCD_LANG_CHT:
  341. case LCD_LANG_CHS:
  342. case LCD_LANG_JAPANESE:
  343. case LCD_LANG_FRENCH:
  344. case LCD_LANG_ITALIAN:
  345. case LCD_LANG_SPANISH:
  346. case LCD_LANG_GERMAN:
  347. case LCD_LANG_DUTCH:
  348. case LCD_LANG_NORWEGIAN:
  349. case LCD_LANG_FINNISH:
  350. case LCD_LANG_SWEDISH:
  351. case LCD_LANG_SLOVENIAN:
  352. case LCD_LANG_THAI:
  353. case LCD_LANG_ENGLISH:
  354. default:
  355. dispGraphicArea(Uart1Fd, AREAD_ID_0, YES, 0, 20, 48, 36, IMG_ADDR_ICON_B100);
  356. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 0, 40, 48, 64, IMG_ADDR_ICON_COMPLETE);
  357. switch(idxPage/PAGE_DISPLAY_PERIOD)
  358. {
  359. case 0:
  360. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 48, 14, 70, 38, IMG_ADDR_ICON_ENERGY);
  361. sprintf((char*)buf, " 000.0000");
  362. dispCharacterArea(Uart1Fd, AREAD_ID_2, 72, 22, 128, 40, FONT_ASCII_6X8, buf, strlen((char*)buf));
  363. dispGraphicArea(Uart1Fd, AREAD_ID_3, YES, 48, 40, 81, 64, IMG_ADDR_ICON_TIME);
  364. sprintf((char*)buf, " 000:00");
  365. dispCharacterArea(Uart1Fd, AREAD_ID_4, 84, 48, 128, 64, FONT_ASCII_6X8, buf, strlen((char*)buf));
  366. idxPage++;
  367. break;
  368. case 1:
  369. dispGraphicArea(Uart1Fd, AREAD_ID_1, YES, 48, 14, 70, 38, IMG_ADDR_ICON_COST);
  370. sprintf((char*)buf, " 0.45");
  371. dispCharacterArea(Uart1Fd, AREAD_ID_2, 72, 22, 128, 40, FONT_ASCII_6X8, buf, strlen((char*)buf));
  372. dispGraphicArea(Uart1Fd, AREAD_ID_3, YES, 48, 40, 81, 64, IMG_ADDR_ICON_PRICE);
  373. sprintf((char*)buf, " 123.88");
  374. dispCharacterArea(Uart1Fd, AREAD_ID_4, 84, 48, 128, 64, FONT_ASCII_6X8, buf, strlen((char*)buf));
  375. idxPage++;
  376. break;
  377. }
  378. break;
  379. }
  380. }
  381. void page_alarm()
  382. {
  383. uint8_t buf[128];
  384. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  385. {
  386. case LCD_LANG_CHT:
  387. case LCD_LANG_CHS:
  388. case LCD_LANG_JAPANESE:
  389. case LCD_LANG_FRENCH:
  390. case LCD_LANG_ITALIAN:
  391. case LCD_LANG_SPANISH:
  392. case LCD_LANG_GERMAN:
  393. case LCD_LANG_DUTCH:
  394. case LCD_LANG_NORWEGIAN:
  395. case LCD_LANG_FINNISH:
  396. case LCD_LANG_SWEDISH:
  397. case LCD_LANG_SLOVENIAN:
  398. case LCD_LANG_THAI:
  399. case LCD_LANG_ENGLISH:
  400. default:
  401. dispGraphicArea(Uart1Fd, AREAD_ID_0, YES, 32, 24, 48, 40, IMG_ADDR_ICON_ALERT);
  402. sprintf((char*)buf, "012336");
  403. dispCharacterArea(Uart1Fd, AREAD_ID_1, 50, 26, 128, 40, FONT_ASCII_8X12, buf, strlen((char*)buf));
  404. break;
  405. }
  406. }
  407. void page_fault()
  408. {
  409. uint8_t buf[128];
  410. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  411. {
  412. case LCD_LANG_CHT:
  413. case LCD_LANG_CHS:
  414. case LCD_LANG_JAPANESE:
  415. case LCD_LANG_FRENCH:
  416. case LCD_LANG_ITALIAN:
  417. case LCD_LANG_SPANISH:
  418. case LCD_LANG_GERMAN:
  419. case LCD_LANG_DUTCH:
  420. case LCD_LANG_NORWEGIAN:
  421. case LCD_LANG_FINNISH:
  422. case LCD_LANG_SWEDISH:
  423. case LCD_LANG_SLOVENIAN:
  424. case LCD_LANG_THAI:
  425. case LCD_LANG_ENGLISH:
  426. default:
  427. dispGraphicArea(Uart1Fd, AREAD_ID_0, YES, 32, 24, 48, 40, IMG_ADDR_ICON_ALERT);
  428. sprintf((char*)buf, "012336");
  429. dispCharacterArea(Uart1Fd, AREAD_ID_1, 50, 26, 128, 40, FONT_ASCII_8X12, buf, strlen((char*)buf));
  430. break;
  431. }
  432. }
  433. void page_maintain()
  434. {
  435. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  436. {
  437. case LCD_LANG_CHT:
  438. case LCD_LANG_CHS:
  439. case LCD_LANG_JAPANESE:
  440. case LCD_LANG_FRENCH:
  441. case LCD_LANG_ITALIAN:
  442. case LCD_LANG_SPANISH:
  443. case LCD_LANG_GERMAN:
  444. case LCD_LANG_DUTCH:
  445. case LCD_LANG_NORWEGIAN:
  446. case LCD_LANG_FINNISH:
  447. case LCD_LANG_SWEDISH:
  448. case LCD_LANG_SLOVENIAN:
  449. case LCD_LANG_THAI:
  450. case LCD_LANG_ENGLISH:
  451. default:
  452. dispGraphicConfig(Uart1Fd, AREAD_ID_0, YES, 0, 8, 128, 64);
  453. dispGraphicPartial(Uart1Fd, AREAD_ID_0, YES, 0, 0, 0, 8, 128, 64, IMG_ADDR_MAINTIAN);
  454. break;
  455. }
  456. }
  457. void page_update()
  458. {
  459. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  460. {
  461. case LCD_LANG_CHT:
  462. case LCD_LANG_CHS:
  463. case LCD_LANG_JAPANESE:
  464. case LCD_LANG_FRENCH:
  465. case LCD_LANG_ITALIAN:
  466. case LCD_LANG_SPANISH:
  467. case LCD_LANG_GERMAN:
  468. case LCD_LANG_DUTCH:
  469. case LCD_LANG_NORWEGIAN:
  470. case LCD_LANG_FINNISH:
  471. case LCD_LANG_SWEDISH:
  472. case LCD_LANG_SLOVENIAN:
  473. case LCD_LANG_THAI:
  474. case LCD_LANG_ENGLISH:
  475. default:
  476. dispGraphicConfig(Uart1Fd, AREAD_ID_0, YES, 0, 8, 128, 64);
  477. dispGraphicPartial(Uart1Fd, AREAD_ID_0, YES, 0, 0, 0, 8, 128, 64, IMG_ADDR_MAINTIAN);
  478. break;
  479. }
  480. }
  481. void page_reservation()
  482. {
  483. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  484. {
  485. case LCD_LANG_CHT:
  486. case LCD_LANG_CHS:
  487. case LCD_LANG_JAPANESE:
  488. case LCD_LANG_FRENCH:
  489. case LCD_LANG_ITALIAN:
  490. case LCD_LANG_SPANISH:
  491. case LCD_LANG_GERMAN:
  492. case LCD_LANG_DUTCH:
  493. case LCD_LANG_NORWEGIAN:
  494. case LCD_LANG_FINNISH:
  495. case LCD_LANG_SWEDISH:
  496. case LCD_LANG_SLOVENIAN:
  497. case LCD_LANG_THAI:
  498. case LCD_LANG_ENGLISH:
  499. default:
  500. break;
  501. }
  502. }
  503. void page_booking()
  504. {
  505. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  506. {
  507. case LCD_LANG_CHT:
  508. case LCD_LANG_CHS:
  509. case LCD_LANG_JAPANESE:
  510. case LCD_LANG_FRENCH:
  511. case LCD_LANG_ITALIAN:
  512. case LCD_LANG_SPANISH:
  513. case LCD_LANG_GERMAN:
  514. case LCD_LANG_DUTCH:
  515. case LCD_LANG_NORWEGIAN:
  516. case LCD_LANG_FINNISH:
  517. case LCD_LANG_SWEDISH:
  518. case LCD_LANG_SLOVENIAN:
  519. case LCD_LANG_THAI:
  520. case LCD_LANG_ENGLISH:
  521. default:
  522. break;
  523. }
  524. }
  525. void page_debug()
  526. {
  527. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  528. {
  529. case LCD_LANG_CHT:
  530. case LCD_LANG_CHS:
  531. case LCD_LANG_JAPANESE:
  532. case LCD_LANG_FRENCH:
  533. case LCD_LANG_ITALIAN:
  534. case LCD_LANG_SPANISH:
  535. case LCD_LANG_GERMAN:
  536. case LCD_LANG_DUTCH:
  537. case LCD_LANG_NORWEGIAN:
  538. case LCD_LANG_FINNISH:
  539. case LCD_LANG_SWEDISH:
  540. case LCD_LANG_SLOVENIAN:
  541. case LCD_LANG_THAI:
  542. case LCD_LANG_ENGLISH:
  543. default:
  544. dispGraphicConfig(Uart1Fd, AREAD_ID_0, YES, 0, 8, 128, 64);
  545. dispGraphicPartial(Uart1Fd, AREAD_ID_0, YES, 0, 0, 0, 8, 128, 64, IMG_ADDR_MAINTIAN);
  546. break;
  547. }
  548. }
  549. void page_unknown()
  550. {
  551. switch(ShmSysConfigAndInfo->SysConfig.DefaultLanguage)
  552. {
  553. case LCD_LANG_CHT:
  554. case LCD_LANG_CHS:
  555. case LCD_LANG_JAPANESE:
  556. case LCD_LANG_FRENCH:
  557. case LCD_LANG_ITALIAN:
  558. case LCD_LANG_SPANISH:
  559. case LCD_LANG_GERMAN:
  560. case LCD_LANG_DUTCH:
  561. case LCD_LANG_NORWEGIAN:
  562. case LCD_LANG_FINNISH:
  563. case LCD_LANG_SWEDISH:
  564. case LCD_LANG_SLOVENIAN:
  565. case LCD_LANG_THAI:
  566. case LCD_LANG_ENGLISH:
  567. default:
  568. dispGraphicConfig(Uart1Fd, AREAD_ID_0, YES, 0, 8, 128, 64);
  569. dispGraphicPartial(Uart1Fd, AREAD_ID_0, YES, 0, 0, 0, 8, 128, 64, IMG_ADDR_MAINTIAN);
  570. break;
  571. }
  572. }
  573. void page_header()
  574. {
  575. uint8_t buf[128];
  576. if(sysFlag.isEnable4G)
  577. {
  578. // Drawing 4G signal strength
  579. if((ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi == 0) || (ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi == 99))
  580. {
  581. drawRfSignal(Uart1Fd, 0, YES);
  582. }
  583. else if((1 <= ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi) && (ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi < 9)) // -95dBm ~ -111dBm
  584. {
  585. drawRfSignal(Uart1Fd, 1, YES);
  586. }
  587. else if((9 <= ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi) && (ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi < 14)) // -85dBm ~ -95dBm
  588. {
  589. drawRfSignal(Uart1Fd, 2, YES);
  590. }
  591. else if((14 <= ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi) && (ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi < 19)) // -75dBm ~ -85dBm
  592. {
  593. drawRfSignal(Uart1Fd, 3, YES);
  594. }
  595. else if((19 <= ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi) && (ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi < 27)) // -60dBm ~ -75dBm
  596. {
  597. drawRfSignal(Uart1Fd, 4, YES);
  598. }
  599. else if((27 <= ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi)) // 60dBm ~
  600. {
  601. drawRfSignal(Uart1Fd, 5, YES);
  602. }
  603. else
  604. {
  605. drawRfSignal(Uart1Fd, 0, YES);
  606. }
  607. }
  608. if(sysFlag.isEnableWiFi)
  609. {
  610. // Drawing WIFI signal strength
  611. if(ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi == 0)
  612. {
  613. drawRfSignal(Uart1Fd, 0, NO);
  614. }
  615. else if((-100 <= ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi) && (ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi < -80))
  616. {
  617. drawRfSignal(Uart1Fd, 1, NO);
  618. }
  619. else if((-80 <= ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi) && (ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi < -70))
  620. {
  621. drawRfSignal(Uart1Fd, 2, NO);
  622. }
  623. else if((-70 <= ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi) && (ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi < -50))
  624. {
  625. drawRfSignal(Uart1Fd, 3, NO);
  626. }
  627. else if((-50 <= ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi) && (ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi < -30))
  628. {
  629. drawRfSignal(Uart1Fd, 4, NO);
  630. }
  631. else if((-30 <= ShmSysConfigAndInfo->SysConfig.AthInterface.WifiRssi))
  632. {
  633. drawRfSignal(Uart1Fd, 5, NO);
  634. }
  635. else
  636. {
  637. drawRfSignal(Uart1Fd, 0, NO);
  638. }
  639. }
  640. // Drawing ethernet status
  641. dispGraphic(Uart1Fd, YES, 121-(sysFlag.isEnableWiFi?26:0)+(sysFlag.isEnable4G?26:0), 0, (ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet?IMG_ADDR_ICON_LAN_OFF:IMG_ADDR_ICON_LAN_ON));
  642. // Unit price display
  643. if(ShmSysConfigAndInfo->SysConfig.BillingData.isBilling)
  644. {
  645. sprintf((char*)buf, "%.2f %s/KWH", ShmSysConfigAndInfo->SysConfig.BillingData.Cur_fee, Currency[ShmSysConfigAndInfo->SysConfig.BillingData.Currency]);
  646. dispCharacterArea(Uart1Fd, AREAD_ID_HEADER_PRICE, 0, 0, 30, 7, FONT_ASCII_4X6, buf, strlen((char*)buf));
  647. }
  648. else
  649. {
  650. dispCharacterArea(Uart1Fd, AREAD_ID_HEADER_PRICE, 0, 0, 30, 7, FONT_ASCII_4X6, (uint8_t*)"", strlen(""));
  651. }
  652. //dispCharacterConfig(Uart1Fd, AREAD_ID_HEADER, YES, 0, 0, 30, 7);
  653. //dispCharacterScroll(Uart1Fd, AREAD_ID_HEADER, 0, 0, 40, 7, FONT_ASCII_4X6, NO, 25, (uint8_t*)"012334", strlen("012334"));
  654. //dispCharacterBlink(Uart1Fd, AREAD_ID_HEADER, 0, 0, FONT_ASCII_4X6, 1, 100, (uint8_t*)"ABCDEFG", strlen("ABCDEFG"));
  655. }
  656. //==========================================
  657. // Init all share memory
  658. //==========================================
  659. int InitShareMemory()
  660. {
  661. int result = PASS;
  662. int MeterSMId;
  663. //creat ShmSysConfigAndInfo
  664. if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), 0777)) < 0)
  665. {
  666. #ifdef SystemLogMessage
  667. DEBUG_ERROR("shmget ShmSysConfigAndInfo NG\n");
  668. #endif
  669. result = FAIL;
  670. }
  671. else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  672. {
  673. #ifdef SystemLogMessage
  674. DEBUG_ERROR("shmat ShmSysConfigAndInfo NG\n");
  675. #endif
  676. result = FAIL;
  677. }
  678. else
  679. {}
  680. //creat ShmStatusCodeData
  681. if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), 0777)) < 0)
  682. {
  683. #ifdef SystemLogMessage
  684. DEBUG_ERROR("shmget ShmStatusCodeData NG\n");
  685. #endif
  686. result = FAIL;
  687. }
  688. else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  689. {
  690. #ifdef SystemLogMessage
  691. DEBUG_ERROR("shmat ShmStatusCodeData NG\n");
  692. #endif
  693. result = FAIL;
  694. }
  695. else
  696. {}
  697. //Initial ShmCharger
  698. if ((MeterSMId = shmget(ShmChargerKey, sizeof(struct Charger), 0777)) < 0)
  699. {
  700. #ifdef SystemLogMessage
  701. DEBUG_ERROR("shmget ShmChargerKey NG\r\n");
  702. #endif
  703. result = FAIL;
  704. }
  705. else if ((ShmCharger = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  706. {
  707. #ifdef SystemLogMessage
  708. DEBUG_ERROR("shmat ShmChargerKey NG\r\n");
  709. #endif
  710. result = FAIL;
  711. }
  712. if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'T'))
  713. sysFlag.isEnable4G = ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomEnabled;
  714. else
  715. sysFlag.isEnable4G = OFF;
  716. if((ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'D') || (ShmSysConfigAndInfo->SysConfig.ModelName[10] == 'W'))
  717. sysFlag.isEnableWiFi = ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode;
  718. else
  719. sysFlag.isEnableWiFi = OFF;
  720. DEBUG_INFO("sysFlag.isEnable4G: %d\n", sysFlag.isEnable4G);
  721. DEBUG_INFO("sysFlag.isEnableWiFi: %d\n", sysFlag.isEnableWiFi);
  722. return result;
  723. }
  724. int InitComPort()
  725. {
  726. int fd;
  727. struct termios tios;
  728. fd = open("/dev/ttyS3", O_RDWR);
  729. if(fd<=0)
  730. {
  731. DEBUG_ERROR("open /dev/ttyS3 NG\n");
  732. return -1;
  733. }
  734. ioctl (fd, TCGETS, &tios);
  735. tios.c_cflag = B115200| CS8 | CLOCAL | CREAD;
  736. tios.c_lflag = 0;
  737. tios.c_iflag = 0;
  738. tios.c_oflag = 0;
  739. tios.c_cc[VMIN]=0;
  740. tios.c_cc[VTIME]=(unsigned char)5; // timeout 500ms
  741. tios.c_lflag=0;
  742. tcflush(fd, TCIFLUSH);
  743. ioctl (fd, TCSETS, &tios);
  744. return fd;
  745. }
  746. int InitLcdModule()
  747. {
  748. int result = FAIL;
  749. uint8_t qrcodeData[qrcode_getBufferSize(SIZE_53X53)];
  750. uint8_t qrImageRaw[((53/8)+1)*53];
  751. uint16_t dataMaxLen = 512;
  752. uint8_t qrcontent[196];
  753. sprintf((char*)qrcontent, "%s%s", ShmSysConfigAndInfo->SysConfig.ModelName, ShmSysConfigAndInfo->SysConfig.SerialNumber);
  754. qrcode_initText(&qrcode, qrcodeData, SIZE_53X53, 0, (char*)qrcontent);
  755. // Power on LCD
  756. setPower(Uart1Fd, ON);
  757. // Clear LCD page
  758. clearScreen(Uart1Fd, NO, 0, 0, 128, 64);
  759. // Set LCE brightness
  760. setContrast(Uart1Fd, 255, 255, 1);
  761. // Display initial screen
  762. page_booting();
  763. // QR code raw data generate
  764. memset(qrImageRaw, 0x00, ARRAY_SIZE(qrImageRaw));
  765. for(uint16_t idxY = 0;idxY<qrcode.size;idxY++)
  766. {
  767. for(uint16_t idxX = 0;idxX<qrcode.size;idxX++)
  768. {
  769. if(qrcode_getModule(&qrcode, idxX, idxY))
  770. {
  771. //drawPoint(Uart1Fd, idxX, idxY);
  772. qrImageRaw[(7*idxY) + (idxX/8)] |= (0x01<<(7-(idxX%8)));
  773. }
  774. else
  775. {
  776. qrImageRaw[(7*idxY) + (idxX/8)] &= ~(0x01<<(7-(idxX%8)));
  777. }
  778. }
  779. }
  780. // Upload image file
  781. // QR Code
  782. picUploadStart(Uart1Fd, IMG_ADDR_QRCODE, 53, 53);
  783. for(uint8_t idx=0;idx<=ARRAY_SIZE(qrImageRaw)/dataMaxLen;idx++)
  784. {
  785. if((idx < (ARRAY_SIZE(qrImageRaw)/dataMaxLen)) || ((idx == (ARRAY_SIZE(qrImageRaw)/dataMaxLen)) && ((ARRAY_SIZE(qrImageRaw)%dataMaxLen)>0)))
  786. picUploadData(Uart1Fd, IMG_ADDR_QRCODE, (idx*dataMaxLen), &qrImageRaw[idx*dataMaxLen], (idx<(ARRAY_SIZE(qrImageRaw)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(qrImageRaw)%dataMaxLen)) );
  787. }
  788. // LAN icon
  789. for(uint8_t idxLAN=0;idxLAN<6;idxLAN++)
  790. {
  791. picUploadStart(Uart1Fd, IMG_ADDR_ICON_LAN_OFF+idxLAN, 7, 7);
  792. for(uint8_t idx=0;idx<=ARRAY_SIZE(LAN_Icon[idxLAN])/dataMaxLen;idx++)
  793. {
  794. if((idx < (ARRAY_SIZE(LAN_Icon[idxLAN])/dataMaxLen)) || ((idx == (ARRAY_SIZE(LAN_Icon[idxLAN])/dataMaxLen)) && ((ARRAY_SIZE(LAN_Icon[idxLAN])%dataMaxLen)>0)))
  795. picUploadData(Uart1Fd, IMG_ADDR_ICON_LAN_OFF+idxLAN, (idx*dataMaxLen), &LAN_Icon[idxLAN][idx*dataMaxLen], (idx<(ARRAY_SIZE(LAN_Icon[idxLAN])/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(LAN_Icon[idxLAN])%dataMaxLen)) );
  796. }
  797. }
  798. // RF icon
  799. for(uint8_t idxRF=0;idxRF<6;idxRF++)
  800. {
  801. picUploadStart(Uart1Fd, IMG_ADDR_RF_0+idxRF, 19, 7);
  802. for(uint8_t idx=0;idx<=ARRAY_SIZE(RF_Icon[idxRF])/dataMaxLen;idx++)
  803. {
  804. if((idx < (ARRAY_SIZE(RF_Icon[idxRF])/dataMaxLen)) || ((idx == (ARRAY_SIZE(RF_Icon[idxRF])/dataMaxLen)) && ((ARRAY_SIZE(RF_Icon[idxRF])%dataMaxLen)>0)))
  805. picUploadData(Uart1Fd, IMG_ADDR_RF_0+idxRF, (idx*dataMaxLen), &RF_Icon[idxRF][idx*dataMaxLen], (idx<(ARRAY_SIZE(RF_Icon[idxRF])/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(RF_Icon[idxRF])%dataMaxLen)) );
  806. }
  807. }
  808. // Init image
  809. picUploadStart(Uart1Fd, IMG_ADDR_INIT, 128, 64);
  810. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_init)/dataMaxLen;idx++)
  811. {
  812. if((idx < (ARRAY_SIZE(img_init)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_init)/dataMaxLen)) && ((ARRAY_SIZE(img_init)%dataMaxLen)>0)))
  813. picUploadData(Uart1Fd, IMG_ADDR_INIT, (idx*dataMaxLen), &img_init[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_init)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_init)%dataMaxLen)) );
  814. }
  815. // RIFD image
  816. picUploadStart(Uart1Fd, IMG_ADDR_TAP_RFID, 48, 38);
  817. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_rfid)/dataMaxLen;idx++)
  818. {
  819. if((idx < (ARRAY_SIZE(img_rfid)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_rfid)/dataMaxLen)) && ((ARRAY_SIZE(img_rfid)%dataMaxLen)>0)))
  820. picUploadData(Uart1Fd, IMG_ADDR_TAP_RFID, (idx*dataMaxLen), &img_rfid[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_rfid)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_rfid)%dataMaxLen)) );
  821. }
  822. // Handshake 1 image
  823. picUploadStart(Uart1Fd, IMG_ADDR_HANDSHAKE_1, 128, 64);
  824. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_handshake_1)/dataMaxLen;idx++)
  825. {
  826. if((idx < (ARRAY_SIZE(img_handshake_1)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_handshake_1)/dataMaxLen)) && ((ARRAY_SIZE(img_handshake_1)%dataMaxLen)>0)))
  827. picUploadData(Uart1Fd, IMG_ADDR_HANDSHAKE_1, (idx*dataMaxLen), &img_handshake_1[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_handshake_1)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_handshake_1)%dataMaxLen)) );
  828. }
  829. // Handshake 2 image
  830. picUploadStart(Uart1Fd, IMG_ADDR_HANDSHAKE_2, 128, 64);
  831. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_handshake_2)/dataMaxLen;idx++)
  832. {
  833. if((idx < (ARRAY_SIZE(img_handshake_2)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_handshake_2)/dataMaxLen)) && ((ARRAY_SIZE(img_handshake_2)%dataMaxLen)>0)))
  834. picUploadData(Uart1Fd, IMG_ADDR_HANDSHAKE_2, (idx*dataMaxLen), &img_handshake_2[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_handshake_2)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_handshake_2)%dataMaxLen)) );
  835. }
  836. // Maintain image
  837. picUploadStart(Uart1Fd, IMG_ADDR_MAINTIAN, 128, 64);
  838. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_maintain)/dataMaxLen;idx++)
  839. {
  840. if((idx < (ARRAY_SIZE(img_maintain)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_maintain)/dataMaxLen)) && ((ARRAY_SIZE(img_maintain)%dataMaxLen)>0)))
  841. picUploadData(Uart1Fd, IMG_ADDR_MAINTIAN, (idx*dataMaxLen), &img_maintain[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_maintain)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_maintain)%dataMaxLen)) );
  842. }
  843. // Verify image
  844. picUploadStart(Uart1Fd, IMG_ADDR_VERIFY, 128, 64);
  845. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_verify)/dataMaxLen;idx++)
  846. {
  847. if((idx < (ARRAY_SIZE(img_verify)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_verify)/dataMaxLen)) && ((ARRAY_SIZE(img_verify)%dataMaxLen)>0)))
  848. picUploadData(Uart1Fd, IMG_ADDR_VERIFY, (idx*dataMaxLen), &img_verify[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_verify)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_verify)%dataMaxLen)) );
  849. }
  850. // Verify OK image
  851. picUploadStart(Uart1Fd, IMG_ADDR_VERIFYOK, 128, 64);
  852. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_verify_ok)/dataMaxLen;idx++)
  853. {
  854. if((idx < (ARRAY_SIZE(img_verify_ok)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_verify_ok)/dataMaxLen)) && ((ARRAY_SIZE(img_verify_ok)%dataMaxLen)>0)))
  855. picUploadData(Uart1Fd, IMG_ADDR_VERIFYOK, (idx*dataMaxLen), &img_verify_ok[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_verify_ok)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_verify_ok)%dataMaxLen)) );
  856. }
  857. // Verify fail image
  858. picUploadStart(Uart1Fd, IMG_ADDR_VERIFYFAIL, 128, 64);
  859. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_verify_fail)/dataMaxLen;idx++)
  860. {
  861. if((idx < (ARRAY_SIZE(img_verify_fail)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_verify_fail)/dataMaxLen)) && ((ARRAY_SIZE(img_verify_fail)%dataMaxLen)>0)))
  862. picUploadData(Uart1Fd, IMG_ADDR_VERIFYFAIL, (idx*dataMaxLen), &img_verify_fail[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_verify_fail)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_verify_fail)%dataMaxLen)) );
  863. }
  864. // Icon alert image
  865. picUploadStart(Uart1Fd, IMG_ADDR_ICON_ALERT, 16, 16);
  866. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_alert)/dataMaxLen;idx++)
  867. {
  868. if((idx < (ARRAY_SIZE(img_icon_alert)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_alert)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_alert)%dataMaxLen)>0)))
  869. picUploadData(Uart1Fd, IMG_ADDR_ICON_ALERT, (idx*dataMaxLen), &img_icon_alert[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_alert)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_alert)%dataMaxLen)) );
  870. }
  871. // Icon energy image
  872. picUploadStart(Uart1Fd, IMG_ADDR_ICON_ENERGY, 24, 24);
  873. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_energy)/dataMaxLen;idx++)
  874. {
  875. if((idx < (ARRAY_SIZE(img_icon_energy)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_energy)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_energy)%dataMaxLen)>0)))
  876. picUploadData(Uart1Fd, IMG_ADDR_ICON_ENERGY, (idx*dataMaxLen), &img_icon_energy[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_energy)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_energy)%dataMaxLen)) );
  877. }
  878. // Icon energy image
  879. picUploadStart(Uart1Fd, IMG_ADDR_ICON_COST, 24, 24);
  880. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_cost)/dataMaxLen;idx++)
  881. {
  882. if((idx < (ARRAY_SIZE(img_icon_cost)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_cost)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_cost)%dataMaxLen)>0)))
  883. picUploadData(Uart1Fd, IMG_ADDR_ICON_COST, (idx*dataMaxLen), &img_icon_cost[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_cost)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_cost)%dataMaxLen)) );
  884. }
  885. // Icon time image
  886. picUploadStart(Uart1Fd, IMG_ADDR_ICON_TIME, 24, 24);
  887. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_time)/dataMaxLen;idx++)
  888. {
  889. if((idx < (ARRAY_SIZE(img_icon_time)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_time)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_time)%dataMaxLen)>0)))
  890. picUploadData(Uart1Fd, IMG_ADDR_ICON_TIME, (idx*dataMaxLen), &img_icon_time[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_time)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_time)%dataMaxLen)) );
  891. }
  892. // Icon price image
  893. picUploadStart(Uart1Fd, IMG_ADDR_ICON_PRICE, 33, 24);
  894. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_price)/dataMaxLen;idx++)
  895. {
  896. if((idx < (ARRAY_SIZE(img_icon_price)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_price)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_price)%dataMaxLen)>0)))
  897. picUploadData(Uart1Fd, IMG_ADDR_ICON_PRICE, (idx*dataMaxLen), &img_icon_price[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_price)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_price)%dataMaxLen)) );
  898. }
  899. // Icon battery 0% image
  900. picUploadStart(Uart1Fd, IMG_ADDR_ICON_B0, 48, 16);
  901. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_b0)/dataMaxLen;idx++)
  902. {
  903. if((idx < (ARRAY_SIZE(img_icon_b0)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_b0)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_b0)%dataMaxLen)>0)))
  904. picUploadData(Uart1Fd, IMG_ADDR_ICON_B0, (idx*dataMaxLen), &img_icon_b0[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_b0)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_b0)%dataMaxLen)) );
  905. }
  906. // Icon battery 20% image
  907. picUploadStart(Uart1Fd, IMG_ADDR_ICON_B20, 48, 16);
  908. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_b20)/dataMaxLen;idx++)
  909. {
  910. if((idx < (ARRAY_SIZE(img_icon_b20)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_b20)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_b20)%dataMaxLen)>0)))
  911. picUploadData(Uart1Fd, IMG_ADDR_ICON_B20, (idx*dataMaxLen), &img_icon_b20[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_b20)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_b20)%dataMaxLen)) );
  912. }
  913. // Icon battery 40% image
  914. picUploadStart(Uart1Fd, IMG_ADDR_ICON_B40, 48, 16);
  915. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_b40)/dataMaxLen;idx++)
  916. {
  917. if((idx < (ARRAY_SIZE(img_icon_b40)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_b40)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_b40)%dataMaxLen)>0)))
  918. picUploadData(Uart1Fd, IMG_ADDR_ICON_B40, (idx*dataMaxLen), &img_icon_b40[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_b40)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_b40)%dataMaxLen)) );
  919. }
  920. // Icon battery 60% image
  921. picUploadStart(Uart1Fd, IMG_ADDR_ICON_B60, 48, 16);
  922. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_b60)/dataMaxLen;idx++)
  923. {
  924. if((idx < (ARRAY_SIZE(img_icon_b60)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_b60)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_b60)%dataMaxLen)>0)))
  925. picUploadData(Uart1Fd, IMG_ADDR_ICON_B60, (idx*dataMaxLen), &img_icon_b60[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_b60)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_b60)%dataMaxLen)) );
  926. }
  927. // Icon battery 80% image
  928. picUploadStart(Uart1Fd, IMG_ADDR_ICON_B80, 48, 16);
  929. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_b80)/dataMaxLen;idx++)
  930. {
  931. if((idx < (ARRAY_SIZE(img_icon_b80)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_b80)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_b80)%dataMaxLen)>0)))
  932. picUploadData(Uart1Fd, IMG_ADDR_ICON_B80, (idx*dataMaxLen), &img_icon_b80[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_b80)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_b80)%dataMaxLen)) );
  933. }
  934. // Icon battery 100% image
  935. picUploadStart(Uart1Fd, IMG_ADDR_ICON_B100, 48, 16);
  936. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_b100)/dataMaxLen;idx++)
  937. {
  938. if((idx < (ARRAY_SIZE(img_icon_b100)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_b100)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_b100)%dataMaxLen)>0)))
  939. picUploadData(Uart1Fd, IMG_ADDR_ICON_B100, (idx*dataMaxLen), &img_icon_b100[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_b100)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_b100)%dataMaxLen)) );
  940. }
  941. // Icon battery 100% image
  942. picUploadStart(Uart1Fd, IMG_ADDR_ICON_COMPLETE, 48, 18);
  943. for(uint8_t idx=0;idx<=ARRAY_SIZE(img_icon_complete)/dataMaxLen;idx++)
  944. {
  945. if((idx < (ARRAY_SIZE(img_icon_complete)/dataMaxLen)) || ((idx == (ARRAY_SIZE(img_icon_complete)/dataMaxLen)) && ((ARRAY_SIZE(img_icon_complete)%dataMaxLen)>0)))
  946. picUploadData(Uart1Fd, IMG_ADDR_ICON_COMPLETE, (idx*dataMaxLen), &img_icon_complete[idx*dataMaxLen], (idx<(ARRAY_SIZE(img_icon_complete)/dataMaxLen)?dataMaxLen:(ARRAY_SIZE(img_icon_complete)%dataMaxLen)) );
  947. }
  948. return result;
  949. }
  950. //================================================
  951. // Main process
  952. //================================================
  953. int main(void)
  954. {
  955. uint8_t previousMode = 0xff;
  956. uint8_t previousLan = 0xff;
  957. if(InitShareMemory() == FAIL)
  958. {
  959. #ifdef SystemLogMessage
  960. DEBUG_ERROR("InitShareMemory NG\n");
  961. #endif
  962. if(ShmStatusCodeData!=NULL)
  963. {
  964. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
  965. }
  966. sleep(5);
  967. return FAIL;
  968. }
  969. Uart1Fd=InitComPort();
  970. if(Uart1Fd<0)
  971. {
  972. #ifdef SystemLogMessage
  973. DEBUG_ERROR("InitComPort NG\n");
  974. #endif
  975. if(ShmStatusCodeData!=NULL)
  976. {
  977. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  978. }
  979. sleep(5);
  980. return FAIL;
  981. }
  982. else
  983. {
  984. InitLcdModule();
  985. }
  986. DEBUG_INFO("Initial completed\n");
  987. for(;;)
  988. {
  989. // Clear LCD if page change.
  990. if((previousMode != ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus) ||
  991. (previousLan != ShmSysConfigAndInfo->SysConfig.DefaultLanguage))
  992. {
  993. // Clear screen
  994. clearScreen(Uart1Fd, NO, 0, 0, 128, 64);
  995. previousMode = ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus;
  996. previousLan = ShmSysConfigAndInfo->SysConfig.DefaultLanguage;
  997. }
  998. switch(ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus)
  999. {
  1000. case SYS_MODE_BOOTING:
  1001. page_booting();
  1002. break;
  1003. case SYS_MODE_IDLE:
  1004. page_idle();
  1005. break;
  1006. case SYS_MODE_AUTHORIZING:
  1007. page_authorizing();
  1008. break;
  1009. case SYS_MODE_PREPARING:
  1010. page_preparing();
  1011. break;
  1012. case SYS_MODE_CHARGING:
  1013. page_charging();
  1014. break;
  1015. case SYS_MODE_TERMINATING:
  1016. page_terminating();
  1017. break;
  1018. case SYS_MODE_COMPLETE:
  1019. page_complete();
  1020. break;
  1021. case SYS_MODE_ALARM:
  1022. page_alarm();
  1023. break;
  1024. case SYS_MODE_FAULT:
  1025. page_fault();
  1026. break;
  1027. case SYS_MODE_MAINTAIN:
  1028. page_maintain();
  1029. break;
  1030. case SYS_MODE_UPDATE:
  1031. page_update();
  1032. break;
  1033. case SYS_MODE_RESERVATION:
  1034. page_reservation();
  1035. break;
  1036. case SYS_MODE_BOOKING:
  1037. page_booking();
  1038. break;
  1039. case SYS_MODE_DEBUG:
  1040. page_debug();
  1041. break;
  1042. default:
  1043. page_unknown();
  1044. break;
  1045. }
  1046. page_header();
  1047. usleep(1000000);
  1048. }
  1049. return FAIL;
  1050. }