- 締切済み
iアプリでのUART利用
iアプリにて、UARTを利用してバーコードリーダとのやり取りをすることになり、いろいろ試しているのですがうまくいかず悩んでいます。 DOCOMOのページに"UART接続によるシリアル通信"の技術資料がありましたので、 (http://www.nttdocomo.co.jp/binary/pdf/corporate/technology/document/foma/foma10.pdf) ダウンロードして見てみましたが、サンプル的なものはConnector.open()での接続の仕方だけでした。 実際にこのあとデータを取得したいのですが、何をどういう風に記述していったらいいのかが分からず困っています。 どなたか分かる方いらっしゃれば教えてください。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- _ranco_
- ベストアンサー率58% (126/214)
お返事が遅れましたが、これ以上は現場と現物を相手に苦労するしかないようです。 (1)Connector.open()への引数は完全に正しいのか。 (2)そのハードウェア(バーコードリーダー)は、PCのCOMMに接続した場合、正常に動作(正しい読み取りができる)するのか。 (ハードウェアの正常性) 少なくとも以上2点は、チェックしたいですね。
- _ranco_
- ベストアンサー率58% (126/214)
追記: JSR-000118 Mobile Information Device Profile 2.0 - Final Releaseのほうは、55-59ページにcomm接続の使い方がサンプルコードとともに書かれています。どうも問題は、最初のConnector.open()におけるポートのコンフィギュレーションのようです。 cheat sheet(カンニングペーパー)のほうは、ポートコンフィギュレーションパラメータの一覧が載っています。
- _ranco_
- ベストアンサー率58% (126/214)
すいません。これまでは一般的なcommの路線で話をしてきました。 私自身に今ちょっと時間がなくなってきたので、JavaMEにおけるcomm I/Oについては、以下の二つの資料の関連部分を見てください。 JSR-000118 Mobile Information Device Profile 2.0 - Final Release http://jcp.org/aboutJava/communityprocess/final/jsr118/ A Generic Connection Framework cheat sheet http://developers.sun.com/mobility/midp/ttips/gcfcs/index.html
- _ranco_
- ベストアンサー率58% (126/214)
だから、COMMの場合は物理的にハードウェア割り込みだから、必ずイベントハンドラ(serialEvent()メソッド)からI/Oするんですよ!。
補足
何度もすみません。正直まだピンと来ていません。 それはiアプリでも使えるのでしょうか? iアプリのイベントリスナーの中にシリアルポートからの リスナーが見つからないのですが。。 (探している場所が違うのでしょうか・・・?) iアプリでもできるということでしたら、 具体的にはどういうコードを記述すればいいのでしょうか?
- _ranco_
- ベストアンサー率58% (126/214)
> 何か記述の仕方に誤りがあるでしょうか? serialEvent()からreadするんだよ。つまり、相手の動きを待つ。こちらからのいきなりの強姦は、だめ。 でも、バーコードリーダーって、ふつう、キーボード入力として(超簡単に)データ捕捉するよね?。それに今はほとんど、USBデバイスでは?
補足
ありがとうございます。 客先から指定されたバーコードリーダーがUART方式なのでどうしようもなく、四苦八苦してます。 DOCOMOの資料"UART接続によるシリアル通信"の中での送受信の挙動を見ると、 ご指摘のようにオープンができていれば、あとはread()メソッドを 呼び出して受信バッファからデータを取り出せるとあるので、 自分なりに試してはいるのですが、うまくいかなく困ってます。 最終ページにもiアプリからUART接続時に使用する関数が列挙されているのですが、 スクラッチパッドやネットワークに接続するような関数ばかりですので、 これらだけでアクセスできるようにも思うのですが・・。
- _ranco_
- ベストアンサー率58% (126/214)
この資料は、JavaでI/Oをふつうに書ける人が対象のようです。クラスもメソッドもjava.ioのとほとんど同じです。CLDCのGeneric Connection Frameworkのドキュメンテーションやサンプルコードを探してください。
補足
アドバイスありがとうございます。 早速サンプルコードなどを参考にしながらコーディングしているのですが、READするところで、UART_DISCONNECTのエラーが発生してしまいます。 try{ InputConnection con = (InputConnection)Connector.open("comm:/0;baudrate=115200,databitlen=8,parity=NO,stopbitlen=1,flowctrl=OFF" ,Connector.READ_WRITE); InputStream in = con.openInputStream(); byte [] buf = new byte[1024]; in.read(buf); in.close(); }catch(ConnectionException e){} 上記のようにコーディングし、起動しますとopen自体はうまくいき、 外付バーコードリーダでスキャンした瞬間、in.read(buf)のところで例外が発生しました。 getStatus()で値を取得しますと、UART_DISCONNECTという結果でした。 スキャンした時点で反応しているので接続はうまくできているようなのですが、 肝心のデータが取得できずに困っています。 何か記述の仕方に誤りがあるでしょうか?
補足
いろいろ調べてくださってありがとうございます。 ご指摘のページの情報をもとに試してみましたが、iアプリ上でのjavaではcommconnectionは使用できないようで、ダメでした。 整理してみますとConnector.open()時に外付バーコードリーダが接続されていなければエラーが帰りますが、ここではエラーが帰ってきませんので、UART接続上にシリアル通信路は開設できているのかなと思います。 その次にREADした時点でUART_DISCONNECTEDが発生していますが、 これは物理的に接続が絶たれた(接続ケーブルが外れたとき)ときに発生するようです。 当然、ケーブルはつなげたままですのでそんなことはないのですが。。。 技術参考資料ではそんな面倒な手順は特に書いていないのですが、 自分の記述で何か忘れているんでしょうか・・・。