Android アプリから ( getFileDescriptor()を使用して) USBデバイスのファイル記述子を受け取り、ネイティブ コードで JNI を介して送信し、Unix ソケットを介して子プロセス (AVRDude) で受け取り、アップロードに使用しようとしました。
そのため、「タイプライターではありません」というエラーが表示されます。ファイル記述子が間違って渡されたということですか (正の int であり、受信後に -1 に等しくありません)。それとも、別のエラーが発生する可能性がありますか? アクセス許可の問題でしょうか (UsbDevice へのアクセス許可が付与され、ソケットを介して渡すとアクセス許可が保持されているように見えますが、デバイスはルート化されていません)。
使用したコード ( ser_posix.c
AVRDude 5_11_0 ソース内):
fprintf(stdout, "Try to set baud = %i for fd = %i", baud, usbfd);
if (!isatty(usbfd)) { // Error here!
fprintf(stderr, "!isatty\n");
return -ENOTTY;
}
ソケットファイル記述子から受信した直後に、有効であることがチェックされます(そして、私はそれが正しいと信じています):
if (!(fcntl(usbfd, F_GETFL) != -1 || errno != EBADF)) {
fprintf(stderr, "Invalid file descriptor %d, - %s", usbfd, strerror(errno));
exit(1);
}
元々、ser_posix のファイル記述子は次のように受信されます (動作していると思います)。
fd = open(port, O_RDWR | O_NOCTTY | O_NONBLOCK);
私の実装では、代わりに Android アプリのファイル記述子を使用します。それは期待されていることですか?