blob: 860a451a6c8d88a01d4a8a3351456488d4530914 [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
17static char line_buff[17];
18
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{
62 sprintf(line_buff,"%02d:%02x%02x%02x%02x",pos->deviceno, pos->devphyid[0],
63 pos->devphyid[1], pos->devphyid[2], pos->devphyid[3]);
64 glcd_draw_string_xy(0, GLCD_BUTTOM_Y, line_buff);
65}
66
67static char last_qrcode_url[32]= {0};
68void show_home_qrcode(char* qrcode_url)
69{
70 uint8 i,j;
71 if(MEMCMP(qrcode_url,last_qrcode_url,(int)strlen(qrcode_url)) != 0)
72 {
73 sprintf(last_qrcode_url,"%s",qrcode_url);
74 //¶þάÂëÉú³ÉµãÕó
75 QRencode(last_qrcode_url, NULL);
76 }
77 //¶þάÂëµãÕóÏÔʾ
78 for(i=0; i<MAX_MODULESIZE*2; i++)
79 {
80 for(j=0; j<MAX_MODULESIZE*2; j++)
81 {
82 uint8_t pixel = m_byModuleData[i/2][j/2];
83
84 glcd_set_pixel(j+70, 12+i, pixel);
85 glcd_set_pixel(j+70, 12+i+1, pixel);
86 j ++;
87 glcd_set_pixel(j+70, 12+i, pixel);
88 glcd_set_pixel(j+70, 12+i+1, pixel);
89 }
90 i ++;
91 }
92 glcd_write();
93
94}
95static uint8 last_ctime[6];
96void show_home(sp_pos_t* pos)
97{
98 uint8 ctime[6];
99 sp_get_bcdtime(ctime);
100 if(MEMCMP(ctime,last_ctime,6) != 0)
101 {
102 MEMCPY(last_ctime,ctime,6);
103 disp_hint_info_two(pos,"F°æ±¾",PRO_VERSION,0);
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800104 }
105}
106
107void show_set_devno(sp_pos_t* pos, uint8 devno)
108{
109 char msg[32];
110 sprintf(msg,"»úºÅ=%d",devno);
111 disp_hint_info_two(pos, "ÉèÖûúºÅ³É¹¦",msg,DELAY_TIME1s);
112}
113void show_set_devphyid(sp_pos_t* pos, uint8 devphyid[4])
114{
115 char msg[32];
116 sprintf(msg,"ID=%02x%02x%02x%02x",
117 devphyid[0],devphyid[1],devphyid[2],devphyid[3]);
118 disp_hint_info_two(pos,"ÉèÖÃÎïÀíID³É¹¦",msg,DELAY_TIME1s);
119}
120void show_set_dev_offline_maxhour(sp_pos_t* pos, uint16 maxhour)
121{
122 char msg[32];
123 sprintf(msg,"ÍÑ»ú¹¤×÷ʱ¼ä=%d",maxhour);
124 disp_hint_info_two(pos, "ÉèÖÃÍÑ»ú¹¤×÷ʱ¼ä³É¹¦",msg,DELAY_TIME1s);
125}
126
127void show_manage_passwd(sp_pos_t* pos, const char* hint,uint8 passwd[],uint8 len)
128{
129 char msg[32];
130 switch(len)
131 {
132 case 0:
133 sprintf(msg,"");
134 break;
135 case 1:
136 sprintf(msg,"%d",passwd[0]);
137 break;
138 case 2:
139 sprintf(msg,"%d%d",passwd[0],passwd[1]);
140 break;
141 case 3:
142 sprintf(msg,"%d%d%d",passwd[0],passwd[1],passwd[2]);
143 break;
144 case 4:
145 sprintf(msg,"%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3]);
146 break;
147 case 5:
148 sprintf(msg,"%d%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3],passwd[4]);
149 break;
150 case 6:
151 sprintf(msg,"%d%d%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3],passwd[4],passwd[5]);
152 break;
153 default:
154 sprintf(msg,"");
155 }
156 disp_hint_info_two(pos,hint,msg,0);
157}
158
159void show_error(sp_pos_t* pos, const char* hint, uint16 errcode)
160{
161 char msg[32];
162 switch(errcode)
163 {
164 case RC_PSAM_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800165 sprintf(msg, "%s", "SAM¸´Î»Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800166 break;
167 case RC_CARD_LOGIN:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800168 sprintf(msg, "%s", "ÑéÖ¤ÃØÔ¿Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800169 break;
170 case RC_CARD_READ:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800171 sprintf(msg, "%s", "¶Á¿¨Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800172 break;
173 case RC_CARD_WRITE:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800174 sprintf(msg, "%s", "д¿¨Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800175 break;
176 case RC_FLASH_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800177 sprintf(msg, "%s", "FLASHÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800178 break;
179 case RC_HARDWARE_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800180 sprintf(msg, "%s", "¹Ì¼þÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800181 break;
182 case RC_FLASH_NO_RIGHT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800183 sprintf(msg, "%s", "FLASHÏÞÖÆ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800184 break;
185 case RC_CARD_NORIGHT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800186 sprintf(msg, "%s", "¿¨ÎÞȨÏÞ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800187 break;
188 case RC_CARD_EXPIRED:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800189 sprintf(msg, "%s", "¿¨ÒѹýÆÚ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800190 break;
191 case RC_CARD_LOST:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800192 sprintf(msg, "%s", "¿¨ÒÑËø¶¨");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800193 break;
194 case RC_CARDNO_EXCEPT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800195 sprintf(msg, "%s", "¿¨Òì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800196 break;
197 case RC_CARD_TIMEOUT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800198 sprintf(msg, "%s", "ʹÓÃÌ«¾Ã");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800199 break;
200 case RC_CARDBAL_EXCEPT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800201 sprintf(msg, "%s", "Óà¶îÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800202 break;
203 case RC_CARDBAL_LACK:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800204 sprintf(msg, "%s", "ÇëÁª»úÏû·Ñ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800205 break;
206 case RC_DEVPHYID_NOTSET:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800207 sprintf(msg, "%s", "δÉèÖûúºÅ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800208 break;
209 case RC_FEERATE_NOTSET:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800210 sprintf(msg, "%s", "δÉèÖ÷ÑÂÊ");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800211 break;
212 case RC_DEV_OFFLINE_ERROR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800213 sprintf(msg, "%s", "É豸ÍÑ»úÌ«¾Ã");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800214 break;
215 case RC_TRANSDTL_FULL:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800216 sprintf(msg, "%s", "Á÷Ë®ÒÑÂú");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800217 break;
218 case RC_FILE09_CRC_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800219 sprintf(msg, "%s", "09CRC´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800220 break;
221 case RC_FILE10_CRC_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800222 sprintf(msg, "%s", "10CRC´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800223 break;
224 case RC_CARD_INVALID:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800225 sprintf(msg, "%s", "ÎÞЧ¿¨");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800226 break;
227 case RC_FEENUM_ERROR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800228 sprintf(msg, "%s", "·ÑÂʸöÊý´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800229 break;
230 case RC_NOTSUPPORT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800231 sprintf(msg, "%s", "²»Ö§³Ö");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800232 break;
233 case RC_NOT_SAME_CARD:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800234 sprintf(msg, "%s", "²»Í¬¿¨");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800235 break;
236 case RC_MODE_NOT_SUPPORT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800237 sprintf(msg, "%s", "ģʽ²»Ö§³Ö");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800238 break;
239 case RC_UPDPROG_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800240 sprintf(msg, "%s", "Éý¼¶Ê§°Ü");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800241 break;
242 case RC_CONFPARA_CRC_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800243 sprintf(msg, "%s", "ÅäÖÃCRC´íÎó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800244 break;
245 case RC_TRANSDTL_NO_ERR:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800246 sprintf(msg, "%s", "Á÷Ë®ºÅÒì³£");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800247 break;
248 case RC_DEVICENO_OUT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800249 sprintf(msg, "%s", "»úºÅ¹ý´ó");
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800250 break;
251 case RC_QRCODE_FAILURE:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800252 sprintf(msg, "%s", "¶þάÂë»ñȡʧ°Ü");
253 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800254 case RC_QRCODE_TIMEOUT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800255 sprintf(msg, "%s", "¶þάÂ볬ʱ");
256 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800257 case RC_QRCODE_QUERY_FAIL:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800258 sprintf(msg, "%s", "¶þάÂëÈÏ֤ʧ°Ü");
259 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800260 case RC_DEV_NOT_LOGIN:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800261 sprintf(msg, "%s", "É豸δǩµ½");
262 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800263 case RC_DEV_FAULT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800264 sprintf(msg, "%s", "É豸ÒÉËÆ¹ÊÕÏ");
265 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800266 case RC_DEV_NOSET_FLOWSENSOR_UNIT:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800267 sprintf(msg, "%s", "Á÷Á¿¼ÆË㵥λδÉèÖÃ");
268 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800269 case RC_CARD_AUTHENTICATION:
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800270 sprintf(msg, "%s", "¿¨ÈÏ֤ʧ°Ü");
271 break;
272 case RC_LIMIT_CONSUMPTION:
273 sprintf(msg, "%s", "¸ÃÓû§±»ÏÞÖÆÏû·Ñ");
274 break;
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800275 default:
276 sprintf(msg,"´íÎóÂë=0x%04x",errcode);
277 }
278 disp_hint_info_two(pos,hint,msg,DELAY_TIME3s);
279}
280
guangcheng.qin2d6738c2019-09-25 17:38:15 +0800281void disp_hint_info_three(sp_pos_t* pos,const char* msg1,const char* msg2,
282 const char* msg3,uint32 ms)
zongqiang.zhang0c6a0882019-08-07 14:48:21 +0800283{
284 show_title();
285 show_bottom(pos);
286
287 snprintf(line_buff,sizeof line_buff,"%s ",msg1);
288 gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
289 snprintf(line_buff,sizeof line_buff,"%s ",msg2);
290 gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
291 snprintf(line_buff,sizeof line_buff,"%s ",msg3);
292 gb2312_16_draw_str(0, GLCD_CONTENT_Y_THREE, line_buff);
293
294 glcd_write();
295 if(ms > 0)
296 {
297 Delay_ms(ms);
298 }
299}
300
301void disp_hint_info_two(sp_pos_t* pos,const char* msg1,const char* msg2,uint32 ms)
302{
303 show_title();
304 show_bottom(pos);
305
306 snprintf(line_buff,sizeof line_buff,"%s ",msg1);
307 gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
308 snprintf(line_buff,sizeof line_buff,"%s ",msg2);
309 gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
310
311 glcd_write();
312 if(ms > 0)
313 {
314 Delay_ms(ms);
315 }
316}
317void disp_hint_info(sp_pos_t* pos,const char* msg1,uint32 ms)
318{
319 show_title();
320 show_bottom(pos);
321
322 snprintf(line_buff,sizeof line_buff,"%s ",msg1);
323 gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
324 snprintf(line_buff,sizeof line_buff," ");
325 gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
326
327 glcd_write();
328 if(ms > 0)
329 {
330 Delay_ms(ms);
331 }
332}
333void disp_server_errmsg(sp_pos_t* pos,const char* hint,uint8 data[],uint16 len)
334{
335 uint8 strlen;
336 char errmsg[64];
337 strlen = data[0];
338 //command+canid+excmd+flag+retcode+len+crc
339 if((strlen +8) != len)
340 {
341 disp_hint_info_two(pos,hint,"ÇëÇó³¬Ê±",DELAY_TIME3s);
342 return;
343 }
344 if(strlen > 32)
345 {
346 strlen = 32;
347 }
348 snprintf(errmsg,strlen+1,"%s",data +1);
349 disp_hint_info_two(pos,hint,errmsg,DELAY_TIME3s);
350}
351