1

Linux C プログラムを Java に移植したいと考えています。このプログラムは、USB ケーブルで PC に接続されたカメラを制御します。C コードは Linux SCSI Generic (sg) を使用します。

C プログラムのサンプル コード:

#include <linux/../scsi/sg.h>

...

static int scsi_write(int sg_fd, uint8_t *cmd, uint32_t cmdLen,
               uint8_t *buf, uint32_t bufLen) {

    sg_io_hdr_t io;
    int r;

    memset(&io, 0, sizeof(io));

    io.interface_id = 'S';
    io.cmd_len = cmdLen;

    ...        
    r = ioctl(sg_fd, SG_IO, &io);
    ...
}

このプログラムを Java に移植する方法はありますか? Java 用に書かれたクロスプラットフォームの SCSI ライブラリーを探していましたが、見つかりませんでした。また、SCSI/sg を介した JNI を探していましたが、運もありませんでした。

4

3 に答える 3

3

Java は多くの POSIX API をサポートしていますが、ioctlシステム コールはその機能の一部ではありません。あなたがする必要があるのは、JNIを使​​用して、Javaがscsi_write質問に書いたような関数を呼び出せるようにすることです。とにかく外部ハードウェアへのインターフェースについて話していることを考えると、より多くのシムを使用するための追加コストは最小限です。cmdおよび引数はbuf、Java バイト配列に自然にマップされます (Java の配列はその長さを認識しているため、 Java レベルでcmdLenおよび引数をモデル化することはまったくありません)。bufLen

于 2010-12-21T09:21:37.477 に答える
2

JSR080 (javax.usb) の実装など、Java ベースの USB ライブラリを使用すると、よりうまくいく可能性があります。参照実装はこちらにありますが、Linux 実装のみが本番環境に対応しています。

于 2010-12-21T09:34:16.197 に答える