臨界点

あめんなです。
アン肝のお寿司が食べたい年頃です。

Che-ez! SPYZ F2.8 6.2mm

SPYZ - USB直結検証の続き
infのベンダとプロダクトIDをSPYZ用に変更し、ドライバをrwbulk.sysで置き換えて、USBViewでディスクリプタを覗いてみた。bDeviceProtocolがany matching(0xff)していない。Open Pipesが0なのも変。因みに既定のイメージングデバイスドライバでは、Current Config Valueが0x00になっている(rwbulk.sysに置き換えた場合は0x01)。接続状態としての違いはそれだけ。パイプは相変わらず0のまま。イメージングデバイスの場合はパイプはパックリしていないらしい。明示的に接続(USB接続ではなくアプリケーションレイヤでの接続)しないとパイプが作られない(コンフィグ完了時点でエンドポイントが作れないということは、コンフィグがそうなってるんだろうな。。)。LCDC DemonstratorでConnectイベント発行するとバルクパイプが動的に生成されるのをUSB Viewで確認しました。んー。もうちょっとディスクリプタに対する見識を深めないと太刀打ち出来ないですね。正常に動作している他のUSBデバイスディスクリプタを覗くと、bDeviceProtocol=0xff、Current Config Value=0x01、Open Pipes=2とか1であるため、ここの差異で絞ってみる。

Device Descriptor:
bcdUSB: 0x0110
bDeviceClass: 0xFF
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0553 (VLSI Vision Ltd.)
idProduct: 0x0202
bcdDevice: 0x0000
iManufacturer: 0x01
iProduct: 0x02
iSerialNumber: 0x00
bNumConfigurations: 0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x01
Open Pipes: 0

こちらは、rwbulk.exe -uでディスクリプタ吐かせた結果

hDevInfo 000859D0
NumberDevices 0
Attempting to open \\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c04f
b1728b}
DeviceName = (\\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c04fb1728
b})
request complete, success = 1 nBytes = 34

===================
USB_CONFIGURATION_DESCRIPTOR
bLength = 0x9, decimal 9
bDescriptorType = 0x2 ( USB_CONFIGURATION_DESCRIPTOR_TYPE )
wTotalLength = 0x22, decimal 34
bNumInterfaces = 0x1, decimal 1
bConfigurationValue = 0x1, decimal 1
iConfiguration = 0x0, decimal 0
bmAttributes = 0xa0 ( USB_CONFIG_BUS_POWERED )
MaxPower = 0x23, decimal 35

                                                        • -

USB_INTERFACE_DESCRIPTOR #0
bLength = 0x9
bDescriptorType = 0x4 ( USB_INTERFACE_DESCRIPTOR_TYPE )
bInterfaceNumber = 0x0
bAlternateSetting = 0x0
bNumEndpoints = 0x0
bInterfaceClass = 0xff
bInterfaceSubClass = 0x0
bInterfaceProtocol = 0x0
bInterface = 0x0

                                                        • -

USB_INTERFACE_DESCRIPTOR #1
bLength = 0x9
bDescriptorType = 0x4 ( USB_INTERFACE_DESCRIPTOR_TYPE )
bInterfaceNumber = 0x0
bAlternateSetting = 0x1
bNumEndpoints = 0x1
bInterfaceClass = 0xff
bInterfaceSubClass = 0x0
bInterfaceProtocol = 0x0
bInterface = 0x0

                                                          • -

USB_ENDPOINT_DESCRIPTOR for Pipe00
bLength = 0x7
bDescriptorType = 0x5 ( USB_ENDPOINT_DESCRIPTOR_TYPE )
bEndpointAddress= 0x82 ( INPUT )
bmAttributes= 0x2 ( USB_ENDPOINT_TYPE_BULK )
wMaxPacketSize= 0x40, decimal 64
bInterval = 0x0, decimal 0

因みにrwbulk.exe叩くと、pipe openでエラーとなる。そりゃそうだと思うけど原因究明には。。もう一つのスパイスがいる。

hDevInfo 000859E0
NumberDevices 0
Attempting to open \\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c04f
b1728b}
completeDeviceName = (\\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c
04fb1728b}\PIPE00)
Failed to open (\\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c04fb17
28b}\PIPE00) = 87hDevInfo 000859E0
NumberDevices 0
Attempting to open \\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c04f
b1728b}
completeDeviceName = (\\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c
04fb1728b}\PIPE01)
Failed to open (\\?\usb#vid_0553&pid_0202#5&ea588c7&0&1#{00873fdf-61a8-11d1-aa5e-00c04fb17
28b}\PIPE01) = 87 R (0000) : request 000020 bytes -- 000000 bytes read