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

📄 command.c

📁 AT91fr40162的FLASH读写程序
💻 C
📖 第 1 页 / 共 2 页
字号:
{
   	_WORD wSize;
   	_BYTE cRetCode;
   	_BYTE cpBuf[LENOFIDEF];
   	_WORD i;
   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C71H32H_RETS,cRetCode,0x00,gcpSendBuf);
	 	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	for (i=0;i<LENOFIDEF-1;i++) cpBuf[i] = cpRecBuf[i+7];
   	cRetCode = ICReadWriteIDEF(cpBuf,ICWRITE);
   	wSize = SendStringComToBuf(C71H32H_RETS,cRetCode,0x00,gcpSendBuf);
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
   	return(cRetCode);
}


// 实时采集图像
// 命    令: 1A 72 73 00 03 80 31 CRC
// 正确响应: 1A 72 73 00 0? 80 31 返回码(2) + 指纹图像结构 + CRC
// 错误响应: 1A 72 73 00 05 80 31 返回码(2) + CRC
_BYTE CmdGetImage(_BYTE * cpRecBuf)
{
   	return(C_OK);
}

// 实时采集指纹特征和MBBuf中的指纹模板进行即时比对
// 命令: 1A 72 73 00 03 82 31 CRC
// 响应: 1A 72 73 00 05 82 31 返回码(2) CRC
_BYTE CmdVerifyMBBuf(_BYTE * cpRecBuf)
{
   	return(C_OK);
}

// 利用下载的指纹模板进行即时比对
// 命令: 1A 72 73 Len(2) 82 33 + 指纹1评分(1)+指纹1长度(2)+指纹1数据(?)
//                             + 指纹2评分(1)+指纹2长度(2)+指纹2数据(?)
// 响应: 1A 72 73 00 05 82 33 00 00 BB
_BYTE CmdVerifyFinger(_BYTE * cpRecBuf)
{
   	return(C_OK);
}


// 实时采集指纹
// 命令: 1A 72 73 00 03 83 33 B8
// 响应: 1A 72 73 LEN(2) 83 33 00 00 指纹评分(1) 指纹长度(2) 指纹的数据(指纹的实际长度) CRC
_BYTE CmdGetFingerMB(_BYTE * cpRecBuf)
{
   	return(C_OK);
}

// 读取IC卡的基本信息
// 命令: 1A 72 73 00 03 91 30 CRC
// 响应: 1A 72 73 N+5(2) 91 30 00 00 BIEF文件的训练信息(N) CRC
_BYTE CmdReadBIEFBaseInfo(_BYTE * cpRecBuf)
{
   	_BYTE cpBuf[LENOFBIEFBASEINFO];
   	SBIEF_1 sBaseInfo;
   	_BYTE cRetCode;
   	_WORD i,wLength;
   	_WORD wSize;

   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C91H30H_RETF,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	cRetCode = ICReadWriteBIEFBaseInfo(&sBaseInfo,ICREAD);
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C91H30H_RETF,cRetCode,0x00,gcpSendBuf);    	// 发送错误信息
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	ICCompressBIEFBaseInfo(&sBaseInfo,cpBuf);
	wSize = 0;
   	gcpSendBuf[wSize++] = 0x1A;
   	gcpSendBuf[wSize++] = 0x72;
   	gcpSendBuf[wSize++] = 0x73;
   	wLength = LENOFBIEFBASEINFO + 5;
   	gcpSendBuf[wSize++] = (_BYTE)(wLength/256);                            			// 长度_H
   	gcpSendBuf[wSize++] = (_BYTE)(wLength%256);                            			// 长度_L
   	gcpSendBuf[wSize++] = 0x91;
   	gcpSendBuf[wSize++] = 0x30;
   	gcpSendBuf[wSize++] = 0x00;
   	gcpSendBuf[wSize++] = 0x00;
   	for (i=0;i<LENOFBIEFBASEINFO;i++) gcpSendBuf[wSize++] = cpBuf[i];

    gcpSendBuf[wSize] = 0;										// 计算检查和
   	for (i=0;i<wSize;i++) gcpSendBuf[wSize] += gcpSendBuf[i];	
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize+1);	
   	return(C_OK);
}


