Xunwei4412開発ボードQt制御ハードウェア

QTでドライバーを操作するにはどうすればよいですか?たとえば、LEDライトを点灯させたい場合、C言語でopen、read、write、ioctl関数を使用して操作できますが、QTで使用する言語はC ++です。それでは、ドライバーをどのように操作しますか?
混合プログラミングにはCとC ++を使用できます。最初にブザーを制御するAPPコードを見てみましょう。例としてターミネーターI.MX6ULLを示します。iTOP-4412の場合、テストルーチンコードを参照できます。コードは次のとおりです。次のように:
#include "stdio .h" #include "unistd.h" #include "sys / types.h" #include "sys / stat.h" #include "fcntl.h" #include "stdlib.h"# include "string.h"
#define BEEPOFF 0 #define BEEPON 1
/ *
* @description:メインメインプログラム
* @ param -argc:argv配列要素の数
* @ param-argv:特定のパラメーター
* @return:0成功;その他の失敗
* /
int main(int argc、char * argv [])
{ int fd、retvalue; char * filename; unsigned char databuf [1]; if(argc!





return -1;
}
filename = argv [1];
/ *ビープドライバーを開く* /
fd = open(filename、O_RDWR);
if(fd <0){ printf( "file%s open failed!\ r \ n" 、argv [1]); return -1; } databuf [0] = atoi(argv [2]); / *実行する操作:開くまたは閉じる* / / * / dev / beepファイルにデータを書き込む* / retvalue = write(fd、databuf、sizeof(databuf)); if(retvalue <0){ printf( "BEEP Control Failed!\ r \ n"); close(fd); return -1; } retvalue = close(fd) ; / *ファイルを閉じる* / if(retvalue <0){ printf( "file%s close failed!\ r \ n"、argv [1]); return -1; } return 0; }


















上記のコードから、C言語を使用してブザーを制御することは、デバイスノードをオンにしてから、書き込みを介してデータを書き込んでブザーを制御することに他なりません。CとC ++の混合プログラミングを使用できるので、Cのブザーを制御するためのコードをQTプログラムに直接追加するだけでよいのでしょうか。それでは、混合プログラミングをどのように行うのでしょうか。
最初に新しいQTプロジェクトを作成し、次にブザーの開閉を制御する2つのボタンを追加します。UIインターフェイスを図62.4.1に示します。C

++はオブジェクト指向であり、Cであるため、コードの移植を開始します。はプロセス指向であるため、QTでは、オブジェクト指向思考を使用してプログラミングする必要があるため、最初のステップは、クラスを作成し、C音声制御ブザーのコードをクラスにカプセル化することです。
このプロジェクトを右クリックし、[新しいファイルの追加]を選択して、図62.4.2に示すようにC ++クラス

を追加します。次に、ブザーを操作しているため、クラスの名前を追加します。次に、図のようにビープと記述します。図62.4.3:

いいえ。1つのステップとして、C言語制御ブザーコードのヘッダーファイルを、Beepクラスを追加して生成されたファイルbeep.hに追加しますが、ヘッダーファイルを直接コピーすることはできません。 extern "C" {}を使用して囲みます。コードは次のとおりです
。extern "C" { #include "stdio.h" #include "unistd.h" #include "sys / types.h" #include "sys / stat.h "#include" fcntl.h "#include" stdlib.h "#include" string.h "}追加完了を図62.4.4に示します。図62.4。





int fd、retvalue;
char * filename;
unsigned char databuf [1];
追加、図62.4.5に示すように、

次にbeep.cppを開き、コードをコピーしてC言語制御ブザーでデバイスノードを開きます。関数では、QTでprintfを使用できないことに注意してください。コードは次のとおりです
。/*ビープドライバーを
開きます* / fd = open(filename、O_RDWR);
if(fd <0){ return; } After図62.4.6に示すように、それを追加:ピクチャー62.4.6は、その後、我々は、ブザーをオフにするブザー機能をオンにする機能を作成する最初のステップは、それを宣言することです。beep.h 、次に実装でそれをbeep.cpp。宣言:コードは次のとおりです。voidBeep_On(); void Beep_Off();追加、図62.4.7に示します。図62.4.7実装:コードは次のとおりです。c言語関数は次のようにする必要があります。追加::この関数がC関数であることを意味する前に。void Beep :: Beep_On(){ / * / dev / beepファイルにデータを書き込む* / databuf [0] = 1;




















retvalue = :: write(fd、databuf、sizeof(databuf));
if(retvalue <0){ :: close(fd); return; } } void Beep :: Beep_Off(){ databuf [0] = 0; retvalue = :: write(fd、databuf、sizeof(databuf)); if(retvalue <0){ :: close(fd); return; } }追加、図62.4.8に示します。図62.4.8は追加その後、このクラスを直接使用できます。最初にウィジェットでビープ音を作成し、次にコンストラクターでオブジェクトを作成します(図62.4.9を参照)。図62.4.9次に、対応するスロットを実行します。関数図62.4.10に示すように、開閉できます。






















おすすめ

転載: blog.csdn.net/mucheni/article/details/115208092