人に指摘してもらって気がついたのだが、Windows XP SP1以降のWindowsは、USBデバイスから、Microsoft OS Descriptor なるものを取得しようとするらしい。
USB に関する FAQ: 中級レベル (microsoft.com)
Microsoft OS ディスクリプター (microsoft.com)
具体的には Windowsは index 0xEE で String Descriptor を取得しようとしてくる。
そんなindexのStringDescriptorは持ってません、と無視してしまえば問題はないのだが、たとえば、STM32の、最初期(2007年頃)のUSBサンプルコードでは、
こんな String_Descriptor配列を
ONE_DESCRIPTOR String_Descriptor[4] =
{
{(u8*)Joystick_StringLangID, JOYSTICK_SIZ_STRING_LANGID},
{(u8*)Joystick_StringVendor, JOYSTICK_SIZ_STRING_VENDOR},
{(u8*)Joystick_StringProduct, JOYSTICK_SIZ_STRING_PRODUCT},
{(u8*)Joystick_StringSerial, JOYSTICK_SIZ_STRING_SERIAL}
};
u8 *Joystick_GetStringDescriptor(u16 Length)
{
u8 wValue0 = pInformation->USBwValue0;
return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]);
}
こうやってindexノーチェックで引いて返信していた。
危ないのでindexはきちんとチェックしましょう・・・。

コメント