上述FM17550_PCDRequest()具体实现代码
时间: 2024-03-23 10:39:00 浏览: 24
下面是FM17550_PCDRequest()函数的具体实现代码,其中包括了ISO14443A协议的寻卡流程:
```
FM17550_STATUS FM17550_PCDRequest(FM17550_HANDLE hDevice, unsigned char ucReqCode, unsigned char *pRecvBuff, unsigned short *pusRecvLen)
{
FM17550_STATUS status;
unsigned char ucSendBuff[2];
unsigned short usSendLen = 2;
unsigned char ucATQ[2];
unsigned char ucSAK;
unsigned char ucType;
if (hDevice == NULL || pRecvBuff == NULL || pusRecvLen == NULL)
{
return FM17550_ERR_PARAM;
}
ucSendBuff[0] = 0x26; // 命令字节
ucSendBuff[1] = ucReqCode; // 请求码
// 发送命令
status = FM17550_SendCommand(hDevice, ucSendBuff, usSendLen, pRecvBuff, pusRecvLen);
if (status != FM17550_OK)
{
return status;
}
// 解析ATQ
if (*pusRecvLen < 2)
{
return FM17550_ERR_RECV;
}
memcpy(ucATQ, pRecvBuff, 2);
// 判断ATQ类型
ucType = FM17550_GetATQType(ucATQ);
if (ucType == ATQA_TYPE_14443A)
{
// 保存ATQ
memcpy(hDevice->ucATQ, ucATQ, 2);
hDevice->ucATQLen = 2;
// 获取SAK
status = FM17550_PPSel(hDevice, &ucSAK);
if (status != FM17550_OK)
{
return status;
}
hDevice->ucSAK = ucSAK;
// 返回ATQ和SAK
memcpy(pRecvBuff, ucATQ, 2);
*pusRecvLen = 2;
pRecvBuff[2] = ucSAK;
*pusRecvLen = 3;
return FM17550_OK;
}
else if (ucType == ATQA_TYPE_14443B)
{
// TODO: 处理14443B协议
return FM17550_ERR_PROTO;
}
else
{
return FM17550_ERR_PROTO;
}
}
```
该函数先根据请求码ucReqCode组装命令,然后调用FM17550_SendCommand()函数发送命令,获取ATQ,判断ATQ类型,并保存ATQ和SAK。最后将ATQ和SAK返回给调用者。需要注意的是,该函数只支持ISO14443A协议,如果ATQ类型为14443B,则会返回错误码。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)