/* 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; }