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

📄 compress.c

📁 AT91fr40162的FLASH读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "dtm_v3.h"
#include "dtm.h"
#include "externdef.h"
#include <stdio.h>

// BIEF文件静态信息的OFFSET

#define OFF_BASEINFO_CARDID			0				// 持卡人编号
#define OFF_BASEINFO_NAME			4				// 持卡人姓名
#define OFF_BASEINFO_CARDTYPE		132				// 卡类型
#define OFF_BASEINFO_MAXITEM		133				// 日志总条数
#define OFF_BASEINFO_FINGERSCORE1	135				// 指纹一评分
#define OFF_BASEINFO_FINGERLENGTH1	136				// 指纹一长度
#define OFF_BASEINFO_FINGERSCORE2	138				// 指纹二评分
#define OFF_BASEINFO_FINGERLENGTH2	139				// 指纹二长度
#define OFF_BASEINFO_FINGERMB1		141				// 指纹模板一
#define OFF_BASEINFO_FINGERMB2		541				// 指纹模板二
#define OFF_BASEINFO_CRC			941				// 校验	 

//********************************************************************************
//函数名:void ICUncompressBIEFBaseInfo(_BYTE *cpBuf,SBIEF_1 *sBaseInfo)
//功  能:将cpBuf中存放的BIEF文件BaseInfo的信息解码到sBaseInfo结构类型中
//参  数:cpBuf:待解码的BIEF静态信息
//        sBaseInfo:解码后的BIEF静态信息
//返回值:无;
//*******************************************************************************
void ICUncompressBIEFBaseInfo(_BYTE *cpBuf,SBIEF_1 *sBaseInfo)
{
	_WORD i;
	_DWORD dwTmp;
	_BYTE *cpPos;
	cpPos = cpBuf;
	dwTmp = ByteToLong(cpPos,sizeof(_DWORD),ISHEX);									// 持卡人编号
	cpPos += sizeof(_DWORD);
	sBaseInfo->dwCardID = dwTmp;
	for (i=0;i<128;i++) 												// 持卡人姓名
		sBaseInfo->cpName[i] = cpPos[i];							
	cpPos += 128;
	sBaseInfo->cCardType = *cpPos;										// 卡类型
	cpPos += sizeof(_BYTE);
	sBaseInfo->wMaxItem = ByteToLong(cpPos,sizeof(_WORD),ISHEX);						// 日志总条数
	cpPos += sizeof(_WORD);
	sBaseInfo->cFingerScore1 = *cpPos;									// 指纹一评分
	cpPos += sizeof(_BYTE);
	sBaseInfo->wFingerLength1 = ByteToLong(cpPos,sizeof(_WORD),ISHEX);	// 指纹一长度
	cpPos += sizeof(_WORD);
	sBaseInfo->cFingerScore2 = *cpPos;									// 指纹二评分
	cpPos += sizeof(_BYTE);
	sBaseInfo->wFingerLength2 = ByteToLong(cpPos,sizeof(_WORD),ISHEX);	// 指纹二长度
	cpPos += sizeof(_WORD);
	for (i=0;i<LENOFMB-1;i++) 											// 第二枚指纹
		sBaseInfo->cpFingerMB1[i] = cpPos[i];							
	cpPos += LENOFMB-1;
	for (i=0;i<LENOFMB-1;i++) 											// 第一枚指纹
		sBaseInfo->cpFingerMB2[i] = cpPos[i];							
	cpPos += LENOFMB-1;
	sBaseInfo->cCrc = *cpPos;											// 校验	 
	
}

