-
Notifications
You must be signed in to change notification settings - Fork 237
/
nfc.txt
1649 lines (1029 loc) · 40.1 KB
/
nfc.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# NFC Developer Guide
The Near Field Communications (NFC) API allows you to use NFC functionality in your Rhodes application. With the NFC API, you can check to see if the mobile device supports NFC, and if so, have it listen for an NFC tag and register a callback if it finds one. You can also have your device push out an NFC tag.
**NOTE: As of Rhodes version 3.3.3, the NFC API is removed from Rhodes. This feature is only supported in Motorola RhoMobile Suite. If you wish to use this feature, you will need to [upgrade to RhoMobile Suite](/rhomobile-install). Your application's build.yml will also need to be modified to [indicate the application type is 'Rhoelements']( /rhoelements/rhoelements2-native#enabling-motorola-device-capabilities). Additionally, a [RhoElements license](/rhoelements/licensing) is required.**
Example Code
-----------
Example code for NFC is located here.
* [Rhodes Webinar Sample: NFC](https://github.com/rhomobile/webinar-samples/tree/master/nfc-rhodes)
* [Rhodes System API Samples: NFC](https://github.com/rhomobile/rhodes-system-api-samples/tree/master/app/Nfc)
## Generating a Container Model for NFC
To create a Rhodes NFC application, you generate a Rhodes application, then you generate an NFC model in that application. Note that the model attributes are stubs in this case; you might not use the model attribute code that is generated.
:::term
$ rhodes app nfc
$ (the command line now shows the app being generated)
$ cd nfc
$ rhodes model stub1 stub2
## Setting up build.yml
NFC is supported only on Android devices with Android 2.3.3 or later. You must edit the Android section in your build.yml file for NFC: 'nfc' extension must be in the extension list.
:::text
android:
extensions:
- nfc
## Enabling NFC on the Mobile Device
Before you can send or receive NFC tags on your NFC-capable mobile device, you must enable NFC on the device with the method NFCManager.enable. Also, when your application is in the background, you should enable it to receive NFC tag messages with the method NFCManager.perform_open_application_event.
Rhodes has a hook called on_activate_app that is called every time an application using this hook launches, and when that application comes in from the background. You can call this hook in app/application.rb.
:::ruby
def on_activate_app
# enable NFC on your NFC-capable mobile device
Rho::NFCManager.enable
# Set the method to call for nfc callback
Rho::NFCManager.set_nfc_callback("/app/Nfc/nfc_callback")
# Enable listening for events when the application is in the background
Rho::NFCManager.perform_open_application_event
end
You can use the method NFCManager.is_supported to see if NFC is supported on your mobile device, and the method NFCManager.is_enabled to see if NFC has been enabled. The method NFCManager.disable disables NFC on your mobile device.
## Setting NFC Callback Methods
If your method is going to read or write NFC tags, it also needs to set the callback methods that process the NFC tag. The NFCManager.set_nfc_tech_callback is for reading and writing NFC tags (when the Android ACTION_TECH_DISCOVERED event is processed). NFCManager.set_nfc_callback is for peer-to-peer communication (when the Android ACTION_NDEF_DISCOVERED or ACTION_TAG_DISCOVERED events are processed).
For NFCManager.set_nfc_tech_callback (the Android ACTION_TECH_DISCOVERED event), set up your list of techs in a resource file : [Rhodes ROOT]/lib/extensions/nfc/ext/nfc/platform/android/additional_files/res/xml/filter_nfc.xml. Refer to the Android documentation - [Android ACTION_TECH_DISCOVERED description](http://developer.android.com/reference/android/nfc/NfcAdapter.html#ACTION_TECH_DISCOVERED). Here is an example.
:::xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- capture all MIFARE Classics with NDEF payloads -->
<tech-list>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.Ndef</tech>
</tech-list>
</resources>
You will write the callback methods in your NFC controller method to process your NFC tags: the example below points to the callback methods nfc_callback and nfc_tech_callback in the app/Nfc/nfc_controller.rb file. You can set the NFC callback methods in on_activate_app.
:::ruby
def on_activate_app
# enable NFC on your NFC-capable mobile device
Rho::NFCManager.enable
# Set the method to call upon an nfc callback
Rho::NFCManager.set_nfc_callback("/app/Nfc/nfc_callback")
# Set the method to call upon an nfc tech callback
Rho::NFCManager.set_nfc_tech_callback("/app/Nfc/nfc_tech_callback")
# Enable listening for events when the application is in the background
Rho::NFCManager.perform_open_application_event
end
Callbacks can be simple. You could just have the callback method say that it received a tag:
:::ruby
def nfc_callback
@log = "TAG received: #{Time.now.strftime('%H:%M:%S')}"
add_to_log(@log)
end
But to read or write NFC message and records from the NFC tag, you first get the current tag, determine the type of tag, and connect to the tag.
## Getting, Determining Type of, and Connecting to a Tag
Before you read from or write to a tag, get the tag with the method NFCManager method get_current_Tag. Find out what tech the tag uses with the method NFCTag.get_tech; the tag techs are listed in the NFCTagTechnology class. In this example, the tag is Ndef tech. Connect to the tag with the method NFCTagTechnology.connect.
:::ruby
tag = Rho::NFCManager.get_current_Tag
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
ndef.connect
# read or write the NFC tag
end
You can now read from or write to the NFC tag.
## Reading an NFC Tag
After you get a tag, determine its type, and connect to the tag, you can read from the tag.
### Read the Tag Message and Get Its Records
In this example, it is an Ndef tag, so use the NTagTechnology_Ndef.read_NdefMessage method (subclass of NFCTechnology) to read the message. Then get the records from that message: since this is an Ndef tag, use the NTagTechnology_Ndef.get_records method.
:::ruby
# read the ndef tag message and get the records from it.
msg = ndef.read_NdefMessage
records = msg.get_records
### Iterate Through the Records and Hash Them
Iterate through the records in the message (in the following example, the message has only one record). And since this is an Ndef record, use the NdefRecord method make_hash to make a hash of the record.
:::ruby
# iterate through the array of records and hash the record
# this example has only one tag, so the array has only one element
r_a = []
records.each do |record|
r_a << record.make_hash
end
### Grab the Payload from the Hash
In the case of the Ndef record, grab the payload from the hash with the payload_as_string part of the hash.
:::ruby
# assign to a variable and print it out
msg_hash = { 'records' => r_a }
puts "records after processing: #{msg_hash.inspect}"
# Assign the string payload from the hash to the result
result = "Tag Result: " + msg_hash['records'][0]['payload_as_string'] if msg_hash['records'].size > 0
## Writing an NFC tag
After you get a tag, determine its type, and connect to the tag, you can write to the tag.
To write to an NFC tag, you fill the tag with a message that you create and load with payloads.
### Creating a Message for the NFC tag
For an Ndef record, you make payloads for the records in the message. You have several methods you can use to make the payload; the example here uses the NFCManager.make_payload_with_well_known_uri method. The NFC tag will contain the URL for Rhomobile.
:::ruby
payload = Rho::NFCManager.make_payload_with_well_known_uri(0, 'http://www.rhomobile.com')
### Putting the Payload Into The Record
For a Ndef record, make a hash and put the payload into it.
:::ruby
hash = { 'id' => [0], 'type' => Rho::NdefRecord::RTD_URI, 'tnf' => Rho::NdefRecord::TNF_WELL_KNOWN, 'payload' => payload}
### Making the Records, Put Records into an Array, Make a Message
Then make a record from the hash with the NFCManager method make_NdefRecord_from_hash, put the record(s) into an array, and make a message from the array with the NFCManager method make_NdefMessage_from_array_of_NdefRecord(records).
:::ruby
record = Rho::NFCManager.make_NdefRecord_from_hash(hash)
records = [record]
msg = Rho::NFCManager.make_NdefMessage_from_array_of_NdefRecord(records)
### Writing the NFC Message
Once an Ndef message is created, you can write it with the NFCTagTechnology_Ndef method write.
:::ruby
ndef.write_NdefMessage(msg)
puts ' finish write NdefMessage'
## Closing the Connection to the Tag
When you are done reading or writing to the NFC tag, close the connection to it with the NFCTagTechnology method close.
:::ruby
ndef.close
For example, you can have the following code in your NFC controller method to process NFC tech callbacks.
:::ruby
def nfc_tech_callback
# Get the current tag
tag = Rho::NFCManager.get_current_Tag
# get the tag technology to find out how to process it; it is an ndef tag
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
# connect to the ndef tag
ndef.connect
#... read from or write to the NFC tag
ndef.close
end
#...
end
## Pushing a Peer-to-Peer NFC Tag
You can push an NFC tag to another NFC-enabled device with the NFCManager. p2p_enable_foreground_nde_push(msg) method.
First, you need to make the payload for the message.
:::ruby
def start_nfc_push
puts "Sending #{@params['push'].inspect}..."
payload = Rho::NFCManager.make_payload_with_well_known_text("en", @params['push'])
#... more processing
end
Then put the payload into the record. This is an Ndef example, so we make a hash, then use the NFCManager.make_NdefRecord_from_hash method to create the record.
:::ruby
hash = {
'id' => [0],
'type' => Rho::NdefRecord:: RTD_TEXT,
'tnf' => Rho::NdefRecord::TNF_WELL_KNOWN,
'payload' => payload
}
record = Rho::NFCManager.make_NdefRecord_from_hash(hash)
Make the record array, then use the NFCManager. make_NdefMessage_from_array_of_NdefRecord(records) method to make the message from the record array.
:::ruby
records = [record]
msg = Rho::NFCManager.make_NdefMessage_from_array_of_NdefRecord(records)
Now you can push the message with the NFCManager. p2p_enable_foreground_nde_push(msg) method.
:::ruby
# start push message
Rho::NFCManager.p2p_enable_foreground_nde_push(msg)
@notice = "Started push."
render :action => :index
end
And when you want to stop pushing the message, use the NFCManager. p2p_disable_foreground_nde_push method.
:::ruby
def stop_nfc_push
Rho::NFCManager.p2p_disable_foreground_nde_push
@notice = "Stopped push."
render :action => :index
end
## NdefRecord Class API
The NdefRecord class contains methods for getting data from NFC Ndef tag records.
An Ndef record consists of a hash:
:::ruby
ID = 'id'
TNF = 'tnf'
TYPE = 'type'
PAYLOAD = 'payload'
The Type Name Format (TNF part of the hash) is a 3-bit field that indicates how you interprete the type field (TYPE). Here is a list of the TNF values.
:::ruby
TNF_ABSOLUTE_URI = 3
TNF_EMPTY = 0
TNF_EXTERNAL_TYPE = 4
TNF_MIME_MEDIA = 2
TNF_UNCHANGED = 6
TNF_UNKNOWN = 5
TNF_WELL_KNOWN = 1
The RTD text type (TYPE part of the hash) is used with the TNF_WELL_KNOWN value.
:::ruby
RTD_TEXT = [0x54] # "T"
RTD_URI = [0x55] # "U"
RTD_SMART_POSTER = [0x53, 0x70] # "Sp"
RTD_ALTERNATIVE_CARRIER = [0x61, 0x63] # "ac"
RTD_HANDOVER_CARRIER = [0x48, 0x63] # "Hc"
RTD_HANDOVER_REQUEST = [0x48, 0x72] # "Hr"
RTD_HANDOVER_SELECT = [0x48, 0x73] # "Hs"
Here is some code that creates a hash for an NdefRecord, which will be part of an NFCMessage to be pushed to an NFC-capable mobile device.
:::ruby
hash = { 'id' => [0], 'type' => Rho::NdefRecord::RTD_URI, 'tnf' => Rho::NdefRecord::TNF_WELL_KNOWN, 'payload' => payload}
### NdefRecord get methods
You can extract data from an Ndef record with the following methods:
:::ruby
get_id # returns byte[]
get_tnf # return int
get_type # returns byte[]
get_payload # returns byte[]
get_payload_as_string # returns string
get_byte_array # returns byte[]
Example:
:::ruby
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
ndef.connect
type = ndef.get_type
#...
end
### NdefRecord.make_hash
The make_hash method returns a hash from an Ndef record, from which you can then extract data with the NdefRecord get methods.
#### Returns
A hash of the following format:
* 'id' - byte[]
* 'tnf' - int
* 'type' - byte[]
* 'payload' - byte[]
* 'payload_as_string' - string
#### Parameters
None.
#### Example
This example steps through a records array, makes a hash of each record, and puts the hash into an array.
:::ruby
r_a = []
i = 0
while i < records.size do
r_a << records[i].make_hash
i = i+1
end
### NdefRecord.convert_Tnf_to_string(int)
Converts the int value of tnf from an Ndef record hash to a string.
#### Returns
A string. Text description of the Type Name Format (TNF).
#### Parameters
int: The tnf from a NdefRecord hash.
#### Example
:::ruby
puts 'tnf = '+Rho::NdefRecord.convert_Tnf_to_string(record['tnf'])
### NdefRecord.convert_RTD_to_string(byte[])
Converts the byte[] value of rtd from an Ndef record hash to a string.
#### Returns
A string. Text description of the rtd (type part of the NdefRecord hash).
#### Parameters
byte[]: The rtd (type) from an NdefRecord hash.
#### Example
:::ruby
puts 'type = '+Rho::NdefRecord.convert_RTD_to_string(record['type'])
## NdefMessage Class API
Use the NdefMesage class to convert an NdefMessage into a format from which you can extract data.
### NdefMessage.get_byte_array
Converts an NdefMessage into a raw byte array.
#### Returns
byte[] - byte array containing the Ndef message.
#### Parameters
None.
### NdefMessage.get_records
Converts an NdefMessage into an NdefRecord array containing the records in the Ndef Message.
#### Returns
NdefRecord[] - NdefRecord array containing the records in an NdefMessage.
#### Parameters
None.
#### Example
:::ruby
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
ndef.connect
msg = ndef.read_NdefMessage
records = msg.get_records
#...
end
## NFCTagTechnology Class API
Use the NFCTagTechnology to connect to NFC tags and to determine their type.
### NFCTagTechnology Properties
The NFCTagTechnology class has several properties to determine the type of the NFC tag.
* ISODEP = 'IsoDep'
* MIFARE_CLASSIC = 'MifareClassic'
* MIFARE_ULTRALIGHT = 'MifareUltralight'
* NDEF = 'Ndef'
* NDEF_FORMATABLE = 'NdefFormatable'
* NFCA = 'NfcA'
* NFCB = 'NfcB'
* NFCF = 'NfcF'
* NFCV = 'NfcV'
### NFCTagTechnology.get_name
This method gets the name of an NFC tag.
#### Returns
String - the name of the NFC tag.
#### Parameters
None.
### NFCTagTechnology.connect
This method connects to an NFC tag.
#### Returns
None.
#### Parameters
None.
#### Example
:::ruby
tag = Rho::NFCManager.get_current_Tag
if tag != nil
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
puts ' Ndef is supported !'
ndef.connect
connected = ndef.is_connected
puts ' Ndef.isConnected() = '+connected.to_s
#...
end
#...
end
### NFCTagTechnology.close
Closes a connection with an NFC tag.
#### Returns
None.
#### Parameters
None.
#### Example
:::ruby
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
ndef.connect
msg = ndef.read_NdefMessage
records = msg.get_records
r_a = []
records.each do |record|
r_a << record.make_hash
end
msg_hash = { 'records' => r_a }
result = "Tag Result: " + msg_hash['records'][0]['payload_as_string'] if msg_hash['records'].size > 0
ndef.close
### NFCTagTechnology.is_connected
This method returns true if the application is connected with an NFC tag, false otherwise.
#### Returns
True or false.
#### Parameters
None.
#### Example
:::ruby
tag = Rho::NFCManager.get_current_Tag
if tag != nil
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
ndef.connect
connected = ndef.is_connected
puts ' Ndef.isConnected() = '+connected.to_s
## NFCTagTechnology_NfcA Class API
Subset of NFCTagTechnology class.
### NFCTagTechnology_NfcA.get_Atqa
Gets a byte array containing Atqa.
#### Returns
byte[] - Atqa.
#### Parameters
None.
### NFCTagTechnology_NfcA.get_Sak
Gets a int containing Sak.
#### Returns
int - Sak.
#### Parameters
None.
### NFCTagTechnology_NfcA.transceive(data)
Sends data (a byte array) to a tag and receives result in a byte array.
#### Returns
byte[] - data received from the tag.
#### Parameters
data - byte[] sent to the tag.
## NFCTagTechnology_Ndef Class API
Subset of NFCTagTechnology class.
MIFARE_CLASSIC = 'com.nxp.ndef.mifareclassic'
NFC_FORUM_TYPE_1 = 'org.nfcforum.ndef.type1'
NFC_FORUM_TYPE_2 = 'org.nfcforum.ndef.type2'
NFC_FORUM_TYPE_3 = 'org.nfcforum.ndef.type3'
NFC_FORUM_TYPE_4 = 'org.nfcforum.ndef.type4'
### NFCTagTechnology_Ndef.get_max_size
Gets the maximum size of the Ndef tag.
#### Returns
int - Maximum size of the Ndef tag.
#### Parameters
None.
#### Example
:::ruby
tag = Rho::NFCManager.get_current_Tag
if tag != nil
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
puts ' Ndef is supported !'
ndef.connect
puts ' max_size = '+ndef.get_max_size.to_s
#...
end
#...
end
### NFCTagTechnology_Ndef.is_writable
Returns true if the Ndef tag is writeable, false otherwise.
#### Returns
bool - True if the tag is writeable, false otherwise.
#### Parameters
None.
#### Example
:::ruby
tag = Rho::NFCManager.get_current_Tag
if tag != nil
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
puts ' Ndef is supported !'
ndef.connect
puts ' is_writable = '+ndef.is_writable.to_s
#...
end
#...
end
### NFCTagTechnology_Ndef.can_make_read_only
Returns true if the Ndef tag can be made read only, false otherwise.
#### Returns
bool - True if the tag can be made read only, false otherwise.
#### Parameters
None.
#### Example
:::ruby
tag = Rho::NFCManager.get_current_Tag
if tag != nil
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
puts ' Ndef is supported !'
ndef.connect
puts ' can_make_read_only = '+ndef.can_make_read_only.to_s
#...
end
#...
end
### NFCTagTechnology_Ndef.make_read_only
Returns true if the Ndef tag is made read only, false otherwise.
#### Returns
bool - True if the tag is made read only, false otherwise.
#### Parameters
None.
### NFCTagTechnology_Ndef.get_type
Returns a string containing the type of the Ndef tag.
#### Returns
string - The type of the Ndef tag.
#### Parameters
None.
#### Example
:::ruby
tag = Rho::NFCManager.get_current_Tag
if tag != nil
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
puts ' Ndef is supported !'
ndef.connect
type = ndef.get_type
puts ' type = '+type
#...
end
#...
end
### NFCTagTechnology_Ndef.read_NdefMessage
Returns an NdefMessage read from an Ndef tag.
#### Returns
NdefMessage - The message contained in the Ndef tag.
#### Parameters
None.
#### Example
:::ruby
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
ndef.connect
msg = ndef.read_NdefMessage
#... process the message
end
### NFCTagTechnology_Ndef.write_NdefMessage(msg)
Returns an NdefMessage read from an Ndef tag.
#### Returns
None.
#### Parameters
msg - an NdefMessage written to an Ndef tag.
#### Example
:::ruby
ndef = tag.get_tech(Rho::NFCTagTechnology::NDEF)
if ndef != nil
ndef.connect
#... create the message to write
ndef.write_NdefMessage(msg)
end
## NFCTagTechnology_MifareClassic Class API
Subset of NFCTagTechnology.
### Constants
:::term
KEY_DEFAULT = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
KEY_MIFARE_APPLICATION_DIRECTORY = [0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5]
KEY_NFC_FORUM =[0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7]
### Types
:::term
TYPE_CLASSIC = 0
TYPE_PLUS = 1
TYPE_PRO = 2
TYPE_UNKNOWN = -1
### NFCTagTechnology_MifareClassic.get_type
Returns the type of a MifareClassic tag.
#### Returns
int - the tag type.
#### Parameters
None.
### NFCTagTechnology_MifareClassic.convert_type_to_string(type)
Returns the named type of a MifareClassic tag.
#### Returns
type - A string containing the tag type.
#### Parameters
None.
### NFCTagTechnology_MifareClassic.write_block(index, block)
Writes a block to a MifareClassic tag.
#### Returns
None.
#### Parameters
index - integer, the index to where in the tag sector the block will be written.
block - a 16 byte array written to the tag.
### NFCTagTechnology_MifareClassic.read_block(index)
Reads a block from a MifareClassic tag.
#### Returns
A 16 byte array.
#### Parameters
index - integer, the index to where in the tag sector the block is read from.
### NFCTagTechnology_MifareClassic.get_size
Return the size in bytes of a MifareClassic tag.
#### Returns
The size in bytes of a MifareClassic tag.
#### Parameters
None.
### NFCTagTechnology_MifareClassic.get_block_count
Return the number of blocks in a MifareClassic tag.
#### Returns
The number of blocks in a MifareClassic tag.
#### Parameters
None.
### NFCTagTechnology_MifareClassic.get_sector_count
Return the sector count in a MifareClassic tag.
#### Returns
The sector count in a MifareClassic tag.
#### Parameters
None.
### NFCTagTechnology_MifareClassic.get_blocks_in_sector_count(index)
Returns the number of blocks in a sector in a MifareClassic tag.
#### Returns
The number of blocks in the sector.
#### Parameters
index - the index to a sector.
### NFCTagTechnology_MifareClassic.sector_to_block(index)
Returns the index of the first block in a sector in a MifareClassic tag.
#### Returns
The index of the first block in a sector.
#### Parameters
index - the index to the current sector.
### NFCTagTechnology_MifareClassic.authenticate_sector_with_key_A(index, key)
Authenticates a sector with a key. Returns true if the authenticate was passed.
#### Returns
True if the authenticate was passed.
#### Parameters
index - the index to the current sector.
key - a 6 byte array containing the key.
### NFCTagTechnology_MifareClassic.authenticate_sector_with_key_B(index, key)
Authenticates a sector with a key. Returns true if the authenticate was passed.
#### Returns
True if the authenticate was passed.
#### Parameters
index - the index to the current sector.
key - a 6 byte array containing the key.
### NFCTagTechnology_MifareClassic.transceive(data)
Sends data (a byte array) to a tag and receives result in a byte array.
#### Returns
byte[] - data received from the tag.
#### Parameters
data - byte[] sent to the tag.
## NFCTagTechnology_MifareUltralight Class API
Subclass of NFCTagTechnology.
TYPE_ULTRALIGHT = 1
TYPE_ULTRALIGHT_C = 2
TYPE_UNKNOWN = -1
### NFCTagTechnology_MifareUltralight.get_type
Returns the type of a MifareUltralight tag.
#### Returns
int - the tag type.
#### Parameters
None.
### NFCTagTechnology_MifareUltralight.write_page(index, block)
Write a page to a MifareUltralight tag.
#### Returns
None.
#### Parameters
index - integer
block - 4 byte array
### NFCTagTechnology_MifareUltralight.read_page(index)
Reads a page from a MifareUltralight tag.
#### Returns
16 byte array.
#### Parameters
index - integer
### NFCTagTechnology_MifareUltralight.transceive(data)
Sends data (a byte array) to a tag and receives result in a byte array.
#### Returns
byte[] - data received from the tag.
#### Parameters
data - byte[] sent to the tag.
## NFCTagTechnology_IsoDep Class API
Subclass of NFCTagTechnology.
### NFCTagTechnology_IsoDep.get_hi_layer_responce
Returns the hi layer response.
#### Returns
byte[] - hi layer response.
#### Parameters
None.
### NFCTagTechnology_IsoDep.get_historical_bytes
Returns the historical bytes.
#### Returns
byte[] - historical bytes.
#### Parameters
None.
### NFCTagTechnology_IsoDep.set_timeout(timeout)
Sets a timeout.