あらすじ
NFCのことを調べている私であったが、Qtもやらなくてはならない。
「NFCのライブラリをQtで作ればいいじゃないの」
そんな声が聞こえてきたので、やることにした。
Qtでのシリアルポートアクセスに、QSerialDeviceを使うことにした。
gitoriousにあるものを使っているのだが、Qt4.8くらいになるとブランチはmasterではなく2.0を使わないとコンパイルエラーになりそうだ。
基本的にこういう外部のデバイスは、QIODeviceを継承することになる。
ファイルもそうなので、UNIX系の考え方でいいのだろう。
しかしまあ、この「デバイスをファイルとしてアクセスする」という考え方は長いこと使われているな。
アクセスを一般化させたのは、すごいと思う。
さて、私はQSerialDeviceを使って、RC-S620/Sへのライブラリを作ることにした。
GUI用に非同期化する、ということを考えなければ、比較的簡単だった。
といいつつも、実際に動かすまでには時間がかかった。
QIODeviceのことを考えず、QSerialDeviceのヘッダ定義だけでアクセスしようとしていたからだ。
具体的に言えば、virtualな関数をまったく見ていなかった、ということだ。
詳細に書いても救いにはならないなぁ。
とにかく、外部デバイス系のclassは基本的にQIODeviceのAPIで使えるように作り込もうとしている、ということだけ覚えておけば良いだろう。
QSerialDeviceだって、ボーレートやストップビットみたいなデバイス依存のAPIを追加していること以外は、QIODeviceのAPIをoverrideしているのだ。
それ以外については、作っていたC++クラスの中身はほぼそのままだ。
qmakeの文法などで困ったりはしたものの、コーディングレベルではほとんどそのまま移植できた。
おそるべし、Qt。
PaSoRi用のライブラリも作って、セットでgithubにでも置こうかと思ってたけど、USBはなかなか壁が高かった。。。。
Win32で、libusb-1.0のライブラリを使うとCRCエラーが発生してしまうのだ。
cygwinやLinuxだと動いているのにねぇ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。