public static void OnReaderFound(string com, string protocol, byte address, bool already_monitored) { Console.WriteLine("ReaderFound, com: " + com + ", Protocol: " + protocol); reader = scheduler.GetInstalledReader(1); if (reader == null) { Console.WriteLine("Error reader is null"); return; } reader.SetBadgeReceivedCallback(new BadgeReceivedCallback(OnBadgeRead)); reader.Start(); }
/* This method is called when the user double clicks on a reader */ void DataGridView1CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView.SelectedRows.Count == 1) { int index = dataGridView.SelectedRows[0].Index; /* Retrieve the reader which has been double-clicked ... */ if (selectedScheduler != null) { byte address = Byte.Parse((string) dataGridView.Rows[index].Cells[3].Value); if (!selectedScheduler.IsMonitored(address)) { selectedScheduler.MonitorReader(address); selectedReader = selectedScheduler.GetInstalledReader(address); } /* ... and close this form to get back to the MainForm */ this.Close(); } } }
/* This method adds a reader in the "InstalledReaders" list. */ /* This list contains all the active (=responding) readers on */ /* the bus. This is not the list of readers, which are monitored */ /* by the user (set LEDs, buzzer, etc ...) */ private void InstallReader(byte address) { LogString(port.PortName + ":Installing reader " + address); SpringCardIWM2_Serial_Reader reader; /* Caution: if the reader is already monitored, but not installed, */ /* this is because it has been detected in the past, then dropped. */ /* In this case, don't create another object, but place the */ /* monitored reader in the "installed readers" list */ if (IsMonitored(address)) { reader = GetMonitoredReader(address); } else { reader = new SpringCardIWM2_Serial_Reader(this, address); } InstalledReaders.Add(reader); if ( _reader_found_callback != null) _reader_found_callback(port.PortName, "MK2", address, IsMonitored(address)); if (IsMonitored(address)) reader.SetScheduled(); }
/* This method sends an R-Nack block to the specified reader */ private bool SendRNackBlock(SpringCardIWM2_Serial_Reader reader) { byte[] data = new byte[5]; data[0] = ASCII_STX; data[1] = (byte) (IWM2_MK2_PROTO_R_NACK | reader.block_number); data[2] = reader.GetAddress(); data[3] = CalculateLRC(data, 3); data[4] = ASCII_ETX; byte out_len = 0; byte[] res = EscapeForbiddenBytes(data, 5, out out_len); if (show_frames) LogByteArrayEmitted(res, out_len); try { port.Write(res, 0, out_len); Thread.Sleep(1); /* slow down the bus */ } catch (Exception) { return false; } return true; }
/* This method sends an I-Block with a payload to the specified reader */ private bool SendIBlock(SpringCardIWM2_Serial_Reader reader, byte[] payload) { byte[] data; byte offset = 0; if (payload == null) data = new byte[5]; else data = new byte[5 + payload.Length]; data[offset++] = ASCII_STX; data[offset++] = (byte) (IWM2_MK2_PROTO_I_BLOCK | reader.block_number); data[offset++] = reader.GetAddress(); if (payload != null) for (byte i=0; i<payload.Length; i++) data[offset++] = payload[i]; data[offset] = CalculateLRC(data, offset); offset++; data[offset++] = ASCII_ETX; byte out_len = 0; byte[] res = EscapeForbiddenBytes(data, offset, out out_len); if (show_frames) LogByteArrayEmitted(res, out_len); try { port.Write(res, 0, out_len); Thread.Sleep(1); /* slow down the bus */ } catch (Exception) { return false; } return true; }
/* This method sends an empty I-Block to the specified reader */ private bool SendIBlock(SpringCardIWM2_Serial_Reader reader) { return SendIBlock(reader, null); }