2012/02/19

[qt]RC-S620/S用に仕立てる

あらすじ

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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。