Installieren Sie libusb
$ sudo apt-get install libusb-dev
Klonen Sie libpafe von GitHub
$ git clone https://github.com/rfujita/libpafe.git
Kompilieren und installieren
$ cd libpafe
$ ./configure
$ make
$ sudo make install
Funktionsprüfung
$ cd libpafe
$ ./tests/pasori_test
PaSoRi (RC-S320)
firmware version 1.40
Echo test... success
EPROM test... success
RAM test... success
CPU test... success
Polling test... success
Erstellen Sie 60-libpafe.rules
* $ sudo vi /lib/udev/rules.d/60-libpafe.rules
Beschreiben Sie die folgenden Inhalte
ACTION!="add", GOTO="pasori_rules_end"
SUBSYSTEM=="usb_device", GOTO="pasori_rules_start"
SUBSYSTEM!="usb", GOTO="pasori_rules_end"
LABEL="pasori_rules_start"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="01bb", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="054c", ATTRS{idProduct}=="02e1", MODE="0664", GROUP="plugdev"
LABEL="pasori_rules_end"
Führen Sie $ sudo udevadm control --reload-rules
aus
Neustart mit $ sudo reboot
.
Lesen Sie FeliCa IDm mit Raspberry Pi + libpafe + Python + ctypes (Fast bezogen auf das, was hier gepostet wurde)
read_idm.py
# -*- coding: utf-8 -*-
from __future__ import print_function
from ctypes import *
# libpafe.Definiert in Zeile 77 von h
FELICA_POLLING_ANY = 0xffff
if __name__ == '__main__':
libpafe = cdll.LoadLibrary("/usr/local/lib/libpafe.so")
libpafe.pasori_open.restype = c_void_p
pasori = libpafe.pasori_open()
libpafe.pasori_init(pasori)
libpafe.felica_polling.restype = c_void_p
felica = libpafe.felica_polling(pasori, FELICA_POLLING_ANY, 0, 0)
idm = c_ulonglong()
libpafe.felica_get_idm.restype = c_void_p
libpafe.felica_get_idm(felica, byref(idm))
#IDm ist in hexadezimaler Schreibweise
print("IDm:", "%016X" % idm.value)
#Von README, felica_polling()Kostenlos nach Gebrauch()verwenden
#Außerdem scheint free automatisch in die Bibliothek aufgenommen zu werden
libpafe.free(felica)
libpafe.pasori_close(pasori)
int felica_get_idm(felica *f, uint8 *idm);
Wie sehe ich Suicas Guthaben?
Es ist notwendig, die Informationen auf der IC-Karte abzurufen und die Kontostandinformationen von dieser abzurufen.
Zusammenfassung der Suica-Datenstruktur: suica --FeliCa Library Wiki --FeliCa Library --SYSTEM
Es wäre schön, die Daten um 10-11 zu bekommen.
Da verschiedene Informationen von der Funktion felica_read von libpafe abgerufen werden können, verwenden Sie sie. Referenz: Fortsetzung Blog: Himbeerkuchen spricht über das Gleichgewicht der IC-Karte
↑ Da dies in C-Sprache geschrieben ist, schreiben Sie es neu, damit felica_read mit ctypes auf Python aufgerufen werden kann.
Das Argument kann einen Zeiger auf die Struktur anzeigen. Definieren Sie ihn daher im Voraus und passen Sie ihn an.
read_balance.py
# -*- coding: utf-8 -*-
from __future__ import print_function
from ctypes import *
# libpafe.Definiert in Zeile 77 von h
FELICA_POLLING_ANY = 0xffff
#Definition einer Klasse, die die Struktur ersetzt
class felica_block_info(Structure):
_fields_ = [
("service", c_uint16),
("mode", c_uint8),
("block", c_uint16)
]
if __name__ == '__main__':
libpafe = cdll.LoadLibrary("/usr/local/lib/libpafe.so")
libpafe.pasori_open.restype = c_void_p
pasori = libpafe.pasori_open()
libpafe.pasori_init(pasori)
libpafe.felica_polling.restype = c_void_p
felica = libpafe.felica_polling(pasori, FELICA_POLLING_ANY, 0, 0)
#Definition des Arrays vom Typ C int(Länge 16)
int_array16 = c_uint8 * 16
#Antwortdaten
data = int_array16()
#Liste der Service-Codes
info = felica_block_info(c_uint16(0x090f), c_uint8(0), c_uint16(0))
for i in range(0, 32):
c_i = c_int(i)
libpafe.felica_read(felica, byref(c_i), byref(info), byref(data))
if (data[1] > 0) or (data[2] > 0):
print("Balance:", data[11] * 256 + data[10], "Kreis")
break
libpafe.free(felica)
libpafe.pasori_close(pasori)
Recommended Posts