Esempio n. 1
0
		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);
		}