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

📄 anony.c

📁 智能水表程序 来着互联网
💻 C
字号:
//-----------------------------------------------------------------------------
// anony.c
//-----------------------------------------------------------------------------
#include "rfid/card.h"
#ifndef USE_JMY_MODULE
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <reg52.h>
#include <string.h>
#include "cpu/cpu.h"
#include "rfid/card.h"
#include "misc/misc.h"
#include "misc/general.h"
#include "config/config.h"
//-----------------------------------------------------------------------------
// Anonymous Card Module Command Define
//-----------------------------------------------------------------------------
/*
char xdata SET_MODULE[]       = { 0x3C, 0x04, 0x01, 0x68, 0x00, 0x00, 0x51, 0x0D };
             //	Return:		    { 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x0D }
char xdata READ_CARD_ID[]	  = { 0x3C, 0x04, 0x01, 0x70, 0x00, 0x00, 0x49, 0x0D };
    // ICC	Return SNR:         { 0x3C, 0x05, 0xF9, 0x5D, 0x09, 0xE8, 0x00, 0x7C, 0x0D }
    //   NO ICC Return:		    { 0x3C, 0x01, 0xFF, 0xC2, 0x0D }
char xdata WRITE_CARD_ID[]	  = { 0x3C, 0x08, 0x01, 0x6A, 0x00, 0x3D,
							 	  0xF9, 0x5D, 0x09, 0xE8, 0x27, 0x0D };
             //	Return:		    { 0x3C, 0x02, 0x00, 0x00, 0x3E, 0x0D }
    //    Error Return:         { 0x3C, 0x01, 0xF5, 0xC8, 0x0D }
char xdata READ_CARD_BLOCK[]  = { 0x3C, 0x04, 0x01, 0x66, 0x3D, 0x00, 0x62, 0x0D };
   // ICC Return Block:         { 0x3C, 0x12, 0x00,
   // ( block 16 byte data )	  0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 
   //							  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
   //							  0x2E, 0x0D }
char xdata WRITE_CARD_BLOCK[] = { 0x3C, 0x13, 0x01, 0x67, 0x3D,
			                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  								  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
								  0x00, 0x0D };
*/
//-----------------------------------------------------------------------------
// Anonymous Card Module Canstants Define
//-----------------------------------------------------------------------------
#define STX        0x3C
#define ETX        0x0D
#define LEN_MAX    0x1F
//-----------------------------------------------------------------------------
// Anonymous Card Module Struct Define
//-----------------------------------------------------------------------------
typedef struct _STAnony
{
	char Stx;
	char Len;
	char State;
	char Cmd;
} STAnony, *pSTAnony;
//-----------------------------------------------------------------------------
// 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 Anonymous Card Buffer Routine
//-----------------------------------------------------------------------------
void Transmit_Card_Buf ( char * buf )
{
	char i, n;

	n = 2 + buf[1];
	buf[n] = Buffer_XOR ( buf, n );
	buf[n + 1] = ETX;
	n += 2;
    for ( i = 0; i < n; i++ ) 
	{
		if ( MSB & buf[i] ) Uart0_Send_Byte ( 0x81 );
		Uart0_Send_Byte ( buf[i] );
	}
}
//-----------------------------------------------------------------------------
// Receive Anonymous Card Buffer Routine
//-----------------------------------------------------------------------------
char Receive_Card_Buf ( char * buf )
{
	char i, n;

	buf[0] = Uart0_Receive_Byte ();
	if ( buf[0] == 0xFF ) return Fail( Rxd_Err );
	if ( buf[0] != STX  ) return Fail( Stx_Err );
	buf[1] = Uart0_Receive_Byte ();
	if ( buf[1] > LEN_MAX ) return Fail( Len_Err );
	n = buf[1] + 4;
	for ( i = 2; i != n; i++ )
	{
		buf[i] = Uart0_Receive_Byte ();
		if (( n - i ) == 2 && buf[i] == ETX ) break;
	}
	if ( i != n ) n = buf[1] + 1;	else n = buf[1] + 2;
	if ( Buffer_XOR ( buf, n ) != buf[n] ) return Fail( Xor_Err );
	return TRUE;
}
//-----------------------------------------------------------------------------
// Receive Anonymous Card Buffer Routine
//-----------------------------------------------------------------------------
/*char Receive_Card_Buf ( char * p )
{
	char n;
	char * buf = p;

	if ( Uart0_Receive_Byte ( p ) == FALSE ) return Fail( Rxd_Err );
	if ( *p != STX ) return Fail( Stx_Err );
	if ( Uart0_Receive_Byte ( ++p ) == FALSE ) return Fail( Rxd_Err );
	if ( *p > LEN_MAX ) return Fail( Len_Err );
	n = *p + 2;
	do {
		if ( Uart0_Receive_Byte ( ++p ) == FALSE ) return Fail( Rxd_Err );
		if ( n == 2 && *p == ETX ) break;
	} while ( --n );
	if ( n != 0 ) n = buf[1] + 1;	else n = buf[1] + 2;
	if ( Buffer_XOR ( buf, n ) != buf[n] ) return Fail( Xor_Err );
	return TRUE;
}*/
//-----------------------------------------------------------------------------
// Access Anonymous Card Module Routine
//-----------------------------------------------------------------------------
char Access_Card_Module ( char cmd, char sub, char * block )
{	
	char rtn;
	char buf[23];

	switch ( cmd ) 
	{
		case MODULE_CTRL:
			buf[1] = 0x04;
			buf[3] = 0x68;
			buf[4] = 0x00;
			buf[5] = 0x00;
			break;

		case FIND_CARD:
			buf[1] = 0x04;
			buf[3] = 0x70;
			buf[4] = 0x00;
			buf[5] = 0x00;
			break;

		case WRITE_KEY:
			buf[1] = 0x08;
			buf[3] = 0x6A;
			buf[4] = 0x00;
			buf[5] = sub;
			memcpy ( buf + 6, block, CARD_SN_LEN );
			break;

		case READ_BLOCK:
			buf[1] = 0x04;
			buf[3] = 0x66;
			buf[4] = sub;
			buf[5] = 0x00;
			break;

		case WRITE_BLOCK:
			buf[1] = 0x13;
			buf[3] = 0x67;
		    buf[4] = sub;
			memcpy ( buf + 5, block, BLOCK_LEN );
			break;

		default:
			return FALSE;
			break;
	}
	buf[0] = STX;
	buf[2] = 0x01;
	Transmit_Card_Buf ( buf );

	memset ( buf, 0, sizeof( buf ));
	if (( rtn = Receive_Card_Buf ( buf )) != TRUE ) return rtn;
	if ( buf[1] == 0x01 ) return NO_CARD;

	if ( cmd == FIND_CARD && buf[1] == 0x05 ) memcpy ( block, buf + 2, CARD_SN_LEN );
	else if ( cmd == READ_BLOCK && buf[1] == 0x12 ) memcpy ( block, buf + 3, BLOCK_LEN );
	return TRUE;
}

#endif

⌨️ 快捷键说明

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