//********************************************************************************
//函数名:void ICCompressBIEFBaseInfo(SBIEF_1 *sBaseInfo,_BYTE *cpBuf)
//功  能:将sBaseInfo结构类型中存放的BIEF文件BaseInfo的信息解码到cpBuf中
//参  数:cpBuf:解码后的BIEF静态信息
//        sBaseInfo:待解码的BIEF静态信息
//返回值:无;
//*******************************************************************************
void ICCompressBIEFBaseInfo(SBIEF_1 *sBaseInfo,_BYTE *cpBuf)
{
	_WORD i;
	_BYTE *cpPos;
	cpPos =cpBuf;
	LongToHEX(sBaseInfo->dwCardID,cpPos,sizeof(_DWORD));						// 持卡人编号
	cpPos += sizeof(_DWORD);
	for (i=0;i<128;i++) 														// 持卡人姓名
		*(cpPos+i) = sBaseInfo->cpName[i] ;							
	cpPos += 128;
	*cpPos = sBaseInfo->cCardType ;												// 卡类型
	cpPos += sizeof(_BYTE);
	LongToHEX(sBaseInfo->wMaxItem,cpPos,sizeof(_WORD));							// 日志总条数
	cpPos += sizeof(_WORD);
	*cpPos = sBaseInfo->cFingerScore1;											// 指纹一评分
	cpPos += sizeof(_BYTE);
	LongToHEX(sBaseInfo->wFingerLength1,cpPos,sizeof(_WORD));					// 指纹一长度
	cpPos += sizeof(_WORD);
	*cpPos = sBaseInfo->cFingerScore2;											// 指纹二评分
	cpPos += sizeof(_BYTE);
	LongToHEX(sBaseInfo->wFingerLength2,cpPos,sizeof(_WORD));					// 指纹二长度
	cpPos += sizeof(_WORD);
	for (i=0;i<LENOFMB-1;i++) 													// 第二枚指纹
		*(cpPos+i) = sBaseInfo->cpFingerMB1[i];							
	cpPos += LENOFMB-1;
	for (i=0;i<LENOFMB-1;i++) 													// 第一枚指纹
		*(cpPos+i) = sBaseInfo->cpFingerMB2[i];							
	cpPos += LENOFMB-1;
	*cpPos = sBaseInfo->cCrc;													// 校验	 
}


//********************************************************************************
//函数名:void ICUncompressBIEFTrainInfo(_BYTE *cpBuf,SBIEF_2 *sTrainInfo)
//功  能:将cpBuf中存放的BIEF文件TrainInfo的信息解码到sBaseInfo结构类型中
//参  数:cpBuf:待解码的BIEF训练信息
//        sTrainInfo:解码后的BIEF训练信息
//返回值:无;
//*******************************************************************************
void ICUncompressBIEFTrainInfo(_BYTE *cpBuf,SBIEF_2 *sTrainInfo)
{
	sTrainInfo->dwDayFieldTotalTime	  = ByteToLong(cpBuf,4,ISHEX);					// 日道训累加时间
	sTrainInfo->dwDayFieldTotalMile	  = ByteToLong(cpBuf+4,4,ISHEX);				// 日道训累加里程
	sTrainInfo->dwDayRoadTotalTime    = ByteToLong(cpBuf+8,4,ISHEX);				// 日场训累加时间
	sTrainInfo->dwDayRoadTotalMile    = ByteToLong(cpBuf+12,4,ISHEX);				// 日场训累加里程
	sTrainInfo->dwNightFieldTotalTime = ByteToLong(cpBuf+16,4,ISHEX);				// 夜道训累加时间
	sTrainInfo->dwNightFieldTotalMile = ByteToLong(cpBuf+20,4,ISHEX);				// 夜道训累加里程
	sTrainInfo->dwNightRoadTotalTime  = ByteToLong(cpBuf+24,4,ISHEX);				// 夜场训累加时间
	sTrainInfo->dwNightRoadTotalMile  = ByteToLong(cpBuf+28,4,ISHEX);				// 夜场训累加里程
	sTrainInfo->wCurrentItem          = ByteToLong(cpBuf+32,2,ISHEX);				// 当前条数
	sTrainInfo->cCrc = cpBuf[34];													// 校验
}

//********************************************************************************
//函数名:void ICCompressBIEFTrainInfo(SBIEF_2 *sTrainInfo,_BYTE *cpBuf)
//功  能:将sBaseInfo结构类型中存放的BIEF文件TrainInfo的信息解码到cpBuf中
//参  数:cpBuf:解码后的BIEF训练信息
//        sTrainInfo:待解码的BIEF训练信息
//返回值:无;
//*******************************************************************************
void ICCompressBIEFTrainInfo(SBIEF_2 *sTrainInfo,_BYTE *cpBuf)
{
	LongToHEX(sTrainInfo->dwDayFieldTotalTime,cpBuf,4);						// 日道训累加时间
	LongToHEX(sTrainInfo->dwDayFieldTotalMile,cpBuf+4,4);					// 日道训累加里程
	LongToHEX(sTrainInfo->dwDayRoadTotalTime,cpBuf+8,4);					// 日场训累加时间
	LongToHEX(sTrainInfo->dwDayRoadTotalMile,cpBuf+12,4);					// 日场训累加里程
	LongToHEX(sTrainInfo->dwNightFieldTotalTime,cpBuf+16,4);				// 夜道训累加时间
	LongToHEX(sTrainInfo->dwNightFieldTotalMile,cpBuf+20,4);				// 夜道训累加里程
	LongToHEX(sTrainInfo->dwNightRoadTotalTime,cpBuf+24,4);					// 夜场训累加时间
	LongToHEX(sTrainInfo->dwNightRoadTotalMile,cpBuf+28,4);					// 夜场训累加里程
	LongToHEX(sTrainInfo->wCurrentItem,cpBuf+32,2);							// 当前条数
	cpBuf[34] = sTrainInfo->cCrc ;											// 校验
}


