class Mifare::Ultralight

Constants

CMD_3DES_AUTH
CMD_READ
CMD_WRITE

Public Class Methods

new(pcd, uid, sak) click to toggle source
Calls superclass method PICC::new
# File lib/mifare/ultralight.rb, line 7
def initialize(pcd, uid, sak)
  super
  @model_c = false

  # Check if Ultralight C
  if support_3des_auth?
    extend UltralightC
    @model_c = true
  end
end

Public Instance Methods

model_c?() click to toggle source
# File lib/mifare/ultralight.rb, line 35
def model_c?
  @model_c
end
read(block_addr) click to toggle source
# File lib/mifare/ultralight.rb, line 18
def read(block_addr)
  buffer = [CMD_READ, block_addr]

  @pcd.picc_transceive(buffer)
end
write(page, send_data) click to toggle source
# File lib/mifare/ultralight.rb, line 24
def write(page, send_data)
  if send_data.size != 4
    raise UnexpectedDataError, "Expect 4 bytes data, got: #{send_data.size} byte"
  end

  buffer = [CMD_WRITE, page]
  buffer.concat(send_data)

  @pcd.picc_transceive(buffer)
end

Private Instance Methods

support_3des_auth?() click to toggle source

Check if PICC support Ultralight 3DES command

# File lib/mifare/ultralight.rb, line 42
def support_3des_auth?
  # Ask for authentication
  buffer = [CMD_3DES_AUTH, 0x00]

  begin
    @pcd.picc_transceive(buffer)
    result = true
  rescue CommunicationError
    result = false
  end

  resume_communication

  result
end