public int tag_inventory( PARAMETERS invenParams, UIntPtr hreader, Byte AIType, Byte AntennaSelCount, Byte[] AntennaSel, out List <UhfInventoryItem> results, // delegate_tag_report_handle tagReportHandler, ref UInt32 nTagCount) { results = new List <UhfInventoryItem>(); int iret; UIntPtr InvenParamSpecList = UIntPtr.Zero; InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList(); if (InvenParamSpecList.ToUInt64() != 0) { /* set timeout */ RFIDLIB.rfidlib_reader.RDR_SetInvenStopTrigger(InvenParamSpecList, RFIDLIB.rfidlib_def.INVEN_STOP_TRIGGER_TYPE_TIMEOUT, invenParams.m_timeout, 0); /* create ISO18000p6C air protocol inventory parameters */ UIntPtr AIPIso18000p6c = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CreateInvenParam(InvenParamSpecList, 0, 0, RFIDLIB.rfidlib_def.ISO18000p6C_S0, RFIDLIB.rfidlib_def.ISO18000p6C_TARGET_A, RFIDLIB.rfidlib_def.ISO18000p6C_Dynamic_Q); if (AIPIso18000p6c.ToUInt64() != 0) { //set selection parameters if (invenParams.m_sel.m_enable) { Byte[] maskBits = invenParams.m_sel.m_maskBits.ToArray(); RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenSelectParam(AIPIso18000p6c, invenParams.m_sel.m_target, invenParams.m_sel.m_action, invenParams.m_sel.m_memBank, invenParams.m_sel.m_pointer, maskBits, invenParams.m_sel.m_maskBitsLength, 0); } // set inventory read parameters if (invenParams.m_read.m_enable) { RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenReadParam(AIPIso18000p6c, invenParams.m_read.m_memBank, invenParams.m_read.m_wordPtr, (Byte)invenParams.m_read.m_wordCnt); } // Add Embedded commands if (invenParams.m_write.m_enable) { Byte[] writeDatas = invenParams.m_write.m_datas.ToArray(); RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CreateTAWrite(AIPIso18000p6c, invenParams.m_write.m_memBank, invenParams.m_write.m_wordPtr, invenParams.m_write.m_wordCnt, writeDatas, (UInt32)writeDatas.Length); } if (invenParams.m_lock.m_enable) { UInt16 mask, action; mask = action = 0; if (invenParams.m_lock.m_userMemSelected) { mask |= 0x03; action |= (UInt16)(invenParams.m_lock.m_userMem); } if (invenParams.m_lock.m_TIDMemSelected) { mask |= (0x03 << 2); action |= (UInt16)(invenParams.m_lock.m_TIDMem << 2); } if (invenParams.m_lock.m_EPCMemSelected) { mask |= (0x03 << 4); action |= (UInt16)(invenParams.m_lock.m_EPCMem << 4); } if (invenParams.m_lock.m_accessPwdSelected) { mask |= (0x03 << 6); action |= (UInt16)(invenParams.m_lock.m_accessPwd << 6); } if (invenParams.m_lock.m_killPwdSelected) { mask |= (0x03 << 8); action |= (UInt16)(invenParams.m_lock.m_killPwd << 8); } RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CreateTALock(AIPIso18000p6c, mask, action); } // set meta flags if (invenParams.m_metaFlags.m_enable) { UInt32 metaFlags = 0; if (invenParams.m_metaFlags.m_EPC) { metaFlags |= RFIDLIB.rfidlib_def.ISO18000p6C_META_BIT_MASK_EPC; } if (invenParams.m_metaFlags.m_timestamp) { metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_TIMESTAMP; } if (invenParams.m_metaFlags.m_frequency) { metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_FREQUENCY; } if (invenParams.m_metaFlags.m_RSSI) { metaFlags |= RFIDLIB.rfidlib_def.ISO18000p6C_META_BIT_MASK_RSSI; } if (invenParams.m_metaFlags.m_readCnt) { metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_READCOUNT; } if (invenParams.m_metaFlags.m_tagData) { metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_TAGDATA; } RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenMetaDataFlags(AIPIso18000p6c, metaFlags); } // set access password if (invenParams.m_read.m_enable || invenParams.m_write.m_enable || invenParams.m_lock.m_enable) { RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenAccessPassword(AIPIso18000p6c, invenParams.m_accessPwd); } } } nTagCount = 0; LABEL_TAG_INVENTORY: iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList); if (iret == 0 || iret == -21) { nTagCount += RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader); UIntPtr TagDataReport; TagDataReport = (UIntPtr)0; TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first while (TagDataReport.ToUInt64() > 0) { UInt32 aip_id = 0; UInt32 tag_id = 0; UInt32 ant_id = 0; Byte[] tagData = new Byte[256]; UInt32 nSize = (UInt32)tagData.Length; UInt32 metaFlags = 0; iret = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_ParseTagReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref metaFlags, tagData, ref nSize); if (iret == 0) { String writeOper = ""; String lockOper = ""; if (invenParams.m_write.m_enable) { iret = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CheckTAWriteResult(TagDataReport); if (iret != 0) { writeOper = "fail"; } else { writeOper = "success"; } } if (invenParams.m_lock.m_enable) { iret = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CheckTALockResult(TagDataReport); if (iret != 0) { lockOper = "fail"; } else { lockOper = "success"; } } /* * object[] pList = { aip_id, tag_id, ant_id, metaFlags, tagData, nSize, writeOper, lockOper }; * Invoke(tagReportHandler, pList); */ results.Add(new UhfInventoryItem { aip_id = aip_id, tag_id = tag_id, ant_id = ant_id, metaFlags = metaFlags, tagData = tagData, nSize = nSize, writeOper = writeOper, lockOper = lockOper }); } // TODO: 观察读到的 bank 数据 // invenParams.m_read.m_wordPtr, (Byte)invenParams.m_read.m_wordCnt); TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next } if (iret == -21) // stop trigger occur,need to inventory left tags { AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE; //use only-new-tag inventory goto LABEL_TAG_INVENTORY; } iret = 0; } if (InvenParamSpecList.ToUInt64() != 0) { RFIDLIB.rfidlib_reader.DNODE_Destroy(InvenParamSpecList); } return(iret); }
public void DoInventory123() { Byte AIType = RFIDLIB.rfidlib_def.AI_TYPE_NEW; UIntPtr InvenParamSpecList = UIntPtr.Zero; InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList(); if (InvenParamSpecList.ToUInt64() != 0) { RFIDLIB.rfidlib_aip_iso15693.ISO15693_CreateInvenParam(InvenParamSpecList, 0, enableAFI, AFI, 0); } DateTime startTime; DateTime endTime; TimeSpan t; //int iCount = 0; while (!_shouldStop) { startTime = DateTime.Now; // antenna selection /*if (iCount > antennaCount) { iCount = 0; } * AntennaSel[0] = (Byte)(iCount + 1); * AntennaSelCount = (Byte)1; * iCount++; */ /*iCount = 0; // 0:天线1,1:天线2 * AntennaSel[0] = (Byte)(iCount + 1); * AntennaSelCount = (Byte)1; */ UInt32 nTagCount = 0; int iret; LABEL_TAG_INVENTORY: iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList); if (iret == 0 || iret == -21) { //object[] pList0 = { null, null }; object[] pList0 = { null, null, null }; Invoke(tagReportHandler123, pList0); nTagCount = RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader); //object[] pList1 = { "count", nTagCount.ToString()}; object[] pList1 = { "count", null, nTagCount.ToString() }; Invoke(tagReportHandler123, pList1); UIntPtr TagDataReport; TagDataReport = (UIntPtr)0; TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first List <string> lstCurrRecvRfids = new List <string>(); Thread.Sleep(intInterval); //间隔多长时间读一次标签。 while (TagDataReport.ToUInt64() > 0) { UInt32 aip_id = 0; UInt32 tag_id = 0; UInt32 ant_id = 0; Byte dsfid = 0; Byte[] uid = new Byte[16]; iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid); string uidStr = BitConverter.ToString(uid).Replace("-", string.Empty).Substring(0, 16); lstCurrRecvRfids.Add(uidStr); object[] pList = { uidStr, TagDataReport.ToUInt64().ToString(), null }; Invoke(tagReportHandler123, pList); TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next } funPostDataAndDisplayHtml(lstCurrRecvRfids); } if (iret == -21) // stop trigger occur,need to inventory left tags { AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE; //use only-new-tag inventory goto LABEL_TAG_INVENTORY; } iret = 0; // 计算消耗时间 ------------------------------------------- endTime = DateTime.Now; t = endTime - startTime; //object[] pList2 = { "耗时", t.TotalSeconds.ToString() + " 标签数量:" + nTagCount.ToString() }; object[] pList2 = { "耗时", null, t.TotalSeconds.ToString() + " 标签数量:" + nTagCount.ToString() }; Invoke(tagReportHandler123, pList2); } RFIDLIB.rfidlib_reader.RDR_ResetCommuImmeTimeout(hreader); }
public void DoInventory() { Byte AIType = RFIDLIB.rfidlib_def.AI_TYPE_NEW; UIntPtr InvenParamSpecList = UIntPtr.Zero; InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList(); if (InvenParamSpecList.ToUInt64() != 0) { RFIDLIB.rfidlib_aip_iso15693.ISO15693_CreateInvenParam(InvenParamSpecList, 0, enableAFI, AFI, 0); } DateTime startTime; DateTime endTime; TimeSpan t; while (!_shouldStop) { startTime = DateTime.Now; // antenna selection /*if (iCount > antennaCount) { iCount = 0; } * AntennaSel[0] = (Byte)(iCount + 1); * AntennaSelCount = (Byte)1; * iCount++; */ /*iCount = 0; // 0:天线1,1:天线2 * AntennaSel[0] = (Byte)(iCount + 1); * AntennaSelCount = (Byte)1; */ UInt32 nTagCount = 0; int iret; LABEL_TAG_INVENTORY: iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList); if (iret == 0 || iret == -21) { object[] pList0 = { null, null }; Invoke(tagReportHandler, pList0); nTagCount = RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader); object[] pList1 = { "count", nTagCount.ToString() }; Invoke(tagReportHandler, pList1); UIntPtr TagDataReport; TagDataReport = (UIntPtr)0; TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first while (TagDataReport.ToUInt64() > 0) { UInt32 aip_id = 0; UInt32 tag_id = 0; UInt32 ant_id = 0; Byte dsfid = 0; Byte[] uid = new Byte[16]; iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid); if (iret == 0) { string uidStr = BitConverter.ToString(uid).Replace("-", string.Empty).Substring(0, 16); if (cb_blockToRead.Checked || cb_blockToWrite.Checked)// 读写块数据 { Byte addrMode = 1; iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_Connect(hreader, RFIDLIB.rfidlib_def.RFID_ISO15693_PICC_ICODE_SLI_ID, addrMode, uid, ref hTag); if (iret == 0) { // 读块 ----------------------------------------------- if (cb_blockToRead.Checked) { int idx; UInt32 blockAddr; UInt32 blockToRead; UInt32 blocksRead = 0; idx = 0; blockAddr = (UInt32)idx; //idx = 2; // 1 <= idx <= 8 idx = (int)nud_blockToRead.Value; blockToRead = (UInt32)(idx); UInt32 nSize; Byte[] BlockBuffer = new Byte[40]; nSize = (UInt32)BlockBuffer.GetLength(0); UInt32 bytesRead = 0; iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ReadMultiBlocks(hreader, hTag, 1, blockAddr, blockToRead, ref blocksRead, BlockBuffer, nSize, ref bytesRead); if (iret == 0) { // blocksRead: blocks read string blockDataStr = BitConverter.ToString(BlockBuffer, 0, (int)bytesRead).Replace("-", string.Empty); object[] pList = { uidStr, "R:" + blockDataStr }; Invoke(tagReportHandler, pList); } else { object[] pList = { "error", iret.ToString() }; Invoke(tagReportHandler, pList); } } // 写块 ------------------------------------------------ if (cb_blockToWrite.Checked) { int idx; UInt32 blkAddr; UInt32 numOfBlks; idx = (int)nud_blockToWrite.Value; blkAddr = (UInt32)idx; idx = tb_blockToWrite.Text.Length / 8; numOfBlks = (UInt32)(idx + 1); byte[] newBlksData = StringToByteArrayFastest(tb_blockToWrite.Text + "00000000"); iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_WriteMultipleBlocks(hreader, hTag, blkAddr, numOfBlks, newBlksData, (uint)newBlksData.Length); if (iret == 0) { object[] pList = { uidStr, "W:" + tb_blockToWrite.Text }; Invoke(tagReportHandler, pList); } else { object[] pList = { "error", iret.ToString() }; Invoke(tagReportHandler, pList); } } //------------------------------------------------------- } iret = RFIDLIB.rfidlib_reader.RDR_TagDisconnect(hreader, hTag); if (iret == 0) { hTag = (UIntPtr)0; } } else// 不读写块数据 { object[] pList = { uidStr, null }; Invoke(tagReportHandler, pList); } } TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next } } if (iret == -21) // stop trigger occur,need to inventory left tags { AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE; //use only-new-tag inventory goto LABEL_TAG_INVENTORY; } iret = 0; // 计算消耗时间 ------------------------------------------- endTime = DateTime.Now; t = endTime - startTime; object[] pList2 = { "耗时", t.TotalSeconds.ToString() + " 标签数量:" + nTagCount.ToString() }; Invoke(tagReportHandler, pList2); } RFIDLIB.rfidlib_reader.RDR_ResetCommuImmeTimeout(hreader); }
public int tag_inventory( Byte AIType, Byte AntennaSelCount, Byte[] AntennaSel, ref UInt32 nTagCount) { int iret; UIntPtr InvenParamSpecList = UIntPtr.Zero; InvenParamSpecList = RfidBLL.RDR_CreateInvenParamSpecList(); if (InvenParamSpecList.ToUInt64() != 0) { /* set timeout */ RfidBLL.RDR_SetInvenStopTrigger(InvenParamSpecList, 3, 100, 0); /* create ISO18000p6C air protocol inventory parameters */ UIntPtr AIPIso18000p6c = RfidBLL.ISO18000p6C_CreateInvenParam(InvenParamSpecList, 0, 0, 0, 0x00, 0xff); if (AIPIso18000p6c.ToUInt64() != 0) { if (result) { p = 0x01;//epc } else { p = 0x03;//uid 0x02 tid } /* set inventory read parameter for TID */ RfidBLL.ISO18000p6C_SetInvenReadParam(AIPIso18000p6c, (Byte)p, 0, 0); /*only TID return */ UInt32 metaFlags = 0x20; RfidBLL.ISO18000p6C_SetInvenMetaDataFlags(AIPIso18000p6c, metaFlags); } } nTagCount = 0; LABEL_TAG_INVENTORY: try { iret = RfidBLL.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList); if (iret == 0 || iret == -21) { nTagCount += RfidBLL.RDR_GetTagDataReportCount(hreader); UIntPtr TagDataReport; TagDataReport = (UIntPtr)0; TagDataReport = RfidBLL.RDR_GetTagDataReport(hreader, 0); //first while (TagDataReport.ToUInt64() > 0) { UInt32 aip_id = 0; UInt32 tag_id = 0; UInt32 ant_id = 0; Byte[] tagData = new Byte[256]; UInt32 nSize = (UInt32)tagData.Length; UInt32 metaFlags = 0; iret = RfidBLL.ISO18000p6C_ParseTagReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref metaFlags, tagData, ref nSize); if (iret == 0) { object[] pList = { aip_id, tag_id, ant_id, metaFlags, tagData, nSize, "", "" }; byte[] epc = new byte[12]; Array.Copy(tagData, 4, epc, 0, 12); StringBuilder @string = new StringBuilder(); foreach (var temp in epc) { @string.Append(temp.ToString("X2")); } if (@string.ToString().Contains("E200680A8AA8"))//层架判断 { result = false; } else if (result && !ServerConfig.EpcList.Contains(@string.ToString())) { ServerConfig.EpcList.Enqueue(@string.ToString()); result = true; } else if (result && !ServerConfig.EpcS.Contains(@string.ToString())) { ServerConfig.EpcS.Add(@string.ToString()); result = true; } else { result = true; } ///user判断 byte[] user = new byte[28]; Array.Copy(tagData, 0, user, 0, 28); @string = new StringBuilder(); foreach (var temp in user) { @string.Append(temp.ToString("X2")); } if (@string.ToString().Contains("AA0CFFA5")) { //可用user if (!ServerConfig.UserList.Contains(@string.ToString())) { ServerConfig.UserList.Enqueue(@string.ToString()); } } //else if(p==0x03) //{ // result = false; // //保持最后一个epc为层架标签和最后一个user对应 //} } TagDataReport = RfidBLL.RDR_GetTagDataReport(hreader, 2); //next } if (iret == -21) // stop trigger occur,need to inventory left tags { AIType = 2; //use only-new-tag inventory goto LABEL_TAG_INVENTORY; } iret = 0; } if (InvenParamSpecList.ToUInt64() != 0) { RfidBLL.DNODE_Destroy(InvenParamSpecList); } return(iret); } catch { return(0); } }
public HttpResponseMessage GetRFIDAPIReturn(string JsonRequest) { string returnValue = String.Empty; IDictionary <int, string> dict = new Dictionary <int, string>(); //解析方法名 JObject Parameters = JObject.Parse(JsonRequest); string functionName = Parameters["functionName"].ToString(); try { string RFID = ""; switch (functionName) { case "reader_load": status = RDR_LoadReaderDrivers(""); returnValue = JsonConvert.SerializeObject(new { status = status.ToString(), error = errorMsg }); break; //这里也不需要先新建一个connection?? case "rf_init_com": //status = ReaderA.StaticClassReaderA.CloseComPort(); status = ReaderA.RWDev.CloseComPort(); //int port = Int32.Parse(Parameters["port"].ToString()); int port = 0; StringBuilder portString = new StringBuilder(2); int baud = Int32.Parse(Parameters["baud"].ToString()); //string configFilePath = System.Environment.CurrentDirectory + @"\resources\app.asar.unpacked\dist\electron\static\IVFMatchAPIs\config.ini"; //string configFilePath = Path.Combine(System.Environment.CurrentDirectory, "config.ini"); string configFilePath = @"C:\LabTrustConfig\config.ini"; GetPrivateProfileString("读卡器", "port", "", portString, 500, configFilePath); port = Int32.Parse(portString.ToString()); if (port == 0) { fbaud = Convert.ToByte(baud / 19200 - 1); for (port = 0; port < 18; port++) { //status = ReaderA.StaticClassReaderA.OpenComPort(port, ref readerAddr, fbaud, ref portIndex); status = OpenComPort(port, ref readerAddr, fbaud, ref portIndex); if (status == 0) { dict.Add(portIndex, "rongrui"); WritePrivateProfileString("读卡器", "port", port.ToString(), configFilePath); break; } //添加安的读卡器的初始化 // } } else if (port != -1) { status = OpenComPort(port, ref readerAddr, fbaud, ref portIndex); if (status == 0) { dict.Add(portIndex, "rongrui"); //成功打开端口 } else { WritePrivateProfileString("读卡器", "port", "0", configFilePath); //打开失败则在配置文件中重置端口号为0,下次读取时,从0开始遍历端口号 } } status = RDR_LoadReaderDrivers(""); UInt32 nCount = HID_Enum("RL8000"); connStr = "RDType=RL8000;CommType=USB;AddrMode=1;SerNum="; for (int i = 0; i < nCount; i++) { StringBuilder sernum = new StringBuilder(); sernum.Append('\0', 64); UInt32 nSize; nSize = (UInt32)sernum.Capacity; int iret = HID_GetEnumItem((UInt32)i, 1, sernum, ref nSize); if (iret == 0) { connStr = connStr + sernum.ToString(); status = RDR_Open(connStr, ref hreader); if (status == 0) { dict.Add((int)hreader, "andi"); } } } UInt32 nnCount = HID_Enum("RD242"); connStr = "RDType=RD242;CommType=USB;AddrMode=1;SerNum="; for (int i = 0; i < nnCount; i++) { StringBuilder sernum = new StringBuilder(); sernum.Append('\0', 64); UInt32 nSize; nSize = (UInt32)sernum.Capacity; int iret = HID_GetEnumItem((UInt32)i, 1, sernum, ref nSize); if (iret == 0) { connStr = connStr + sernum.ToString(); status = RDR_Open(connStr, ref hreader); if (status == 0) { dict.Add((int)hreader, "andi"); } } } byte power = Convert.ToByte(7); //status = ReaderA.RWDev.GetPwr(ref readerAddr, ref _Pwr, ref _PwrVal, portIndex); status = ReaderA.RWDev.SetPwr(ref readerAddr, ref power, portIndex); Common.dict = dict; if (dict.Count() == 0) { status = -1; errorMsg = "设备未连接"; Common.dict = null; } else { status = 0; } returnValue = JsonConvert.SerializeObject(new { status = status.ToString(), error = errorMsg }); break; case "rf_light": byte color = Convert.ToByte(Parameters["color"].ToString()); returnValue = JsonConvert.SerializeObject(new { status = status.ToString() }); break; case "rf_beep": byte msec = Byte.Parse(Parameters["msec"].ToString()); returnValue = JsonConvert.SerializeObject(new { status = status.ToString() }); break; case "RF_Refresh_Cache": Common.rfidDT.Clear(); break; case "ISO15693_Inventories": var rows = Common.rfidDT.Select("TimeStamp < " + (MillisecNowCompute() - 2500).ToString()); bool foundNewRFID = false; foreach (var row in rows) { row.Delete(); } List <String> list = new List <String>(); List <String> newFoundRFIDList = new List <String>(); dict = Common.dict; try { foreach (KeyValuePair <int, string> item in dict) { if (item.Value == "rongrui") { portIndex = item.Key; status = Inventory(ref readerAddr, ref state, ref AFI, DSFIDAndUID, ref cardNumber, portIndex); Array.Resize(ref DSFIDAndUID, cardNumber * 9); strDSFIDAndUID = ByteArrayToHexString(DSFIDAndUID).Replace(" ", ""); for (int i = 0; i < cardNumber; i++) { s = strDSFIDAndUID.Substring(18 * i, 18); RFID = s.Substring(2, 16); list.Add(RFID); } status = (status == 14) ? 0 : status; if (status != 0) { status_rongrui = status; break; } } else if (item.Value == "andi") { portIndex = item.Key; UIntPtr hreader = (UIntPtr)portIndex; UIntPtr InvenParamSpecList = UIntPtr.Zero; ISO15693_CreateInvenParam(InvenParamSpecList, 0, 0, 0, 0); Byte[] antenna = new Byte[] { 1, 2, 3, 4 }; status = RDR_TagInventory(hreader, 1, 4, antenna, InvenParamSpecList); UIntPtr TagDataReport; TagDataReport = (UIntPtr)0; TagDataReport = RDR_GetTagDataReport(hreader, 1); while (TagDataReport.ToUInt64() > 0) { UInt32 aip_id = 0; UInt32 tag_id = 0; UInt32 ant_id = 0; Byte dsfid = 0; Byte uidlen = 0; Byte[] uid = new Byte[16]; int iret = ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid); uid = uid.Take(8).ToArray(); Array.Reverse(uid); RFID = ByteArrayToHexString(uid).Replace(" ", ""); list.Add(RFID); TagDataReport = RDR_GetTagDataReport(hreader, 2); } if (status != 0) { status_andi = status; break; } } } } catch (Exception e) { status_andi = -1; status_rongrui = -1; } status = (status_rongrui != 0) ? status_rongrui : status_andi; if (status == 17) { errorMsg = "天线位置异常或未被感应"; } if (status != 0 && status != 17) { var data = new { functionName = "rf_init_com", baud = "19200", }; var dataString = JsonConvert.SerializeObject(data); GetRFIDAPIReturn(dataString).Content.ToString(); } Console.WriteLine(Common.rfidDT.Rows.Count); foreach (var rfid in list) { if (Common.rfidDT.Select("RFID = '" + rfid + "'").Count() == 0) { foundNewRFID = true; } DataRow row = Common.rfidDT.NewRow(); row["RFID"] = rfid; row["TimeStamp"] = MillisecNowCompute(); Common.rfidDT.Rows.Add(row); } if (foundNewRFID) { newFoundRFIDList = Common.rfidDT.AsEnumerable().Select(r => r.Field <string>("RFID")).Distinct().ToList(); //当发现新的标签时,跳出循环,将2500ms内所有扫描到的值赋给newFoundRFIDList } returnValue = JsonConvert.SerializeObject(new { list = newFoundRFIDList, existRFIDList = list, status = status.ToString(), error = errorMsg }); break; case "rf_closeport": try { status = StaticClassReaderA.CloseComPort(); dict = Common.dict; foreach (KeyValuePair <int, string> item in dict) { if (item.Value == "andi") { portIndex = item.Key; UIntPtr chreader = (UIntPtr)portIndex; status = RDR_Close(chreader); } } Common.dict = null; } catch (Exception e) { } returnValue = JsonConvert.SerializeObject(new { status = status.ToString() }); break; } } catch (Exception e) { status = INTERNALERROR; errorMsg = e.ToString(); returnValue = JsonConvert.SerializeObject(new { status = INTERNALERROR.ToString(), error = e.ToString() }); } return(ResultToJson.toJson(returnValue)); }
// parameters: // AIType RFIDLIB.rfidlib_def.AI_TYPE_NEW / RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE // AntinnaSel 从 1 开始? public int tag_inventory( Byte AIType, Byte AntennaSelCount, Byte[] AntennaSel, //bool enable15693, //bool enable14443A, //bool enable18000p3m3, // Byte afiVal, // delegate_tag_report_handle tagReportHandler, ref UInt32 nTagCount) { Byte enableAFI = 0; int iret; UIntPtr InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList(); if (InvenParamSpecList.ToUInt64() != 0) { RFIDLIB.rfidlib_aip_iso15693.ISO15693_CreateInvenParam( InvenParamSpecList, 0, enableAFI, 0x00, // AFI, 打算要匹配的 AFI byte 值 0); } nTagCount = 0; LABEL_TAG_INVENTORY: iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList); if (iret == 0 || iret == -21) { nTagCount += RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader); UIntPtr TagDataReport; TagDataReport = (UIntPtr)0; TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first while (TagDataReport.ToUInt64() > 0) { UInt32 aip_id = 0; UInt32 tag_id = 0; UInt32 ant_id = 0; Byte dsfid = 0; Byte uidlen = 0; Byte[] uid = new Byte[16]; /* Parse iso15693 tag report */ { iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid); if (iret == 0) { uidlen = 8; object[] pList = { aip_id, tag_id, ant_id, uid, (int)uidlen }; //// Invoke(tagReportHandler, pList); //tagReportHandler(hreader, aip_id, tag_id, ant_id, uid ,8); } } /* Get Next report from buffer */ TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next } if (iret == -21) // stop trigger occur,need to inventory left tags { AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE; //use only-new-tag inventory goto LABEL_TAG_INVENTORY; } iret = 0; } if (InvenParamSpecList.ToUInt64() != 0) { RFIDLIB.rfidlib_reader.DNODE_Destroy(InvenParamSpecList); } return(iret); }