⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.c

📁 手机点菜系统手机端,利用GPRS实现菜名上报
💻 C
📖 第 1 页 / 共 3 页
字号:
//*********************************************************************************************
//File    : common.c
//Function: some common function 
//*********************************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <api.h>
#include <database.h>
#include <stdarg.h>
//-----------mifare------
#include <ExEH0218.h>
#include <contactless.h> 
//--------------

#include "common.h"
#include "db.h"
#include "ExEH0218.h"
#include "hd_dt_wl.h"

extern unsigned char g_desk_NO[4+1];
extern unsigned char g_person_num;
extern unsigned char g_waiter_NO[4+1];
extern unsigned char g_waiter_PWD[4+1];
extern unsigned int ac_time;
extern unsigned char g_hd_pwd[9];
extern unsigned long append_count_count1;
extern int g_flag_login; //0:没有登陆 1:登陆

short sure(int x,int y,unsigned char *str_sel1,unsigned char *str_sel2);
//***********************mifare卡*******************
unsigned char dummy_key[6] = "\xFF\xFF\xFF\xFF\xFF\xFF";
unsigned char g_sector = 1;		//operation sector


int 	read_sector( int sec_num,unsigned char *rdata);
int input_data();/////////////
char 	MyCardAccessMultiBlocks( unsigned char auth_mode,
			      	 unsigned char WR_mode,
			      	 unsigned char sector,
			      	 unsigned char Block,
			      	 unsigned char BlockCnt,
			      	 unsigned char* rdata,
			      	 unsigned char* wdata );

const char mifare_Menu[8*16+2] = "1.余额查询      2.结账          3.输入测试      \0";
void mifare_operate();
void select_balance();
//*************************mifare卡***********************end			      	 

unsigned char con_line_buff[2048];

#define DEBUG_MODE 
void u_puts(char *lb) {
  while (*(lb)) {
    while(Disp_write_char(*lb));
    lb++;
  }
}

short TRACE(char * fmt, ...)
{
        #ifdef DEBUG_MODE
	        static int line = 0;
	       	Disp_set_font_attribute(DISP_FONT_TYPE_5x7_ENG);
	        goto_xy(0,line++);
	        {
		  va_list ap;
		  va_start(ap, fmt);
		  vsprintf(con_line_buff, fmt, ap);
		  u_puts(con_line_buff);
		}
	        if(line>=8) line = 0;
        #endif
}

short getch()
{
	char testKey;
	char ch;
	unsigned char str_dsp[30];
	while(1)
	{
		testKey = KEY_read();
		
		if(testKey!=-1)
		{
			return ch;
			clr_scr();
			goto_xy(0,0);
			sprintf(str_dsp,"%d pressed",ch);
			Disp_write_str(str_dsp);
		}
	}
}
//给一个十六字节的第十六个字节修改为'+',
int add_puls(unsigned char *pStr)
{
	int num,i;
	if(*(pStr+15)<(unsigned char)0xa0) //最后一个字节不是汉字
	     *(pStr+15)='+';
	else {
	     for(i=0,num=0;i<15;i++)
	     {
	     	if(*(pStr+i)>(unsigned char)0xa0) num++;
	     }
	     if(num%2)                    //最后一个字节字节为同前一个字节为一个汉字
	     	memcpy(pStr+14," +",2);
	     else                         //最后一个字节字节为同后一个字节为一个汉字
	        *(pStr+15)='+';
	}
}
//======================================================================
//	返回值	== 0  正确输入
//			== 1  输入空字符
//			== -1 事件退出
//	qEvent	== EXIT_KEY_F1 按F1退出键
//	qEvent	== EXIT_KEY_F2 按F2退出键
//	qEvent	== EXIT_KEY_POWER 按POWER退出键
//	qEvent	== EXIT_CARD_GONE 拔卡退出
//	qEvent	== EXIT_KEY_POWER 插卡退出
//	qEvent	== EXIT_AUTO_QUIT 无按健退出
void  dump_memory(unsigned char * buf,short int cnt,short line) 
{
      unsigned short cntr;
      unsigned char stmp[30];
      for (cntr = 0; cntr < cnt; cntr ++) {
		sprintf( stmp+2*cntr,"%02X", buf[cntr]);
	      }
      stmp[cnt*2] = 0;
      ClearLine(line,DISP_5x7);	 
      DispStr_E(0,line,stmp,DISP_POSITION|DISP_5x7);
}

// 公共函数0: ASCII码转BCD码
int code_BCD(char *bcdbuf,char *retbuf,int bcdnum)
{
	int	i;
	
	for (i=0;i<bcdnum;i++) if (!isxdigit(bcdbuf[i])) return ((i+1)&0xff)|((bcdbuf[i]<<8)&0xff00);
	strupr(bcdbuf);
	for (i=0;i<(bcdnum/2);i++)
	{
		if (bcdbuf[i*2]>'9') 
			retbuf[i]=(bcdbuf[i*2]-'A'+10)<<4;
		else
			retbuf[i]=(bcdbuf[i*2]-'0')<<4;
		if (bcdbuf[i*2+1]>'9') 
			retbuf[i]|=(bcdbuf[i*2+1]-'A'+10)&0xf;
		else
			retbuf[i]|=(bcdbuf[i*2+1]-'0')&0xf;
	}
	if (bcdnum%2)
	{
		if (bcdbuf[i*2]>'9') 
			retbuf[i]=(bcdbuf[i*2]-'A'+10)<<4;
		else
			retbuf[i]=(bcdbuf[i*2]-'0')<<4;
	}
	return 0;
}

// 公共函数1: BCD码转ASCII码
void decode_BCD(char *bcdbuf,char *retbuf,int bcdnum)
{
	int i;
	for (i=0;i<bcdnum;i++)
	{
		if (((bcdbuf[i]>>4)&0xf)<10) 
		   retbuf[i*2]=((bcdbuf[i]>>4)&0xf)+'0';
		else 
		   retbuf[i*2]=((bcdbuf[i]>>4)&0xf)-10+'A';
		if ((bcdbuf[i]&0xf)<10) 
		   retbuf[i*2+1]=(bcdbuf[i]&0xf)+'0';
		else 
		   retbuf[i*2+1]=(bcdbuf[i]&0xf)-10+'A';
	}
}

void delay_n_ms(int n)
{
	while(n--)
	{
		delay_1ms();
	}
}
//display three items
//
//Input:
//      menu - buff
//      start_item - 开始显示的起始条数,0起始,为在menu中的位置
//      start_line - 在哪一行显示,以显示画面为坐标 1-4
//	sel_line - 哪一行需要被选中,以显示画面为坐标 1-4
//	line_num - 显示的行数,1-4
//
//Output:
short disp_menu_item(unsigned char *menu,int start_item,int start_line,int sel_line,int line_num)
{
	unsigned char str_tmp[17*4];
	int i;
	
	if((line_num>4)||(sel_line>4)||(sel_line>line_num)||(sel_line<=0)||(line_num<=0)) return -1;

	memset(str_tmp,0,sizeof(str_tmp));
	for(i=0;i<line_num;i++)
	{
		memcpy(str_tmp+i*17,menu+(start_item+i)*16,16);
		if(i == (sel_line-1))
			DispStr_CE( 0, start_line+i*2,str_tmp+i*17, DISP_POSITION|DISP_REVERSE|DISP_CLRLINE );
		else
			DispStr_CE( 0, start_line+i*2,str_tmp+i*17, DISP_POSITION|DISP_CLRLINE );
	}
	return SUCCESSFUL;
}

