今日は天気もいいので、プログラム。せらくんです。
さて、シリアルポート通信でATコマンド編も今回で最終回。
次回からは「ボタン一発位置情報QT」を作ります。
■ソース
さて、ソフト自体の説明は他の記事で紹介するとして、
このカテゴリではプログラム的なお話を。
まずは、ソースコードを。
at_serial.h
at_serial.c
at_main.c
at_serial.hとat_serial.cは、ATコマンドをZAURUSに送るための
操作をまとめたものです。
at_main.cはat_serial.cの使い方のサンプルコードみたいなものです。
■インターフェース
この先、インターフェースの変更はありありですけど、
とりあえず、openとかwriteとかと同じインターフェースにしています。
int at_open(char * );
int at_close(int );
int at_write(int , char * , int);
int at_read(int , char * , int);
int at_open(char * );
引数には、"/dev/ttyS3"とかの開くデバイスが入ります。
戻り値はファイルディスクリプションです。
int at_close(int );
引数にはat_openで開いたディスクリプションを入れます。
開いたら、きちんと閉じましょう。
int at_write(int , char * , int);
引数は、ディスクリプション、書き込む文字列、文字数です。
int at_read(int , char * , int);
引数は、ディスクリプション、読み込むバッファ、文字数です。
戻り値は読み込んだ文字数です。0はタイムアウトをした時もこの値。
まぁ、わかりづらいと思うんで、サンプルのat_main.cでも眺めてね。
■注意点(というか、悩んだことコーナー)
open時は、O_NONBLOCKでノンブロックにしています。
なんかopenで帰ってこなくなることがあるんで。
readにselect使ってブロックしているから問題ないはずですよね。
writeで書くときのサイズは注意が必要です。
普通文字列だったら後ろに'\n'文字とかが勝手に加えられてます。
でも、これを送るとうまく動きません。
writeで書くときの文字数はジャストにする必要ありです。
AT@LBC1\r\nだったら、9になります。
※今回、悩んだっすよ。
closeしないで、cardctl suspnedすると実行中にサスペンドされます。
これも、結構悩んだっす。
突然サスペンドされるんで、何事かと。
■では。
なにかアドバイスありましたら、コメントをば。
では、不具合が出ないことを祈って。
あっと、本ソースコードを使用しての損害などについては、
一切保障できませんのでお気をつけくださいね。
2006年04月21日
この記事へのコメント
ご紹介させていただきました
Posted by 無料 at 2008年01月24日 18:25
コメントを書く
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/16911919
この記事へのトラックバック
http://blog.seesaa.jp/tb/16911919
この記事へのトラックバック

