ICカードのリーダーにはパソリPaSoRi(RC-S320)を使用した。
1.下準備
a)libusb-devの インストール
apt-get install libusb-dev
b)libpafeの インストール
wget http://homepage3.nifty.com/slokar/pasori/libpafe-0.0.8.tar.gz tar xzvf libpafe-0.0.8.tar.gz cd libpafe-0.0.8/ ./configure make make install
c)環境設定
このままではrootでしか使えないので
/lib/udev/rules.d/60-libpafe.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}=="006c", MODE="0664", GROUP="plugdev" ATTRS{idVendor}=="054c", ATTRS{idProduct}=="01bb", MODE="0664", GROUP="plugdev" ATTRS{idVendor}=="054c", ATTRS{idProduct}=="02e1", MODE="0664", GROUP="plugdev" LABEL="pasori_rules_end"
そして、
udevadm control --reload-rulesこれで、下準備はおしまい。
2.自作プログラムの実行
動作確認として/libpafe-0.0.8/tests/内にsuica_zandaka.cを作成。
#include#include #include "libpafe.h" int main(void){ /*スイカの残高を表示する*/ pasori* p; felica* f; int i; int m; int wk, wk2; uint8 b[16]; uint8 idm[16]; felica_block_info fbi; fbi.service = 0x090f; fbi.mode = 0; fbi.block = 0; printf("ICカードの残高は、"); p = pasori_open(); if(!p){ fprintf(stderr,"error\n"); exit(-1); } pasori_init(p); f = felica_polling(p,FELICA_POLLING_ANY,0,0); //printf("read test\n"); felica_get_idm(f, idm); // IDm文字列を作成stdlib //printf("IDm = %02x%02x%02x%02x%02x%02x%02x%02x\n", idm[0], idm[1], idm[2], idm[3], idm[4], idm[5], idm[6], idm[7]); for(i=0;i!=32;i++){ if(!felica_read(f,&i,&fbi,b)){ /*printf("[%02d] : ",i); printf("%02X ",b[0]); printf("%02X ",b[1]); printf("%02X",b[2]); printf("%02X",b[3]); printf("%02X",b[4]); printf("%02X ",b[5]); printf("%02X-%02X -> ",b[6],b[7]); printf("%02X-%02X ",b[8],b[9]); printf("%02X%02X - % 5d Yen ",b[10],b[11],b[11]*256+b[10]); printf("%02X%02X%02X%02X\n",b[12],b[13],b[14],b[15]);*/ //printf("[%02d] : ",i); //printf("%d ",b[0]); if(((int)b[1] > 0) || ((int)b[2] > 0)){ /*printf("%02X ",b[0]); printf("%02X ",b[1]); printf("%02X",b[2]); printf("%02X ",b[3]); wk=b[4]>>1; wk=wk&0x7F; printf("%02d/",wk); wk=b[4]&0x01; wk=wk<<3 data-blogger-escaped-wk2="b[5]">>5; wk2=wk2&0x07; wk=wk+wk2; printf("%02d/",wk); wk=b[5]&0x1F; printf("%02d ",wk); printf("%02X-%02X -> ",b[6],b[7]); printf("%02X-%02X ",b[8],b[9]);*/ printf("%6d円です。\n",b[11]*256+b[10]); pasori_close(p); return 0; //printf("%02X%02X%02X%02X\n",b[12],b[13],b[14],b[15]); } } } printf("読み取れませんでした。\n"); pasori_close(p); return 0; }
実行ファイルの作成はこんな感じ
gcc -DHAVE_CONFIG_H -I. -I.. -I../src -I../ -g -O2 -MT suica_zandaka-suica_zandaka.o -MD -MP -MF .deps/suica_zandaka-suica_zandaka.Tpo -c -o suica_zandaka-suica_zandaka.o `test -f 'suica_zandaka.c' || echo './'`suica_zandaka.c mv -f .deps/suica_zandaka-suica_zandaka.Tpo .deps/suica_zandaka-suica_zandaka.Po /bin/bash ../libtool --tag=CC --mode=link gcc -I../src -I../ -g -O2 -o suica_zandaka suica_zandaka-suica_zandaka.o ../src/libpafe.la
プログラムの出力をAquesTalkPiにしゃべってもらう
./suica_zandaka | ../../aquestalkpi/AquesTalkPi -v f1 -f - | aplay
こんな感じ
参考
- http://homepage3.nifty.com/slokar/pasori/libpafe.html
- http://homepage3.nifty.com/slokar/pasori/suica_plugin.html
- http://homepage3.nifty.com/slokar/pasori/gsuica.html
- http://libpasori.sourceforge.jp/
- http://libpasori.sourceforge.jp/cref/S/3.html
- http://d.hatena.ne.jp/imaiworks/20130618/1371588611
- http://dkpyn.com/blog/%E3%83%A1%E3%83%A2/smartq-v5/pasorirc-s330%E3%81%A8smartq-v5linux%E3%81%A7%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%AB%E3%83%BC%E3%83%89%EF%BC%86%E4%B8%89%E8%80%85%E9%96%93%E9%80%9A%E4%BF%A1
- http://gok.dip.jp/nissi/0684.htm
- http://www.imfj.net/people/nomura/soft/PaSoRi/
- http://www.imfj.net/people/nomura/soft/PaSoRi/SuicaValue.html
- http://www.imfj.net/people/nomura/soft/PaSoRi/EdyValue.html
- http://felicalib.tmurakam.org/refdoc/felicalib_8h.html#dfc75fb8147510766d7ce11d3e514584
- http://felicabalviewer.sourceforge.jp/linux.html
- http://sourceforge.jp/users/bhbops/pf/libpafe_lite/wiki/FrontPage
- http://www014.upp.so-net.ne.jp/SFCardFan/index.html
- http://masanoriprog.blogspot.jp/2012/05/linuxubuntupasori-icoca.html
- http://www.ei.fukui-nct.ac.jp/~t-saitoh/mt/2012/07/libpafe.html
0 件のコメント:
コメントを投稿