blob: 76ab1366d466f540d02cbb256c54e4d2e2034e3d [file] [log] [blame]
zongqiang.zhang0c6a0882019-08-07 14:48:21 +08001#include "glcd.h"
2#include "../zk/gb2312_16.h"
3#include "../libqr/qrencode.h"
4#include "sp_util.h"
5#include "sp_constant.h"
6#include "sp_display.h"
7
8#define GLCD_TITLE_X 0
9#define GLCD_TITLE_Y 0
10#define GLCD_TITLE_LINE 8
11#define GLCD_CONTENT_Y_ONE 0x10
12#define GLCD_CONTENT_Y_TWO 0x20
13#define GLCD_CONTENT_Y_THREE 0x30
14#define GLCD_BUTTOM_Y 56
15#define GLCD_LINE_LENGTH 0x10
16
zongqiang.zhang9db8af62019-11-27 14:11:04 +080017static char line_buff[32];
zongqiang.zhang0c6a0882019-08-07 14:48:21 +080018
19/********************************************************************************************************
20* º¯Êý(Name) : void Show_Money(uint32 money)
21* ¹¦ÄÜ(Function) : ÏÔʾ½ð¶î
22* ²ÎÊý(Parameter) : money--¿¨Óà¶î(µ¥Î»:Ôª)
23* ·µ»Ø(Return) : ÎÞ
24**********************************************************************************************************/
25void show_money(sp_pos_t* pos, uint32 money)
26{
27 char msg[32];
28 sprintf(msg," %.02f Ôª",money/100.0f);
29 disp_hint_info_two(pos,"ÀÛ¼ÆË®·Ñ:",msg,0);
30}
31
32void glcd_tiny_init(void)
33{
34 uint8 retry;
35 glcd_tiny_set_font(Font5x7,5,7,32,127);
36 glcd_clear_buffer();
37 glcd_write();
38 for(retry=0; retry<3; retry++)
39 {
40 if(gb2312_16_verify() == 0)
41 {
42 break;
43 }
44 }
45 glcd_write();
46}
47static void show_title(void)
48{
49 uint8 ctime[7];
50 glcd_tiny_set_font(Font5x7,5,7,32,127);
51 glcd_clear_buffer();
52 sp_get_bcdtime(ctime);
53 sprintf(line_buff, "%02x-%02x-%02x %02x:%02x:%02x",
54 ctime[0],ctime[1],ctime[2],
55 ctime[3],ctime[4],ctime[5]);
56 glcd_draw_string_xy(0, 0, line_buff);
57 glcd_draw_line(0, GLCD_TITLE_LINE, 127, 8, BLACK);
58}
59
60static void show_bottom(sp_pos_t* pos)
61{
zongqiang.zhangcb1f2692019-11-26 17:17:14 +080062 sprintf(line_buff,"%02d:%02x%02x%02x%02x v%s",pos->deviceno, pos->devphyid[0],
63 pos->devphyid[1], pos->devphyid[2], pos->devphyid[3],PRO_VERSION);
zongqiang.zhang0c6a0882019-08-07 14:48:21 +080064 glcd_draw_string_xy(0, GLCD_BUTTOM_Y, line_buff);
65}
66
zongqiang.zhangfef30f22019-12-04 15:25:43 +080067static void show_code_bottom(sp_pos_t* pos)
68{
69 sprintf(line_buff,"%02d:%02x%02x%02x%02x",pos->deviceno, pos->devphyid[0],
70 pos->devphyid[1], pos->devphyid[2], pos->devphyid[3]);
71 glcd_draw_string_xy(0, GLCD_BUTTOM_Y, line_buff);
72}
73
zongqiang.zhang0c6a0882019-08-07 14:48:21 +080074static char last_qrcode_url[32]= {0};
zongqiang.zhangfef30f22019-12-04 15:25:43 +080075void show_home_qrcode(sp_pos_t* pos,char* qrcode_url)
zongqiang.zhang0c6a0882019-08-07 14:48:21 +080076{
77 uint8 i,j;
zongqiang.zhangfef30f22019-12-04 15:25:43 +080078 uint8 pixel;
79
80 show_title();
81 show_code_bottom(pos);
zongqiang.zhangb7444f62019-12-04 15:39:17 +080082 snprintf(line_buff,sizeof line_buff,"%s ","ÇëɨÂë>>");
83 gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
zongqiang.zhang0c6a0882019-08-07 14:48:21 +080084 if(MEMCMP(qrcode_url,last_qrcode_url,(int)strlen(qrcode_url)) != 0)
85 {
86 sprintf(last_qrcode_url,"%s",qrcode_url);
87 //¶þάÂëÉú³ÉµãÕó
88 QRencode(last_qrcode_url, NULL);
89 }
90 //¶þάÂëµãÕóÏÔʾ
91 for(i=0; i<MAX_MODULESIZE*2; i++)
92 {
93 for(j=0; j<MAX_MODULESIZE*2; j++)
94 {
zongqiang.zhangfef30f22019-12-04 15:25:43 +080095 pixel = m_byModuleData[i/2][j/2];
zongqiang.zhang0c6a0882019-08-07 14:48:21 +080096
97 glcd_set_pixel(j+70, 12+i, pixel);
98 glcd_set_pixel(j+70, 12+i+1, pixel);
99 j ++;
100 glcd_set_pixel(j+70, 12+i, pixel);
101 glcd_set_pixel(j+70, 12+i+1, pixel);
102 }
103 i ++;
104 }
105 glcd_write();
106
107}
108static uint8 last_ctime[6];
109void show_home(sp_pos_t* pos)
110{
111 uint8 ctime[6];
112 sp_get_bcdtime(ctime);
113 if(MEMCMP(ctime,last_ctime,6) != 0)
114 {
115 MEMCPY(last_ctime,ctime,6);
zongqiang.zhangcb1f2692019-11-26 17:17:14 +0800116 disp_hint_info_two(pos,">>Ë¢ÊÐÃñ¿¨³öË®",">>°´È·ÈϼüɨÂë",0);
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800117 }
118}
119
120void show_set_devno(sp_pos_t* pos, uint8 devno)
121{
122 char msg[32];
123 sprintf(msg,"»úºÅ=%d",devno);
124 disp_hint_info_two(pos, "ÉèÖûúºÅ³É¹¦",msg,DELAY_TIME1s);
125}
126void show_set_devphyid(sp_pos_t* pos, uint8 devphyid[4])
127{
128 char msg[32];
129 sprintf(msg,"ID=%02x%02x%02x%02x",
130 devphyid[0],devphyid[1],devphyid[2],devphyid[3]);
131 disp_hint_info_two(pos,"ÉèÖÃÎïÀíID³É¹¦",msg,DELAY_TIME1s);
132}
133void show_set_dev_offline_maxhour(sp_pos_t* pos, uint16 maxhour)
134{
135 char msg[32];
136 sprintf(msg,"ÍÑ»ú¹¤×÷ʱ¼ä=%d",maxhour);
137 disp_hint_info_two(pos, "ÉèÖÃÍÑ»ú¹¤×÷ʱ¼ä³É¹¦",msg,DELAY_TIME1s);
138}
139
140void show_manage_passwd(sp_pos_t* pos, const char* hint,uint8 passwd[],uint8 len)
141{
142 char msg[32];
143 switch(len)
144 {
145 case 0:
146 sprintf(msg,"");
147 break;
148 case 1:
149 sprintf(msg,"%d",passwd[0]);
150 break;
151 case 2:
152 sprintf(msg,"%d%d",passwd[0],passwd[1]);
153 break;
154 case 3:
155 sprintf(msg,"%d%d%d",passwd[0],passwd[1],passwd[2]);
156 break;
157 case 4:
158 sprintf(msg,"%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3]);
159 break;
160 case 5:
161 sprintf(msg,"%d%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3],passwd[4]);
162 break;
163 case 6:
164 sprintf(msg,"%d%d%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3],passwd[4],passwd[5]);
165 break;
166 default:
167 sprintf(msg,"");
168 }
169 disp_hint_info_two(pos,hint,msg,0);
170}
171
172void show_error(sp_pos_t* pos, const char* hint, uint16 errcode)
173{
174 char msg[32];
175 switch(errcode)
176 {
177 case RC_PSAM_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800178 sprintf(msg, "%s", "SAM¸´Î»Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800179 break;
180 case RC_CARD_LOGIN:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800181 sprintf(msg, "%s", "ÑéÖ¤ÃØÔ¿Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800182 break;
183 case RC_CARD_READ:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800184 sprintf(msg, "%s", "¶Á¿¨Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800185 break;
186 case RC_CARD_WRITE:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800187 sprintf(msg, "%s", "д¿¨Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800188 break;
189 case RC_FLASH_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800190 sprintf(msg, "%s", "FLASHÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800191 break;
192 case RC_HARDWARE_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800193 sprintf(msg, "%s", "¹Ì¼þÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800194 break;
195 case RC_FLASH_NO_RIGHT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800196 sprintf(msg, "%s", "FLASHÏÞÖÆ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800197 break;
198 case RC_CARD_NORIGHT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800199 sprintf(msg, "%s", "¿¨ÎÞȨÏÞ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800200 break;
201 case RC_CARD_EXPIRED:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800202 sprintf(msg, "%s", "¿¨ÒѹýÆÚ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800203 break;
204 case RC_CARD_LOST:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800205 sprintf(msg, "%s", "¿¨ÒÑËø¶¨");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800206 break;
207 case RC_CARDNO_EXCEPT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800208 sprintf(msg, "%s", "¿¨Òì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800209 break;
210 case RC_CARD_TIMEOUT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800211 sprintf(msg, "%s", "ʹÓÃÌ«¾Ã");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800212 break;
213 case RC_CARDBAL_EXCEPT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800214 sprintf(msg, "%s", "Óà¶îÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800215 break;
216 case RC_CARDBAL_LACK:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800217 sprintf(msg, "%s", "ÇëÁª»úÏû·Ñ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800218 break;
219 case RC_DEVPHYID_NOTSET:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800220 sprintf(msg, "%s", "δÉèÖûúºÅ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800221 break;
222 case RC_FEERATE_NOTSET:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800223 sprintf(msg, "%s", "δÉèÖ÷ÑÂÊ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800224 break;
225 case RC_DEV_OFFLINE_ERROR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800226 sprintf(msg, "%s", "É豸ÍÑ»úÌ«¾Ã");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800227 break;
228 case RC_TRANSDTL_FULL:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800229 sprintf(msg, "%s", "Á÷Ë®ÒÑÂú");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800230 break;
231 case RC_FILE09_CRC_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800232 sprintf(msg, "%s", "09CRC´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800233 break;
234 case RC_FILE10_CRC_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800235 sprintf(msg, "%s", "10CRC´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800236 break;
237 case RC_CARD_INVALID:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800238 sprintf(msg, "%s", "ÎÞЧ¿¨");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800239 break;
240 case RC_FEENUM_ERROR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800241 sprintf(msg, "%s", "·ÑÂʸöÊý´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800242 break;
243 case RC_NOTSUPPORT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800244 sprintf(msg, "%s", "²»Ö§³Ö");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800245 break;
246 case RC_NOT_SAME_CARD:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800247 sprintf(msg, "%s", "²»Í¬¿¨");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800248 break;
249 case RC_MODE_NOT_SUPPORT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800250 sprintf(msg, "%s", "ģʽ²»Ö§³Ö");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800251 break;
252 case RC_UPDPROG_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800253 sprintf(msg, "%s", "Éý¼¶Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800254 break;
255 case RC_CONFPARA_CRC_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800256 sprintf(msg, "%s", "ÅäÖÃCRC´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800257 break;
258 case RC_TRANSDTL_NO_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800259 sprintf(msg, "%s", "Á÷Ë®ºÅÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800260 break;
261 case RC_DEVICENO_OUT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800262 sprintf(msg, "%s", "»úºÅ¹ý´ó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800263 break;
264 case RC_QRCODE_FAILURE:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800265 sprintf(msg, "%s", "¶þάÂë»ñȡʧ°Ü");
266 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800267 case RC_QRCODE_TIMEOUT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800268 sprintf(msg, "%s", "¶þάÂ볬ʱ");
269 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800270 case RC_QRCODE_QUERY_FAIL:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800271 sprintf(msg, "%s", "¶þάÂëÈÏ֤ʧ°Ü");
272 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800273 case RC_DEV_NOT_LOGIN:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800274 sprintf(msg, "%s", "É豸δǩµ½");
275 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800276 case RC_DEV_FAULT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800277 sprintf(msg, "%s", "É豸ÒÉËÆ¹ÊÕÏ");
278 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800279 case RC_DEV_NOSET_FLOWSENSOR_UNIT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800280 sprintf(msg, "%s", "Á÷Á¿¼ÆË㵥λδÉèÖÃ");
281 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800282 case RC_CARD_AUTHENTICATION:
zongqiang.zhang7b2b7b22019-12-06 10:52:18 +0800283 sprintf(msg, "%s", "Éí·ÝÈÏÖ¤³¬Ê±");
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800284 break;
285 case RC_LIMIT_CONSUMPTION:
286 sprintf(msg, "%s", "¸ÃÓû§±»ÏÞÖÆÏû·Ñ");
287 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800288 default:
289 sprintf(msg,"´íÎóÂë=0x%04x",errcode);
290 }
291 disp_hint_info_two(pos,hint,msg,DELAY_TIME3s);
292}
293
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800294void disp_hint_info_three(sp_pos_t* pos,const char* msg1,const char* msg2,
295 const char* msg3,uint32 ms)
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800296{
297 show_title();
298 show_bottom(pos);
299
300 snprintf(line_buff,sizeof line_buff,"%s ",msg1);
301 gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
302 snprintf(line_buff,sizeof line_buff,"%s ",msg2);
303 gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
304 snprintf(line_buff,sizeof line_buff,"%s ",msg3);
305 gb2312_16_draw_str(0, GLCD_CONTENT_Y_THREE, line_buff);
306
307 glcd_write();
308 if(ms > 0)
309 {
310 Delay_ms(ms);
311 }
312}
313
314void disp_hint_info_two(sp_pos_t* pos,const char* msg1,const char* msg2,uint32 ms)
315{
316 show_title();
317 show_bottom(pos);
318
319 snprintf(line_buff,sizeof line_buff,"%s ",msg1);
320 gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
321 snprintf(line_buff,sizeof line_buff,"%s ",msg2);
322 gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
323
324 glcd_write();
325 if(ms > 0)
326 {
327 Delay_ms(ms);
328 }
329}
330void disp_hint_info(sp_pos_t* pos,const char* msg1,uint32 ms)
331{
332 show_title();
333 show_bottom(pos);
334
335 snprintf(line_buff,sizeof line_buff,"%s ",msg1);
336 gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
337 snprintf(line_buff,sizeof line_buff," ");
338 gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
339
340 glcd_write();
341 if(ms > 0)
342 {
343 Delay_ms(ms);
344 }
345}
346void disp_server_errmsg(sp_pos_t* pos,const char* hint,uint8 data[],uint16 len)
347{
348 uint8 strlen;
349 char errmsg[64];
350 strlen = data[0];
zongqiang.zhang5868d4d2019-11-22 17:28:13 +0800351 //command+excmd+flag+retcode+len+crc
352 if((strlen +7) != len)
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800353 {
354 disp_hint_info_two(pos,hint,"ÇëÇó³¬Ê±",DELAY_TIME3s);
355 return;
356 }
357 if(strlen > 32)
358 {
359 strlen = 32;
360 }
361 snprintf(errmsg,strlen+1,"%s",data +1);
362 disp_hint_info_two(pos,hint,errmsg,DELAY_TIME3s);
363}
364