📄 record.c
字号:
//-----------------------------------------------------------------------------
// record.c
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <string.h>
#include "main/main.h"
#include "ext/x5045.h"
#include "ext/ds1307.h"
#include "rfid/card.h"
#include "misc/general.h"
//-----------------------------------------------------------------------------
// Record Constants Define
//-----------------------------------------------------------------------------
#define RECORD_LEN 8
#define RECORD_N_MAX 60
#define RECORD_STBLOCK 4
#define RECORD_DONE 1
#define CLEAR 0
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
bit Record_Auto_Store ( void );
bit Clear_All_Record ( void );
char Write_Card_Record ( char * buf, char * key );
//-----------------------------------------------------------------------------
// Record Auto Store Routine
//-----------------------------------------------------------------------------
bit Record_Auto_Store ( void )
{
STDS1307 idata t;
STRecord c;
if ( bMem = x5045_Is_Busy ()) return FALSE;
ds1307_Read ((char *) &t );
if (( t.Date == 0x01 || t.Date == 0x06 || t.Date == 0x11 || t.Date == 0x16 ||
t.Date == 0x21 || t.Date == 0x26 || t.Date == 0x31 ) && t.Hour == 0 ) {;}
else return bRecord = CLEAR;
if ( bRecord == RECORD_DONE ) return bRecord = CLEAR;
c.Year = t.Year; c.Month = t.Month;
c.Date = t.Date; c.Hour = t.Hour;
c.Total = r.Total;
x5045_Read ( Record_n_memAddr, (char *) &f.Record_n, 1 );
if ( f.Record_n >= RECORD_N_MAX ) f.Record_n = 0;
x5045_Write_Enable ();
x5045_Write ( Record_memAddr + f.Record_n * RECORD_LEN, (char*) &c, RECORD_LEN );
f.Record_n ++;
x5045_Write ( Record_n_memAddr, (char *) &f.Record_n, 1 );
return bRecord = RECORD_DONE;
}
//-----------------------------------------------------------------------------
// Clear All Memory Record Routine
//-----------------------------------------------------------------------------
bit Clear_All_Record ( void )
{
char i;
char idata buf[2 * RECORD_LEN];
if ( bMem = x5045_Is_Busy ()) return FALSE;
memset ( buf, 0, 2 * RECORD_LEN );
x5045_Write_Enable ();
for ( i = 0; i < ( RECORD_N_MAX / 2 + 1); i++ )
x5045_Write ( Record_memAddr + i * 2 * RECORD_LEN, buf, 2 * RECORD_LEN );
x5045_Write ( Record_n_memAddr, (char *) &f.Record_n, 1 );
return TRUE;
}
//-----------------------------------------------------------------------------
// Write Card Record Routine
//-----------------------------------------------------------------------------
char Write_Card_Record ( char * buf, char * key )
{
char i, rtn, block, n;
char *pkey = key;
#ifdef CARD_LOAD_nRECORD
x5045_Read ( Record_n_memAddr, (char *) &f.Record_n, 1 );
if ( f.Record_n == ZERO ) return FALSE;
if ( f.Record_n > RECORD_N_MAX ) return FALSE;
n = f.Record_n / 2 + LSB & f.Record_n;
#else
n = RECORD_N_MAX / 2;
#endif
block = RECORD_STBLOCK;
for ( i = 0; i < n; block++ )
{
if ( block == 7 || block == 11 || block == 12 || block == 13 || block == 14 ||
block == 15 || block == 19 || block == 23 || block == 27 || block == 31 ||
block == 35 || block == 39 || block == 43 ) continue;
else if ( block == 47 ) break;
x5045_Read ( Record_memAddr + i * 2 * RECORD_LEN, buf, 2 * RECORD_LEN );
#ifndef USE_JMY_MODULE
if (( rtn = Access_Card_Module ( WRITE_KEY, block, pkey )) != TRUE ) return rtn;
#endif
if (( rtn = Access_Card_Module ( WRITE_BLOCK, block, buf )) != TRUE ) return rtn;
memset ( buf + BLOCK_LEN, 0xAA, BLOCK_LEN );
if (( rtn = Access_Card_Module ( READ_BLOCK, block, buf + BLOCK_LEN )) != TRUE ) return rtn;
if ( memcmp ( buf, buf + BLOCK_LEN, BLOCK_LEN )) return Fail( Comp_Err );
i++;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -