Qtは、クロスソースの製品であると同時にOpenSourceであるため、開発ツールとして選択されました。 Qtはその時点で最新バージョン5.4をインストールしました。 プログラムの最初の使用は、タッチスクリーンを備えたWindows OSで予想されていました。 パスの途中のどこかで、彼らはSmart210をやり直すことにしました。
Smart210は、WinCE 6、Linux、Qtopia、AndroidなどのOS(同梱)をインストールできる中国の兄弟の開発です。 Debianビルドもテストされました。
このデバイスのターゲットシステムはもともとLinuxでした。 厚さゲージのコントローラーでの作業は、FT2232HLを介して実行されます。
独自のFTDIドライバーを使用するには、多くの手順と機能があります。
標準のftdi_sioおよびusbserialライブラリを無効にする必要があります。
sudo rmmod ftdi_sio sudo rmmod usbserial
これは、これらのライブラリをカーネルモジュールとして含めてカーネルを再構築しないと実行できません。
カーネルは、メーカーから提供されたtoolschain arm-linuxバージョン4.5.1を使用してアセンブルされました。新しいコンパイラでカーネルを構築しようとすると、friendlyarm-ts-mtinputモジュール(マルチタッチスクリーン操作を担当)が落ちたため、タッチスクリーンが動作しなくなりましたエラー、新しいコンパイラ用に再構築する機能がありません(ソースなし)。
ファイルmini210_linux_defconfigで、コンパイラへのパスを記述し、カーネルモジュールとして構成します。
CONFIG_CROSS_COMPILE="arm-linux-" ... CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL = mには、ftdi_sio(念のため、CONFIG_USB_SERIAL_FTDI_SIO = m)を含む、すべての依存ライブラリがカーネルモジュールとして含まれていますが。 次に、コマンドを実行します。
./build
モジュールの構成が変更されたため、次を実行する必要があります。
make modules
その後、ファイルシステムにコピーします。 ディスクからパッケージに含まれるyaffs2ユーティリティによるファイルシステムのアセンブリにより、インストール時にファイルエラーが発生しました。 標準を使用する必要がありました。
mkyaffs2 rootfs_rtm_210 rootfs_rtm_210.img
操作が完了すると、FTDIライブラリを使用できるようになりました。
Qt for Linuxはバージョン5.3.2を取得し、linuxfbサポートでコンパイルしました。
この方法を続けて使用すると、描画速度が不十分であることがわかりました(描画時にタッチスクリーンが応答しませんでした)。 フレームバッファーの描画に使用されます。OpenGLESのドライバーサポートがありません。
Android用のFTDIドライバーはJava専用であるため、Androidで停止し、ttyUSBを使用して書き換えるために再描画する必要がありました。
FTDIが切断および接続されたときに、0x00バイトの出現が検出されたため、シフトが発生し、10バイトの固定データ長で、パケットの先頭の兆候がないため、迷惑になりました。 さらに、CRC8でテストされた最初の10バイトを探すという決定(緊急事態によりパケットが中断される可能性があるため)。
bool Controller::readBlockN(uchar *tmp, qint64 blockSize){ int bytesReceived = 0; int bytesRead = 0; qint64 m_blockSize = blockSize; while (m_blockSize > 0) { bytesReceived = read(uart0_filestream, ((void*)&tmp_block) + bytesRead, m_blockSize); if (bytesReceived > 0){ m_blockSize -= bytesReceived; bytesRead += bytesReceived; if (bytesRead > 9) { if (tmp_block[bytesRead - blockSize + 9] == getCRC8((uchar*)&tmp_block + bytesRead - blockSize, 9)){ memcpy(tmp, (uchar*)&tmp_block + bytesRead - blockSize, 10); } else{ m_blockSize = 1; } } } } return true; }
この段階で、ttyUSB *ポートを使用する権利がないことが発見され、これは各リブート後に発生します。 解決策は、プログラムのロード時に行を挿入することです。
system("su -c 'chmod 777 /dev/ttyUSB*'");
ナビゲーションパネルを削除するために残った(画面の使用を最大化し、さらに、他のアプリケーションがこのデバイスを起動しないことを前提としています)。 標準パネルは非表示イベントに応答せず、常にすべてのアプリケーションの上に表示されます。 私はそれを削除することにしました:
system("su -c 'rm /system/app/SystemUI.apk'");
FriendlyARMには、時刻をリセットしないバッテリーがありますが、それでもアプリケーションの起動時にデフォルトのAndroidの時刻設定を呼び出すことにしました。
system("am start -n com.android.settings/.DateTimeSettingsSetupWizard");
グラフィックはQgraphicsViewで完全にトレースされます。
システム状態:
手動モード:
自動モード:
ビデオ:
研究と結果:
Debian:
かさばる、純粋な形式で約430MBを必要とし、OpenGL ESのサポートがあり、mesaドライバーが使用されます。 マルチタッチスクリーンはサポートされていません。
Qtopia:
OpenGL ESのサポートの欠如。実際、長い間サポートされていません。
Linux(rootfs_rtm_210):
OpenGL ESのサポートの欠如は、その純粋な形式でごくわずかなスペースを占有します〜15MB、Qtからすべてのライブラリをインストールすると〜90MB、OSのロード速度は8秒強です。
WinCE 6:
私はそれを真剣にテストしませんでした。OpenGLESについて言及するためにバイナリファイルに詰め込んだので、CEの下での議論が必要になります。 時間がなくなり、延期することにしました。
Android:
OpenGL ESをサポートし、約215MBを消費し、約2分で起動します。