RFID识别后对所获信息进行识别,同时运用编码将所获信息进行曼彻斯特编码后进行展示解码后结果。
static rt_err_t _manchester_decode(rt_uint8_t *bit_buf, uint8_t (*pdata)[5])//曼彻斯特解码
{
int i, j;
rt_uint8_t *row = bit_buf + 9;
rt_uint8_t data[5] = {0};
rt_uint8_t chk;//初始化校验位
rt_uint8_t chkerr = 0;
rt_uint32_t tagid = 0;
for (i = 0; i < 10; i++)//10行循环,costomer
{
chk = 0;//校验标志设为0
for (j = 0; j < 5; j++)//设置5列
{
chk ^= row[i * 5 + j];//按位异或运算
if (j < 4)
{
data[i >> 1] <<= 1;//数据位提取,左移1
data[i >> 1] |= row[i * 5 + j];//进行或运算
}
}
if (chk != 0)
{
chkerr = 1;
rt_kprintf("LF data bit row[%d] checksum error:%d%d%d%d%d\n", i, row[i * 5], row[i * 5 + 1], row[i * 5 + 2], row[i * 5 + 3], row[i * 5 + 4]);
//return;
}
}
tagid = data[1];
tagid <<= 8;
tagid |= data[2];
tagid <<= 8;
tagid |= data[3];
tagid <<= 8;
tagid |= data[4];//进行拼接
rt_kprintf("customer ID:0x%02X\n", data[0]);
rt_kprintf("TAG ID:%010d\t%03d,%05d\n", tagid, data[2], (tagid & 0xFFFF));
if (!chkerr)
{
if (pdata != NULL)
{
rt_memcpy(*pdata, data, 5);
}
return RT_EOK;
}
else
{
return -RT_ERROR;
}
}