rhodes 3.0.0 → 3.0.1.beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/CHANGELOG +4 -0
  2. data/Rakefile +9 -2
  3. data/doc/application.txt +1 -1
  4. data/doc/build.txt +49 -70
  5. data/doc/device-caps.txt +22 -97
  6. data/doc/extensions.txt +1 -1
  7. data/doc/nfc.txt +542 -0
  8. data/doc/rhom.txt +7 -5
  9. data/doc/simulator.txt +116 -0
  10. data/doc/ui.txt +1 -1
  11. data/lib/build/jake.rb +5 -5
  12. data/lib/extensions/debugger/debugger.rb +63 -35
  13. data/lib/extensions/nfc/ext/nfc/platform/android/AndroidManifest.xml +8 -6
  14. data/lib/extensions/nfc/ext/nfc/platform/android/jni/src/nfc.cpp +1070 -249
  15. data/lib/extensions/nfc/ext/nfc/platform/android/res/xml/filter_nfc.xml +1 -5
  16. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/rhomobile/nfc/Nfc.java +894 -72
  17. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/rhomobile/nfc/NfcActivity.java +82 -18
  18. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/rhomobile/nfc/NfcMessage.java +65 -0
  19. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/rhomobile/nfc/NfcRecord.java +88 -24
  20. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/rhomobile/nfc/NfcTechActivity.java +3 -0
  21. data/lib/extensions/nfc/ext/nfc/shared/ruby/nfc.i +204 -3
  22. data/lib/extensions/nfc/ext/nfc/shared/ruby/nfc_wrap.c +1047 -5
  23. data/lib/extensions/nfc/nfc.rb +635 -91
  24. data/lib/extensions/rhoxml/rexml/encodings/CP-1252.rb +103 -0
  25. data/lib/extensions/rhoxml/rexml/encodings/ISO-8859-1.rb +7 -0
  26. data/lib/framework/dateME.rb +26 -0
  27. data/lib/framework/rho/render.rb +21 -9
  28. data/lib/framework/rho/rho.rb +12 -0
  29. data/lib/framework/rho/rhoevent_bb.rb +3 -0
  30. data/lib/framework/rho/rhoevent_c.rb +3 -0
  31. data/lib/framework/rhodes.rb +1 -1
  32. data/lib/framework/rhom/rhom_db_adapter.rb +9 -9
  33. data/lib/framework/rhosystem.rb +17 -0
  34. data/lib/framework/stringio.rb +18 -0
  35. data/lib/framework/version.rb +1 -1
  36. data/lib/rhodes.rb +1 -1
  37. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  38. data/platform/android/Rhodes/res/xml/filter_nfc.xml +1 -5
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +0 -2
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +10 -6
  41. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoCryptImpl.java +29 -18
  42. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +67 -12
  43. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivityListener.java +14 -0
  44. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +102 -28
  45. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +35 -66
  46. data/platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java +5 -5
  47. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +69 -41
  48. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/PopupActivity.java +7 -5
  49. data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +68 -35
  50. data/platform/android/build/RhodesSRC_build.files +1 -0
  51. data/platform/android/build/android.rake +2 -2
  52. data/platform/bb/RubyVM/src/com/rho/RhoConf.java +1 -0
  53. data/platform/bb/RubyVM/src/com/rho/db/DBAdapter.java +18 -6
  54. data/platform/bb/build/bb.rake +1 -1
  55. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +5 -4
  56. data/platform/iphone/Classes/SimpleMainView.m +1 -1
  57. data/platform/iphone/Info.plist +1 -1
  58. data/platform/shared/common/RhodesApp.cpp +9 -3
  59. data/platform/shared/curl/lib/rhossl.c +5 -2
  60. data/platform/shared/db/DBAdapter.cpp +9 -0
  61. data/platform/shared/net/CURLNetRequest.cpp +8 -3
  62. data/platform/shared/net/iphone/sslimpl.cpp +3 -2
  63. data/platform/shared/net/ssl.cpp +8 -0
  64. data/platform/shared/ruby/ext/rho/rhoruby.c +10 -0
  65. data/platform/shared/ruby/ext/rho/rhoruby.h +1 -0
  66. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +3 -4
  67. data/platform/win32/RhoSimulator/QtCore4.dll +0 -0
  68. data/platform/win32/RhoSimulator/QtGui4.dll +0 -0
  69. data/platform/win32/RhoSimulator/QtNetwork4.dll +0 -0
  70. data/platform/win32/RhoSimulator/QtWebKit4.dll +0 -0
  71. data/platform/win32/RhoSimulator/RhoSimulator.exe +0 -0
  72. data/platform/win32/RhoSimulator/imageformats/qgif4.dll +0 -0
  73. data/platform/win32/RhoSimulator/imageformats/qico4.dll +0 -0
  74. data/platform/win32/RhoSimulator/imageformats/qjpeg4.dll +0 -0
  75. data/platform/win32/RhoSimulator/imageformats/qmng4.dll +0 -0
  76. data/platform/win32/RhoSimulator/imageformats/qsvg4.dll +0 -0
  77. data/platform/win32/RhoSimulator/imageformats/qtiff4.dll +0 -0
  78. data/platform/win32/RhoSimulator/libeay32.dll +0 -0
  79. data/platform/win32/RhoSimulator/ssleay32.dll +0 -0
  80. data/platform/wm/build/wm.rake +27 -3
  81. data/platform/wm/rhodes/Rhodes.cpp +4 -0
  82. data/platform/wm/rhodes/emulator/MainWindowCallback.h +1 -0
  83. data/platform/wm/rhodes/emulator/MainWindowProxy.cpp +3 -1
  84. data/platform/wm/rhodes/emulator/MainWindowQt.cpp +23 -12
  85. data/platform/wm/rhodes/emulator/MainWindowQt.h +5 -1
  86. data/platform/wm/rhodes/emulator/QtMainWindow.cpp +39 -6
  87. data/platform/wm/rhodes/emulator/QtMainWindow.h +1 -1
  88. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +5 -0
  89. data/platform/wp7/IronRuby/{Bin → bin}/Silverlight3Release/IronRuby.Libraries.dll +0 -0
  90. data/platform/wp7/IronRuby/{Bin → bin}/Silverlight3Release/IronRuby.dll +0 -0
  91. data/platform/wp7/IronRuby/bin/Silverlight3Release/Microsoft.Dynamic.dll +0 -0
  92. data/platform/wp7/IronRuby/{Bin → bin}/Silverlight3Release/Microsoft.Scripting.Core.dll +0 -0
  93. data/platform/wp7/IronRuby/{Bin → bin}/Silverlight3Release/Microsoft.Scripting.dll +0 -0
  94. data/platform/wp7/RhoAppRunner/Program.cs +2 -2
  95. data/platform/wp7/RhoRubyLib/RhoRuby.cs +8 -0
  96. data/platform/wp7/RhoRubyLib/common/RhodesApp.cs +29 -7
  97. data/platform/wp7/RhoRubyLib/db/DBAdapter.cs +5 -2
  98. data/platform/wp7/RhoRubyLib/logging/RhoLogger.cs +12 -0
  99. data/platform/wp7/RhoRubyLib/net/HttpServer.cs +2 -0
  100. data/platform/wp7/RhoRubyLib/net/NetRequest.cs +1 -1
  101. data/platform/wp7/RhoRubyLib/rubyext/RhoAsyncHttp.cs +52 -7
  102. data/platform/wp7/RhoRubyLib/rubyext/RhoDatabase.cs +85 -18
  103. data/platform/wp7/RhoRubyLib/rubyext/RhoJSON.cs +38 -3
  104. data/platform/wp7/RhoRubyLib/rubyext/RhoKernelOps.cs +27 -2
  105. data/platform/wp7/RhoRubyLib/rubyext/RhoNativeBar.cs +111 -15
  106. data/platform/wp7/RhoRubyLib/rubyext/RhoSyncEngine.cs +330 -55
  107. data/platform/wp7/RhoRubyLib/rubyext/RhoWebView.cs +61 -4
  108. data/platform/wp7/build/wp.rake +89 -72
  109. data/platform/wp7/rhodes/App.xaml.cs +1 -1
  110. data/rakefile.rb +9 -2
  111. data/rhodes.gemspec +1 -3
  112. data/spec/phone_spec/app/spec/asynchttp_spec.rb +7 -9
  113. data/spec/phone_spec/app/spec/uri_spec.rb +75 -0
  114. data/spec/phone_spec/app/spec_runner.rb +4 -0
  115. metadata +21 -15
  116. data/Manifest.txt +0 -6403
  117. data/platform/win32/RhoSimulator/codecs/qcncodecs4.dll +0 -0
  118. data/platform/win32/RhoSimulator/codecs/qjpcodecs4.dll +0 -0
  119. data/platform/win32/RhoSimulator/codecs/qkrcodecs4.dll +0 -0
  120. data/platform/win32/RhoSimulator/codecs/qtwcodecs4.dll +0 -0
  121. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Dynamic.dll +0 -0
