Enable NFC for Linux and pcscd on Dell E7470 (and others) with ControlVault2
Jacek Kowalski
2021-02-16 09f3f6dbbdb6d09b82ea592cb75ed69c04a3bdf8
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
import cvcomm
 
class ControlVault2:
    NAME = 'Broadcom ControlVault 2'
 
    turn_on_seq1 = [
        "10 2f 04 00",
        "10 2f 1d 03 05 90 65",
        "10 2f 2d 00",
        "10 2f 11 01 f7",
        "01 27 fc 0c 08 00 01 00 01 00 00 00 00 00 00 00",
    ]
    turn_on_seq2 = [
        "10 20 00 01 01",
        "10 20 01 02 01 00",
        "10 20 02 67 01 b9 64 01 00 ff ff 50 00 8b 13 00 10 00 06 00 00 00 00 00 ff 00 00 00 ff 00 00 04 00 00 00 00 03 00 00 00 03 00 0c 00 00 0d 00 00 00 00 00 00 00 00 00 00 33 23 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 02 53 3b 0f 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00",
        "10 20 02 90 0a ca 05 00 00 00 00 2c 80 01 01 b0 05 01 03 03 03 08 b5 03 01 03 ff c9 0d 24 00 00 00 01 00 bb 00 e4 00 0a 01 02 d6 0d 01 02 00 00 00 00 00 01 00 01 5a 00 8a b2 02 e8 03 c8 1e 06 1f 00 0a 00 30 00 04 24 00 1c 00 75 00 77 00 76 00 1c 00 03 00 0a 00 56 01 00 00 40 04 d7 01 07 dd 32 00 00 00 29 16 08 08 06 04 00 00 00 1f 27 0a 6d 20 00 52 20 00 00 00 01 85 00 00 32 1f 00 00 02 0a 16 00 02 55 55 55 55 55 55 55 55 55 55 55 55 55 1e",
        "10 20 02 06 01 b7 03 02 00 01",
        "10 2f 06 01 01",
        "10 20 02 0e 02 51 08 20 79 ff ff ff ff ff ff 58 01 07",
        "10 21 00 07 02 04 03 02 05 03 03",
        "10 20 02 17 01 29 14 46 66 6d 01 01 11 02 02 07 ff 03 02 00 13 04 01 64 07 01 03",
        "10 20 02 1a 02 61 14 46 66 6d 01 01 11 02 02 07 ff 03 02 00 13 04 01 64 07 01 03 60 01 07",
        "10 20 02 10 05 30 01 04 31 01 00 32 01 40 38 01 00 50 01 02",
        "10 20 02 05 01 00 02 fa 00",
        "10 20 02 0b 01 c2 08 01 08 00 04 80 c3 c9 01",
        "10 21 03 0d 06 00 01 01 01 02 01 80 01 82 01 06 01",
    ]
 
    def __init__(self, device):
        self.device = device
        self.communicator = cvcomm.ControlVaultCommunicator(device)
 
    def turn_on(self):
        self.communicator.ctrl_transfer(0x41, 0, 1, 3)
        self.communicator.talk(self.turn_on_seq1)
        self.communicator.ctrl_transfer(0x41, 1, 0, 3)
        self.communicator.talk(self.turn_on_seq2)
        self.communicator.ctrl_transfer(0x41, 1, 1, 3)
 
    def turn_off(self):
        self.communicator.ctrl_transfer(0x41, 1, 0, 3)
        self.communicator.ctrl_transfer(0x41, 0, 0, 3)
 
    def reset(self):
        self.device.reset()