Armadilloフォーラム

QT quickからのGPIOへのアクセスについて

kenken

2014年5月8日 20時01分

お世話になります。yumiyaと申します。

Armadillo-840とQT quickでアプリを作っていこうかと思っていますが
QT quickから実際のGPIOにどうアクセスしたら良いか悩んでいます
C++との連携が必要かと思われますが、どこか参考などありましたら
ご教示願えませんでしょうか。よろしくお願いします。

コメント

at_takuya.sasaki

2014年5月13日 14時42分

佐々木です。

GPIOの操作については、以下のマニュアルにあるように、sysfs経由での
ファイルアクセスを利用されると思います。
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…

ファイル操作をQt Quickから実施する方法ですが、私が以前試したのは、
Qt Quick2の拡張プラグインとして、ファイル操作部をC++で実装して、
Qt Quick2から呼び出すようにしました。

以下の本の、「6.5 C++での拡張」を参考にしました。
[Qt QuickではじめるクロスプラットフォームUIプログラミング](折戸孝行 (著))

記憶を頼りにした手順ですが、以下のような感じです。

1) Qt Creatorのプロジェクトの作成で、[ライブラリ]-[Qt Quick2 Extention Plugin]
  を選択

2) オブジェクトクラス名やURIは任意に変更

3) QMLから呼び出すためのpublicメソッドを作成
その際ヘッダには、以下のようにQ_INVOKABLEをつける必要があり
Ex:)

Q_INVOKABLE QString TestMethod(QString)

4) ビルドするとsoファイルができるので、qmldirファイルと一緒に
  Armadilloの/lib/qt5/qml配下に、URIと同じよう
ディレクトリ構成を作って配置。

Ex:) /lib/qt5/com.mycompany.qmlcomponents/xxx.so

4) 呼び出すQML側でimport定義

5) QML側でオブジェクトクラスを定義して、メソッドをコール

Ex:)

MyItem{
id: myitem
}

myitem.ReadFileString("/tmp/hoge")

細部に誤りがあるかもしれず、かつ、あまり他の方法を調べずに
実装したので、他にももっと簡単なやり方などがあるかとは思いますが、
ご参考になれば。

以上です。

佐々木様

書籍を入手して実験してみたいと思います。
ありがとうございました。