Enable NFC for Linux and pcscd on Dell E7470 (and others) with ControlVault2
Ben Harris
2021-02-03 f3b864392366cbef862f8cca493c2ff0e72c94db
commit | author | age
f83421 1 idVendor 0x0A5C
JK 2 idProduct 0x5843
3
4 Interface 4 - Application-Specific
5 EP 1 IN
6 EP 1 OUT
7 EP 5 IN
8
9 Interface 5 - Smart Card
10 EP 2 IN
11 EP 2 OUT
12 EP 6 IN
13
14 Interface 6 - Smart Card
15 EP 3 IN
16 EP 3 OUT
17 EP 7 IN
18
19 Interface 7 - Vendor Specific
20 EP 4 IN
21 EP 4 OUT
22 EP 8 IN
23
24
25 Legend:
26
27 >  - New outgoing message (beginning)
28 >> - Message continuation (division for readability)
29 <  - New incoming message (beginning)
30 << - Message continuation (division for readability)
31 # CTRL - Control endpoint communication (bmRequestType, bRequest, wValue, wIndex)
32
33 Communication via Endpoint 4
34
35 ##########
36 TURNING ON
37 ##########
38
39 # CTRL 0x41 0x01 0x0000 0x0003
40
41 >  01 00 00 04
42    01 = SPI_MASTER
43       00 = NO_CRC
44          00 04 = size
45 >> 20 00 01 00
46    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
47       00 = NCI_MSG_CORE_RESET
48          01 = NCI_CORE_PARAM_SIZE_RESET
49             00 = NCI_RESET_TYPE_KEEP_CFG
50
51 <  00 00 00 06
52    00 = SPI_SLAVE
53       00 = NO_CRC
54          00 06 = size
55 << 40 00 03 00 10 00
56    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
57       00 = NCI_MSG_CORE_RESET
58          03 = NCI_CORE_PARAM_SIZE_RESET_RSP
59             00 = NCI_STATUS_OK
60                10 = NCI_VERSION (1.0)
61                   00 = NCI_RESET_STATUS_KEPT_CFG
62
63 # CTRL 0x41 0x01 0x0001 0x0003
64
65 # CTRL 0x41 0x00 0x0000 0x0003
66
67 # CTRL 0x41 0x00 0x0001 0x0003
68
69 # CTRL 0x41 0x01 0x0000 0x0003
70
71 >  01 00 00 04
72    01 = SPI_MASTER
73       00 = NO_CRC
74          00 04 = size
75 >> 20 00 01 00
76    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
77       00 = NCI_MSG_CORE_RESET
78          01 = NCI_CORE_PARAM_SIZE_RESET
79             00 = NCI_RESET_TYPE_KEEP_CFG
80
81 <  00 00 00 06
82    00 = SPI_SLAVE
83       00 = NO_CRC
84          00 06 = size
85 << 40 00 03 00 11 00
86    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
87       00 = NCI_MSG_CORE_RESET
88          03 = NCI_CORE_PARAM_SIZE_RESET_RSP
89             00 = NCI_STATUS_OK
90                11 = NCI_VERSION (1.1)
91                   00 = NCI_RESET_STATUS_KEPT_CFG
92
93 >  01 00 00 03
94    01 = SPI_MASTER
95       00 = NO_CRC
96          00 03 = size
97 >> 20 01 00
98    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
99       01 = NCI_MSG_CORE_INIT
100          00 = size
101
102 <  00 00 00 1a
103    00 = SPI_SLAVE
104       00 = NO_CRC
105          00 1a = size
106 << 40 01 17 00
107    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
108       01 = NCI_MSG_CORE_INIT
109          17 = size
110             00 = NCI_STATUS_OK
111 << 03 0e 02 01
112    03 0e 02 01 NFCC_FEATURES
113    02 = multiple NFCEEs
114    01 = RF_DISCOVER_CMD supported
115       08 = AID-based routing supported
116       04 = Protocol-based routing supported
117       02 = Technology-based routing supported
118          02 = Switched-off state supported
119             01 = Proprietary parameters
120 << 06 00 01 02 03 81 83
121    06 = num_of_ifaces (6)
122       00 = NCI_INTERFACE_EE_DIRECT_RF
123          01 = NCI_INTERFACE_FRAME
124             02 = NCI_INTERFACE_ISO_DEP
125                03 = NCI_INTERFACE_NFC_DEP
126                   81 = Proprietary Interface (81)
127                      83 = Proprietary Interface (83)
128
129 << 08 00 04 ff 0f 00 2e 04 10 2b 41
130    08 = num_of_conns_max (8)
131       00 04 = num_of_routes_max
132             ff = size_control_payload_max
133                0f 00 = size_large_params_max
134                      2e = manufacturer_id
135                         04 10 2b 41 = manufacturer_specific
136
137 >  01 00 00 05
138    01 = SPI_MASTER
139       00 = NO_CRC
140          00 05 = size
141 >> 20 03 02 01 52
142    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
143       03 = NCI_MSG_CORE_GET_CONFIG
144          02 = num_of_params (2)
145             01 = CON_DEVICES_LIMIT
146                52 = LF_T3T_MAX
147
148 <  00 00 00 08
149    00 = SPI_SLAVE
150       00 = NO_CRC
151          00 08 = size
152 << 40 03 05 00 01 52 01 10
153    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
154       03 = NCI_MSG_CORE_GET_CONFIG
155          ???
156
157 >  01 00 00 22
158    01 = SPI_MASTER
159       00 = NO_CRC
160          00 22 = size
161 >> 20 02 1f 0a
162    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
163       02 = NCI_MSG_CORE_SET_CONFIG
164          1f = size
165             0a = num_of_params (10)
166 >> 21 01 00
167    21 = PI_BIT_RATE
168       01 = size_of_param
169          00 = 106 Kbit/s
170 >> 28 01 00
171    28 = PN_NFC_DEP_SPEED
172       01 = size_of_param
173          00 = Highest Available Bitrate
174 >> 30 01 04
175    30 = LA_BIT_FRAME_SDD
176       01 = size_of_param
177          04 = Bit Frame SDD value to be sent in Byte 1 of SENS_RES
178 >> 31 01 03
179    31 = LA_PLATFORM_CONFIG
180       01 = size_of_param
181          03 = Platform Configuration value to be sent in Byte 2 of SENS_RES
182 >> 54 01 06
183    54 = LF_CON_BITR_F
184       01 = size_of_param
185          02 = listen for 212 kbps
186          04 = listen for 424 kbps
187 >> 5b 01 00
188    5b = LI_BIT_RATE
189       01 = size_of_param
190          00 = 106 Kbit/s
191 >> 60 01 07
192    60 = LN_WT
193       01 = size_of_param
194          07 = waiting time (7)
195 >> 80 01 01
196    80 = RF_FIELD_INFO
197       01 = size_of_param
198          01 = RF_FIELD_INFO_NTF allowed
199 >> 81 01 01
200    81 = RF_NFCEE_ACTION
201       01 = size_of_param
202          01 = send RF NFCEE Actions
203 >> 82 01 0e
204    82 = NFCDEP_OP
205       01 = size_of_param
206          02 = ATTENTION only for error recovery
207          04 = don't send msgs without Transport Data Bytes
208          08 = chaining uses max number of Transport Data Bytes
209
210 <  00 00 00 05
211    00 = SPI_SLAVE
212       00 = NO_CRC
213          00 05 = size
214 << 40 02 02 00 00
215    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
216       02 = NCI_MSG_CORE_SET_CONFIG
217          02 = size
218             00 = NCI_STATUS_OK
219                00 = num_of_invalid_params (0)
220
221 >  01 00 00 13
222    01 = SPI_MASTER
223       00 = NO_CRC
224          00 13 = size
225 >> 21 00 10 05
226    21 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
227       00 = NCI_MSG_RF_DISCOVER_MAP
228          10 = size (16)
229             05 = num_mapping_configs
230 >> 04 03 02
231    04 = NCI_PROTOCOL_ISO_DEP
232       03 = NCI_INTERFACE_MODE_POLL_N_LISTEN
233          02 = NCI_INTERFACE_ISO_DEP
234 >> 05 03 03
235    05 = NCI_PROTOCOL_NFC_DEP
236       03 = NCI_INTERFACE_MODE_POLL_N_LISTEN
237          03 = NCI_INTERFACE_NFC_DEP
238 >> 01 01 01
239    01 = PROTOCOL_T1T
240       01 = NCI_INTERFACE_MODE_POLL
241          01 = NCI_INTERFACE_FRAME
242 >> 02 01 01
243    02 = PROTOCOL_T2T
244       01 = NCI_INTERFACE_MODE_POLL
245          01 = NCI_INTERFACE_FRAME
246 >> 03 01 01
247    03 = PROTOCOL_T3T
248       01 = NCI_INTERFACE_MODE_POLL
249          01 = NCI_INTERFACE_FRAME
250
251 <  00 00 00 04
252    00 = SPI_SLAVE
253       00 = NO_CRC
254          00 04 = size
255 << 61 07 01 00
256    61 = NCI_MTS_NTF | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
257       07 = NCI_MSG_RF_FIELD
258          01 = size
259             00 = No RF field
260
261 <  00 00 00 04
262    00 = SPI_SLAVE
263       00 = NO_CRC
264          00 04 = size
265 << 41 00 01 00
266    41 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
267       00 = NCI_MSG_RF_DISCOVER_MAP
268          01 = NCI_DISCOVER_PARAM_SIZE_RSP
269             00 = NCI_STATUS_OK
270
271
272 >  01 00 00 0a
273    01 = SPI_MASTER
274       00 = NO_CRC
275          00 0a = size
276 >> 21 01 07 00 01 01 03 00 01 05
277    21 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
278       01 = NCI_MSG_RF_SET_ROUTING
279          07 = size
280             00 = last message
281                01 = routing_entries (1)
282                   01 = protocol-based routing
283                      03 = length (3)
284                         00 = DH NFCEE ID
285                            01 = power state (1 - switched on)
286                               05 = PROTOCOL_NFC_DEP
287
288
289 <  00 00 00 04
290    00 = SPI_SLAVE
291       00 = NO_CRC
292          00 04 = size
293 << 41 01 01 00
294    41 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
295       01 = NCI_MSG_RF_SET_ROUTING
296          01 = size
297             00 = NCI_STATUS_OK
298
299 >  01 00 00 0c
300    01 = SPI_MASTER
301       00 = NO_CRC
302          00 0c = size
303 >> 20 02 09 01
304    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
305       02 = NCI_MSG_CORE_SET_CONFIG
306          09 = size
307             01 = num_of_params
308 >> b9 06 01 00 00 0b 00 00
309    b9 = Proprietary parameter (b9)
310       06 = size_of_param
311
312 <  00 00 00 05
313    00 = SPI_SLAVE
314       00 = NO_CRC
315          00 05 = size
316 << 40 02 02 00 00
317    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
318       02 = NCI_MSG_CORE_SET_CONFIG
319          02 = size
320             00 = NCI_STATUS_OK
321                00 = num_of_invalid_params (0)
322
323 >  01 00 00 ca
324    01 = SPI_MASTER
325       00 = NO_CRC
326          00 ca = size
327 >> 20 02 c7 11
328    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
329       02 = NCI_MSG_CORE_SET_CONFIG
330          c7 = size
331             11 = num_of_params (17)
332 >> 18 01 02
333    18 = PF_BIT_RATE
334       01 = size_of_param
335          02 = 424 Kbit/s
336 >> 2a 01 32
337    2a = PN_ATR_REQ_CONFIG
338       01 = size_of_param
339          30 = 0011b for LLCP
340          02 = ?
341 >> 80 01 00
342    80 = RF_FIELD_INFO
343       01 = size_of_param
344          00 = RF_FIELD_INFO_NTF not allowed
345 >> c2 02 03 02
346    c2 = Proprietary parameter (c2)
347       02 = size_of_param
348 >> c4 02 00 13
349    c4 = Proprietary parameter (c4)
350       02 = size_of_param
351 >> ca 05 00 0f 0d 03 08
352    ca = Proprietary parameter (ca)
353       05 = size_of_param
354 >> cb 01 00
355    cb = Proprietary parameter (cb)
356       01 = size_of_param
357 >> d6 0b 01 01 00 01 12 00 01 00 01 00 01
358    d6 = Proprietary parameter (d6)
359       0b = size_of_param
360 >> d8 01 01
361    d8 = Proprietary parameter (d8)
362       01 = size_of_param
363 >> de 04 01 00 00 00
364    de = Proprietary parameter (de)
365       04 = size_of_param
366 >> e0 07 00 60 93 1c 63 3e 0a
367    e0 = Proprietary parameter (e0)
368       07 = size_of_param
369 >> e1 02 79 07
370    e1 = Proprietary parameter (e1)
371       02 = size_of_param
372 >> e2 2a 48 07 0c 10 00 31 39 39 39 39 39 39 39 39 39 39 41 39 90 90 90 90 3f 90 90 90 88 8a 8c 94 94 28 04 07 00 00 00 00 00 00 00 00
373    e2 = Proprietary parameter (e2)
374       2a = size_of_param
375 >> e3 08 17 04 16 0d 10 0c 2b 0b
376    e3 = Proprietary parameter (e3)
377       08 = size_of_param
378 >> e4 01 37
379    e4 = Proprietary parameter (e4)
380       01 = size_of_param
381 >> e5 1e e0 1e 02 12 00 0a 00 10 04 54 54 54 54 2b 52 50 53 4e 20 2d 18 0c 02 07 00 94 70 94 70 20
382    e5 = Proprietary parameter (e5)
383       1e = size_of_param
384 >> e6 2d 01 68 00 77 00 8b 00 a7 00 d6 00 22 01 c0 01 9e 58 4c 40 33 26 20 1e 68 00 77 00 8b 00 a7 00 d6 00 22 01 c0 01 5e 58 4c 40 33 2b 26 1e
385    e6 = Proprietary parameter (e6)
386       2d = size_of_param
387
388 <  00 00 00 05
389    00 = SPI_SLAVE
390       00 = NO_CRC
391          00 05 = size
392 << 40 02 02 00 00
393    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
394       02 = NCI_MSG_CORE_SET_CONFIG
395          02 = size
396             00 = NCI_STATUS_OK
397                00 = num_of_invalid_params (0)
398
399 >  01 00 00 09
400    01 = SPI_MASTER
401       00 = NO_CRC
402          00 09 = size
403 >> 2f 1b 06 08 00 00 01 00 00
404    2f = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_PROP
405       1b = Proprietary message (1b)
406          06 = size
407
408 <  00 00 00 04
409    00 = SPI_SLAVE
410       00 = NO_CRC
411          00 04 = size
412 << 4f 1b 01 00
413    4f = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_PROP
414       1b = Proprietary message (1b)
415          01 = size
416
417 >  01 00 00 30
418    01 = SPI_MASTER
419       00 = NO_CRC
420          00 30 = size
421 >> 20 02 2d 04
422    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
423       02 = NCI_MSG_CORE_SET_CONFIG
424          2d = size
425             04 = num_of_params (4)
426 >> 29 11 46 66 6d 01 01 11 02 02 03 80 03 02 00 01 04 01 64
427    29 = PN_ATR_REQ_GEN_BYTES
428       11 = size_of_param
429          General Bytes for ATR_REQ
430 >> 2a 01 30
431    2a = PN_ATR_REQ_CONFIG
432       01 = size_of_param
433          30 = 0011b for LLCP
434 >> 61 11 46 66 6d 01 01 11 02 02 03 80 03 02 00 01 04 01 64
435    61 = LN_ATR_RES_GEN_BYTES
436       11 = size_of_param
437          General Bytes in ATR_RES
438 >> 62 01 30
439    62 = LN_ATR_RES_CONFIG
440       01 = size_of_param
441          30 = 0011b for LLCP
442
443 <  00 00 00 05
444    00 = SPI_SLAVE
445       00 = NO_CRC
446          00 05 = size
447 << 40 02 02 00 00
448    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
449       02 = NCI_MSG_CORE_SET_CONFIG
450          02 = size
451             00 = NCI_STATUS_OK
452                00 = num_of_invalid_params (0)
453
454 >  01 00 00 11
455    01 = SPI_MASTER
456       00 = NO_CRC
457          00 11 = size
458 >> 20 02 0e 04
459    20 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
460       02 = NCI_MSG_CORE_SET_CONFIG
461          0e = size
462             04 = num_of_params (4)
463 >> 18 01 01
464    18 = PF_BIT_RATE
465       01 = size_of_param
466          01 = 212 Kbit/s
467 >> 32 01 40
468    32 = LA_SEL_INFO
469       01 = size_of_param
470          40 = NFC-DEP
471 >> 50 01 02
472    50 = LF_PROTOCOL_TYPE
473       01 = size_of_param
474          02 = NFC-DEP
475 >> 00 02 2c 01
476    00 = TOTAL_DURATION
477       02 = size_of_param
478          2c 01 = 11 256 ms
479
480 <  00 00 00 05
481    00 = SPI_SLAVE
482       00 = NO_CRC
483          00 05 = size
484 << 40 02 02 00 00
485    40 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_CORE
486       02 = NCI_MSG_CORE_SET_CONFIG
487          02 = size
488             00 = NCI_STATUS_OK
489                00 = num_of_invalid_params (0)
490
491 >  01 00 00 10
492    01 = SPI_MASTER
493       00 = NO_CRC
494          00 10 = size
495 >> 21 03 0d 06
496    21 = NCI_MTS_CMD | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
497       03 = NCI_MSG_RF_DISCOVER
498          0d = size
499             06 = num_of_configs (6)
500 >> 00 01
501    00 = NFC_A_PASSIVE_POLL_MODE
502       01 = every discovery period
503 >> 01 01
504    01 = NFC_B_PASSIVE_POLL_MODE
505       01 = every discovery period
506 >> 02 01
507    02 = NFC_F_PASSIVE_POLL_MODE
508       01 = every discovery period
509 >> 06 01
510    06 = NFC_15693_PASSIVE_POLL_MODE
511       01 = every discovery period
512 >> 80 01
513    80 = NFC_A_PASSIVE_LISTEN_MODE
514       01 = every discovery period
515 >> 82 01
516    82 = NFC_F_PASSIVE_LISTEN_MODE
517       01 = every discovery period
518
519 <  00 00 00 04
520    00 = SPI_SLAVE
521       00 = NO_CRC
522          00 04 = size
523 << 41 03 01 00
524    41 = NCI_MTS_RSP | NCI_PBF_NO_OR_LAST | NCI_GID_RF_MANAGE
525       03 = NCI_MSG_RF_DISCOVER
526          01 = size
527             00 = STATUS_OK
528
529 # CTRL 0x41 0x01 0x0001 0x0003