//********************************************************************************
//函数名:void ICUncompressBIEFTimeInfo(_BYTE *cpBuf,SBIEF_3 *sTimeInfo)
//功  能:将cpBuf中存放的BIEF文件TimeInfo的信息解码到sBaseInfo结构类型中
//参  数:cpBuf:待解码的BIEF买钟信息
//        sTimeInfo:解码后的BIEF买钟信息
//返回值:无;
//*******************************************************************************
void ICUncompressBIEFTimeInfo(_BYTE *cpBuf,SBIEF_3 *sTimeInfo)
{
   	sTimeInfo->wBuyTime = cpBuf[0]*256+cpBuf[1];			// 买钟总时间								
   	sTimeInfo->wBuyDayFieldTime = cpBuf[2]*256+cpBuf[3];	// 买钟日场训时间
   	sTimeInfo->wBuyDayRoadTime = cpBuf[4]*256+cpBuf[5];		// 买钟日路训时间
   	sTimeInfo->wBuyNightFieldTime = cpBuf[6]*256+cpBuf[7];	// 买钟夜场训时间
   	sTimeInfo->wBuyNightRoadTime = cpBuf[8]*256+cpBuf[9];	// 买钟夜路训时间
	sTimeInfo->cCrc = cpBuf[10];							// 校验
}

//********************************************************************************
//函数名:void ICCompressBIEFTimeInfo(SBIEF_3 *sTimeInfo,_BYTE *cpBuf)
//功  能:将sBaseInfo结构类型中存放的BIEF文件TimeInfo的信息解码到cpBuf中
//参  数:cpBuf:解码后的BIEF买钟信息
//        sTimeInfo:待解码的BIEF买钟信息
//返回值:无;
//*******************************************************************************
void ICCompressBIEFTimeInfo(SBIEF_3 *sTimeInfo,_BYTE *cpBuf)
{
	LongToHEX(sTimeInfo->wBuyTime,cpBuf,2);							// 买钟总时间
	LongToHEX(sTimeInfo->wBuyDayFieldTime,cpBuf+2,2);				// 买钟日场训时间
	LongToHEX(sTimeInfo->wBuyDayRoadTime,cpBuf+4,2);				// 买钟日路训时间
	LongToHEX(sTimeInfo->wBuyNightFieldTime,cpBuf+6,2);				// 买钟夜场训时间
	LongToHEX(sTimeInfo->wBuyNightRoadTime,cpBuf+8,2);				// 买钟夜路训时间
	cpBuf[10] = sTimeInfo->cCrc ;									// 校验
}



// 将结构类型压缩到数组中
void CompressCSI(struct StruCSI *sCSI,_BYTE *cpBuf)
{
   	cpBuf[0] = sCSI->cStatus;					// 手持机的当前状态
   	cpBuf[1] = sCSI->cCurDCB;                    // 当前DCB序号,仅在训练状态下有效
   	cpBuf[2] = sCSI->cReserve;					// 保留数据
   	cpBuf[3] = sCSI->cCrc;						// 校验和
}

// 将数组解压缩到结构类型中
void UncompressCSI(_BYTE *cpBuf,struct StruCSI *sCSI)
{
   	sCSI->cStatus  = cpBuf[0];					// 手持机的当前状态
   	sCSI->cCurDCB  = cpBuf[1];                   // 当前DCB序号,仅在训练状态下有效
   	sCSI->cReserve = cpBuf[2];					// 保留数据
   	sCSI->cCrc = cpBuf[3];						// 校验和
}

