パーソナルツール
現在の場所: ホーム takalog FeliCa の Id を python で読む(その2)
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
« 2008November »
Su Mo Tu We Th Fr Sa
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
このBlogについて
鈴木たかのりです。とりあえず日記っぽく雑多なことを書き込んでいこうと思っています。 zope/plone関係の技術的な内容については http://takanory.net の方にまとめていこうと思います。 コメント・ツッコミはご自由にどうぞ。
最近のトラックバック
日本語にてPlone3.xを使用する便利なプロダクト (ブログ 08-31 13:52)
新しい写真集モジュール (ロバートのブログ 03-18 08:28)
新しい写真集モジュール (ロバートのブログ 03-18 08:28)
トランペットアンサンブルコンサート (人生日記 03-08 17:37)
PloneSlimboxに乗り換え♪ (pt001-blog 02-23 17:14)
カテゴリ
puzzle (34)
mac (17)
av (26)
books (22)
coreblog (47)
ds (21)
lego (40)
misc (74)
moblog (253)
movie (31)
pc (40)
plone (215)
server (55)
suidou (29)
snowscoot (8)
sports (32)
software (126)
winds (37)
python (31)
 
文書操作

FeliCa の Id を python で読む(その2)

作成者 takanori投稿日 2008年01月11日 23時55分 最終変更日時 2008年01月12日 00時05分

FeliCa の Id を python で読む(その1) でいったん挫折した私ですが、意外なところがきっかけで再度やってみることにしました。

そのきっかけは先日開催された Python Unconference Tokyo 1 です。

私は参加できなかったんですが、発表資料が公開されたのでざっと読んでみました。

その中のライトニングトーク PyTCで学ぶPython C拡張の書き方 (末永 匡さん) という発表資料を読んでみると、python で外部のライブラリを使用するための主な手段についての説明がありました。

その中には ctypes, SWIG, Pyrex, SIP, Boost.Python, Cによる拡張モジュールという手段が説明されており、その中で ctypes はこんな感じで紹介されていました。

  • The ctypes package
    • Windowsではおなじみ
      • Python 2.5以降は標準モジュール
    • お手軽・コンパイルいらず
      • お試しで使う場合、パフォーマンスを気にしない場合にはオススメ!
    • 実用的にするにはラッパをPythonで書く必要あり

「お手軽・コンパイルいらず」。これしかない!!

というわけで、ctypes で felica を読む dll のラッパーを書いてみることにしました。

まずは準備です。

python 2.4.4ctypes 1.0.2 をインストールします。インストーラ(.msi, .exe)があるから楽ちん。

次に、FeliCa を読むライブラリ(dll)を用意します。 以前調べた libpasori よりも felicalib というのがあって、こっちの方がよさげなのでこれを使うことにします。

ちなみに felicalib を使うためには FeliCaポートソフトウェア もインストールする必要があります。

というわけで作ってみました。コード(felicalib.py)はこんな感じです。

from ctypes import *

flib = cdll.felicalib # ライブラリを読む

flib.pasori_open.restype = c_void_p pasori = flib.pasori_open() # PaSoRi と接続

flib.pasori_init(pasori)

flib.felica_polling.restype = c_void_p felica = flib.felica_polling(pasori, 0xFFFF, 0, 0) # FelCa を読む

idm = c_uint64() flib.felica_getidm(felica, byref(idm)) # IDm 取得

print "%016X" % idm.value flib.pasori_close(pasori) # PaSoRi と切断

試しに読み込んでみると、きちんと IDm が取得できました。わーい。

ちなみに、本当は pasori_open の戻り値は構造体へのポインタなのですが、構造体を作って...というやり方がよくわかんなかったので、とりあえずポインタだけ取っておいて、次の関数に渡すようにしました。(手抜き)

「まとめ」

  • ctypes はとりあえず Windows 用の dll 使ってなにか作る分には楽
  • コンパイラ不要なので手軽
  • dll 使うもの、他にもなんか試してみたいなぁ

参考資料

カテゴリ
python python
トラックバック用URL:
http://takanory.net/takalog/824/tbping
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word


Powered by vine linux, python, zope, plone, coreblog