@@ -1,39 +1,382 @@
1
1
  module Rho
2
2
 
3
+
4
+ class NdefRecord
5
+
6
+ # 3-bit TNF (Type Name Format) field: Indicates how to interpret the type field
7
+
8
+ TNF_ABSOLUTE_URI = 3
9
+ TNF_EMPTY = 0
10
+ TNF_EXTERNAL_TYPE = 4
11
+ TNF_MIME_MEDIA = 2
12
+ TNF_UNCHANGED = 6
13
+ TNF_UNKNOWN = 5
14
+ TNF_WELL_KNOWN = 1
15
+
16
+
17
+ # RTD Text types. For use with TNF_WELL_KNOWN
18
+
19
+ RTD_TEXT = [0x54] # "T"
20
+ RTD_URI = [0x55] # "U"
21
+ RTD_SMART_POSTER = [0x53, 0x70] # "Sp"
22
+ RTD_ALTERNATIVE_CARRIER = [0x61, 0x63] # "ac"
23
+ RTD_HANDOVER_CARRIER = [0x48, 0x63] # "Hc"
24
+ RTD_HANDOVER_REQUEST = [0x48, 0x72] # "Hr"
25
+ RTD_HANDOVER_SELECT = [0x48, 0x73] # "Hs"
26
+
27
+ ID = 'id'
28
+ TNF = 'tnf'
29
+ TYPE = 'type'
30
+ PAYLOAD = 'payload'
31
+
32
+ def init_from_byte_array(array)
33
+ @byte_array = array
34
+ if array != nil
35
+ hash = Nfc.convert_byte_array_to_NdeRecord_hash(@byte_array)
36
+ @id = hash[ID]
37
+ @tnf = hash[TNF]
38
+ @type = hash[TYPE]
39
+ @payload = hash[PAYLOAD]
40
+ @payload_as_string = hash['payload_as_string']
41
+ else
42
+ @id = nil
43
+ @tnf = 0
44
+ @type = nil
45
+ @payload = nil
46
+ @payload_as_string = nil
47
+ end
48
+ end
49
+
50
+ # hash :
51
+ # 'id' - byte[]
52
+ # 'tnf' - int
53
+ # 'type' - byte[]
54
+ # 'payload' - byte[]
55
+ def init_from_hash(hash)
56
+ byte_arr = Nfc.convert_NdeRecord_hash_to_byte_array(hash)
57
+ init_from_byte_array(byte_arr)
58
+ end
59
+
60
+ # return byte[]
61
+ def get_id
62
+ return @id
63
+ end
64
+
65
+ # return int
66
+ def get_tnf
67
+ return @tnf
68
+ end
69
+
70
+ # return byte[]
71
+ def get_type
72
+ return @type
73
+ end
74
+
75
+ # return byte[]
76
+ def get_payload
77
+ return @payload
78
+ end
79
+
80
+ # return string
81
+ def get_payload_as_string
82
+ return @payload_as_string
83
+ end
84
+
85
+ # return raw byte[]
86
+ def get_byte_array
87
+ return @byte_array
88
+ end
89
+
90
+ # return hash
91
+ # hash :
92
+ # 'id' - byte[]
93
+ # 'tnf' - int
94
+ # 'type' - byte[]
95
+ # 'payload' - byte[]
96
+ # 'payload_as_string' - string
97
+ def make_hash
98
+ hash = { 'id' => @id, 'tnf' => @tnf, 'type' => @type, 'payload' => @payload, 'payload_as_string' => @payload_as_string}
99
+ return hash
100
+ end
101
+
102
+ # convert int tnf to string
103
+ def self.convert_Tnf_to_string(tnf)
104
+ res = 'unknown'
105
+ if tnf == TNF_ABSOLUTE_URI
106
+ res = 'TNF_ABSOLUTE_URI'
107
+ end
108
+ if tnf == TNF_EMPTY
109
+ res = 'TNF_EMPTY'
110
+ end
111
+ if tnf == TNF_EXTERNAL_TYPE
112
+ res = 'TNF_EXTERNAL_TYPE'
113
+ end
114
+ if tnf == TNF_MIME_MEDIA
115
+ res = 'TNF_MIME_MEDIA'
116
+ end
117
+ if tnf == TNF_UNCHANGED
118
+ res = 'TNF_UNCHANGED'
119
+ end
120
+ if tnf == TNF_UNKNOWN
121
+ res = 'TNF_UNKNOWN'
122
+ end
123
+ if tnf == TNF_WELL_KNOWN
124
+ res = 'TNF_WELL_KNOWN'
125
+ end
126
+ return res
127
+ end
128
+
129
+ # convert byte[] type to string
130
+ def self.convert_RTD_to_string(rtd)
131
+ res = 'unknown'
132
+ if rtd == RTD_TEXT
133
+ res = 'RTD_TEXT'
134
+ end
135
+ if rtd == RTD_URI
136
+ res = 'RTD_URI'
137
+ end
138
+ if rtd == RTD_SMART_POSTER
139
+ res = 'RTD_SMART_POSTER'
140
+ end
141
+ if rtd == RTD_ALTERNATIVE_CARRIER
142
+ res = 'RTD_ALTERNATIVE_CARRIER'
143
+ end
144
+ if rtd == RTD_HANDOVER_CARRIER
145
+ res = 'RTD_HANDOVER_CARRIER'
146
+ end
147
+ if rtd == RTD_HANDOVER_REQUEST
148
+ res = 'RTD_HANDOVER_REQUEST'
149
+ end
150
+ if rtd == RTD_HANDOVER_SELECT
151
+ res = 'RTD_HANDOVER_SELECT'
152
+ end
153
+ return res
154
+ end
155
+
156
+ end
157
+
158
+
159
+ class NdefMessage
160
+
161
+ def init_from_byte_array(array)
162
+
163
+ @byte_array = array
164
+ @records = []
165
+
166
+ if array != nil
167
+
168
+ record_array = Nfc.convert_NdeMessage_byte_array_to_NdeRecords_array(@byte_array)
169
+ i = 0
170
+ while i < record_array.size do
171
+ record_ba = record_array[i]
172
+
173
+ rec = NdefRecord.new
174
+ rec.init_from_byte_array(record_ba)
175
+
176
+ @records << rec
177
+
178
+ i = i+1
179
+ end
180
+ end
181
+ end
182
+
183
+ def init_from_array_of_NdefRecord(array)
184
+
185
+ record_array = []
186
+
187
+ i = 0
188
+
189
+ while i < array.size do
190
+ rec = array[i]
191
+
192
+ record_array << rec.get_byte_array
193
+
194
+ i = i+1
195
+ end
196
+
197
+ msg_array = Nfc.convert_NdeRecords_array_to_NdeMessage_byte_array(record_array)
198
+
199
+ init_from_byte_array(msg_array)
200
+
201
+ end
202
+
203
+ # return raw byte[]
204
+ def get_byte_array
205
+ return @byte_array
206
+ end
207
+
208
+ # return array of NdefRecord
209
+ def get_records
210
+ return @records
211
+ end
212
+
213
+
214
+ end
215
+
216
+
3
217
 
4
218
  class NFCTagTechnology
5
219
 
220
+ ISODEP = 'IsoDep'
6
221
  MIFARE_CLASSIC = 'MifareClassic'
7
222
  MIFARE_ULTRALIGHT = 'MifareUltralight'
223
+ NDEF = 'Ndef'
224
+ NDEF_FORMATABLE = 'NdefFormatable'
225
+ NFCA = 'NfcA'
226
+ NFCB = 'NfcB'
227
+ NFCF = 'NfcF'
228
+ NFCV = 'NfcV'
8
229
 
9
230
  def initialize(tech_name)
10
231
  @techname = tech_name
11
232
  end
12
233
 
234
+ # return string
13
235
  def get_name
14
236
  return @techname
15
237
  end
16
238
 
239
+ # connect - only after it you can make any I/O operation
17
240
  def connect
18
241
  Nfc.tech_connect(get_name)
19
242
  end
20
243
 
244
+ # close connect - make it after your I/O operations
21
245
  def close
22
246
  Nfc.tech_close(get_name)
23
247
  end
24
248
 
249
+ # return true if tech connected and ready for I/O operations
25
250
  def is_connected
26
- return ( Nfc.tech_is_connected(get_name) != 0)
251
+ res = Nfc.tech_is_connected(@techname)
252
+ resb = false
253
+ if res != 0
254
+ resb = true
255
+ end
256
+ return resb
27
257
  end
28
258
 
29
259
  end
30
260
 
261
+
262
+ class NFCTagTechnology_NfcA < NFCTagTechnology
263
+
264
+ def initialize
265
+ super(NFCTagTechnology::NFCA)
266
+ end
267
+
268
+ # return byte[]
269
+ def get_Atqa
270
+ return Nfc.tech_NfcA_get_Atqa
271
+ end
272
+
273
+ # return int
274
+ def get_Sak
275
+ return Nfc.tech_NfcA_get_Sak
276
+ end
277
+
278
+ # data - byte[]
279
+ # return byte[]
280
+ def transceive(data)
281
+ return Nfc.tech_NfcA_transceive(data)
282
+ end
283
+
284
+ end
285
+
286
+ class NFCTagTechnology_Ndef < NFCTagTechnology
287
+
288
+ MIFARE_CLASSIC = 'com.nxp.ndef.mifareclassic'
289
+ NFC_FORUM_TYPE_1 = 'org.nfcforum.ndef.type1'
290
+ NFC_FORUM_TYPE_2 = 'org.nfcforum.ndef.type2'
291
+ NFC_FORUM_TYPE_3 = 'org.nfcforum.ndef.type3'
292
+ NFC_FORUM_TYPE_4 = 'org.nfcforum.ndef.type4'
293
+
294
+ def initialize
295
+ super(NFCTagTechnology::NDEF)
296
+ end
297
+
298
+ # return int
299
+ def get_max_size
300
+ return Nfc.tech_Ndef_get_max_size
301
+ end
302
+
303
+ # return bool
304
+ def is_writable
305
+ return (Nfc.tech_Ndef_is_writable != 0)
306
+ end
307
+
308
+ # return bool
309
+ def can_make_read_only
310
+ return (Nfc.tech_Ndef_can_make_read_only != 0)
311
+ end
312
+
313
+ # return bool
314
+ def make_read_only
315
+ return (Nfc.tech_Ndef_make_read_only != 0)
316
+ end
317
+
318
+ # return string
319
+ def get_type
320
+ return Nfc.tech_Ndef_get_type
321
+ end
322
+
323
+ # return NdefMessage
324
+ def read_NdefMessage
325
+ msg_ar = Nfc.tech_Ndef_read_Nde_message
326
+ msg = NdefMessage.new
327
+ msg.init_from_byte_array(msg_ar)
328
+ return msg
329
+ end
330
+
331
+ # msg - NdefMessage
332
+ def write_NdefMessage(msg)
333
+ Nfc.tech_Ndef_write_Nde_message(msg.get_byte_array)
334
+ end
335
+
336
+
337
+ end
338
+
339
+
31
340
  class NFCTagTechnology_MifareClassic < NFCTagTechnology
32
341
 
342
+ KEY_DEFAULT = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
343
+
344
+ KEY_MIFARE_APPLICATION_DIRECTORY = [0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5]
345
+
346
+ KEY_NFC_FORUM =[0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7]
347
+
348
+ TYPE_CLASSIC = 0
349
+ TYPE_PLUS = 1
350
+ TYPE_PRO = 2
351
+ TYPE_UNKNOWN = -1
352
+
33
353
  def initialize
34
354
  super(NFCTagTechnology::MIFARE_CLASSIC)
35
355
  end
36
356
 
357
+ # return int type type
358
+ def get_type
359
+ return Nfc.tech_MifareClassic_get_type
360
+ end
361
+
362
+ # return named type (for known types)
363
+ def self.convert_type_to_string(type)
364
+ res = 'unknown'
365
+ if type == TYPE_CLASSIC
366
+ res = 'TYPE_CLASSIC'
367
+ end
368
+ if type == TYPE_PLUS
369
+ res = 'TYPE_PLUS'
370
+ end
371
+ if type == TYPE_PRO
372
+ res = 'TYPE_PRO'
373
+ end
374
+ if type == TYPE_UNKNOWN
375
+ res = 'TYPE_UNKNOWN'
376
+ end
377
+ return res
378
+ end
379
+
37
380
  # index - integer
38
381
  # block - 16 byte array
39
382
  def write_block(index, block)
@@ -51,13 +394,63 @@ class NFCTagTechnology_MifareClassic < NFCTagTechnology
51
394
  return Nfc.tech_MifareClassic_get_size
52
395
  end
53
396
 
397
+ #return number of blocks
398
+ def get_block_count
399
+ return Nfc.tech_MifareClassic_get_block_count
400
+ end
401
+
402
+ # return count of sectors
403
+ def get_sector_count
404
+ return Nfc.tech_MifareClassic_get_sector_count
405
+ end
406
+
407
+ # return count of blocks in sector
408
+ def get_blocks_in_sector_count(index)
409
+ return Nfc.tech_MifareClassic_get_blocks_in_sector_count(index)
410
+ end
411
+
412
+ # return index of first block in sector
413
+ def sector_to_block(index)
414
+ return Nfc.tech_MifareClassic_sector_to_block(index)
415
+ end
416
+
417
+ # authenticate sector with key
418
+ # key is 6 byte array
419
+ # return true if authenticate was passed
420
+ def authenticate_sector_with_key_A(index, key)
421
+ r = Nfc.tech_MifareClassic_authenticate_sector_with_key_A(index, key)
422
+ return r!=0
423
+ end
424
+
425
+ # authenticate sector with key
426
+ # key is 6 byte array
427
+ # return true if authenticate was passed
428
+ def authenticate_sector_with_key_B(index, key)
429
+ r = Nfc.tech_MifareClassic_authenticate_sector_with_key_B(index, key)
430
+ return r!=0
431
+ end
432
+
433
+ # send data (byte array) to Tag and receive result - byte array
434
+ def transceive(data)
435
+ return Nfc.tech_MifareClassic_transceive(data)
436
+ end
437
+
54
438
  end
55
439
 
56
440
  class NFCTagTechnology_MifareUltralight < NFCTagTechnology
57
441
 
58
- def initialize
442
+ TYPE_ULTRALIGHT = 1
443
+ TYPE_ULTRALIGHT_C = 2
444
+ TYPE_UNKNOWN = -1
445
+
446
+ def initialize
59
447
  super(NFCTagTechnology::MIFARE_ULTRALIGHT)
60
- end
448
+ end
449
+
450
+ # return int
451
+ def get_type
452
+ return Nfc.tech_MifareUltralight_get_type
453
+ end
61
454
 
62
455
  # index - integer
63
456
  # block - 4 byte array
@@ -71,18 +464,148 @@ class NFCTagTechnology_MifareUltralight < NFCTagTechnology
71
464
  return Nfc.tech_MifareUltralight_read_pages(index)
72
465
  end
73
466
 
74
- # return size in bytes
75
- def get_size
76
- return Nfc.tech_MifareUltralight_get_size
77
- end
467
+ # send data (byte array) to Tag and receive result - byte array
468
+ def transceive(data)
469
+ return Nfc.tech_MifareUltralight_transceive(data)
470
+ end
78
471
 
79
472
  end
80
473
 
81
474
 
475
+ class NFCTagTechnology_IsoDep < NFCTagTechnology
476
+
477
+ def initialize
478
+ super(NFCTagTechnology::ISODEP)
479
+ end
480
+
481
+ # return byte[]
482
+ def get_hi_layer_responce
483
+ return Nfc.tech_IsoDep_get_hi_layer_responce
484
+ end
485
+
486
+ # return byte[]
487
+ def get_historical_bytes
488
+ return Nfc.tech_IsoDep_get_historical_bytes
489
+ end
490
+
491
+
492
+ # timeout - int
493
+ def set_timeout(timeout)
494
+ return Nfc.tech_IsoDep_set_timeout(timeout)
495
+ end
496
+
497
+ # data - byte[]
498
+ # return byte[]
499
+ def transceive(data)
500
+ return Nfc.tech_IsoDep_transceive(data)
501
+ end
502
+
503
+ end
504
+
505
+
506
+ class NFCTagTechnology_NdefFormatable < NFCTagTechnology
507
+
508
+
509
+ def initialize
510
+ super(NFCTagTechnology::NDEF_FORMATABLE)
511
+ end
512
+
513
+ # msg - NdefMessage
514
+ def format(msg)
515
+ Nfc.tech_NdefFormatable_format(msg.get_byte_array)
516
+ end
517
+
518
+ # msg - NdefMessage
519
+ def format_read_only(msg)
520
+ Nfc.tech_NdefFormatable_format_read_only(msg.get_byte_array)
521
+ end
522
+
523
+ end
524
+
525
+
526
+ class NFCTagTechnology_NfcB < NFCTagTechnology
527
+
528
+ def initialize
529
+ super(NFCTagTechnology::NFCB)
530
+ end
531
+
532
+ # return byte[]
533
+ def get_application_data
534
+ return Nfc.tech_NfcB_get_application_data
535
+ end
536
+
537
+ # return byte[]
538
+ def get_protocol_info
539
+ return Nfc.tech_NfcB_get_protocol_info
540
+ end
541
+
542
+
543
+ # data - byte[]
544
+ # return byte[]
545
+ def transceive(data)
546
+ return Nfc.tech_NfcB_transceive(data)
547
+ end
548
+
549
+ end
550
+
551
+
552
+ class NFCTagTechnology_NfcF < NFCTagTechnology
553
+
554
+ def initialize
555
+ super(NFCTagTechnology::NFCF)
556
+ end
557
+
558
+ # return byte[]
559
+ def get_manufacturer
560
+ return Nfc.tech_NfcF_get_manufacturer
561
+ end
562
+
563
+ # return byte[]
564
+ def get_system_code
565
+ return Nfc.tech_NfcF_get_system_code
566
+ end
567
+
568
+
569
+ # data - byte[]
570
+ # return byte[]
571
+ def transceive(data)
572
+ return Nfc.tech_NfcF_transceive(data)
573
+ end
574
+
575
+ end
576
+
577
+
578
+ class NFCTagTechnology_NfcV < NFCTagTechnology
579
+
580
+ def initialize
581
+ super(NFCTagTechnology::NFCV)
582
+ end
583
+
584
+ # return int
585
+ def get_dsf_id
586
+ return Nfc.tech_NfcV_get_dsf_id
587
+ end
588
+
589
+ # return int
590
+ def get_responce_flags
591
+ return Nfc.tech_NfcV_get_responce_flags
592
+ end
593
+
594
+
595
+ # data - byte[]
596
+ # return byte[]
597
+ def transceive(data)
598
+ return Nfc.tech_NfcV_transceive(data)
599
+ end
600
+
601
+ end
602
+
603
+
604
+
82
605
  class NFCTag
83
606
 
84
607
  def initialize(tech_list)
85
- puts 'Ruby NFCTag.initialize()'
608
+ #puts 'Ruby NFCTag.initialize()'
86
609
  @techlist = tech_list
87
610
  end
88
611
 
@@ -91,13 +614,38 @@ class NFCTag
91
614
  return @techlist
92
615
  end
93
616
 
617
+ def get_ID
618
+ return Nfc.tag_get_id
619
+ end
620
+
94
621
  def get_tech(tech_name)
95
622
  if @techlist.include?(tech_name)
96
623
  if tech_name == 'MifareClassic'
97
- return NFCTagTechnology_MifareClassic.New()
624
+ return NFCTagTechnology_MifareClassic.new()
98
625
  end
99
626
  if tech_name == 'MifareUltralight'
100
- return NFCTagTechnology_MifareULtralight.New()
627
+ return NFCTagTechnology_MifareULtralight.new()
628
+ end
629
+ if tech_name == 'Ndef'
630
+ return NFCTagTechnology_Ndef.new()
631
+ end
632
+ if tech_name == 'NfcA'
633
+ return NFCTagTechnology_NfcA.new()
634
+ end
635
+ if tech_name == 'IsoDep'
636
+ return NFCTagTechnology_IsoDep.new()
637
+ end
638
+ if tech_name == 'NdefFormatable'
639
+ return NFCTagTechnology_NdefFormatable.new()
640
+ end
641
+ if tech_name == 'NfcB'
642
+ return NFCTagTechnology_NfcB.new()
643
+ end
644
+ if tech_name == 'NfcF'
645
+ return NFCTagTechnology_NfcF.new()
646
+ end
647
+ if tech_name == 'NfcV'
648
+ return NFCTagTechnology_NfcV.new()
101
649
  end
102
650
  else
103
651
  return nil
@@ -113,28 +661,6 @@ end
113
661
  class NFCManager
114
662
 
115
663
 
116
- # 3-bit TNF (Type Name Format) field: Indicates how to interpret the type field
117
-
118
- TNF_ABSOLUTE_URI = 3
119
- TNF_EMPTY = 0
120
- TNF_EXTERNAL_TYPE = 4
121
- TNF_MIME_MEDIA = 2
122
- TNF_UNCHANGED = 6
123
- TNF_UNKNOWN = 5
124
- TNF_WELL_KNOWN = 1
125
-
126
-
127
- # RTD Text types. For use with TNF_WELL_KNOWN
128
-
129
- RTD_TEXT = [0x54] # "T"
130
- RTD_URI = [0x55] # "U"
131
- RTD_SMART_POSTER = [0x53, 0x70] # "Sp"
132
- RTD_ALTERNATIVE_CARRIER = [0x61, 0x63] # "ac"
133
- RTD_HANDOVER_CARRIER = [0x48, 0x63] # "Hc"
134
- RTD_HANDOVER_REQUEST = [0x48, 0x72] # "Hr"
135
- RTD_HANDOVER_SELECT = [0x48, 0x73] # "Hs"
136
-
137
-
138
664
  # return true/false
139
665
  def self.is_supported
140
666
  s = Nfc.is_supported
@@ -175,76 +701,94 @@ class NFCManager
175
701
  end
176
702
 
177
703
  # in callback
178
- # @params['Tag_event'] - 'discovered', 'lost'
704
+ # @params['Tag_event'] - 'discovered'
179
705
  def self.set_nfc_tech_callback(callback_url)
180
706
  Nfc.set_tech_callback(callback_url)
181
707
  end
182
708
 
183
- # set list of Techs for listen (array of strings)
184
- def set_listen_tech_list(tech_list)
185
- Nfc.set_listen_tech_list(tech_list)
186
- end
187
-
188
709
  # return current discovered Tag or nil if not any Tag discovered now
189
- def get_current_Tag
190
- tech_list = Nfc.tech_get_techList
710
+ def self.get_current_Tag
711
+ tech_list = Nfc.get_tech_list
191
712
  if tech_list.size == 0
192
713
  return nil
193
714
  end
194
- return NFCTag.New(tech_list)
715
+ return NFCTag.new(tech_list)
195
716
  end
196
717
 