// 读取IC卡BIEF文件的训练信息
// 命令: 1A 72 73 00 03 91 31 CRC
// 响应: 1A 72 73 N+5(2) 91 31 00 00 BIEF文件的训练信息(N) CRC
_BYTE CmdReadBIEFTrainInfo(_BYTE * cpRecBuf)
{
   	_BYTE  cpBuf[LENOFBIEFTRAININFO];
   	SBIEF_2 sTrainInfo;
   	_BYTE  cRetCode;
   	_BYTE  cByte;
   	_WORD  i,wLength;
   	_WORD wSize;

   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C91H31H_RETF,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	cByte = 0;
   	cRetCode = ICReadWriteBIEFTrainInfo(&sTrainInfo,ICREAD,&cByte);
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C91H31H_RETF,cRetCode,0x00,gcpSendBuf);    // 发送错误信息
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	ICCompressBIEFTrainInfo(&sTrainInfo,cpBuf);
	wSize = 0;
   	gcpSendBuf[wSize++] = 0x1A;
   	gcpSendBuf[wSize++] = 0x72;
   	gcpSendBuf[wSize++] = 0x73;
   	wLength = LENOFBIEFTRAININFO + 5;
   	gcpSendBuf[wSize++] = (_BYTE)(wLength/256);                            // 长度_H
   	gcpSendBuf[wSize++] = (_BYTE)(wLength%256);                            // 长度_L
   	gcpSendBuf[wSize++] = 0x91;
   	gcpSendBuf[wSize++] = 0x31;
   	gcpSendBuf[wSize++] = 0x00;
   	gcpSendBuf[wSize++] = 0x00;
   	for (i=0;i<LENOFBIEFTRAININFO;i++) gcpSendBuf[wSize++] = cpBuf[i];

    gcpSendBuf[wSize] = 0;										// 计算检查和
   	for (i=0;i<wSize;i++) gcpSendBuf[wSize] += gcpSendBuf[i];	
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize+1);	
   	return(C_OK);
}

// 读取IC卡BIEF文件的买钟信息
// 命令: 1A 72 73 00 03 91 32 CRC
// 响应: 1A 72 73 N+5(2) 91 32 00 00 BIEF文件的买钟信息(N) CRC
_BYTE CmdReadBIEFTimeInfo(_BYTE * cpRecBuf)
{
   _BYTE  cpBuf[LENOFBIEFTIMEINFO];
   SBIEF_3 sTimeInfo;
   _BYTE  cRetCode;
   _BYTE  cByte;
   _WORD  i,wLength;
   _WORD  wSize;

   cRetCode = ICCheckCardInsert();
   if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C91H32H_RETF,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   }
   cByte = 0;
   cRetCode = ICReadWriteBIEFTimeInfo(&sTimeInfo,ICREAD,&cByte);
   if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C91H32H_RETF,cRetCode,0x00,gcpSendBuf);    // 发送错误信息
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   }
   	ICCompressBIEFTimeInfo(&sTimeInfo,cpBuf);
	wSize = 0;
   	gcpSendBuf[wSize++] = 0x1A;
   	gcpSendBuf[wSize++] = 0x72;
   	gcpSendBuf[wSize++] = 0x73;
   	wLength = LENOFBIEFTIMEINFO + 5;
   	gcpSendBuf[wSize++] = (_BYTE)(wLength/256);                            // 长度_H
   	gcpSendBuf[wSize++] = (_BYTE)(wLength%256);                            // 长度_L
   	gcpSendBuf[wSize++] = 0x91;
   	gcpSendBuf[wSize++] = 0x32;
   	gcpSendBuf[wSize++] = 0x00;
   	gcpSendBuf[wSize++] = 0x00;
   	for (i=0;i<LENOFBIEFTIMEINFO;i++) gcpSendBuf[wSize++] = cpBuf[i];

    gcpSendBuf[wSize] = 0;										// 计算检查和
   	for (i=0;i<wSize;i++) gcpSendBuf[wSize] += gcpSendBuf[i];	
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize+1);	
   	return(C_OK);
}

