大理水控初始版本
diff --git a/supwisdom/sp_display.c b/supwisdom/sp_display.c
new file mode 100644
index 0000000..fb0417c
--- /dev/null
+++ b/supwisdom/sp_display.c
@@ -0,0 +1,356 @@
+#include "glcd.h"
+#include "../zk/gb2312_16.h"
+#include "../libqr/qrencode.h"
+#include "sp_util.h"
+#include "sp_constant.h"
+#include "sp_display.h"
+
+#define GLCD_TITLE_X 0
+#define GLCD_TITLE_Y 0
+#define GLCD_TITLE_LINE 8
+#define GLCD_CONTENT_Y_ONE 0x10
+#define GLCD_CONTENT_Y_TWO 0x20
+#define GLCD_CONTENT_Y_THREE 0x30
+#define GLCD_BUTTOM_Y 56
+#define GLCD_LINE_LENGTH 0x10
+
+static char line_buff[17];
+
+/********************************************************************************************************
+* º¯Êý(Name) : void Show_Money(uint32 money)
+* ¹¦ÄÜ(Function) : ÏÔʾ½ð¶î
+* ²ÎÊý(Parameter) : money--¿¨Óà¶î(µ¥Î»:Ôª)
+* ·µ»Ø(Return) : ÎÞ
+**********************************************************************************************************/
+void show_money(sp_pos_t* pos, uint32 money)
+{
+ char msg[32];
+ sprintf(msg," %.02f Ԫ",money/100.0f);
+ disp_hint_info_two(pos,"ÀÛ¼ÆË®·Ñ:",msg,0);
+}
+
+void glcd_tiny_init(void)
+{
+ uint8 retry;
+ glcd_tiny_set_font(Font5x7,5,7,32,127);
+ glcd_clear_buffer();
+ glcd_write();
+ for(retry=0; retry<3; retry++)
+ {
+ if(gb2312_16_verify() == 0)
+ {
+ break;
+ }
+ }
+ glcd_write();
+}
+static void show_title(void)
+{
+ uint8 ctime[7];
+ glcd_tiny_set_font(Font5x7,5,7,32,127);
+ glcd_clear_buffer();
+ sp_get_bcdtime(ctime);
+ sprintf(line_buff, "%02x-%02x-%02x %02x:%02x:%02x",
+ ctime[0],ctime[1],ctime[2],
+ ctime[3],ctime[4],ctime[5]);
+ glcd_draw_string_xy(0, 0, line_buff);
+ glcd_draw_line(0, GLCD_TITLE_LINE, 127, 8, BLACK);
+}
+
+static void show_bottom(sp_pos_t* pos)
+{
+ sprintf(line_buff,"%02d:%02x%02x%02x%02x",pos->deviceno, pos->devphyid[0],
+ pos->devphyid[1], pos->devphyid[2], pos->devphyid[3]);
+ glcd_draw_string_xy(0, GLCD_BUTTOM_Y, line_buff);
+}
+
+static char last_qrcode_url[32]= {0};
+void show_home_qrcode(char* qrcode_url)
+{
+ uint8 i,j;
+ if(MEMCMP(qrcode_url,last_qrcode_url,(int)strlen(qrcode_url)) != 0)
+ {
+ sprintf(last_qrcode_url,"%s",qrcode_url);
+ //¶þάÂëÉú³ÉµãÕó
+ QRencode(last_qrcode_url, NULL);
+ }
+ //¶þάÂëµãÕóÏÔʾ
+ for(i=0; i<MAX_MODULESIZE*2; i++)
+ {
+ for(j=0; j<MAX_MODULESIZE*2; j++)
+ {
+ uint8_t pixel = m_byModuleData[i/2][j/2];
+
+ glcd_set_pixel(j+70, 12+i, pixel);
+ glcd_set_pixel(j+70, 12+i+1, pixel);
+ j ++;
+ glcd_set_pixel(j+70, 12+i, pixel);
+ glcd_set_pixel(j+70, 12+i+1, pixel);
+ }
+ i ++;
+ }
+ glcd_write();
+
+}
+static uint8 last_ctime[6];
+void show_home(sp_pos_t* pos)
+{
+ uint8 ctime[6];
+ sp_get_bcdtime(ctime);
+ if(MEMCMP(ctime,last_ctime,6) != 0)
+ {
+ MEMCPY(last_ctime,ctime,6);
+ disp_hint_info_two(pos,"F°æ±¾",PRO_VERSION,0);
+ /*
+ if(pos->sysconf.register_flag)
+ {
+ if(pos->dynamic.ws_client_stat)
+ {
+ show_home_qrcode(pos->dynamic.qrcode_url);
+ }
+ }
+ */
+ }
+}
+
+void show_set_devno(sp_pos_t* pos, uint8 devno)
+{
+ char msg[32];
+ sprintf(msg,"»úºÅ=%d",devno);
+ disp_hint_info_two(pos, "ÉèÖûúºÅ³É¹¦",msg,DELAY_TIME1s);
+}
+void show_set_devphyid(sp_pos_t* pos, uint8 devphyid[4])
+{
+ char msg[32];
+ sprintf(msg,"ID=%02x%02x%02x%02x",
+ devphyid[0],devphyid[1],devphyid[2],devphyid[3]);
+ disp_hint_info_two(pos,"ÉèÖÃÎïÀíID³É¹¦",msg,DELAY_TIME1s);
+}
+void show_set_dev_offline_maxhour(sp_pos_t* pos, uint16 maxhour)
+{
+ char msg[32];
+ sprintf(msg,"ÍÑ»ú¹¤×÷ʱ¼ä=%d",maxhour);
+ disp_hint_info_two(pos, "ÉèÖÃÍÑ»ú¹¤×÷ʱ¼ä³É¹¦",msg,DELAY_TIME1s);
+}
+
+void show_manage_passwd(sp_pos_t* pos, const char* hint,uint8 passwd[],uint8 len)
+{
+ char msg[32];
+ switch(len)
+ {
+ case 0:
+ sprintf(msg,"");
+ break;
+ case 1:
+ sprintf(msg,"%d",passwd[0]);
+ break;
+ case 2:
+ sprintf(msg,"%d%d",passwd[0],passwd[1]);
+ break;
+ case 3:
+ sprintf(msg,"%d%d%d",passwd[0],passwd[1],passwd[2]);
+ break;
+ case 4:
+ sprintf(msg,"%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3]);
+ break;
+ case 5:
+ sprintf(msg,"%d%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3],passwd[4]);
+ break;
+ case 6:
+ sprintf(msg,"%d%d%d%d%d%d",passwd[0],passwd[1],passwd[2],passwd[3],passwd[4],passwd[5]);
+ break;
+ default:
+ sprintf(msg,"");
+ }
+ disp_hint_info_two(pos,hint,msg,0);
+}
+
+void show_error(sp_pos_t* pos, const char* hint, uint16 errcode)
+{
+ char msg[32];
+ switch(errcode)
+ {
+ case RC_PSAM_ERR:
+ sprintf(msg,"%s", "SAM¸´Î»Ê§°Ü");
+ break;
+ case RC_CARD_LOGIN:
+ sprintf(msg,"%s", "ÑéÖ¤ÃØÔ¿Ê§°Ü");
+ break;
+ case RC_CARD_READ:
+ sprintf(msg,"%s", "¶Á¿¨Ê§°Ü");
+ break;
+ case RC_CARD_WRITE:
+ sprintf(msg,"%s", "д¿¨Ê§°Ü");
+ break;
+ case RC_FLASH_ERR:
+ sprintf(msg,"%s", "FLASHÒì³£");
+ break;
+ case RC_HARDWARE_ERR:
+ sprintf(msg,"%s", "¹Ì¼þÒì³£");
+ break;
+ case RC_FLASH_NO_RIGHT:
+ sprintf(msg,"%s", "FLASHÏÞÖÆ");
+ break;
+ case RC_CARD_NORIGHT:
+ sprintf(msg,"%s", "¿¨ÎÞȨÏÞ");
+ break;
+ case RC_CARD_EXPIRED:
+ sprintf(msg,"%s", "¿¨ÒѹýÆÚ");
+ break;
+ case RC_CARD_LOST:
+ sprintf(msg,"%s", "¿¨ÒÑËø¶¨");
+ break;
+ case RC_CARDNO_EXCEPT:
+ sprintf(msg,"%s", "¿¨Òì³£");
+ break;
+ case RC_CARD_TIMEOUT:
+ sprintf(msg,"%s", "ʹÓÃÌ«¾Ã");
+ break;
+ case RC_CARDBAL_EXCEPT:
+ sprintf(msg,"%s", "Óà¶îÒì³£");
+ break;
+ case RC_CARDBAL_LACK:
+ sprintf(msg,"%s", "ÇëÁª»úÏû·Ñ");
+ break;
+ case RC_DEVPHYID_NOTSET:
+ sprintf(msg,"%s", "δÉèÖûúºÅ");
+ break;
+ case RC_FEERATE_NOTSET:
+ sprintf(msg,"%s", "δÉèÖ÷ÑÂÊ");
+ break;
+ case RC_DEV_OFFLINE_ERROR:
+ sprintf(msg,"%s", "É豸ÍÑ»úÌ«¾Ã");
+ break;
+ case RC_TRANSDTL_FULL:
+ sprintf(msg,"%s", "Á÷Ë®ÒÑÂú");
+ break;
+ case RC_FILE09_CRC_ERR:
+ sprintf(msg,"%s", "09CRC´íÎó");
+ break;
+ case RC_FILE10_CRC_ERR:
+ sprintf(msg,"%s", "10CRC´íÎó");
+ break;
+ case RC_CARD_INVALID:
+ sprintf(msg,"%s", "ÎÞЧ¿¨");
+ break;
+ case RC_FEENUM_ERROR:
+ sprintf(msg,"%s", "·ÑÂʸöÊý´íÎó");
+ break;
+ case RC_NOTSUPPORT:
+ sprintf(msg,"%s", "²»Ö§³Ö");
+ break;
+ case RC_NOT_SAME_CARD:
+ sprintf(msg,"%s", "²»Í¬¿¨");
+ break;
+ case RC_MODE_NOT_SUPPORT:
+ sprintf(msg,"%s", "ģʽ²»Ö§³Ö");
+ break;
+ case RC_UPDPROG_ERR:
+ sprintf(msg,"%s", "Éý¼¶Ê§°Ü");
+ break;
+ case RC_CONFPARA_CRC_ERR:
+ sprintf(msg,"%s", "ÅäÖÃCRC´íÎó");
+ break;
+ case RC_TRANSDTL_NO_ERR:
+ sprintf(msg,"%s", "Á÷Ë®ºÅÒì³£");
+ break;
+ case RC_DEVICENO_OUT:
+ sprintf(msg,"%s", "»úºÅ¹ý´ó");
+ break;
+ case RC_QRCODE_FAILURE:
+ sprintf(msg,"%s", "¶þάÂë»ñȡʧ°Ü");
+ break;
+ case RC_QRCODE_TIMEOUT:
+ sprintf(msg,"%s", "¶þάÂ볬ʱ");
+ break;
+ case RC_QRCODE_QUERY_FAIL:
+ sprintf(msg,"%s", "¶þάÂëÈÏ֤ʧ°Ü");
+ break;
+ case RC_DEV_NOT_LOGIN:
+ sprintf(msg,"%s", "É豸δǩµ½");
+ break;
+ case RC_DEV_FAULT:
+ sprintf(msg,"%s", "É豸ÒÉËÆ¹ÊÕÏ");
+ break;
+ case RC_DEV_NOSET_FLOWSENSOR_UNIT:
+ sprintf(msg,"%s", "Á÷Á¿¼ÆË㵥λδÉèÖÃ");
+ break;
+ case RC_CARD_AUTHENTICATION:
+ sprintf(msg,"%s", "¿¨ÈÏ֤ʧ°Ü");
+ break;
+ default:
+ sprintf(msg,"´íÎóÂë=0x%04x",errcode);
+ }
+ disp_hint_info_two(pos,hint,msg,DELAY_TIME3s);
+}
+
+void disp_hint_info_three(sp_pos_t* pos,const char* msg1,const char* msg2,const char* msg3,uint32 ms)
+{
+ show_title();
+ show_bottom(pos);
+
+ snprintf(line_buff,sizeof line_buff,"%s ",msg1);
+ gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
+ snprintf(line_buff,sizeof line_buff,"%s ",msg2);
+ gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
+ snprintf(line_buff,sizeof line_buff,"%s ",msg3);
+ gb2312_16_draw_str(0, GLCD_CONTENT_Y_THREE, line_buff);
+
+ glcd_write();
+ if(ms > 0)
+ {
+ Delay_ms(ms);
+ }
+}
+
+void disp_hint_info_two(sp_pos_t* pos,const char* msg1,const char* msg2,uint32 ms)
+{
+ show_title();
+ show_bottom(pos);
+
+ snprintf(line_buff,sizeof line_buff,"%s ",msg1);
+ gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
+ snprintf(line_buff,sizeof line_buff,"%s ",msg2);
+ gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
+
+ glcd_write();
+ if(ms > 0)
+ {
+ Delay_ms(ms);
+ }
+}
+void disp_hint_info(sp_pos_t* pos,const char* msg1,uint32 ms)
+{
+ show_title();
+ show_bottom(pos);
+
+ snprintf(line_buff,sizeof line_buff,"%s ",msg1);
+ gb2312_16_draw_str(0, GLCD_CONTENT_Y_ONE, line_buff);
+ snprintf(line_buff,sizeof line_buff," ");
+ gb2312_16_draw_str(0, GLCD_CONTENT_Y_TWO, line_buff);
+
+ glcd_write();
+ if(ms > 0)
+ {
+ Delay_ms(ms);
+ }
+}
+void disp_server_errmsg(sp_pos_t* pos,const char* hint,uint8 data[],uint16 len)
+{
+ uint8 strlen;
+ char errmsg[64];
+ strlen = data[0];
+ //command+canid+excmd+flag+retcode+len+crc
+ if((strlen +8) != len)
+ {
+ disp_hint_info_two(pos,hint,"ÇëÇó³¬Ê±",DELAY_TIME3s);
+ return;
+ }
+ if(strlen > 32)
+ {
+ strlen = 32;
+ }
+ snprintf(errmsg,strlen+1,"%s",data +1);
+ disp_hint_info_two(pos,hint,errmsg,DELAY_TIME3s);
+}
+