class Mifare::Ultralight::Tag

Public Class Methods

match?(target) click to toggle source

Check's if our tag class is able to handle this LibNFC::Target

# File lib/ruby-nfc/tags/mifare/ultralight.rb, line 58
def self.match?(target)
        target.sak == Mifare::SAKS[:ULTRALIGHT]
end

Public Instance Methods

connect(&block) click to toggle source
Calls superclass method NFC::Tag#connect
# File lib/ruby-nfc/tags/mifare/ultralight.rb, line 17
def connect(&block)
  @reader.set_flag(:NP_AUTO_ISO14443_4, false)

  res = Mifare.mifare_ultralight_connect(@pointer)
  if 0 == res 
                                  super
                          else
                                  raise Mifare::Error, "Can't connect to tag: #{res}"
  end
end
disconnect() click to toggle source
Calls superclass method Mifare::Tag#disconnect
# File lib/ruby-nfc/tags/mifare/ultralight.rb, line 28
def disconnect
                          Mifare.mifare_ultralight_disconnect(@pointer)
                          super
end
read(page_num = nil) click to toggle source

block number to read

# File lib/ruby-nfc/tags/mifare/ultralight.rb, line 34
def read(page_num = nil)
                          data_ptr = FFI::MemoryPointer.new(:uchar, 4)
  res = Mifare.mifare_ultralight_read(@pointer, page_num, data_ptr)

  raise Mifare::Error, ("Can't read page 0x%02x" % page_num) unless 0 == res

  data_ptr.get_bytes(0, 4).force_encoding('ASCII-8BIT')
end
write(data, page_num = nil) click to toggle source

@data - 16 bytes represented by hexadecimal string @block_num - number of block to write to

# File lib/ruby-nfc/tags/mifare/ultralight.rb, line 45
def write(data, page_num = nil)
                          raise Mifare::Error, "Wrong data given" if data !~ /^[\da-f]{8}$/i

                          data_ptr = FFI::MemoryPointer.new(:uchar, 4)
                          data_ptr.put_bytes(0, [data].pack('H*'))

                          res = Mifare.mifare_classic_write(@pointer, block_num, data_ptr)
                          raise Mifare::Error, ("Can't write page 0x%02x" % page_num) unless 0 == res

                          res
end