これはHow to use nix's ioctl? に関連しています。しかし、それは同じ質問ではありません。
可変サイズのバッファを取得したい。ioctl
Xバイトを読み取る必要があることを教えてくれる別のものがあります。Cヘッダーは、次のことも教えてくれます:
#define HID_MAX_DESCRIPTOR_SIZE 4096
#define HIDIOCGRDESC _IOR('H', 0x02, struct hidraw_report_descriptor)
struct hidraw_report_descriptor {
__u32 size;
__u8 value[HID_MAX_DESCRIPTOR_SIZE];
};
次のようにマクロを定義します。
ioctl_read_buf!(hid_read_descr, b'H', 0x02, u8);
そして後で呼び出します:
let mut desc_raw = [0u8; 4 + 4096];
let err = unsafe { hid_read_descr(file.as_raw_fd(), &mut desc_raw); };
これを行うdesc_raw
と、ゼロでいっぱいになります。size
構造体の定義に基づいて、最初の 4 バイトが含まれていると予想していました。
代替手段も機能していないようです
ioctl_read!(hid_read_descr2, b'H', 0x02, [u8; 4+4096]);
// ...
let mut desc_raw = [0xFFu8; 4 + 4096];
let err = unsafe { hid_read_descr2(file.as_raw_fd(), &mut desc_raw); };
どちらの場合も、desc_raw
0xFF で初期化を試みましたが、呼び出し後はそのままのようです。
ioctl_read_buf
マクロの使い方が間違っていませんか?