//这个函数用来判断我们选择的行//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//startline;       //在画面中显示的起始地址,第一行为0
//p_menu		我们要显示的菜单
//p_cPtr;             // 当前行 相对于画面来说的,起点为画面的第一行为0
// lPtr:		相对于菜单来说的,在菜单中所处的位置
short browse_menu(int startline,unsigned char *p_menu,int *p_cPtr,int *p_lPtr )  //********=====***
{
	BROWINFO	bi;
	short ret;
	
	if(startline>3) startline = 0;
	bi.startLine = startline;       //在画面中显示的起始地址,第一行为0
	bi.dispLines = 4 - startline;
	bi.iStr = p_menu;
	bi.mInt = strlen(p_menu)/16;
	bi.lineMax = 16;
	bi.sFont = 0;
	bi.numEnable = 0;				// 允许键盘‘2’‘8’代替拨轮上下
	bi.qEvent = EXIT_AUTO_QUIT|EXIT_KEY_ALL;		//	按[F3]和[电源]键退出
	bi.autoexit = ac_time;			//	30秒无操作自动关机
	
	bi.cPtr = *p_cPtr;             // 当前行 相对于画面来说的,起点为画面的第一行为0
	bi.lPtr = *p_lPtr;             // lPtr:相对于菜单来说的,在菜单中所处的位置
	ret = brow_select( &bi );	   // 显示主菜单
	*p_cPtr = bi.cPtr;
	*p_lPtr = bi.lPtr;
	if(bi.qEvent==EXIT_KEY_POWER||bi.qEvent==EXIT_AUTO_QUIT) return -1;
	if(bi.qEvent==EXIT_KEY_F1) return -2;
	if(bi.qEvent==EXIT_KEY_F2) return -3;
	if(bi.qEvent==EXIT_KEY_F3) return -4;
	if(bi.qEvent==EXIT_KEY_COMM) return -5;
	if(bi.qEvent==EXIT_KEY_1) return 0;
	if(bi.qEvent==EXIT_KEY_2) return 1;
	if(bi.qEvent==EXIT_KEY_3) return 2;
	if(bi.qEvent==EXIT_KEY_4) return 3;
	if(bi.qEvent==EXIT_KEY_5) return 4;
	if(bi.qEvent==EXIT_KEY_6) return 5;
	if(bi.qEvent==EXIT_KEY_7) return 6;
	if(bi.qEvent==EXIT_KEY_8) return 7;
	if(bi.qEvent==EXIT_KEY_9) return 8;
	if(bi.qEvent==EXIT_KEY_0) return -6;//新加--08-06-10--lzm
	return ret;	
}
//------------------------------------------------------------------------
//mInts  显示的行数
short browse_menu2(int startline,unsigned char *p_menu,int *p_cPtr,int *p_lPtr, unsigned long mInts )  //********=====***
{
	BROWINFO	bi;
	short ret;
	//unsigned long mIntss;
	
	/*if(strlen(p_menu)/16>mInts&&mInts!=0)
		mIntss=mInts;
	else    mIntss=strlen(p_menu)/16;*/
	if(startline>3) startline = 0;
	bi.startLine = startline;       //在画面中显示的起始地址,第一行为0
	bi.dispLines = 4 - startline;
	bi.iStr = p_menu;
	bi.mInt = mInts;
	bi.lineMax = 16;
	bi.sFont = 0;
	bi.numEnable = 0;				// 允许键盘‘2’‘8’代替拨轮上下
	bi.qEvent = EXIT_AUTO_QUIT|EXIT_KEY_ALL;		//	按[F3]和[电源]键退出
	bi.autoexit = ac_time;			//	30秒无操作自动关机
	
	bi.cPtr = *p_cPtr;             // 当前行 相对于画面来说的,起点为画面的第一行为0
	bi.lPtr = *p_lPtr;             // lPtr:相对于菜单来说的,在菜单中所处的位置
	ret = brow_select( &bi );	   // 显示主菜单
	*p_cPtr = bi.cPtr;
	*p_lPtr = bi.lPtr;
	if(bi.qEvent==EXIT_KEY_POWER||bi.qEvent==EXIT_AUTO_QUIT) return -1;
	if(bi.qEvent==EXIT_KEY_F1) return -2;
	if(bi.qEvent==EXIT_KEY_F2) return -3;
	if(bi.qEvent==EXIT_KEY_F3) return -4;
	if(bi.qEvent==EXIT_KEY_COMM) return -5;
	if(bi.qEvent==EXIT_KEY_1) return 0;
	if(bi.qEvent==EXIT_KEY_2) return 1;
	if(bi.qEvent==EXIT_KEY_3) return 2;
	if(bi.qEvent==EXIT_KEY_4) return 3;
	if(bi.qEvent==EXIT_KEY_5) return 4;
	if(bi.qEvent==EXIT_KEY_6) return 5;
	if(bi.qEvent==EXIT_KEY_7) return 6;
	if(bi.qEvent==EXIT_KEY_8) return 7;
	if(bi.qEvent==EXIT_KEY_9) return 8;
	if(bi.qEvent==EXIT_KEY_0) return -6;//新加--08-06-10--lzm
	return ret;	
}

