人に指摘してもらって気がついたのだが、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はきちんとチェックしましょう・・・。
コメント