Installez libusb
$ sudo apt-get install libusb-dev
Cloner libpafe depuis GitHub
$ git clone https://github.com/rfujita/libpafe.git
Compilez et installez
$ cd libpafe
$ ./configure
$ make
$ sudo make install
Contrôle de fonctionnement
$ 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
Créer 60-libpafe.rules
* $ sudo vi /lib/udev/rules.d/60-libpafe.rules
Décrivez le contenu suivant
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"
Exécutez $ sudo udevadm control --reload-rules
Redémarrez avec $ sudo reboot
.
Lire FeliCa IDm avec Raspberry Pi + libpafe + Python + ctypes (Presque en référence à ce qui a été publié ici)
read_idm.py
# -*- coding: utf-8 -*-
from __future__ import print_function
from ctypes import *
# libpafe.Défini à la ligne 77 de 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 est en notation hexadécimale
print("IDm:", "%016X" % idm.value)
#De README, felica_polling()Gratuit après utilisation()utilisation
#De plus, le free semble être automatiquement inclus dans la bibliothèque
libpafe.free(felica)
libpafe.pasori_close(pasori)
int felica_get_idm(felica *f, uint8 *idm);
Comment consulter le solde de Suica?
Il est nécessaire de récupérer les informations de la carte IC et de récupérer les informations de solde.
Résumé de la structure des données Suica: suica --FeliCa Library Wiki --FeliCa Library --SYSTEM
Ce serait bien d'obtenir les données autour de 10-11.
Puisque diverses informations peuvent être récupérées par la fonction appelée felica_read de libpafe, utilisez-la. Référence: Suite du blog: La tarte aux framboises parle du solde de la carte IC
↑ Comme il est écrit en langage C, réécrivez-le pour que felica_read puisse être appelé sur Python en utilisant des ctypes.
L'argument peut indiquer un pointeur vers la structure, alors définissez-la à l'avance et ajustez-la.
read_balance.py
# -*- coding: utf-8 -*-
from __future__ import print_function
from ctypes import *
# libpafe.Défini à la ligne 77 de h
FELICA_POLLING_ANY = 0xffff
#Définition d'une classe qui remplace la structure
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)
#Définition du tableau de type C int(Longueur 16)
int_array16 = c_uint8 * 16
#Données de réponse
data = int_array16()
#Liste des codes de service
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("Équilibre:", data[11] * 256 + data[10], "Cercle")
break
libpafe.free(felica)
libpafe.pasori_close(pasori)
Recommended Posts