// 将结构类型压缩到数组中
void CompressCDTI(struct StruCDTI *sCDTI,_BYTE *cpBuf)
{
	_BYTE * cpPos;
	cpPos = cpBuf;
   	*cpPos = sCDTI->cSeq;												// DCBT表的序号
   	cpPos += sizeof(_BYTE);
   	LongToHEX(sCDTI->wDayRoadValidTime,cpPos,sizeof(_WORD));      		// 日路训有效时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwDayRoadValidMile,cpPos,sizeof(_DWORD));          // 日路训有效里程
   	cpPos += sizeof(_DWORD);
   	LongToHEX(sCDTI->wNightRoadValidTime,cpPos,sizeof(_WORD));          // 夜路训有效时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwNightRoadValidMile,cpPos,sizeof(_DWORD));        // 夜路训有效里程
   	cpPos += sizeof(_DWORD);
   	LongToHEX(sCDTI->wDayFieldValidTime,cpPos,sizeof(_WORD));           // 日场训有效时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwDayFieldValidMile,cpPos,sizeof(_DWORD));         // 日场训有效里程
   	cpPos += sizeof(_DWORD);
   	LongToHEX(sCDTI->wNightFieldValidTime,cpPos,sizeof(_WORD));         // 夜场训有效时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwNightFieldValidMile,cpPos,sizeof(_DWORD));       // 夜场训有效里程
   	cpPos += sizeof(_DWORD);
   	LongToHEX(sCDTI->wDayRoadCurTime,cpPos,sizeof(_WORD));              // 日路训当前时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwDayRoadCurMile,cpPos,sizeof(_DWORD));            // 日路训当前里程
   	cpPos += sizeof(_DWORD);
   	LongToHEX(sCDTI->wNightRoadCurTime,cpPos,sizeof(_WORD));            // 夜路训当前时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwNightRoadCurMile,cpPos,sizeof(_DWORD));          // 夜路训当前里程
   	cpPos += sizeof(_DWORD);
   	LongToHEX(sCDTI->wDayFieldCurTime,cpPos,sizeof(_WORD));             // 日场训当前时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwDayFieldCurMile,cpPos,sizeof(_DWORD));           // 日场训当前里程
   	cpPos += sizeof(_DWORD);
   	LongToHEX(sCDTI->wNightFieldCurTime,cpPos,sizeof(_WORD));           // 夜场训当前时间
   	cpPos += sizeof(_WORD);
   	LongToHEX(sCDTI->dwNightFieldCurMile,cpPos,sizeof(_DWORD));         // 夜场训当前里程
   	cpPos += sizeof(_DWORD);
   	*cpPos = sCDTI->cCycleSecond;										// 未区分训练类型的时间(秒)
   	cpPos += sizeof(_BYTE);
   	LongToHEX(sCDTI->wCyclePluse,cpPos,sizeof(_WORD));                  // 未区分训练类型的脉冲数
   	cpPos += sizeof(_WORD);
   	*cpPos = sCDTI->cCycleStopTime;                        				// 在未区分训练类型时间内的停止次数
   	cpPos += sizeof(_BYTE);
   	*cpPos = sCDTI->cCycleMaxRunTime;                      				// 在未区分训练类型时间内连续运行的最大时间
   	cpPos += sizeof(_BYTE);
   	LongToHEX(sCDTI->wCycleMaxRunPluse,cpPos,sizeof(_WORD));            // 在未区分训练类型时间内连续运行的最大脉冲数
   	cpPos += sizeof(_WORD);
   	*cpPos = sCDTI->cTrainType;											// 前面若干次的训练类型
   	cpPos += sizeof(_BYTE);
   	*cpPos = sCDTI->cUpdateCount;										// 更新计数
   	cpPos += sizeof(_BYTE);
   	*cpPos = sCDTI->cCrc;												// 校验
}

// 将数组解压缩到结构类型中
void UncompressCDTI(_BYTE *cpBuf,struct StruCDTI *sCDTI)
{
	_BYTE *cpPos;
	cpPos = cpBuf;
	sCDTI->cSeq = *cpPos;														// DCBT表的序号
   	cpPos += sizeof(_BYTE);
	sCDTI->wDayRoadValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX);        	// 日路训有效时间
   	cpPos += sizeof(_WORD);
	sCDTI->dwDayRoadValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX);         // 日路训有效里程
   	cpPos += sizeof(_DWORD);
	sCDTI->wNightRoadValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX);         // 夜路训有效时间
   	cpPos += sizeof(_WORD);
	sCDTI->dwNightRoadValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX);       // 夜路训有效里程
   	cpPos += sizeof(_DWORD);
	sCDTI->wDayFieldValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX);          // 日场训有效时间
   	cpPos += sizeof(_WORD);
	sCDTI->dwDayFieldValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX);        // 日场训有效里程
   	cpPos += sizeof(_DWORD);
	sCDTI->wNightFieldValidTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX);        // 夜场训有效时间
   	cpPos += sizeof(_WORD);
	sCDTI->dwNightFieldValidMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX);      // 夜场训有效里程
   	cpPos += sizeof(_DWORD);
	sCDTI->wDayRoadCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX);             // 日路训当前时间
   	cpPos += sizeof(_WORD);
	sCDTI->dwDayRoadCurMile = ByteToLong(cpPos,sizeof(_DWORD),ISHEX);           // 日路训当前里程
   	cpPos += sizeof(_DWORD);
	sCDTI->wNightRoadCurTime = ByteToLong(cpPos,sizeof(_WORD),ISHEX);           // 夜路训当前时间

⌨️ 快捷键说明

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