blob: 38b21b760a9cde9b5647dba04ca515d3f496d7dc [file] [log] [blame]
#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[32];
/********************************************************************************************************
* º¯Êý(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 v%s",pos->deviceno, pos->devphyid[0],
pos->devphyid[1], pos->devphyid[2], pos->devphyid[3],PRO_VERSION);
glcd_draw_string_xy(0, GLCD_BUTTOM_Y, line_buff);
}
static void show_code_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(sp_pos_t* pos,char* qrcode_url)
{
uint8 i,j;
uint8 pixel;
show_title();
show_code_bottom(pos);
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++)
{
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,">>Ë¢ÊÐÃñ¿¨³öË®",">>°´È·ÈϼüɨÂë",0);
}
}
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;
case RC_LIMIT_CONSUMPTION:
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+excmd+flag+retcode+len+crc
if((strlen +7) != 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);
}