📄 command.c
字号:
{
_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 + -