// 写IC卡的BIEF文件静态信息
// 命令: 1A 72 73 3+N(2) 94 31 BIEF静态信息(N) CRC
// 响应: 1A 72 73 00 05  94 31 00 00 CRC
_BYTE CmdWriteBIEFBaseInfo(_BYTE * cpRecBuf)
{
   	_BYTE cpBuf[LENOFBIEFBASEINFO];
   	SBIEF_1 sBaseInfo;
   	_BYTE cRetCode;
   	_WORD wSize;
   	_WORD i;

   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C94H31H_RETS,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	// 将命令中的BIEF文件填充到缓冲中
   	for (i=0;i<LENOFBIEFBASEINFO;i++) cpBuf[i] = cpRecBuf[7+i];
   	ICUncompressBIEFBaseInfo(cpBuf,&sBaseInfo);
   	cRetCode = ICReadWriteBIEFBaseInfo(&sBaseInfo,ICWRITE);
   	if (cRetCode!=C_OK)
      	wSize = SendStringComToBuf(C94H31H_RETS,cRetCode,0x00,gcpSendBuf);    // 发送错误信息
   	else
      	wSize = SendStringComToBuf(C94H31H_RETS,0x00,0x00,gcpSendBuf);       // 发送正确信息
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
   	return(cRetCode);
}

// 写IC卡的BIEF文件训练信息
// 命令: 1A 72 73 3+N(2) 94 32 BIEF训练信息(N) CRC
// 响应: 1A 72 73 00 05  94 32 00 00 CRC
_BYTE CmdWriteBIEFTrainInfo(_BYTE * cpRecBuf)
{
   	_BYTE cpBuf[LENOFBIEFTRAININFO];
   	SBIEF_2 sTrainInfo;
   	_BYTE cRetCode,cCopy;
   	_WORD wSize;
   	_WORD i;

   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C94H32H_RETS,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	// 将命令中的BIEF文件填充到缓冲中
   	for (i=0;i<LENOFBIEFTRAININFO;i++) cpBuf[i] = cpRecBuf[7+i];
   	ICUncompressBIEFTrainInfo(cpBuf,&sTrainInfo);
   	cCopy = 0;		
   	cRetCode = ICReadWriteBIEFTrainInfo(&sTrainInfo,ICWRITE,&cCopy);
   	if (cRetCode!=C_OK)
      	wSize = SendStringComToBuf(C94H32H_RETS,cRetCode,0x00,gcpSendBuf);    // 发送错误信息
   	else
      	wSize = SendStringComToBuf(C94H32H_RETS,0x00,0x00,gcpSendBuf);       // 发送正确信息
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
   	return(cRetCode);
}

// 清IC卡中的动态信息
// 命令: 1A 72 73 len(2) 94 33 持卡人编号(4) CRC
// 响应: 1A 72 73 len(2) 94 33 00 00 CRC
_BYTE CmdClearBIEFTrainInfo(_BYTE * cpRecBuf)
{
   	_BYTE  cpBuf[LENOFBIEFBASEINFO];
   	_DWORD dwCardID;
   	SBIEF_1 sBaseInfo;
   	SBIEF_2 sTrainInfo;
   	_BYTE cRetCode,cCopy;
   	_WORD wSize;
   	_WORD i;

   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C94H33H_RETS,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}

   	// 读入BIEF文件的信息
   	cRetCode = ICReadWriteBIEFBaseInfo(&sBaseInfo,ICREAD);
   if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C94H33H_RETS,cRetCode,0x00,gcpSendBuf);    // 发送错误信息
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   }

   // 比较持卡人的卡号
   dwCardID = ByteToLong(cpRecBuf+7,4,ISHEX);
   if (sBaseInfo.dwCardID!=dwCardID) {
      	wSize = SendStringComToBuf(C94H33H_RETS,C_ICCHANGED,0x00,gcpSendBuf);    // 发送错误信息
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   }

   // 清动态信息
   	for (i=0;i<LENOFBIEFTRAININFO;i++) cpBuf[i]=0x00;
   	ICUncompressBIEFTrainInfo(cpBuf,&sTrainInfo);
   	cCopy = 0;	
   	cRetCode = ICReadWriteBIEFTrainInfo(&sTrainInfo,ICWRITE,&cCopy);
   	wSize = SendStringComToBuf(C94H33H_RETS,cRetCode,0x00,gcpSendBuf);    // 发送返回信息
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
   	return(cRetCode);
}


