10

こちら で説明されているように、USB デバイスが Windows 8 マシンに接続されたときに WinUSB をドライバーとして自動的に使用するように USB デバイスをセットアップしようとしています。

それは言います:

デバイスが拡張機能記述子をサポートしていることを USB ドライバー スタックが認識するために、デバイスは、文字列インデックス 0xEE に格納されている OS 文字列記述子を定義する必要があります。

これは、メモリ位置 0xEE に記述子を含む構造体を作成する必要があることを意味します。Cでそれについてどうすればいいですか?

これが私が試したことです:

// The struct definition
typedef struct {
    uint8_t bLength;
    uint8_t bDescriptorType;
    uint8_t qwSignature[14];
    uint8_t bMS_VendorCode;
    uint8_t bPad;
} usb_os_str_desc_t;

// Create a pointer to a struct located at 0xEE
volatile usb_os_str_desc_t* const extended_feature_support = (usb_os_str_desc_t*) 0xEE;

// Create a new struct at the location specified in "extended_feature_support"
(*extended_feature_support) = {
    .bLength = 0x12,
    .bDescriptorType = 0x03,
    .qwSignature = "MSFT100",
    .bMS_VendorCode = 0x04,
    .bPad = 0x00
};

しかし、コンパイラはこれを好まず、データ定義に型がないと文句を言います。Cでこれを行う方法はありますか?記事を正しく理解していますか?

どんな助けでも感謝します。

4

1 に答える 1