private void buttonWriteEmulNfcType2_Click(object sender, EventArgs e) { if (serialDevice < 0) { MessageBox.Show("请先打开串口"); return; } clearOpResult(); ushort[] addrArray = new ushort[2]; ISO14443A_BLOCKPARAM pBlock = new ISO14443A_BLOCKPARAM(); pBlock.uid.uid = new Byte[hfReaderDll.HFREADER_ISO14443A_LEN_MAX_UID]; pBlock.block = new Byte[hfReaderDll.HFREADER_ISO14443A_LEN_M1BLOCK * hfReaderDll.HFREADER_ISO14443A_M1BLOCKNUM_MAX]; pBlock.key = new Byte[hfReaderDll.HFREADER_ISO14443A_LEN_M1_KEY]; Byte[] sendBuffer = new Byte[1024]; Byte[] rcvBuffer = new Byte[1024]; Byte[] blockNum = new Byte[1]; Byte[] blockAddr = new Byte[1]; Byte[] data = new Byte[16]; if (!GetDeviceAddr(addrArray)) { return; } if (GetHexInput(this.textBoxWEmulNfcType2Addr.Text, blockAddr, 1) <= 0) { return; } pBlock.addr = blockAddr[0]; if (GetHexInput(this.textBoxWEmulNfcType2Num.Text, blockNum, 1) <= 0) { return; } pBlock.num = blockNum[0]; if (pBlock.num > hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX) { MessageBox.Show("写入数目超出范围,最多可以写入0x" + hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX.ToString("X").PadLeft(2, '0') + "Page"); pBlock.num = hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX; this.textBoxWEmulNfcType2Num.Text = hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX.ToString("X").PadLeft(2, '0'); } String s = this.textBoxWEmulNfcType2BlockData.Text; String[] dataString = new String[64]; dataString = s.Split('\n'); if (blockNum[0] > dataString.Length) { MessageBox.Show("数据不足,请继续填写"); return; } else { int j = 0; int i = 0; for (i = 0; i < blockNum[0]; i++) { int pos = dataString[i].IndexOf('\r'); if (pos >= 0) { dataString[i] = dataString[i].Remove(pos); } s = dataString[i]; if (GetHexInput(s, data, hfReaderDll.HFREADER_ISO14443A_LEN_M0BLOCK) <= 0) { return; } else { for (j = 0; j < hfReaderDll.HFREADER_ISO14443A_LEN_M0BLOCK; j++) { pBlock.block[i * hfReaderDll.HFREADER_ISO14443A_LEN_M0BLOCK + j] = data[j]; } } } } pBlock.keyType = 0x00; while (bOperatingSerial) { ; } bOperatingSerial = true; int rlt = hfReaderDll.emulNfcType2WriteBlock(serialDevice, addrArray[0], addrArray[1], ref pBlock, sendBuffer, rcvBuffer); bOperatingSerial = false; if (rlt > 0) { DisplayOpResult(ref pBlock.result); } DisplayRcvInf(rcvBuffer, "写标签数据页返回:"); DisplaySendInf(sendBuffer, "写标签数据页:"); }
public static extern int emulNfcType2ReadBlock(int h, ushort srcAddr, ushort targetAddr, ref ISO14443A_BLOCKPARAM pBlock, Byte[] pTxFrame, Byte[] pRxFrame);
private void buttonReadEmulNfcType2_Click(object sender, EventArgs e) { if (serialDevice < 0) { MessageBox.Show("请先打开串口"); return; } clearOpResult(); ushort[] addrArray = new ushort[2]; ISO14443A_BLOCKPARAM pBlock = new ISO14443A_BLOCKPARAM(); pBlock.uid.uid = new Byte[hfReaderDll.HFREADER_ISO14443A_LEN_MAX_UID]; pBlock.block = new Byte[hfReaderDll.HFREADER_ISO14443A_LEN_M1BLOCK * hfReaderDll.HFREADER_ISO14443A_M1BLOCKNUM_MAX]; pBlock.key = new Byte[hfReaderDll.HFREADER_ISO14443A_LEN_M1_KEY]; Byte[] sendBuffer = new Byte[1024]; Byte[] rcvBuffer = new Byte[1024]; Byte[] blockNum = new Byte[1]; Byte[] blockAddr = new Byte[1]; if (!GetDeviceAddr(addrArray)) { return; } if (GetHexInput(this.textBoxREmulNfcType2Addr.Text, blockAddr, 1) <= 0) { return; } pBlock.addr = blockAddr[0]; if (GetHexInput(this.textBoxREmulNfcType2Num.Text, blockNum, 1) <= 0) { return; } pBlock.num = blockNum[0]; if (pBlock.num > hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX) { MessageBox.Show("读取数目超出范围,最多可以读取0x" + hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX.ToString("X").PadLeft(2, '0') + "Page"); pBlock.num = hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX; this.textBoxREmulNfcType2Num.Text = hfReaderDll.HFREADER_ISO14443A_MOBLOCKNUM_MAX.ToString("X").PadLeft(2, '0'); } pBlock.keyType = 0x00; while (bOperatingSerial) { ; } bOperatingSerial = true; int rlt = hfReaderDll.emulNfcType2ReadBlock(serialDevice, addrArray[0], addrArray[1], ref pBlock, sendBuffer, rcvBuffer); bOperatingSerial = false; if (rlt > 0) { if (pBlock.result.flag == 0) { String s = ""; int j = 0; int i = 0; for (j = 0; j < pBlock.num; j++) { for (i = 0; i < hfReaderDll.HFREADER_ISO14443A_LEN_M0BLOCK; i++) { s += pBlock.block[j * hfReaderDll.HFREADER_ISO14443A_LEN_M0BLOCK + i].ToString("X").PadLeft(2, '0'); } s += "\r\n"; } this.textBoxREmulNfcType2BlockData.Text = s; } DisplayOpResult(ref pBlock.result); } DisplayRcvInf(rcvBuffer, "读标签数据页返回:"); DisplaySendInf(sendBuffer, "读标签数据页:"); }
public static extern int iso14443AWriteTopazBlock(int h, ushort srcAddr, ushort targetAddr, ref ISO14443A_BLOCKPARAM pBlock, Byte[] pTxFrame, Byte[] pRxFrame);