2006年04月21日

シリアルポート通信でATコマンド(その4)

今日は天気もいいので、プログラム。せらくんです。

さて、シリアルポート通信で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すると実行中にサスペンドされます。
これも、結構悩んだっす。
突然サスペンドされるんで、何事かと。


■では
なにかアドバイスありましたら、コメントをば。

では、不具合が出ないことを祈って。

あっと、本ソースコードを使用しての損害などについては、
一切保障できませんのでお気をつけくださいね。


posted by せらくん at 00:00| 神奈川 晴れ| Comment(1) | TrackBack(0) | ZAURUSなプログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ご紹介させていただきました
Posted by 無料 at 2008年01月24日 18:25
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/16911919

この記事へのトラックバック