 Υ饤֥ libpasori (http://libpasori.sourceforge.jp/) ƹ
   㴳εǽɲäʤɤԤʤäΤǤ

 NFC Reader/Writer Linux Driver ( http://core.dumped.cc/devel/nfc/index.ja.html )
   
   libnfc ( http://www.libnfc.org/ )
   Υɤ⻲ͤˤƤޤ

 Sony  PaSoRi RC-S320  RC-S330 бƤޤ

 ưǧʤɤԽʬʾ֤ʤΤǡƼǤǤѤ


ѥȥ󥹥ȡ

./configure
make
make install


udev 

Debian GNU/Linux lenny ǤǤǥȥӥ塼С
ˤ꤬ۤʤǽޤΤŬɤؤԤʤäƤ


1. Ƥ /etc/udev/pasori.rules Ȥ¸롣

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"


2. /etc/udev/rules.d/˥ܥå󥯤ĥ롣

cd /etc/udev/rules.d
ln -s ../pasori.rules 010_pasori.rules

ե̾ŬѹƤ

3. udevadm control --reload-rules ¹ԡ


ʾ plugdev 롼פ°Ƥ桼 pasori ѤǤ褦ˤ
ϤǤ



ؿե

pasori *pasori_open(void);


  ǥХե򥪡ץ󤹤롣

֤
   psori Υݥ󥿤֤Ԥ NULL ֤롣



int pasori_init(pasori *p)


  PaSoRi νԤʤ


  p  pasori_open Ǽ psori Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



void pasori_close(pasori *p);


  pasori_reset() ¹Ԥ塢ǥХե򥯥롣


  p  pasori_open Ǽ psori Υݥ󥿡



int pasori_send(pasori *p, uint8 *data, int *size);


  PaSoRi ˥ǡФ롣


  p    pasori_open Ǽ psori Υݥ󥿡
  data ФǡؤΥݥ󥿡
  size ФǡΥ

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣


int pasori_recv(pasori *p, uint8 *data, int *size);


  PaSoRi ǡ롣


  p    pasori_open Ǽ psori Υݥ󥿡
  data ǡǼХåեؤΥݥ󥿡
  size ХåեΥؤΥݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣
  size ȤƤ˳ǼǡĹ¸롣



int pasori_packet_write(pasori *p, uint8 *data, int *size)


  PaSoRi ˥ޥɤФ롣 pasori_send ƤӽФƤ롣


  p    pasori_open Ǽ psori Υݥ󥿡
  data ФǡؤΥݥ󥿡
  size ФǡΥؤΥݥ󥿡

֤
   0 ֤size ȤƤФǡĹ
  ¸롣Ԥ 0 ʳο֤ͤ롣



int pasori_packet_read(pasori * p, uint8 * data, int *size);


  PaSoRi Фޥɤؤα롣 pasori_recv 
  ӽФƤ롣


  p    pasori_open Ǽ psori Υݥ󥿡
  data ǡǼХåեؤΥݥ󥿡
  size ХåեΥؤΥݥ󥿡

֤
   0 ֤size ȤƤ˼ǡĹ
  ¸롣Ԥ 0 ʳο֤ͤ롣


int pasori_write(pasori *p, uint8 *data, int *size);


  FeliCa ˥ǡ롣 pasori_packet_write ƤӽФƤ
  롣
  RC-S320 Ǥ PaSoRi2 ޥ 0x5C б롣


  p    pasori_open Ǽ psori Υݥ󥿡
  data ǡǼХåեؤΥݥ󥿡
  size ХåեΥؤΥݥ󥿡

֤
   0 ֤size ȤƤǡĹ
  ¸롣Ԥ 0 ʳο֤ͤ롣


int pasori_read(pasori *p, uint8 *data, int *size);


  FeliCa α롣 pasori_packet_read ƤӽФƤ
  롣


  p    pasori_open Ǽ psori Υݥ󥿡
  data ǡǼХåեؤΥݥ󥿡
  size ХåեΥؤΥݥ󥿡

֤
   0 ֤size ȤƤ˳ǼǡĹ
  ¸롣Ԥ 0 ʳο֤ͤ롣


int pasori_reset(pasori * p);


  RC-S320 Ǥ Pasori ˥ꥻåȥޥɤФ롣(PaSoRi2 ޥ 0x54)
  RC-S330 Ǥ RF Off ʤɤνԤ


  p    pasori_open Ǽ psori Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int pasori_version(pasori *p, int *v1, int *v2);


  Pasori Υե०С롣


  p  pasori_open Ǽ psori Υݥ󥿡
  v1 СξֹǼ뤿Υݥ󥿡
  v2 СβֹǼ뤿Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣

Х
  RC-S330 ͤƤ뤫ɤ̤ǧ


int pasori_test(pasori *p, int code, uint8 *data, int *size, uint8 *rdata, int *rsize);


  RC-S320 Τͭ
  Pasori μʿǤԤʤ(PaSoRi2 ޥ 0x52)


  p     pasori_open Ǽ psori Υݥ󥿡
  code  ƥȥ
  data  ƥȥǡǼХåեؤΥݥ󥿡
  size  ƥȥǡХåեΥؤΥݥ󥿡
  rdata ǡǼХåեؤΥݥ󥿡
  rsize ǡХåեΥؤΥݥ󥿡


֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int pasori_test_echo(pasori *p, uint8 *data, int *size);


  RC-S320 Τͭ
  Pasori ΥХåƥȤԤʤ(ƥȥ 0x00)


  p    pasori_open Ǽ psori Υݥ󥿡
  data ƥȥǡǼХåեؤΥݥ󥿡
  size ƥȥǡХåեΥؤΥݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int pasori_test_eprom(pasori *p);


  RC-S320 Τͭ
  Pasori  EPROM ƥȤԤʤ(ƥȥ 0x01)


  p    pasori_open Ǽ psori Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int pasori_test_ram(pasori *p);


  RC-S320 Τͭ
  Pasori  RAM ƥȤԤʤ(ƥȥ 0x02)


  p    pasori_open Ǽ psori Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int pasori_test_cpu(pasori *p);


  RC-S320 Τͭ
  Pasori  CPU ƥȤԤʤ(ƥȥ 0x03)


  p    pasori_open Ǽ psori Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int pasori_test_polling(pasori *p);


  RC-S320 Τͭ
  Pasori Υݡ󥰥ƥȤԤʤ(ƥȥ 0x10)


  p pasori_open Ǽ psori Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



void pasori_set_timeout(pasori *p, int timeout);


  ॢȤꤹ롣


  p pasori_open Ǽ psori Υݥ󥿡
  timeout timeout  (usb_control_msg() ǻѤ)



felica *felica_polling(pasori *p, uint16 systemcode, uint8 RFU, uint8 timeslot);


  REQC (ꥯȥޥ C ) ʹߤ̿ɬפʥǡ
  롣


  p pasori_open Ǽ psori Υݥ󥿡
  systemcode ƥॳ
              FELICA_POLLING_ANY   ƤΥƥबȿ
              FELICA_POLLING_SUICA Suica
              FELICA_POLLING_EDY   Edy
  RFU ͽ (̾ 0 )
  timeslot ॹåȤκͤꤹ롣ܺ٤ JIS X 6319-4 򻲾ȤΤȡ

֤
   felica Υݥ󥿤֤֤줿 felica Υݥ
  פˤʤäȤ free(3) ǳɬפ롣 Ԥ NULL
  ֤롣



int felica_get_idm(felica *f, uint8 *idm);


  IDm (¤̻) 롣


  f   felica_polling Ǽ felica Υݥ󥿡
  idm IDm Ǽ뤿Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int felica_get_pmm(felica *f, uint8 *pmm);


  PMm (¤ѥ᥿) 롣


  f   felica_polling Ǽ felica Υݥ󥿡
  pmm PMm Ǽ뤿Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int felica_read(felica * f, int *n, felica_block_info *info, uint8 *data);


  Read ޥɤ롣


  f    felica_polling Ǽ felica Υݥ󥿡
  n    ֥åؤΥݥ󥿡
  info ӥɥꥹȡ
  data ǡǼХåեؤΥݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣

Х
  RC-S330 Ǥư̤ǧ


int felica_read_single(felica * f, int servicecode, int mode, uint8 block, uint8 *data);


  Read ޥɤ롣֥å 1 ˸ꡣ


  f     felica_polling Ǽ felica Υݥ󥿡
  mode  ⡼
        0  ľܥ
           ۴Ľ
           
        1  쥢
  block ֥åֹ
  data  ǡǼХåեؤΥݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int felica_write(felica *f, int servicecode, int mode, uint8 addr, uint8 *data);

̤



int felica_request_service(felica *f, int *n, uint16 *list, uint16 *data);


  Request Service ޥɤ롣


  f    felica_polling Ǽ felica Υݥ󥿡
  n    ֥åؤΥݥ󥿡
  list ӥɥꥹȤޤϥꥢɥꥹȡ
  data ǡǼХåեؤΥݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣

Х
  RC-S330 Ǥư̤ǧ


int felica_request_response(felica *f, uint8 *mode);


  Request Response ޥɤ롣ߤΥ⡼ɤĴ٤롣


  f    felica_polling Ǽ felica Υݥ󥿡
  mode ⡼ɤǼ뤿Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣

Х
  RC-S330 Ǥư̤ǧ


int felica_search_service(felica *f);


  0xffffӥɤȤֵѤޤ Search Service Code ޥ
  ɤ롣
  줿ӥɤޤϥꥢɤο

  f->area_num, f->service_num

  ꤵޤ  줾Υӥɤޤϥꥢɤ

  f->area[n].code, f->area[n].attr, f->area[n].bin
  f->service[n].code, f->service[n].attr, f->service[n].bin

  ǻȤǤޤcode ϥӥֹޤϥӥեκǾե
  뼱̻ҡattr ϥʬ bin ϥե뼱̻Τɽ
  ޤ


  f    felica_polling Ǽ felica Υݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣



int felica_request_system(felica *f, int *n, uint16 *data);


  Request System Code ޥɤ롣FeliCa Τĥƥॳɤ
  ꥹȤ롣


  f    felica_polling Ǽ felica Υݥ󥿡
  data ǡǼХåեؤΥݥ󥿡

֤
   0 ֤Ԥ 0 ʳο֤ͤ롣





FELICA_IDM_LENGTH      IDm Υ
FELICA_PMM_LENGTH      PMm Υ
FELICA_BLOCK_LENGTH    ֥åΥ





PASORI_ERR_PARM    ˸꤬롣
PASORI_ERR_MEM     γݤ˼Ԥ
PASORI_ERR_COM     ̿顼
PASORI_ERR_DATA    ǡ˰۾郎롣
PASORI_ERR_CHKSUM  å˼Ԥ
PASORI_ERR_FORMAT  ޥɤη۾
PASORI_ERR_TYPE    ̤бΥϡɥ


Ϣ

ZXB01226@nifty.com
