Javaアプリでデバイスファイルを制御
SDIOインターフェイスにより接続されたSDIOホスト機器とSDIOデバイス機器との間で、SDIOホスト機器上で動作するJava swingアプリから、SDIOデバイス機器へ、通信試験をしています。SDIOホスト上で動作環境は以下の通りです。
OS:Ubuntu 12.10 server
Java:version7
ホスト上で動作するSDIOデバイス機器用のデバイスドライバ:ttyドライバ
以下のプログラムでwriteは正常に動くのですが、readが実行されません。
ttyドライバは、デバイスファイルとして、別の場所にてFile file = new File("/dev/ttyPontos0;で宣言しています。reaed関数のin.available();の戻り値は、0が変えてきてしまいreadできないという状態です。お気付きの点ありましたら、大変ありがたいです。宜しくお願い致します。
public void actionPerformed(ActionEvent event)
{
int i,rev_bytes;
if(event.getActionCommand().equals("register_read"))
{
char[] cmd1 = {'s','h','o','w',' ','r','e','g',' ','-','r',' ','0','x',/*11*/'0','0','4','0','5','4','A','0','\r'};
byte[] txdata = new byte[cmd1.length];
byte[] rxdata = new byte[126];
for(i=0;i<cmd1.length;i++)
{
txdata[i]=(byte)cmd1[i];
}
logfild.setText("register_read\n");
send_byte2(txdata,cmd1.length);/*byte列を送信*/
}else if(event.getActionCommand().equals("register_write_all"))
{
byte[] rxdata = new byte[126];
logfild.setText("receive\n");
rev_bytes=receive2(rxdata);
String f = new String(rxdata);
logfild.setText("rxdata=\n"+ f);
}
}
public void send_byte2(byte[] senddata,int length)
{
try { /*fileは別の場所で宣言しています*/
out = new FileOutputStream(file);
out.write(senddata);
out.close();/*書込み終了*/
logfild.append("\nFileOutputStream1_success\n");
} catch (IOException e) {
// TODO 自動生成された catch ブロック
logfild.append("FileOutputStream1_fail\n");
e.printStackTrace();
}
}
/*バッファにあるだけ受信する*/
public int receive2(byte[] receive)
{
int Bytes=0,num;
try {
/*fileは別の場所で宣言しています*/
FileInputStream in = new FileInputStream(file);
num=in.available();//read可能なバイト数を返す
logfild.append("read_num\n"+num);
Bytes=in.read(receive);
in.close();
} catch (IOException e) {
logfild.append("read_fail\n");
e.printStackTrace();
}
return Bytes;
}
お礼
うまくいきました。 ありがとうございます。