//-------------------------------------------------------------------------------------
//startline;       //在画面中显示的起始地址,第一行为0
//p_cPtr;             // 当前行 相对于画面来说的,起点为画面的第一行为0
// lPtr:		相对于菜单来说的,在菜单中所处的位置
//------------------------------------------------------------------------------------------
short browse_menu1(int startline,unsigned char *p_menu,int *p_cPtr,int *p_lPtr,int *event)
{
	BROWINFO	bi;
	short ret;
	
	if(startline>3) startline = 0;
	bi.startLine = startline;       //在画面中显示的起始地址,第一行为0
	bi.dispLines = 4 - startline;
	bi.iStr = p_menu;
	bi.mInt = strlen(p_menu)/16;
	bi.lineMax = 16;
	bi.sFont = 0;
	bi.numEnable = 0;				// 允许键盘‘2’‘8’代替拨轮上下
	bi.qEvent = EXIT_AUTO_QUIT|EXIT_KEY_F3|EXIT_KEY_POWER|EXIT_KEY_F1|EXIT_KEY_COMM|EXIT_KEY_F2;//	按[F3]和[电源]键退出
	bi.autoexit = ac_time;			//	30秒无操作自动关机
	
	bi.cPtr = *p_cPtr;             // 当前行 相对于画面来说的,起点为画面的第一行为0
	bi.lPtr = *p_lPtr;             // lPtr:相对于菜单来说的,在菜单中所处的位置
	ret = brow_select( &bi );	   // 显示主菜单
	*p_cPtr = bi.cPtr;
	*p_lPtr = bi.lPtr;
	if(bi.qEvent==EXIT_KEY_POWER||bi.qEvent==EXIT_AUTO_QUIT) return -1;
	if(bi.qEvent==EXIT_KEY_F1)
	{
		 *event = EXIT_KEY_F1;
		 return -2;
	}
	if(bi.qEvent==EXIT_KEY_F3||bi.qEvent==EXIT_KEY_F2||bi.qEvent==EXIT_KEY_COMM)
	{
		 *event = bi.qEvent;
		 return bi.eventSele;
	}
	*event = EXIT_KEY_ENTER;
	return ret;	
}
int browse_str(unsigned char *pstr)
{
	BROWINFO bi;
	int ret;
	
	bi.iStr = pstr;
	bi.mInt = strlen(pstr)/16;
	bi.lineMax = 16;
	bi.sFont = 0;
	bi.qEvent = EXIT_KEY_F1;
	ret = brow_info(&bi);
}
 
short input_desk_NO(int x, int y,unsigned char *pDesk_NO,unsigned char *pPrompt)
{
	GETSTR_PARAM gs;
	short ret;
	char tmpstr[20] ,*p;
	
	if(pPrompt<-1) memcpy(tmpstr,pPrompt,sizeof(pPrompt));
	for(p=pPrompt;*p;p++)
	{
		if(*p==' ')
		strcpy(p,p+1); 
		puts(tmpstr); 
	} 
	memcpy(tmpstr,0,20);
	
	gs.qx = x;
	gs.qy = y;
	gs.sFont = 0;
	gs.alpha = 0;
	gs.pPrompt = pPrompt;
	gs.nullEnable = 0;
	gs.csChar = '_';
	gs.pwChar = 0;
	gs.spChar = 0;
	gs.pStr = pDesk_NO;
	gs.maxNum = 6;
	gs.minNum = 1;
	gs.minValue = -1;
	gs.maxValue = -1;
	gs.autoexit = ac_time;                                		
	gs.retNum = 0 - strlen(pDesk_NO);
	gs.qEvent = EXIT_KEY_POWER|EXIT_AUTO_QUIT|EXIT_KEY_F1;
	ret = huGetStr_E(&gs);
	if (ret==0)
	{
		//strupr(pDesk_NO);
		//strcat( pDesk_NO, "    " );
		strcpy(tmpstr,pPrompt);
		strcat( tmpstr, pDesk_NO );
		memcpy(g_desk_NO,pDesk_NO,4);
		DispStr_CE( x, y, tmpstr, DISP_POSITION|DISP_CLRLINE );
		return SUCCESSFUL;
	}else{
		if ( gs.qEvent==EXIT_KEY_POWER ) return -1;
		if ( gs.qEvent==EXIT_AUTO_QUIT ) return -1;
		if ( gs.qEvent==EXIT_KEY_F1 ) return -2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -