📄 taginfo.cpp
字号:
// TagInfo.cpp : implementation file
//
#include "stdafx.h"
#include "TagInfo.h"
#include <math.h>
namespace techwin
{
// CTagInfo
CTagInfo::CTagInfo()
: m_bFlag(0x00)
, m_TotalCount(0)
, m_ReadCount(0)
, m_TrialCount(0)
, m_Antenna(0)
, m_Channel(0)
, m_oleRecvTime(COleDateTime::GetCurrentTime())
, m_hEPCData(NULL)
{
// Memory Allocation
m_hEPCData = (INT16U*) malloc(sizeof(INT16U) * GetTagLength());
// EPC Memory Allocation
memset(m_hEPCData, 0x00, sizeof(INT16U) * GetTagLength());
}
CTagInfo::~CTagInfo()
{
if(m_hEPCData != NULL)
free(m_hEPCData);
}
// CTagInfo member functions
CString CTagInfo::ByteArrayToString(const INT8U *bytes, int length, INT8U mode)
{
int index;
CString stemp, str;
str = "";
for (index = 0; index < length; ++index)
{
if(mode == 1)
{
//
stemp.Format(_T("%c"), bytes[index]);
}
else
{
// stemp.Format(_T("%s%.2x"), (index && !(index % 4)) ? _T(" ") : _T(""), bytes[index]);
stemp.Format(_T("%.2x"), bytes[index]);
}
str += stemp;
}
if(mode != 1)
str.MakeUpper();
#ifdef _DEBUG
CString temp = str + _T("\n");
TRACE(temp);
#endif
return str;
}
CString CTagInfo::GetTagAsciiString()
{
return ByteArrayToString((INT8U *)m_hEPCData, sizeof(INT16U) * GetTagLength(), 1);
}
CString CTagInfo::GetTagString()
{
return ByteArrayToString((INT8U *)m_hEPCData, sizeof(INT16U) * GetTagLength(), 0);
}
CString CTagInfo::GetTagPCString()
{
return ByteArrayToString((INT8U *)&m_hPCData, sizeof(INT16U), 0);
}
INT16U* CTagInfo::GetTagPC()
{
return &m_hPCData;
}
INT16U* CTagInfo::GetTagEPC()
{
return m_hEPCData;
}
BYTE CTagInfo::GetTagFilterFlag()
{
return m_bFlag;
}
int CTagInfo::GetTagTotalReadCount()
{
return m_TotalCount;
}
int CTagInfo::GetTagReadCount()
{
return m_ReadCount;
}
INT16U CTagInfo::GetTagTrialCount()
{
return m_TrialCount;
}
int CTagInfo::GetTagAntenna()
{
return m_Antenna;
}
int CTagInfo::GetTagChannel()
{
return m_Channel;
}
INT16U CTagInfo::GetTagRSSI()
{
return m_rssi;
}
INT8U CTagInfo::GetTagNarrowBandRSSI()
{
return ((m_rssi & 0xFF00) >> 8);
}
INT8U CTagInfo::GetTagWideBandRSSI()
{
return (m_rssi & 0x00FF);
}
INT16U CTagInfo::GetTagLNAGain()
{
/* INT8U lna = m_anaCtrl & 0x0030;
switch(lna)
{
case 0:
return 24;
break;
case 1:
return 18;
break;
case 3:
return 12;
break;
default:
return 0;
}*/
return m_anaCtrl;
}
COleDateTime CTagInfo::GetTagReceiveTime()
{
return m_oleRecvTime;
}
BOOL CTagInfo::SetTagMemory(const INT32U* tagMemory)
{
memset(&m_hPCData, 0x00, sizeof(INT16U));
memcpy(&m_hPCData, (INT16U*)((INT16U *)tagMemory), sizeof(INT16U));
#ifdef _DEBUG
TRACE(_T("PC Area Data: %s\n"), ByteArrayToString((INT8U*)&m_hPCData, 2));
#endif
// 扁粮 皋葛府 Clear
if(m_hEPCData != NULL)
free(m_hEPCData);
// Memory Allocation
m_hEPCData = (INT16U*) malloc(sizeof(INT16U) * GetTagLength());
// EPC Memory Allocation
memset(m_hEPCData, 0x00, sizeof(INT16U) * GetTagLength());
memcpy(m_hEPCData, (INT16U*)(tagMemory) + 1, sizeof(INT16U) * GetTagLength());
#ifdef _DEBUG
TRACE(_T("EPC Area Data: %s, size : \n"), ByteArrayToString((INT8U*)m_hEPCData, sizeof(INT16U) * GetTagLength()), sizeof(INT16U) * GetTagLength());
#endif
return TRUE;
}
BOOL CTagInfo::IsValid()
{
if(m_hPCData == NULL)
return FALSE;
if(m_hEPCData == NULL)
return FALSE;
if(((INT8U *)m_hPCData)[0] != 0x30 || ((INT8U *)m_hPCData)[0] != 0x40 || ((INT8U *)m_hPCData)[0] != 0x80)
return FALSE;
return TRUE;
}
void CTagInfo::SetTagPC(INT16U* pc)
{
memcpy(&m_hPCData, pc, sizeof(INT16U));
}
void CTagInfo::SetTagEPC(INT16U* epc)
{
// 扁粮 皋葛府 Clear
if(m_hEPCData != NULL)
free(m_hEPCData);
// Memory Allocation
m_hEPCData = (INT16U*) malloc(sizeof(INT16U) * GetTagLength());
memset(m_hEPCData, 0x00, sizeof(INT16U) * GetTagLength());
memcpy(m_hEPCData, (INT16U*)epc, sizeof(INT16U) * GetTagLength());
#ifdef _DEBUG
TRACE(_T("Set EPC Area Data: %s\n"), ByteArrayToString((INT8U*)m_hEPCData, sizeof(INT16U) * GetTagLength()));
#endif
}
void CTagInfo::SetTagFilterFlag(BYTE flag)
{
m_bFlag = flag;
}
void CTagInfo::SetTagReadCount(int count)
{
m_ReadCount = count;
}
void CTagInfo::AddReadCount(int count)
{
m_TotalCount += count;
}
void CTagInfo::SetTagTrialCount(INT16U tcount)
{
m_TrialCount = tcount;
}
void CTagInfo::SetTagAntenna(int antenna)
{
m_Antenna = antenna;
}
void CTagInfo::SetTagChannel(int channel)
{
m_Channel = channel;
}
void CTagInfo::SetTagReveiveTime(COleDateTime time)
{
m_oleRecvTime = time;
}
void CTagInfo::SetTagRSSI(INT16U rssi)
{
m_rssi = rssi;
}
void CTagInfo::SetTagLNAGain(INT16U ana_ctrl)
{
m_anaCtrl = ana_ctrl;
}
unsigned short pc_swap(unsigned short x)
{
unsigned short temp = (x>>8) | (x<<8);
return temp;
}
// EPC 康开狼 Length 荤捞令 府畔
INT16U CTagInfo::GetTagLength()
{
unsigned __int16 pc = pc_swap(m_hPCData);
unsigned __int16 word_count = pc & 0xf800;
word_count = word_count >> 11;
return word_count;
}
// UMI绰 BANK 3 User Memory康开狼 荤侩咯何 钎矫
// 固荤侩狼 版快 0阑 府畔
// 荤侩狼 版快 1阑 府畔
BOOL CTagInfo::GetTagUMI()
{
unsigned __int16 pc = pc_swap(m_hPCData);
unsigned __int16 umi = pc & 0x0400;
umi = umi >> 10;
return umi;
}
// XI绰 眠啊利牢 PC 康开 荤侩咯何甫 钎矫
// 固荤侩老 版快 0阑 府畔
// 荤侩老 版快 1阑 府畔
BOOL CTagInfo::GetTagXI()
{
unsigned __int16 pc = pc_swap(m_hPCData);
unsigned __int16 xi = pc & 0x0200;
xi = xi >> 9;
return xi;
}
// Toggle绰 Object俊 扁涝登绰 RFID 内靛啊 EPC 内靛牢瘤 酒囱瘤(Non-EPC)甫 钎矫
// EPC狼 版快 0 府畔
// Non-EPC狼 版快 1 府畔
BOOL CTagInfo::GetTagToggle()
{
unsigned __int16 pc = pc_swap(m_hPCData);
unsigned __int16 toggle = pc & 0x0100;
toggle = toggle >> 8;
return toggle;
}
INT8U CTagInfo::GetTagAFI()
{
unsigned __int16 pc = pc_swap(m_hPCData);
unsigned __int16 temp = pc & 0x00ff;
unsigned __int8 afi = (unsigned __int8)temp;
return afi;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -