📄 user0.c
字号:
char User_Card_Deal( char * buf )
{
pUICC c = ( pUICC ) buf;
struct
{
char Factor;
int Fee;
long LowLimit;
long Water;
} idata Dat;
if ( memcmp ( f.Well, c->Block3C.Well, sizeof( f.Well ))) return Fail( Well_Err );
memcpy ((char *) &Dat, (char *) &c->Block3C.User, sizeof( c->Block3C.User ));
Dat.Factor = c->Block3C.User.Pulse;
Dat.Fee = c->Block3C.User.Fee;
Dat.LowLimit = Array_Long ( c->Block3C.User.LowLimit, 3 );
if (( rtn = Access_Card_Module ( READ_BLOCK, BLOCK3D, buf )) != TRUE ) return rtn;
if ( !Buffer_is_Zero ((char *) &c->Block3D.u.User.Water, sizeof( r.Remain )))
{
// correct
Dat.Water = c->Block3D.u.User.Water;
if (( rtn = Access_Card_Module ( READ_BLOCK, BLOCK3E, buf )) != TRUE ) return rtn;
if (( rtn = Card_Data_Valid ( buf )) != TRUE ) return rtn;
if ( Dat.Water != c->Block3D.u.User.Water )
{
bc7281_Display_Dig ( Code2, DISP_DELAY1 ); return FALSE;
}
if ( bDue == FALSE && r.Remain + c->Block3D.u.User.Water > RemainMax )
{
bc7281_Display_Dig ( Code5, DISP_DELAY1 ); return FALSE;
}
if ( bMem = x5045_Is_Busy ()) { bc7281_Display_Dig ( Code6, DISP_DELAY1 ); return FALSE; }
// clear
bFill = CLEAR;
r.Fill = CLEAR;
x5045_Write ( Fill_memAddr, (char*) &r.Fill, sizeof( r.Fill ));
memset ( buf, 0, BLOCK_LEN );
if (( rtn = Access_Card_Module ( WRITE_BLOCK, BLOCK3D, buf )) != TRUE ) return rtn;
if (( rtn = Access_Card_Module ( READ_BLOCK, BLOCK3D, buf )) != TRUE ) return rtn;
if ( !Buffer_is_Zero ( buf, BLOCK_LEN )) return FALSE;
}
else
{
// zero
if (( rtn = Access_Card_Module ( READ_BLOCK, BLOCK3E, buf )) != TRUE ) return rtn;
if (( rtn = Card_Data_Valid ( buf )) != TRUE ) return rtn;
if ( Buffer_is_Zero ((char *) &c->Block3D.u.User.Water, sizeof( r.Remain )))
{
User_Display_Item (); return TRUE;
}
if ( bFill == TRUE )
{
memset ( buf, 0, BLOCK_LEN );
if (( rtn = Access_Card_Module ( WRITE_BLOCK, BLOCK3E, buf )) != TRUE ) return rtn;
User_Display_Item (); return TRUE;
}
Dat.Water = c->Block3D.u.User.Water;
if ( bDue == FALSE && r.Remain + c->Block3D.u.User.Water > RemainMax )
{
bc7281_Display_Dig ( Code5, DISP_DELAY1 ); return FALSE;
}
}
// fill
if ( bMem = x5045_Is_Busy ()) { bc7281_Display_Dig ( Code6, DISP_DELAY1 ); return FALSE; }
if ( bDue == FALSE ) r.Remain += c->Block3D.u.User.Water;
else if ( bDue == TRUE )
{
if ( r.Remain > c->Block3D.u.User.Water )
r.Remain -= c->Block3D.u.User.Water;
else
{
bDue = CLEAR;
r.Remain = c->Block3D.u.User.Water - r.Remain;
}
}
bFill = FILL;
r.Fill = 0xFF;
r.Factor = Dat.Factor;
r.Fee = Dat.Fee;
r.LowLimit = Dat.LowLimit;
Fill_mem_Value ();
memset ( buf, 0, BLOCK_LEN );
if (( rtn = Access_Card_Module ( WRITE_BLOCK, BLOCK3E, buf )) != TRUE ) return rtn;
return TRUE;
}//-----------------------------------------------------------------------------
// Check Card Sort Routine
//-----------------------------------------------------------------------------
char Check_Card_Type ( void )
{
char rtn;
char idata buf[2 * BLOCK_LEN];
pSTICC c = ( pSTICC ) buf;
memset ( buf, 0, BLOCK_LEN );
if (( rtn = Access_Card_Module ( FIND_CARD, AWAKE_CARD, buf )) != TRUE ) return rtn;
if (( rtn = Access_Card_Module ( READ_BLOCK, BLOCK3D, (char *) &c->Block3D )) != TRUE ) return rtn;
if (( rtn = Card_Data_Valid ((char *) &c->Block3D )) != TRUE ) return rtn;
Speaker_Beep ();
switch ( c->Block3D.Type )
{
case CHECK_CARD:
Check_Display_Item ();
break;
default:
{
if (( rtn = Access_Card_Module ( READ_BLOCK, BLOCK3C, (char *) &c->Block3C )) != TRUE ) return rtn;
if (( rtn = Card_Data_Valid ((char *) &c->Block3C )) != TRUE ) return rtn;
if ( memcmp ( f.City, c->Block3C.City, sizeof( f.City ))) return Fail( City_Err );
switch ( c->Block3D.Type )
{
case CLOCK_CARD:
Set_Clock ( &c->Block3D.u.Clock.t );
Display_Clock ( DISP_DELAY2 );
break;
case USER_CARD:
if ( memcmp ( f.Well, c->Block3C.Well, sizeof( f.Well ))) return Fail( Well_Err );
User_Card_Deal ( buf );
User_Display_Item ();
break;
case CLEAR_CARD:
if ( Shift_Run_Mode ( RUN ) == FALSE ) bc7281_Display_Dig ( Code6, DISP_DELAY1 );
else bc7281_Display_Dig ( Code7, DISP_DELAY1 );
break;
case TEST_CARD:
if ( Shift_Run_Mode ( TEST ) == FALSE ) bc7281_Display_Dig ( Code6, DISP_DELAY1 );
else bc7281_Display_Dig ( Code9, DISP_DELAY1 );
break;
case LOWLIMIT_CARD:
r.LowLimit = Array_Long ( c->Block3C.User.LowLimit, 3 );
if ( bMem = x5045_Is_Busy ())
bc7281_Display_Dig ( Code6, DISP_DELAY1 );
else
{
x5045_Write ( LowLimit_memAddr, (char *) &r.LowLimit, sizeof( r.LowLimit ));
bc7281_Display_Dig ( CodeF | Hex_BCD ( r.LowLimit, 7 ), DISP_DELAY1 );
}
break;
case RECORD_CARD:
bc7281_Display_Dig ( CodeA, DISP_DELAY1 );
if ( Write_Card_Record () != TRUE ) bc7281_Display_Dig ( Code4, DISP_DELAY1 );
else bc7281_Display_Dig ( Code8, DISP_DELAY1 );
break;
default:
break;
}
}
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -