react-native-nfc-manager 4.0.0-beta.1 → 4.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -49
- package/android/src/main/java/community/revteltech/nfc/MifareClassicHandler.java +419 -0
- package/android/src/main/java/community/revteltech/nfc/MifareUltralightHandler.java +84 -0
- package/android/src/main/java/community/revteltech/nfc/NdefHandler.java +373 -0
- package/android/src/main/java/community/revteltech/nfc/NfcAdapterStateChangedReceiver.java +48 -0
- package/android/src/main/java/community/revteltech/nfc/NfcErrorCodes.java +16 -0
- package/android/src/main/java/community/revteltech/nfc/NfcManager.java +348 -1087
- package/android/src/main/java/community/revteltech/nfc/NfcManagerIOSStubBase.java +130 -0
- package/android/src/main/java/community/revteltech/nfc/NfcTechIoRouter.java +258 -0
- package/android/src/main/java/community/revteltech/nfc/TagTechnologyRequest.java +19 -7
- package/android/src/main/java/community/revteltech/nfc/Util.java +275 -2
- package/app.plugin.js +8 -9
- package/dist/ndef-lib/constants.js +67 -0
- package/dist/ndef-lib/constants.js.map +1 -0
- package/dist/ndef-lib/index.js +79 -0
- package/dist/ndef-lib/index.js.map +1 -0
- package/dist/ndef-lib/ndef-text.js +29 -0
- package/dist/ndef-lib/ndef-text.js.map +1 -0
- package/dist/ndef-lib/ndef-uri.js +40 -0
- package/dist/ndef-lib/ndef-uri.js.map +1 -0
- package/dist/ndef-lib/ndef-wifi-simple.js +100 -0
- package/dist/ndef-lib/ndef-wifi-simple.js.map +1 -0
- package/dist/ndef-lib/ndef.js +152 -0
- package/dist/ndef-lib/ndef.js.map +1 -0
- package/dist/ndef-lib/stringifier.js +155 -0
- package/dist/ndef-lib/stringifier.js.map +1 -0
- package/dist/ndef-lib/util.js +126 -0
- package/dist/ndef-lib/util.js.map +1 -0
- package/dist/specs/NativeNfcManager.js +5 -0
- package/dist/specs/NativeNfcManager.js.map +1 -0
- package/dist/src/NativeNfcManager.js +55 -0
- package/dist/src/NativeNfcManager.js.map +1 -0
- package/dist/src/NfcError.js +220 -0
- package/dist/src/NfcError.js.map +1 -0
- package/dist/src/NfcManager.js +175 -0
- package/dist/src/NfcManager.js.map +1 -0
- package/dist/src/NfcManagerAndroid.js +112 -0
- package/dist/src/NfcManagerAndroid.js.map +1 -0
- package/dist/src/NfcManagerIOS.js +119 -0
- package/dist/src/NfcManagerIOS.js.map +1 -0
- package/dist/src/NfcTech/Iso15693HandlerIOS.js +99 -0
- package/dist/src/NfcTech/Iso15693HandlerIOS.js.map +1 -0
- package/dist/src/NfcTech/IsoDepHandler.js +29 -0
- package/dist/src/NfcTech/IsoDepHandler.js.map +1 -0
- package/dist/src/NfcTech/MifareClassicHandlerAndroid.js +68 -0
- package/dist/src/NfcTech/MifareClassicHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js +23 -0
- package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js +16 -0
- package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/NdefHandler.js +54 -0
- package/dist/src/NfcTech/NdefHandler.js.map +1 -0
- package/dist/src/NfcTech/NfcAHandler.js +16 -0
- package/dist/src/NfcTech/NfcAHandler.js.map +1 -0
- package/dist/src/NfcTech/NfcVHandler.js +33 -0
- package/dist/src/NfcTech/NfcVHandler.js.map +1 -0
- package/dist/src/index.js +53 -0
- package/dist/src/index.js.map +1 -0
- package/index.d.ts +110 -46
- package/ios/NfcManager.h +2 -11
- package/ios/NfcManager.mm +264 -438
- package/ios/RNNfcBridgeUtil.h +28 -0
- package/ios/RNNfcBridgeUtil.mm +52 -0
- package/ios/RNNfcManager+Felica.swift +61 -0
- package/ios/RNNfcManager+Iso15693.swift +895 -0
- package/ios/RNNfcManager+IsoDep.swift +145 -0
- package/ios/RNNfcManager+Mifare.swift +61 -0
- package/ios/RNNfcManager+Ndef.swift +120 -0
- package/ios/RNNfcManager.h +251 -0
- package/ios/RNNfcManager.swift +648 -0
- package/ios/RNNfcSessionDelegateProxy.swift +104 -0
- package/ios/RNNfcSwiftUtil.swift +34 -0
- package/ndef-lib/{constants.js → constants.ts} +2 -0
- package/ndef-lib/{index.js → index.ts} +23 -12
- package/ndef-lib/{ndef-text.js → ndef-text.ts} +7 -2
- package/ndef-lib/{ndef-uri.js → ndef-uri.ts} +8 -3
- package/ndef-lib/{ndef-wifi-simple.js → ndef-wifi-simple.ts} +34 -11
- package/ndef-lib/{ndef.js → ndef.ts} +53 -25
- package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
- package/ndef-lib/{util.js → util.ts} +13 -8
- package/package.json +42 -13
- package/react-native-nfc-manager.podspec +3 -2
- package/specs/NativeNfcManager.ts +18 -4
- package/src/NativeNfcManager.ts +84 -0
- package/src/{NfcError.js → NfcError.ts} +6 -17
- package/src/{NfcManager.js → NfcManager.ts} +51 -34
- package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +27 -8
- package/src/{NfcManagerIOS.js → NfcManagerIOS.ts} +31 -10
- package/src/NfcTech/{Iso15693HandlerIOS.js → Iso15693HandlerIOS.ts} +64 -36
- package/src/NfcTech/{IsoDepHandler.js → IsoDepHandler.ts} +8 -5
- package/src/NfcTech/{MifareClassicHandlerAndroid.js → MifareClassicHandlerAndroid.ts} +33 -24
- package/src/NfcTech/{MifareUltralightHandlerAndroid.js → MifareUltralightHandlerAndroid.ts} +14 -5
- package/src/NfcTech/{NdefFormatableHandlerAndroid.js → NdefFormatableHandlerAndroid.ts} +9 -2
- package/src/NfcTech/{NdefHandler.js → NdefHandler.ts} +19 -6
- package/src/NfcTech/{NfcAHandler.js → NfcAHandler.ts} +6 -3
- package/src/NfcTech/{NfcVHandler.js → NfcVHandler.ts} +8 -5
- package/src/__mocks__/{NativeNfcManager.js → NativeNfcManager.ts} +4 -1
- package/src/{index.js → index.ts} +1 -1
- package/android/src/main/java/community/revteltech/nfc/JsonConvert.java +0 -141
- package/android/src/main/java/community/revteltech/nfc/MifareUtil.java +0 -84
- package/ios/NfcManager+Felica.mm +0 -43
- package/ios/NfcManager+Iso15693.mm +0 -600
- package/ios/NfcManager+IsoDep.mm +0 -83
- package/ios/NfcManager+Mifare.mm +0 -43
- package/ios/Util.mm +0 -55
- package/specs/NativeNfcManager.d.ts +0 -6
- package/specs/NativeNfcManager.js +0 -3
- package/specs/NativeNfcManager.js.map +0 -1
- package/src/NativeNfcManager.js +0 -37
|
@@ -0,0 +1,895 @@
|
|
|
1
|
+
import CoreNFC
|
|
2
|
+
import Foundation
|
|
3
|
+
|
|
4
|
+
public extension RNNfcManager {
|
|
5
|
+
@objc(iso15693GetSystemInfo:callback:)
|
|
6
|
+
static func iso15693GetSystemInfo(
|
|
7
|
+
_ flags: NSNumber,
|
|
8
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
9
|
+
) {
|
|
10
|
+
forwardWithTagSessionSupport(
|
|
11
|
+
isIso15693Supported(),
|
|
12
|
+
callback: callback,
|
|
13
|
+
noSessionMessage: "Not connected",
|
|
14
|
+
operation: { tagSession in
|
|
15
|
+
iso15693GetSystemInfo(with: tagSession, flags: flags) { systemInfo, error in
|
|
16
|
+
if let error {
|
|
17
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
callback([NSNull(), systemInfo ?? [:]])
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@objc(iso15693ReadSingleBlock:callback:)
|
|
28
|
+
static func iso15693ReadSingleBlock(
|
|
29
|
+
_ options: NSDictionary,
|
|
30
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
31
|
+
) {
|
|
32
|
+
forwardWithTagSessionSupport(
|
|
33
|
+
isIso15693Supported(),
|
|
34
|
+
callback: callback,
|
|
35
|
+
noSessionMessage: "Not connected",
|
|
36
|
+
operation: { tagSession in
|
|
37
|
+
iso15693ReadSingleBlock(with: tagSession, options: options) { resp, error in
|
|
38
|
+
if let error {
|
|
39
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
callback([NSNull(), resp ?? []])
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@objc(iso15693ReadMultipleBlocks:callback:)
|
|
50
|
+
static func iso15693ReadMultipleBlocks(
|
|
51
|
+
_ options: NSDictionary,
|
|
52
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
53
|
+
) {
|
|
54
|
+
forwardWithTagSessionSupport(
|
|
55
|
+
isIso15693Supported(),
|
|
56
|
+
callback: callback,
|
|
57
|
+
noSessionMessage: "Not connected",
|
|
58
|
+
operation: { tagSession in
|
|
59
|
+
iso15693ReadMultipleBlocks(with: tagSession, options: options) { dataBlocks, error in
|
|
60
|
+
if let error {
|
|
61
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
callback([NSNull(), dataBlocks ?? []])
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@objc(iso15693WriteSingleBlock:callback:)
|
|
72
|
+
static func iso15693WriteSingleBlock(
|
|
73
|
+
_ options: NSDictionary,
|
|
74
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
75
|
+
) {
|
|
76
|
+
forwardWithTagSessionSupport(
|
|
77
|
+
isIso15693Supported(),
|
|
78
|
+
callback: callback,
|
|
79
|
+
noSessionMessage: "Not connected",
|
|
80
|
+
operation: { tagSession in
|
|
81
|
+
iso15693WriteSingleBlock(with: tagSession, options: options) { error in
|
|
82
|
+
if let error {
|
|
83
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
84
|
+
return
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
callback([])
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@objc(iso15693LockBlock:callback:)
|
|
94
|
+
static func iso15693LockBlock(
|
|
95
|
+
_ options: NSDictionary,
|
|
96
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
97
|
+
) {
|
|
98
|
+
forwardWithTagSessionSupport(
|
|
99
|
+
isIso15693Supported(),
|
|
100
|
+
callback: callback,
|
|
101
|
+
noSessionMessage: "Not connected",
|
|
102
|
+
operation: { tagSession in
|
|
103
|
+
iso15693LockBlock(with: tagSession, options: options) { error in
|
|
104
|
+
if let error {
|
|
105
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
106
|
+
return
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
callback([])
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@objc(iso15693WriteAFI:callback:)
|
|
116
|
+
static func iso15693WriteAFI(
|
|
117
|
+
_ options: NSDictionary,
|
|
118
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
119
|
+
) {
|
|
120
|
+
forwardWithTagSessionSupport(
|
|
121
|
+
isIso15693Supported(),
|
|
122
|
+
callback: callback,
|
|
123
|
+
noSessionMessage: "Not connected",
|
|
124
|
+
operation: { tagSession in
|
|
125
|
+
iso15693WriteAFI(with: tagSession, options: options) { error in
|
|
126
|
+
if let error {
|
|
127
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
callback([])
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@objc(iso15693LockAFI:callback:)
|
|
138
|
+
static func iso15693LockAFI(
|
|
139
|
+
_ options: NSDictionary,
|
|
140
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
141
|
+
) {
|
|
142
|
+
forwardWithTagSessionSupport(
|
|
143
|
+
isIso15693Supported(),
|
|
144
|
+
callback: callback,
|
|
145
|
+
noSessionMessage: "Not connected",
|
|
146
|
+
operation: { tagSession in
|
|
147
|
+
iso15693LockAFI(with: tagSession, options: options) { error in
|
|
148
|
+
if let error {
|
|
149
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
150
|
+
return
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
callback([])
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
@objc(iso15693WriteDSFID:callback:)
|
|
160
|
+
static func iso15693WriteDSFID(
|
|
161
|
+
_ options: NSDictionary,
|
|
162
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
163
|
+
) {
|
|
164
|
+
forwardWithTagSessionSupport(
|
|
165
|
+
isIso15693Supported(),
|
|
166
|
+
callback: callback,
|
|
167
|
+
noSessionMessage: "Not connected",
|
|
168
|
+
operation: { tagSession in
|
|
169
|
+
iso15693WriteDSFID(with: tagSession, options: options) { error in
|
|
170
|
+
if let error {
|
|
171
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
172
|
+
return
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
callback([])
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@objc(iso15693LockDSFID:callback:)
|
|
182
|
+
static func iso15693LockDSFID(
|
|
183
|
+
_ options: NSDictionary,
|
|
184
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
185
|
+
) {
|
|
186
|
+
forwardWithTagSessionSupport(
|
|
187
|
+
isIso15693Supported(),
|
|
188
|
+
callback: callback,
|
|
189
|
+
noSessionMessage: "Not connected",
|
|
190
|
+
operation: { tagSession in
|
|
191
|
+
iso15693LockDSFID(with: tagSession, options: options) { error in
|
|
192
|
+
if let error {
|
|
193
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
194
|
+
return
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
callback([])
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
@objc(iso15693ResetToReady:callback:)
|
|
204
|
+
static func iso15693ResetToReady(
|
|
205
|
+
_ options: NSDictionary,
|
|
206
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
207
|
+
) {
|
|
208
|
+
forwardWithTagSessionSupport(
|
|
209
|
+
isIso15693Supported(),
|
|
210
|
+
callback: callback,
|
|
211
|
+
noSessionMessage: "Not connected",
|
|
212
|
+
operation: { tagSession in
|
|
213
|
+
iso15693ResetToReady(with: tagSession, options: options) { error in
|
|
214
|
+
if let error {
|
|
215
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
216
|
+
return
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
callback([])
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
@objc(iso15693Select:callback:)
|
|
226
|
+
static func iso15693Select(
|
|
227
|
+
_ options: NSDictionary,
|
|
228
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
229
|
+
) {
|
|
230
|
+
forwardWithTagSessionSupport(
|
|
231
|
+
isIso15693Supported(),
|
|
232
|
+
callback: callback,
|
|
233
|
+
noSessionMessage: "Not connected",
|
|
234
|
+
operation: { tagSession in
|
|
235
|
+
iso15693Select(with: tagSession, options: options) { error in
|
|
236
|
+
if let error {
|
|
237
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
238
|
+
return
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
callback([])
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
)
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
@objc(iso15693StayQuiet:)
|
|
248
|
+
static func iso15693StayQuiet(
|
|
249
|
+
_ callback: @escaping RNNfcResponseSenderBlock
|
|
250
|
+
) {
|
|
251
|
+
forwardWithTagSessionSupport(
|
|
252
|
+
isIso15693Supported(),
|
|
253
|
+
callback: callback,
|
|
254
|
+
noSessionMessage: "Not connected",
|
|
255
|
+
operation: { tagSession in
|
|
256
|
+
iso15693StayQuiet(with: tagSession) { error in
|
|
257
|
+
if let error {
|
|
258
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
259
|
+
return
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
callback([])
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
@objc(iso15693CustomCommand:callback:)
|
|
269
|
+
static func iso15693CustomCommand(
|
|
270
|
+
_ options: NSDictionary,
|
|
271
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
272
|
+
) {
|
|
273
|
+
forwardWithTagSessionSupport(
|
|
274
|
+
isIso15693Supported(),
|
|
275
|
+
callback: callback,
|
|
276
|
+
operation: { tagSession in
|
|
277
|
+
iso15693CustomCommand(with: tagSession, options: options) { resp, error in
|
|
278
|
+
if let error {
|
|
279
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
280
|
+
return
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
callback([NSNull(), resp ?? []])
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
@objc(iso15693SendRequest:callback:)
|
|
290
|
+
static func iso15693SendRequest(
|
|
291
|
+
_ options: NSDictionary,
|
|
292
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
293
|
+
) {
|
|
294
|
+
forwardWithTagSessionSupport(
|
|
295
|
+
isIso15693Supported(),
|
|
296
|
+
callback: callback,
|
|
297
|
+
noSessionMessage: "Not connected",
|
|
298
|
+
operation: { tagSession in
|
|
299
|
+
iso15693SendRequest(with: tagSession, options: options) { responseFlag, resp, error in
|
|
300
|
+
if let error {
|
|
301
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
302
|
+
return
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
callback([NSNull(), [responseFlag ?? 0, resp ?? []]])
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
)
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
@objc(iso15693ExtendedReadSingleBlock:callback:)
|
|
312
|
+
static func iso15693ExtendedReadSingleBlock(
|
|
313
|
+
_ options: NSDictionary,
|
|
314
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
315
|
+
) {
|
|
316
|
+
forwardWithTagSessionSupport(
|
|
317
|
+
isIso15693Supported(),
|
|
318
|
+
callback: callback,
|
|
319
|
+
noSessionMessage: "Not connected",
|
|
320
|
+
operation: { tagSession in
|
|
321
|
+
iso15693ExtendedReadSingleBlock(with: tagSession, options: options) { resp, error in
|
|
322
|
+
if let error {
|
|
323
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
324
|
+
return
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
callback([NSNull(), resp ?? []])
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
)
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
@objc(iso15693ExtendedReadMultipleBlocks:callback:)
|
|
334
|
+
static func iso15693ExtendedReadMultipleBlocks(
|
|
335
|
+
_ options: NSDictionary,
|
|
336
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
337
|
+
) {
|
|
338
|
+
forwardWithTagSessionSupport(
|
|
339
|
+
isIso15693Supported(),
|
|
340
|
+
callback: callback,
|
|
341
|
+
noSessionMessage: "Not connected",
|
|
342
|
+
operation: { tagSession in
|
|
343
|
+
iso15693ExtendedReadMultipleBlocks(with: tagSession, options: options) { dataBlocks, error in
|
|
344
|
+
if let error {
|
|
345
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
346
|
+
return
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
callback([NSNull(), dataBlocks ?? []])
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
)
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
@objc(iso15693ExtendedWriteSingleBlock:callback:)
|
|
356
|
+
static func iso15693ExtendedWriteSingleBlock(
|
|
357
|
+
_ options: NSDictionary,
|
|
358
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
359
|
+
) {
|
|
360
|
+
forwardWithTagSessionSupport(
|
|
361
|
+
isIso15693Supported(),
|
|
362
|
+
callback: callback,
|
|
363
|
+
noSessionMessage: "Not connected",
|
|
364
|
+
operation: { tagSession in
|
|
365
|
+
iso15693ExtendedWriteSingleBlock(with: tagSession, options: options) { error in
|
|
366
|
+
if let error {
|
|
367
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
368
|
+
return
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
callback([])
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
)
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
@objc(iso15693ExtendedLockBlock:callback:)
|
|
378
|
+
static func iso15693ExtendedLockBlock(
|
|
379
|
+
_ options: NSDictionary,
|
|
380
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
381
|
+
) {
|
|
382
|
+
forwardWithTagSessionSupport(
|
|
383
|
+
isIso15693Supported(),
|
|
384
|
+
callback: callback,
|
|
385
|
+
noSessionMessage: "Not connected",
|
|
386
|
+
operation: { tagSession in
|
|
387
|
+
iso15693ExtendedLockBlock(with: tagSession, options: options) { error in
|
|
388
|
+
if let error {
|
|
389
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
390
|
+
return
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
callback([])
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
)
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
@objc(iso15693GetSystemInfoWithSession:flags:completion:)
|
|
400
|
+
static func iso15693GetSystemInfo(
|
|
401
|
+
with session: NFCTagReaderSession,
|
|
402
|
+
flags: NSNumber,
|
|
403
|
+
completion: @escaping RNNfcIso15693SystemInfoResultBlock
|
|
404
|
+
) {
|
|
405
|
+
guard let connectedTag = session.connectedTag else {
|
|
406
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
407
|
+
return
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
411
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
412
|
+
return
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
let requestFlags = NFCISO15693RequestFlag(rawValue: flags.uint8Value)
|
|
416
|
+
tag.getSystemInfo(requestFlags: requestFlags) { dsfid, afi, blockSize, blockCount, icReference, error in
|
|
417
|
+
if let error {
|
|
418
|
+
completion(nil, error as NSError)
|
|
419
|
+
return
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
completion(
|
|
423
|
+
[
|
|
424
|
+
"dsfid": NSNumber(value: dsfid),
|
|
425
|
+
"afi": NSNumber(value: afi),
|
|
426
|
+
"blockSize": NSNumber(value: blockSize),
|
|
427
|
+
"blockCount": NSNumber(value: blockCount),
|
|
428
|
+
"icReference": NSNumber(value: icReference),
|
|
429
|
+
],
|
|
430
|
+
nil
|
|
431
|
+
)
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
@objc(iso15693ReadSingleBlockWithSession:options:completion:)
|
|
436
|
+
static func iso15693ReadSingleBlock(
|
|
437
|
+
with session: NFCTagReaderSession,
|
|
438
|
+
options: NSDictionary,
|
|
439
|
+
completion: @escaping RNNfcDataResultBlock
|
|
440
|
+
) {
|
|
441
|
+
guard let connectedTag = session.connectedTag else {
|
|
442
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
443
|
+
return
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
447
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
448
|
+
return
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
let flags = (options["flags"] as? NSNumber)?.uint8Value ?? 0
|
|
452
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.uint8Value ?? 0
|
|
453
|
+
let requestFlags = NFCISO15693RequestFlag(rawValue: flags)
|
|
454
|
+
|
|
455
|
+
tag.readSingleBlock(requestFlags: requestFlags, blockNumber: blockNumber) { resp, error in
|
|
456
|
+
if let error {
|
|
457
|
+
completion(nil, error as NSError)
|
|
458
|
+
return
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
completion(RNNfcSwiftUtil.numberArray(from: resp), nil)
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
@objc(iso15693ReadMultipleBlocksWithSession:options:completion:)
|
|
466
|
+
static func iso15693ReadMultipleBlocks(
|
|
467
|
+
with session: NFCTagReaderSession,
|
|
468
|
+
options: NSDictionary,
|
|
469
|
+
completion: @escaping RNNfcIso15693BlocksResultBlock
|
|
470
|
+
) {
|
|
471
|
+
guard let connectedTag = session.connectedTag else {
|
|
472
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
473
|
+
return
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
477
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
478
|
+
return
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
let flags = (options["flags"] as? NSNumber)?.uint8Value ?? 0
|
|
482
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.intValue ?? 0
|
|
483
|
+
let blockCount = (options["blockCount"] as? NSNumber)?.intValue ?? 0
|
|
484
|
+
let requestFlags = NFCISO15693RequestFlag(rawValue: flags)
|
|
485
|
+
let blockRange = NSRange(location: blockNumber, length: blockCount)
|
|
486
|
+
|
|
487
|
+
tag.readMultipleBlocks(requestFlags: requestFlags, blockRange: blockRange) { dataBlocks, error in
|
|
488
|
+
if let error {
|
|
489
|
+
completion(nil, error as NSError)
|
|
490
|
+
return
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
let blocks = dataBlocks.map { RNNfcSwiftUtil.numberArray(from: $0) }
|
|
494
|
+
completion(blocks, nil)
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
@objc(iso15693WriteSingleBlockWithSession:options:completion:)
|
|
499
|
+
static func iso15693WriteSingleBlock(
|
|
500
|
+
with session: NFCTagReaderSession,
|
|
501
|
+
options: NSDictionary,
|
|
502
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
503
|
+
) {
|
|
504
|
+
guard let connectedTag = session.connectedTag else {
|
|
505
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
506
|
+
return
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
510
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
511
|
+
return
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
515
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.uint8Value ?? 0
|
|
516
|
+
let dataBlockArray = (options["dataBlock"] as? [NSNumber]) ?? []
|
|
517
|
+
let dataBlock = RNNfcSwiftUtil.data(from: dataBlockArray)
|
|
518
|
+
|
|
519
|
+
tag.writeSingleBlock(requestFlags: requestFlags, blockNumber: blockNumber, dataBlock: dataBlock) { error in
|
|
520
|
+
completion(error as NSError?)
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
@objc(iso15693LockBlockWithSession:options:completion:)
|
|
525
|
+
static func iso15693LockBlock(
|
|
526
|
+
with session: NFCTagReaderSession,
|
|
527
|
+
options: NSDictionary,
|
|
528
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
529
|
+
) {
|
|
530
|
+
guard let connectedTag = session.connectedTag else {
|
|
531
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
532
|
+
return
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
536
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
537
|
+
return
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
541
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.uint8Value ?? 0
|
|
542
|
+
|
|
543
|
+
tag.lockBlock(requestFlags: requestFlags, blockNumber: blockNumber) { error in
|
|
544
|
+
completion(error as NSError?)
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
@objc(iso15693WriteAFIWithSession:options:completion:)
|
|
549
|
+
static func iso15693WriteAFI(
|
|
550
|
+
with session: NFCTagReaderSession,
|
|
551
|
+
options: NSDictionary,
|
|
552
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
553
|
+
) {
|
|
554
|
+
guard let connectedTag = session.connectedTag else {
|
|
555
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
556
|
+
return
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
560
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
561
|
+
return
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
565
|
+
let afi = (options["afi"] as? NSNumber)?.uint8Value ?? 0
|
|
566
|
+
|
|
567
|
+
tag.writeAFI(requestFlags: requestFlags, afi: afi) { error in
|
|
568
|
+
completion(error as NSError?)
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
@objc(iso15693LockAFIWithSession:options:completion:)
|
|
573
|
+
static func iso15693LockAFI(
|
|
574
|
+
with session: NFCTagReaderSession,
|
|
575
|
+
options: NSDictionary,
|
|
576
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
577
|
+
) {
|
|
578
|
+
guard let connectedTag = session.connectedTag else {
|
|
579
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
580
|
+
return
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
584
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
585
|
+
return
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
589
|
+
tag.lockAFI(requestFlags: requestFlags) { error in
|
|
590
|
+
completion(error as NSError?)
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
@objc(iso15693WriteDSFIDWithSession:options:completion:)
|
|
595
|
+
static func iso15693WriteDSFID(
|
|
596
|
+
with session: NFCTagReaderSession,
|
|
597
|
+
options: NSDictionary,
|
|
598
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
599
|
+
) {
|
|
600
|
+
guard let connectedTag = session.connectedTag else {
|
|
601
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
602
|
+
return
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
606
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
607
|
+
return
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
611
|
+
let dsfid = (options["dsfid"] as? NSNumber)?.uint8Value ?? 0
|
|
612
|
+
|
|
613
|
+
tag.writeDSFID(requestFlags: requestFlags, dsfid: dsfid) { error in
|
|
614
|
+
completion(error as NSError?)
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
@objc(iso15693LockDSFIDWithSession:options:completion:)
|
|
619
|
+
static func iso15693LockDSFID(
|
|
620
|
+
with session: NFCTagReaderSession,
|
|
621
|
+
options: NSDictionary,
|
|
622
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
623
|
+
) {
|
|
624
|
+
guard let connectedTag = session.connectedTag else {
|
|
625
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
626
|
+
return
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
630
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
631
|
+
return
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
635
|
+
tag.lockDFSID(requestFlags: requestFlags) { error in
|
|
636
|
+
completion(error as NSError?)
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
@objc(iso15693ResetToReadyWithSession:options:completion:)
|
|
641
|
+
static func iso15693ResetToReady(
|
|
642
|
+
with session: NFCTagReaderSession,
|
|
643
|
+
options: NSDictionary,
|
|
644
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
645
|
+
) {
|
|
646
|
+
guard let connectedTag = session.connectedTag else {
|
|
647
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
648
|
+
return
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
652
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
653
|
+
return
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
657
|
+
tag.resetToReady(requestFlags: requestFlags) { error in
|
|
658
|
+
completion(error as NSError?)
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
@objc(iso15693SelectWithSession:options:completion:)
|
|
663
|
+
static func iso15693Select(
|
|
664
|
+
with session: NFCTagReaderSession,
|
|
665
|
+
options: NSDictionary,
|
|
666
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
667
|
+
) {
|
|
668
|
+
guard let connectedTag = session.connectedTag else {
|
|
669
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
670
|
+
return
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
674
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
675
|
+
return
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
679
|
+
tag.select(requestFlags: requestFlags) { error in
|
|
680
|
+
completion(error as NSError?)
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
@objc(iso15693StayQuietWithSession:completion:)
|
|
685
|
+
static func iso15693StayQuiet(
|
|
686
|
+
with session: NFCTagReaderSession,
|
|
687
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
688
|
+
) {
|
|
689
|
+
guard let connectedTag = session.connectedTag else {
|
|
690
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
691
|
+
return
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
695
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
696
|
+
return
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
tag.stayQuiet { error in
|
|
700
|
+
completion(error as NSError?)
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
@objc(iso15693CustomCommandWithSession:options:completion:)
|
|
705
|
+
static func iso15693CustomCommand(
|
|
706
|
+
with session: NFCTagReaderSession,
|
|
707
|
+
options: NSDictionary,
|
|
708
|
+
completion: @escaping RNNfcDataResultBlock
|
|
709
|
+
) {
|
|
710
|
+
guard let connectedTag = session.connectedTag else {
|
|
711
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
712
|
+
return
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
716
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
717
|
+
return
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
721
|
+
let customCommandCode = (options["customCommandCode"] as? NSNumber)?.intValue ?? 0
|
|
722
|
+
let requestParamsArray = (options["customRequestParameters"] as? [NSNumber]) ?? []
|
|
723
|
+
let requestParams = RNNfcSwiftUtil.data(from: requestParamsArray)
|
|
724
|
+
|
|
725
|
+
tag.customCommand(requestFlags: requestFlags, customCommandCode: customCommandCode, customRequestParameters: requestParams) { resp, error in
|
|
726
|
+
if let error {
|
|
727
|
+
completion(nil, error as NSError)
|
|
728
|
+
return
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
completion(RNNfcSwiftUtil.numberArray(from: resp), nil)
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
@objc(iso15693SendRequestWithSession:options:completion:)
|
|
736
|
+
static func iso15693SendRequest(
|
|
737
|
+
with session: NFCTagReaderSession,
|
|
738
|
+
options: NSDictionary,
|
|
739
|
+
completion: @escaping RNNfcIso15693SendRequestResultBlock
|
|
740
|
+
) {
|
|
741
|
+
guard let connectedTag = session.connectedTag else {
|
|
742
|
+
completion(nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
743
|
+
return
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
747
|
+
completion(nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
748
|
+
return
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
let requestFlags = (options["flags"] as? NSNumber)?.intValue ?? 0
|
|
752
|
+
let commandCode = (options["commandCode"] as? NSNumber)?.intValue ?? 0
|
|
753
|
+
let dataArray = (options["data"] as? [NSNumber]) ?? []
|
|
754
|
+
let data = RNNfcSwiftUtil.data(from: dataArray)
|
|
755
|
+
|
|
756
|
+
tag.sendRequest(requestFlags: requestFlags, commandCode: commandCode, data: data) { result in
|
|
757
|
+
switch result {
|
|
758
|
+
case .failure(let error):
|
|
759
|
+
completion(nil, nil, error as NSError)
|
|
760
|
+
case .success(let payload):
|
|
761
|
+
let (responseFlag, responseData) = payload
|
|
762
|
+
completion(
|
|
763
|
+
NSNumber(value: responseFlag.rawValue),
|
|
764
|
+
RNNfcSwiftUtil.numberArray(from: responseData ?? Data()),
|
|
765
|
+
nil
|
|
766
|
+
)
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
@objc(iso15693ExtendedReadSingleBlockWithSession:options:completion:)
|
|
772
|
+
static func iso15693ExtendedReadSingleBlock(
|
|
773
|
+
with session: NFCTagReaderSession,
|
|
774
|
+
options: NSDictionary,
|
|
775
|
+
completion: @escaping RNNfcDataResultBlock
|
|
776
|
+
) {
|
|
777
|
+
guard let connectedTag = session.connectedTag else {
|
|
778
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
779
|
+
return
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
783
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
784
|
+
return
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
788
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.intValue ?? 0
|
|
789
|
+
|
|
790
|
+
tag.extendedReadSingleBlock(requestFlags: requestFlags, blockNumber: blockNumber) { resp, error in
|
|
791
|
+
if let error {
|
|
792
|
+
completion(nil, error as NSError)
|
|
793
|
+
return
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
completion(RNNfcSwiftUtil.numberArray(from: resp), nil)
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
@objc(iso15693ExtendedReadMultipleBlocksWithSession:options:completion:)
|
|
801
|
+
static func iso15693ExtendedReadMultipleBlocks(
|
|
802
|
+
with session: NFCTagReaderSession,
|
|
803
|
+
options: NSDictionary,
|
|
804
|
+
completion: @escaping RNNfcIso15693BlocksResultBlock
|
|
805
|
+
) {
|
|
806
|
+
guard let connectedTag = session.connectedTag else {
|
|
807
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
808
|
+
return
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
812
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
813
|
+
return
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
817
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.intValue ?? 0
|
|
818
|
+
let blockCount = (options["blockCount"] as? NSNumber)?.intValue ?? 0
|
|
819
|
+
let blockRange = NSRange(location: blockNumber, length: blockCount)
|
|
820
|
+
|
|
821
|
+
tag.extendedReadMultipleBlocks(requestFlags: requestFlags, blockRange: blockRange) { dataBlocks, error in
|
|
822
|
+
if let error {
|
|
823
|
+
completion(nil, error as NSError)
|
|
824
|
+
return
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
let blocks = dataBlocks.map { RNNfcSwiftUtil.numberArray(from: $0) }
|
|
828
|
+
completion(blocks, nil)
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
@objc(iso15693ExtendedWriteSingleBlockWithSession:options:completion:)
|
|
833
|
+
static func iso15693ExtendedWriteSingleBlock(
|
|
834
|
+
with session: NFCTagReaderSession,
|
|
835
|
+
options: NSDictionary,
|
|
836
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
837
|
+
) {
|
|
838
|
+
guard let connectedTag = session.connectedTag else {
|
|
839
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
840
|
+
return
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
844
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
845
|
+
return
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
849
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.intValue ?? 0
|
|
850
|
+
let dataBlockArray = (options["dataBlock"] as? [NSNumber]) ?? []
|
|
851
|
+
let dataBlock = RNNfcSwiftUtil.data(from: dataBlockArray)
|
|
852
|
+
|
|
853
|
+
tag.extendedWriteSingleBlock(requestFlags: requestFlags, blockNumber: blockNumber, dataBlock: dataBlock) { error in
|
|
854
|
+
completion(error as NSError?)
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
@objc(iso15693ExtendedLockBlockWithSession:options:completion:)
|
|
859
|
+
static func iso15693ExtendedLockBlock(
|
|
860
|
+
with session: NFCTagReaderSession,
|
|
861
|
+
options: NSDictionary,
|
|
862
|
+
completion: @escaping RNNfcVoidResultBlock
|
|
863
|
+
) {
|
|
864
|
+
guard let connectedTag = session.connectedTag else {
|
|
865
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
866
|
+
return
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
guard let tag = extractIso15693Tag(from: connectedTag) else {
|
|
870
|
+
completion(NSError(domain: "RNNfcTechSwiftService", code: 7, userInfo: [NSLocalizedDescriptionKey: "incorrect tag type"]))
|
|
871
|
+
return
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
let requestFlags = iso15693RequestFlags(from: options)
|
|
875
|
+
let blockNumber = (options["blockNumber"] as? NSNumber)?.intValue ?? 0
|
|
876
|
+
|
|
877
|
+
tag.extendedLockBlock(requestFlags: requestFlags, blockNumber: blockNumber) { error in
|
|
878
|
+
completion(error as NSError?)
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
@available(iOS 14.0, *)
|
|
883
|
+
private static func extractIso15693Tag(from connectedTag: NFCTag) -> NFCISO15693Tag? {
|
|
884
|
+
if case let .iso15693(tag) = connectedTag {
|
|
885
|
+
return tag
|
|
886
|
+
}
|
|
887
|
+
return nil
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
@available(iOS 14.0, *)
|
|
891
|
+
private static func iso15693RequestFlags(from options: NSDictionary) -> NFCISO15693RequestFlag {
|
|
892
|
+
let rawValue = (options["flags"] as? NSNumber)?.uint8Value ?? 0
|
|
893
|
+
return NFCISO15693RequestFlag(rawValue: rawValue)
|
|
894
|
+
}
|
|
895
|
+
}
|