197
- def self.convert_Tnf_to_string(tnf)
198
- res = 'unknown'
199
- if tnf == TNF_ABSOLUTE_URI
200
- res = 'TNF_ABSOLUTE_URI'
201
- end
202
- if tnf == TNF_EMPTY
203
- res = 'TNF_EMPTY'
204
- end
205
- if tnf == TNF_EXTERNAL_TYPE
206
- res = 'TNF_EXTERNAL_TYPE'
207
- end
208
- if tnf == TNF_MIME_MEDIA
209
- res = 'TNF_MIME_MEDIA'
210
- end
211
- if tnf == TNF_UNCHANGED
212
- res = 'TNF_UNCHANGED'
213
- end
214
- if tnf == TNF_UNKNOWN
215
- res = 'TNF_UNKNOWN'
216
- end
217
- if tnf == TNF_WELL_KNOWN
218
- res = 'TNF_WELL_KNOWN'
219
- end
220
- return res
221
- end
718
+ # call this function after application is started and you setup all functionality for process NFC event
719
+ # when application in background or not started, then NFC event was saved and application open/start process executed
720
+ # for process saved event - call this function
721
+ def self.perform_open_application_event
722
+ Nfc.perform_open_application_event
723
+ end
724
+
725
+ # ndef_message - NdefMessage
726
+ # start push NdefMessage to any receivers
727
+ def self.p2p_enable_foreground_nde_push(ndef_message)
728
+ Nfc.p2p_enable_foreground_nde_push(ndef_message.get_byte_array)
729
+ end
730
+
731
+ # stop any push NdefMessage to receivers
732
+ def self.p2p_disable_foreground_nde_push
733
+ Nfc.p2p_disable_foreground_nde_push
734
+ end
735
+
736
+
737
+ # make NdefRecord from byte[]
738
+ def self.make_NdefRecord_from_byte_array(array)
739
+ rec = NdefRecord.new
740
+ rec.init_from_byte_array(array)
741
+ return rec
742
+ end
743
+
744
+ # make NdefRecord from hash
745
+ # hash :
746
+ # 'id' - byte[]
747
+ # 'tnf' - int
748
+ # 'type' - byte[]
749
+ # 'payload' - byte[]
750
+ def self.make_NdefRecord_from_hash(hash)
751
+ rec = NdefRecord.new
752
+ rec.init_from_hash(hash)
753
+ return rec
754
+ end
755
+
756
+ # make NdefMessage from byte[]
757
+ def self.make_NdefMessage_from_byte_array(array)
758
+ msg = NdefMessage.new
759
+ msg.init_from_byte_array(array)
760
+ return msg
761
+ end
762
+
763
+ # make NdefMessage from NdefRecord[]
764
+ def self.make_NdefMessage_from_array_of_NdefRecord(array)
765
+ msg = NdefMessage.new
766
+ msg.init_from_array_of_NdefRecord(array)
767
+ return msg
768
+ end
769
+
770
+ # make string from byte[] payload
771
+ # tnf - int (from NdefRecord)
772
+ # type - byte[] (from NdefRecord)
773
+ def self.make_string_from_payload(payload, tnf, type)
774
+ return Nfc.make_string_from_payload(payload, tnf, type)
775
+ end
776
+
777
+ # prepare byte[] payload from string with Absolute URI
778
+ def self.make_payload_with_absolute_uri(uri_string)
779
+ return Nfc.make_payload_with_absolute_uri(uri_string)
780
+ end
781
+
782
+ # prepare byte[] payload from int prefix code and string URI
783
+ def self.make_payload_with_well_known_uri(prefix_code, uri_string)
784
+ return Nfc.make_payload_with_well_known_uri(prefix_code, uri_string)
785
+ end
786
+
787
+ # prepare byte[] payload from string language code and string text
788
+ def self.make_payload_with_well_known_text(language, text)
789
+ return Nfc.make_payload_with_well_known_text(language, text)
790
+ end
222
791
 
223
- def self.convert_RTD_to_string(rtd)
224
- res = 'unknown'
225
- if rtd == RTD_TEXT
226
- res = 'RTD_TEXT'
227
- end
228
- if rtd == RTD_URI
229
- res = 'RTD_URI'
230
- end
231
- if rtd == RTD_SMART_POSTER
232
- res = 'RTD_SMART_POSTER'
233
- end
234
- if rtd == RTD_ALTERNATIVE_CARRIER
235
- res = 'RTD_ALTERNATIVE_CARRIER'
236
- end
237
- if rtd == RTD_HANDOVER_CARRIER
238
- res = 'RTD_HANDOVER_CARRIER'
239
- end
240
- if rtd == RTD_HANDOVER_REQUEST
241
- res = 'RTD_HANDOVER_REQUEST'
242
- end
243
- if rtd == RTD_HANDOVER_SELECT
244
- res = 'RTD_HANDOVER_SELECT'
245
- end
246
- return res
247
- end
248
792
 
249
793
  end
250
794