private void OnDataReceived(IAsyncResult ar) { try { StateObject state = (StateObject)ar.AsyncState; int bytesRead = MainSocket.EndReceive(ar); if (bytesRead > 0) { byte[] recvBytes = state.buffer; //Judge the header info string print_data = null; for (int index = 0; index < bytesRead; index++) { print_data += recvBytes[index].ToString("X2"); if ( recvBytes[index] == 0x0D && recvBytes[index + 1] == 0x0D) //header confirmed { //NOTE: there is NO CRC check in here. it is better to have a CRC check by using XOR calculation, for instance, for a whole data of "0D0D10FFFF00430000000001507981FA", //the CRC value would be the last byte (15th) which is "FA" and it could be got through 0D (xor) 0D(xor)10(xor)FF(xor)FF(xor)00(xor)43(xor)00(xor)00(xor)00(xor)00(xor)01(xor)50(xor)79(xor) 81 byte[] tagBytes = new byte[9]; //Declare a new byte array to store the tag ID for (int i = 0; i < 9; i++) { //get the Tag ID, a tag id contains 8 bytes (0 ~ 7) in total, and the 8th bytes stands for the status tagBytes[i] = recvBytes[i + index + 6]; } RFIDTag temp = ConvertTag(tagBytes); for (int j = 0; j < tags.Count; j++) { if (tags[j].ID == temp.ID) { tags.RemoveAt(j); break; } } tags.Add(ConvertTag(tagBytes)); if (tags.Count > 0) { List<ListViewItem> items = new List<ListViewItem>(); foreach (RFIDTag tag in tags) { IInsertListViewItem(this, listView1, tag); //tags.Remove(tag); } } } } //print out the raw data Console.WriteLine("---" + print_data); // if the Get Gain response from the reader to the PC // GetGainValue(recvBytes, bytesRead); } MainSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(OnDataReceived), state); } catch (Exception ex) { } }
public static void IInsertListViewItem(Form form, ListView t, RFIDTag tag) { if (t.InvokeRequired) { InsertListViewItem a = new InsertListViewItem(InsertListViewItem1); form.Invoke(a, new Object[] { t, tag}); } else { updateListView(t, tag); } }
public static void updateListView(ListView t, RFIDTag tag) { lock (t) { string dataTime = DateTime.Now.ToString(); for (int i = 0; i < t.Items.Count; i++) { if (t.Items[i].SubItems[2].Text == tag.ID) { t.Items[i].SubItems[4].Text = dataTime; int count = Convert.ToInt32(t.Items[i].SubItems[3].Text.ToString()) + 1; t.Items[i].SubItems[3].Text = count.ToString(); t.Items[i].SubItems[6].Text = tag.Temperature; t.Items[i].SubItems[5].Text = tag.Battery; t.Items[i].SubItems[7].Text = tag.Buckle; t.Items[i].SubItems[8].Text = tag.Vibration; if (tag.Call != "") { t.Items[i].SubItems[9].Text = "Button Pressed"; t.Items[i].BackColor = Color.OrangeRed; } else if (tag.ButtonPress != "") { t.Items[i].SubItems[9].Text = tag.ButtonPress; t.Items[i].BackColor = Color.OrangeRed; } else { t.Items[i].SubItems[9].Text = ""; t.Items[i].BackColor = Color.White; } if (tag.Mount == "Mounted") { t.Items[i].SubItems[10].Text = tag.Mount; t.Items[i].BackColor = Color.Green; } else if (tag.Mount == "Un-mounted") { t.Items[i].SubItems[10].Text = tag.Mount; t.Items[i].BackColor = Color.White; } return; } } // total tags number ListViewItem item = new ListViewItem(); ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem(); subItem.Text = (t.Items.Count + 1).ToString(); item.SubItems.Insert(0, subItem); // tag type subItem = new ListViewItem.ListViewSubItem(); subItem.Text = tag.Type; item.SubItems.Insert(1, subItem); //tag id subItem = new ListViewItem.ListViewSubItem(); subItem.Text = tag.ID; item.SubItems.Insert(2, subItem); //count subItem = new ListViewItem.ListViewSubItem(); subItem.Text = Convert.ToString(1); item.SubItems.Insert(3, subItem); //timestamp subItem = new ListViewItem.ListViewSubItem(); subItem.Text = dataTime; item.SubItems.Insert(4, subItem); //Battery subItem = new ListViewItem.ListViewSubItem(); subItem.Text = tag.Battery; item.SubItems.Insert(5, subItem); //Temperature subItem = new ListViewItem.ListViewSubItem(); subItem.Text = tag.Temperature; item.SubItems.Insert(6, subItem); //Buckle subItem = new ListViewItem.ListViewSubItem(); subItem.Text = tag.Buckle; item.SubItems.Insert(7, subItem); //Vibration subItem = new ListViewItem.ListViewSubItem(); subItem.Text = tag.Vibration; item.SubItems.Insert(8, subItem); //Panic button subItem = new ListViewItem.ListViewSubItem(); if (tag.Call != "") { subItem.Text = "Button Pressed"; } else if (tag.ButtonPress != "") { subItem.Text = tag.ButtonPress; } else { subItem.Text = ""; } item.SubItems.Insert(9, subItem); //Mounted subItem = new ListViewItem.ListViewSubItem(); subItem.Text = tag.Mount; item.SubItems.Insert(10, subItem); t.Items.Add(item); } }
public static void InsertListViewItem1(ListView t, RFIDTag tag) { updateListView(t, tag); }
private static RFIDTag ConvertTag(byte[] record) { RFIDTag tag = new RFIDTag(); tag.Battery = (record[8] < 128) ? "Low" : "High"; switch (Convert.ToInt16(record[8] & 0x000F)) { //Configurable Card Tag case 0: tag.ID = GetTagID(record, 7); tag.Type = "127002"; tag.Buckle = ""; tag.ButtonPress = ""; tag.Call = ""; tag.Mount = ""; tag.Temperature = ""; tag.Vibration = ""; break; //Configurable Strip Tag case 1: tag.ID = GetTagID(record, 7); tag.Type = "127001"; tag.Buckle = ""; tag.ButtonPress = ""; tag.Call = ""; tag.Mount = ""; tag.Temperature = ""; tag.Vibration = ""; break; // Temperature Tag case 2: //RFIDTagMemory temperature = new RFIDTagMemory(); tag.Temperature = GetTempData(record) + " °C"; //temperature.MemoryType = RFIDTag_MemoryType.Temperature; tag.ID = GetTagID(record, 5); tag.Type = "127003"; tag.Buckle = ""; tag.ButtonPress = ""; tag.Call = ""; tag.Mount = ""; tag.Vibration = ""; //tag.AddTagMemory(temperature); break; //Vibration Tag case 3: //RFIDTagMemory vibration = new RFIDTagMemory(); tag.Vibration = (Convert.ToInt16(record[8] & 0x0040) > 0) ? "Yes" : "No"; //vibration.MemoryType = RFIDTag_MemoryType.Vibration; tag.Type = "127004"; tag.ID = GetTagID(record, 7); tag.Buckle = ""; tag.ButtonPress = ""; tag.Call = ""; tag.Mount = ""; tag.Temperature = ""; //tag.AddTagMemory(vibration); break; //Key-fob Tag case 8: //RFIDTagMemory keyfob = new RFIDTagMemory(); if (record[8] == 0xA8) { tag.ButtonPress = "Button#1 Pressed"; } else if (record[8] == 0x98) { tag.ButtonPress = "Button#2 Pressed"; } else { tag.ButtonPress = ""; } //keyfob.MemoryType = RFIDTag_MemoryType.Button; tag.Type = "127012"; tag.ID = GetTagID(record, 7); tag.Buckle = ""; tag.Call = ""; tag.Mount = ""; tag.Temperature = ""; tag.Vibration = ""; //tag.AddTagMemory(keyfob); break; //Wristband Tag case 5: //RFIDTagMemory callMem = new RFIDTagMemory(); //callMem.MemoryType = RFIDTag_MemoryType.CallButton; tag.Call = ((record[8] & 0x0020) > 0) ? "Button Pressed" : ""; //RFIDTagMemory buckleMem = new RFIDTagMemory(); //buckleMem.MemoryType = RFIDTag_MemoryType.Buckle; tag.Buckle = ((record[8] & 0x0010) > 0) ? "Buckle Opened" : "Buckle Secured"; tag.Type = "127006"; tag.ID = GetTagID(record, 7); tag.Mount = ""; tag.Temperature = ""; tag.Vibration = ""; tag.ButtonPress = ""; //tag.AddTagMemory(callMem); //tag.AddTagMemory(buckleMem); break; //Beaconing Tag case 6: //RFIDTagMemory mount = new RFIDTagMemory(); tag.Mount = ((record[8] & 0x0010) > 0) ? "Mounted" : "Un-mounted"; //mount.MemoryType = RFIDTag_MemoryType.Mount; tag.Type = "127005"; tag.ID = GetTagID(record, 7); tag.Buckle = ""; tag.Call = ""; tag.Temperature = ""; tag.Vibration = ""; tag.ButtonPress = ""; //tag.AddTagMemory(mount); break; default: tag.ButtonPress = ""; //keyfob.MemoryType = RFIDTag_MemoryType.Button; tag.Type = ""; tag.ID = GetTagID(record, 7); tag.Buckle = ""; tag.Call = ""; tag.Mount = ""; tag.Temperature = ""; tag.Vibration = ""; break; } return tag; }