// 写IC卡的BIEF文件买钟信息
// 命令: 1A 72 73 3+N(2) 94 34 BIEF买钟信息(N) CRC
// 响应: 1A 72 73 00 05  94 34 00 00 CRC
_BYTE CmdWriteBIEFTimeInfo(_BYTE * cpRecBuf)
{
   	_BYTE cpBuf[LENOFBIEFTIMEINFO];
   	SBIEF_3 sTimeInfo;
   	_BYTE cRetCode,cCopy;
   	_WORD i;
   	_WORD wSize;

   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C94H34H_RETS,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	// 将命令中的BIEF文件填充到缓冲中
   	for (i=0;i<LENOFBIEFTIMEINFO;i++) cpBuf[i] = cpRecBuf[7+i];
   	ICUncompressBIEFTimeInfo(cpBuf,&sTimeInfo);
   	cCopy = 0 ;
   	cRetCode = ICReadWriteBIEFTimeInfo(&sTimeInfo,ICWRITE,&cCopy);
   	if (cRetCode!=C_OK)
      	wSize = SendStringComToBuf(C94H34H_RETS,cRetCode,0x00,gcpSendBuf);    // 发送错误信息
   	else
      	wSize = SendStringComToBuf(C94H34H_RETS,0x00,0x00,gcpSendBuf);       // 发送正确信息
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
   	return(cRetCode);
}


// 读一条驾训信息
// 命令: 1A 72 73 00 06  95 31 序号(2)+卡类型(1) CRC
// 响应: 1A 72 73 5+N(2) 95 31 00 00 驾训信息(N) CRC   
_BYTE CmdReadDIEFLogInfo(_BYTE * cpRecBuf)
{
   	_BYTE  cpBuf[LENOFCOACHLOG];
   	_BYTE  cRetCode;
   	_BYTE  cCardType;
   	_WORD  i,wLength,wLogNum;
   	_WORD wSize;

   	cRetCode = ICCheckCardInsert();
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C95H31H_RETF,cRetCode,0x00,gcpSendBuf);
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}

   	wLogNum = cpRecBuf[7]*256 + cpRecBuf[8];                    	// 取日志序号
   	cCardType = cpRecBuf[9];                     					// 取卡类型
   	cRetCode = ICReadWriteDIEF(cCardType,wLogNum,cpBuf,ICREAD);
   	if (cRetCode!=C_OK) {
      	wSize = SendStringComToBuf(C95H31H_RETF,cRetCode,0x00,gcpSendBuf); 		// 发送错误信息
		AT91F_US_SendFrame(COM1,gcpSendBuf,wSize);
      	return(cRetCode);
   	}
   	
	wSize = 0;
   	gcpSendBuf[wSize++] = 0x1A;
   	gcpSendBuf[wSize++] = 0x72;
   	gcpSendBuf[wSize++] = 0x73;

   	if (cCardType == 0x02)  										// 教练卡
   		wLength = LENOFCOACHLOG + 5;
   	else
   		wLength = LENOFSTUDENTLOG + 5;

   	gcpSendBuf[wSize++] = (_BYTE)(wLength/256);                            // 长度_H
   	gcpSendBuf[wSize++] = (_BYTE)(wLength%256);                            // 长度_L
   	gcpSendBuf[wSize++] = 0x95;
   	gcpSendBuf[wSize++] = 0x31;
   	gcpSendBuf[wSize++] = 0x00;
   	gcpSendBuf[wSize++] = 0x00;
   	for (i=0;i<wLength-5;i++) gcpSendBuf[wSize++] = cpBuf[i];
    gcpSendBuf[wSize] = 0;										// 计算检查和
   	for (i=0;i<wSize;i++) gcpSendBuf[wSize] += gcpSendBuf[i];	
	AT91F_US_SendFrame(COM1,gcpSendBuf,wSize+1);	
   	return(C_OK);
}


// 读取IC卡中的一个参数块
// 命令: 1A 72 73 00 08  97 30 读卡参数 CRC
// 响应: 1A 72 73 5+N(2) 97 30 00 00 读取的数据块(N) CRC   
_BYTE CmdICReadBlock(_BYTE * cpRecBuf)
{
   	return(C_OK);
}

// 向IC卡中写一个参数块
// 命令: 1A 72 73 ?? ?? 97 31 写卡数据块(2+2+1+N) CRC
// 响应: 1A 72 73 00 05 97 31 00 00 CRC   
_BYTE CmdICWriteBlock(_BYTE * cpRecBuf)
{
   	return(C_OK);
}

⌨️ 快捷键说明

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