📄 jmy.c
字号:
//-----------------------------------------------------------------------------
// jmy.c
//-----------------------------------------------------------------------------
#include "rfid/card.h"
#ifdef USE_JMY_MODULE
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <reg52.h>
#include <string.h>
#include "cpu/cpu.h"
#include "main/main.h"
#include "rfid/jmy.h"
#include "misc/misc.h"
#include "misc/general.h"
//-----------------------------------------------------------------------------
// Functions Prototype
//-----------------------------------------------------------------------------
void Transmit_Card_Buf ( char * buf );
char Receive_Card_Buf ( char * buf );
char Access_Card_Module ( char cmd, char sub, char * block );
//-----------------------------------------------------------------------------
// Transmit Card Buffer Routine
//-----------------------------------------------------------------------------
void Transmit_Card_Buf ( char * buf )
{
char n;
pSTjmy p = ( pSTjmy ) buf;
Clear_Uart0;
n = STX_LEN + p->Len + ETX_LEN;
buf[n - 1] = Buffer_XOR ((char *) &p->Len, p->Len );
for ( ; n != 0; n-- )
{
Uart0_Send_Byte ( *buf );
if ( *buf++ == MSBYTE (STX)) Uart0_Send_Byte (0);
}
}
//-----------------------------------------------------------------------------
// Receive Card Buffer Routine
//-----------------------------------------------------------------------------
char Receive_Card_Buf ( char * buf )
{
char n;
pSTjmy p = ( pSTjmy ) buf;
n = STX_LEN + RTN_LEN_MIN + ETX_LEN;
for ( ; n != 0; n-- ) if (( *buf++ = Uart0_Receive_Byte ()) == 0xFF ) return Fail( Rxd_Err );
if ( p->Stx != STX ) return Fail( Stx_Err );
n = p->Len - RTN_LEN_MIN;
for ( ; n != 0; n-- ) *buf++ = Uart0_Receive_Byte ();
if ( Buffer_XOR ((char *) &p->Len, p->Len + ETX_LEN ) != ZERO ) return Fail( Xor_Err );
return TRUE;
}
//-----------------------------------------------------------------------------
// Access Card Module Routine
//-----------------------------------------------------------------------------
char Access_Card_Module ( char cmd, char sub, char * block )
{
char rtn = FALSE;
char idata key[] = KEY_DEFAULT;
STjmy idata y;
switch ( cmd )
{
case MODULE_CTRL:
y.Len = CMD_LEN;
y.u.Module_Ctrl = sub;
break;
case FIND_CARD:
y.Len = CMD_LEN;
y.u.Find.Mode = sub;
break;
case READ_BLOCK:
y.Len = READ_LEN;
y.u.Read.send.KeyID = USE_KEYB;
y.u.Read.send.nBlock = sub;
memcpy ( y.u.Read.send.Key, key, sizeof( key ));
break;
case WRITE_BLOCK:
y.Len = WRITE_LEN;
y.u.Write.KeyID = USE_KEYB;
y.u.Write.nBlock = sub;
memcpy ( y.u.Write.Key, key, sizeof( key ));
memcpy ( y.u.Write.Block, block, BLOCK_LEN );
break;
case CARD_SLEEP:
y.Len = CMD_LEN_MIN;
break;
default:
return FALSE;
}
y.Cmd = cmd;
y.Stx = STX;
Transmit_Card_Buf ((char *) &y );
memset (( char *) &y, 0, sizeof( STjmy ));
if (( rtn = Receive_Card_Buf ((char *) &y )) != TRUE ) return rtn;
switch ( y.Cmd )
{
case MODULE_CTRL:
break;
case FIND_CARD:
memcpy ( block, y.u.Find.SN, SN_LEN );
break;
case ~FIND_CARD:
return NO_CARD;
break;
case READ_BLOCK:
if ( y.Len == BLOCK_LEN + RTN_LEN_MIN ) memcpy ( block, y.u.Read.Block, BLOCK_LEN );
break;
case WRITE_BLOCK:
break;
case CARD_SLEEP:
break;
default:
return CARD_CMD_FAIL;
break;
}
return TRUE;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -