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

📄 jmy.c

📁 智能水表程序 来着互联网
💻 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 + -