📄 common.c
字号:
if ( sss.qEvent==EXIT_KEY_POWER ) return -1;
if ( sss.qEvent==EXIT_AUTO_QUIT ) return -1;
if ( sss.qEvent==EXIT_KEY_F1 ) return -2;
if ( sss.qEvent==EXIT_KEY_F2 ) return -3;
if ( sss.qEvent==EXIT_KEY_F3 ) return -4;
return -5;
}
}
//**********************************mifare卡设置*******************************************
short test_input()
{
//char ch,*cha;
long ch;
char msg[8];
char really[13];
int sin,i;
short ret;
clr_scr();
i = 0;
memcpy(really,0,strlen(really));
memcpy(msg,0,strlen(msg));
DispStr_CE(0,0,"输入:",DISP_CLRSCR|DISP_POSITION);
DispStr_E(0,2,really,DISP_CLRLINE|DISP_5x7);
//cha=ch;
while(ch= delay_and_wait_key( 0, EXIT_KEY_ALL, 0 ))
{
//memcpy(msg,0,sizeof(msg));
switch (ch)
{
case EXIT_KEY_0:
{
sin = 0;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_1:
{
sin = 1;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_2:
{
sin = 2;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_3:
{
sin = 3;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_4:
{
sin = 4;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_5:
{
sin = 5;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_6:
{
sin = 6;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_7:
{
sin = 7;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_8:
{
sin = 8;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_9:
{
sin = 9;
ret = SUCCESSFUL;
break;
}
case EXIT_KEY_F1:
{
memcpy(really,0,strlen(really));
return FAILURE;
}
case EXIT_KEY_F3:
{
memcpy(really,0,strlen(really));
memcpy(msg,0,strlen(msg));
i=0;
clr_scr();
DispStr_CE(0,0,"输入:",DISP_CLRSCR|DISP_POSITION);
ret = FAILURE;
break;
}
case EXIT_KEY_ENTER:
{
return SUCCESSFUL;
}
default: ret = FAILURE; break;
}
if(i>=13)
{
i++;
DispStr_CE(0,2,really,DISP_CLRLINE);
DispStr_CE(0,4,"输入超过最大值!",DISP_CLRLINE);
DispStr_CE(0,6,"请按F3重新输入",DISP_CLRLINE);
}
if(ret==SUCCESSFUL)
{
//if(0==i++){ sprintf(msg, "%d", sin);DispStr_CE(0,2,msg,DISP_CLRLINE);continue;}
sprintf(msg, "%d", sin);
strcat(really,msg);
DispStr_CE(0,2,really,DISP_CLRLINE);
i++;
}
}
}
//*****************************************************************************************
//****************************************************
//功能:
//描述:
//输入:
//输出:
//返回:
//****************************************************
void mifare_operate()
{
short ret ;
int cPtr = 0;
int lPtr = 0;
ret = 0;
ret = browse_menu(0,mifare_Menu,&cPtr,&lPtr );
switch( ret )
{
case 0:
select_balance();
break;
case 1: input_data();
break;
/*case 2: search_info(1);
break;*/
case 2: test_input();
break;
default:
break;
}
}
void select_balance()
{
unsigned char rdata[1030];
short ret ;
sprintf(rdata,"%d",0);
ret=read_sector( 1,rdata);
if(!ret)
{
clr_scr();
DispStr_CE(0,0,"你当前余额为:",DISP_POSITION|DISP_CLRLINE);
sprintf(rdata,"%d元",(atoi(rdata)));
DispStr_CE(0,2,rdata,DISP_POSITION|DISP_CLRLINE);
delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
}
}
int read_sector( int sec_num,unsigned char *rdata)
{
unsigned char cntr, card_read_ok;
unsigned char TempStatus, str[20];
char str1[20],str2[20],str3[20];
strcpy(str1,"卡接口错误!");
strcpy(str2,"请在10秒内刷卡");
strcpy(str3,"未读到合法卡!");
if( InitMC530(TYPE_A_ISO14443)!=RCX_OK )
{
//MC530Off();
DispStr_CE(0,3,str1,DISP_POSITION|DISP_CLRSCR);
delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
return -1;
}
DispStr_CE(0,0,str2,DISP_POSITION|DISP_CLRSCR);
SPT_set(64);
for ( card_read_ok=0,cntr=10; cntr&&!card_read_ok; )
{
if (!SPT_read())
{
cntr--;
sprintf( str, "请在%d秒内刷卡", cntr );
DispStr_CE(0,0,str,DISP_POSITION|DISP_CLRLINE);
SPT_set(64);
}
TempStatus = MyCardAccessMultiBlocks( PICC_AUTHENT1A, PICC_ReadBlock, sec_num, 0, 3, rdata,NULL);
if ( TempStatus==MI_OK )
{
card_read_ok = 1;
}
}
if ( !card_read_ok )
{
//MC530Off();
DispStr_CE(0,3,str3,DISP_POSITION|DISP_CLRLINE);
delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
return 1;
}
//MC530Off();
return 0;
}
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)
{
char ret;
unsigned char ATQ[3]; //ATQ(2 bytes)
unsigned char PICCsnr[5]; //Serial number(4 bytes)
unsigned char ATS[2]; //mifare1:0x08(1 byte)
unsigned char newauth; //need authentication again?
//check parameters
ret = MI_OK;
if( (auth_mode!=PICC_AUTHENT1A)&&(auth_mode!=PICC_AUTHENT1B) )
{
ret = RCX_ERROR_PARAM;
}
else if( (WR_mode!=PICC_ReadBlock)&&(WR_mode!=PICC_WriteBlock) )
{
ret = RCX_ERROR_PARAM;
}
else if( (sector>15)||(block>2)||((sector+(block+blockcnt-1)/3)>15) )
{
ret = RCX_ERROR_PARAM;
}
if( (WR_mode==PICC_ReadBlock)&&(rdata==NULL) )
{
ret = RCX_ERROR_PARAM;
}
else if( (WR_mode==PICC_WriteBlock)&&(wdata==NULL) )
{
ret = RCX_ERROR_PARAM;
}
newauth = 1; //first authtication
while( (blockcnt>0)&&(ret==MI_OK) )
{
if(newauth==1)
{
ret = CardTypeARequest(PICC_REQALL,ATQ); //maybe Halt
if(ret!=MI_OK)
{
ret = CardTypeARequest(PICC_REQALL,ATQ);//maybe active//搜所活动的卡
}
if(ret==MI_OK)
{
ret = CardTypeAAnticollLevel1(PICCsnr);
}
if(ret==MI_OK)
{
ret = CardTypeASelectLevel1(PICCsnr,ATS);
if(ATS[0]!= 0x08)
{
ret = RCX_ERROR_CARDTYPE;
}
}
if(ret==MI_OK)
{
ret = CardMFCAuthKey(PICC_AUTHENT1A,PICCsnr,dummy_key,(4*sector+block));
}
newauth = 0;
}
if(ret==MI_OK)
{
if(WR_mode==PICC_ReadBlock)
{
ret = CardMFCRead16Bytes(4*sector+block,rdata);
rdata += 16;
}
else
{
ret = CardMFCWrite16Bytes(4*sector+block,wdata);
wdata += 16;
}
block++;
if(block>2)
{
sector++;
block = 0;
newauth = 1; //new sector
}
}
blockcnt--;
}
return ret;
}
int input_data()
{
//BROWINFO bi;
GETSTR_PARAM gs;
unsigned char dumpstr[25*8],str[20];
int x,y;
int sub = 0;
unsigned char rdata[1030];
unsigned char fp_data[1030];
char str1[20];
char *s;
int n=0;
short ret ;
clr_scr();
sprintf( str, "%d", sub );
gs.qx = 0;
gs.qy = 0;
gs.pPrompt = "请输入金额:";
gs.sFont = 0;
gs.alpha = 0;
gs.nullEnable = 0;
gs.csChar = '_';
gs.pwChar = 0;
gs.spChar = 0;
gs.pStr = str;
gs.maxNum = 5;
gs.minNum = 1;
gs.minValue = 0;
gs.maxValue = 99999;
gs.retNum = strlen(str);
gs.qEvent = EXIT_KEY_F1;
if ( huGetStr_E(&gs)<0 )
{
return 0;
}
sub = gs.retValue;
//---------
clr_scr();
DispStr_CE(0,0,"你确定要扣除",DISP_POSITION|DISP_CLRLINE);
sprintf(str1,"%d元吗?",sub);
DispStr_CE(0,2,str1,DISP_POSITION|DISP_CLRLINE);
if(!(ret = sure(2,4,"确定","取消")))
{
read_sector( 1,rdata);
n=atoi(rdata);//字符数组转换成整形
if(n<sub)
{
return 0;
}
else
{
sprintf(fp_data,"%d",n-sub);
sprintf(rdata,"%d",0);
MyCardAccessMultiBlocks( PICC_AUTHENT1A, PICC_WriteBlock, 1, 0, 1, rdata,fp_data );
//delay_and_wait_key( 2, EXIT_KEY_ALL, 0 );
//read_sector( 1,rdata);
clr_scr();
DispStr_CE(0,0,"结账成功",DISP_POSITION|DISP_CLRLINE);
delay_and_wait_key( 4, EXIT_KEY_ALL, 0 );
}
return 1;
}
//---------
}
//*****************************************************************************mifare卡设置end
/*
//--------------------------------------------------------------------------------------------
//函数名: win_vccode_info
//函数功能:和上位机建立连接并获取信息,
//输入:
//输出:
//返回:
//----------------------------------------------------------------------------------------------
short win_vccode_info()
{
short ret;
}
//-------------------------------------------------------------------------
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -