/controlvault2-nfc-enable

Enable NFC on Linux for pcscd on Dell E7470 (and others) with ControlVault2

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Enable NFC on Dell ControlVault2 and ControlVault3

Introduction

Recent Dell laptops - i.e. E7470 - contain integrated Broadcom NFC (contactless), (contacted) chip card and fingerprint reader (USB 0a5c:5834 - Broadcom BCM5880 USH).

The contacted card reader works out of the box on Linux, yet NFC reader does not - no RF field is present.

Instructions from blog.g3rt.nl are not applicable: the ushdiag.exe does not recognize the device at all.

This project aims to enable Linux to read NFC cards the same way Windows does.

Usage

  1. Clone the repository.
  2. Install python3 and python3-usb.
  3. Run: ./nfc.py on (use sudo if necessary).
  4. Run pcsc_scan or whatever you prefer.
  5. Enjoy!

To disable the reader replace on with off.

Supported devices

Currently only the following devices were tested and are known to work:

  • 0a5c:5832 (ControlVault 2),
  • 0a5c:5834 (ControlVault 2),
  • 0a5c:5842 (ControlVault 3).
  • 0a5c:5843 (ControlVault 3).

Firmware update (done during driver installation on Windows) may be required.

Tested on

  • Dell Latitude 5310 2-in-1
  • Dell Latitude 5480
  • Dell Latitude 5491
  • Dell Latitude 7280
  • Dell Latitude 7290
  • Dell Latitude 7390
  • Dell Latitude 7400
  • Dell Latitude E5270
  • Dell Latitude E5570
  • Dell Latitude E7470
  • Dell Latitude E7490
  • Dell Latitude Rugged 5414
  • Dell Latitude Rugged 5420

How it works?

Python script sends the same sequence of commands the Windows driver does. The traffic was sniffed using USBPcap and Wireshark (kudos to ~jkramarz and ~lgarbarini and for that).

The data is sent as-is and responses are read, but no error-checking is done.

The semi-annotated traffic dumps are available as traffic_cv2.txt and traffic_cv3.txt - feel free to decode it further!

The communication protocol is based on NCI (NFC Controller Interface). Unfortunately the specs are not freely available and some proprietary extensions are used. libnfc-nci and kernel sources were used to decode vendor-independent structs.

References