Тема: N9, NFC и карточки метро
Позвольте рассказать вам душещипательную историю
Понравилась мне идея читать информацию с карточек метро, используя NFC модуль телефона, ибо часто навалены эти карточки в кучу на тумбочке, и поди разбери, где чья, на какой сколько, кто виноват и что делать
Вооружился я Qt Mobility/Connectivity и ринулся в бой. Карточка определилась, как NfcTagType2, дала считать свой UID, рассказала, что у нее есть NdefAccess и она hasNdefMessage. Прекрасно, отчего бы и нет. Но при попытке readNdefMessages я получил лаконичную ошибку NdefReadError. Облом.
Вооружившись даташитом я прозрел, что карточка эта и не NfcTag вовсе, а бесконтактная смарткарта ISO 14443/7816, или, в простонародье - Mifare. И никаких NDEF Messages оно не гоняет, а имеет секторно-блочный доступ на чтение/запись, авторизуемый ключами. Хорошо, сказал я, в этом случае нам доступен specific access upcast до интерфейса QNearFieldTagType2 из которого мы можем использовать memorySize/selectSector/readBlock. Первый метод сказало мне 0, остальные два заканчивались ошибками. Снова облом.
Я уже собрался было экспериментировать с sendCommand/processingCommand, задумываться над тем, почему нет API для отсылки ключей авторизации и о прочих судьбах родины, но детальное изучение документации поведало мне следующее :
On Harmattan the following features are NOT supported:
* Connectionless LLCP sockets (both client and server).
* Tag type specific access.
Я так понял, что tag type specific access, это то, что мне было нужно, обиделся, и решил, что обойдемся как-нибудь и без Qt в вопросах NFC, раз они такие нехорошие люди.
Дальнейшие исследования показали, что в N9 стоит чип NXP PN544, который по спекам весь такой навороченный, и умеет все на свете. Libnfc поддержки 544-ого не имеет, посему было решено пока потыкать руками, а потом, может быть, дописать libnfc. С помощью лома и такой-то матери удалось отлучить nfcd от /dev/pn544, и aegis ему не помог Далее были взяты спеки по драйверу и на коленке набросана грязная программулька с ioctl'ами, которая, опять же, продемонстрировала облом вместо vendor specific access'а
Дальнейшее гугленье обрисовало мне такую ситуацию - возможностей чипа самого по себе недостаточно, на материнке он должен быть разведен шиной SWP, подключенной или к встроенному SE-модулю, или к SIM-ридеру с поддержкой SE, тогда в роли SE-модуля будет выступать SIM-карта, если она это поддерживает. На N9 нет ни того, ни другого, т.е. по факту один из самых крутых мобильных NFC-чипов используется, как детская игрушка, которая, кроме NFC Tag'ов, ничего и читать не в состоянии.
Вот. Теперь я в печали, и вопрошаю у общественности - все действительно так плохо, как я понял, или я все же что-то где-то упустил, и можно покопать в каком-либо направлении?