Class: Mifare::Ultralight::Tag

Inherits:
Tag show all
Defined in:
lib/ruby-nfc/tags/mifare/ultralight.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Tag

#initialize, #name, #sak, #to_s

Methods inherited from NFC::Tag

#initialize, #present?, #processed!, #processed?, #to_s, #uid, #uid_hex

Constructor Details

This class inherits a constructor from Mifare::Tag

Class Method Details

.match?(target) ⇒ Boolean

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

Returns:

  • (Boolean)


58
59
60
# File 'lib/ruby-nfc/tags/mifare/ultralight.rb', line 58

def self.match?(target)
	target.sak == Mifare::SAKS[:ULTRALIGHT]
end

Instance Method Details

#connect(&block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# 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

#disconnectObject



28
29
30
31
# File 'lib/ruby-nfc/tags/mifare/ultralight.rb', line 28

def disconnect
				Mifare.mifare_ultralight_disconnect(@pointer)
				super
end

#read(page_num = nil) ⇒ Object

block number to read

Raises:



34
35
36
37
38
39
40
41
# 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) ⇒ Object

Raises:



45
46
47
48
49
50
51
52
53
54
55
# 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