📄 usbview.bas
字号:
urb.transaction_flags=0
urb.buffer_seg=varseg(inbuffer2)
urb.buffer_off=varptr(inbuffer2)
urb.buffer_length=&HDF
urb.actual_length=maxlen
urb.setup_buffer_seg=varseg(device_request)
urb.setup_buffer_off=varptr(device_request)
urb.start_frame=0
urb.nr_of_packets=0
urb.int_interval=0
urb.error_count=0
urb.timeout=0
urb.next_urb_seg=0
urb.next_urb_off=0
reg 8,varseg(urb)
reg 4,varptr(urb)
call interrupt &H65
print
print "Product: ";
a%=ascii(mid$(inbuffer2,1,1))
print mid$(inbuffer2,3,a%)
'input "Press enter to continue", a$
'cls
end if
if @device_descriptor_ptr.iSerialNumber > 0 then
device_request.bmRequestType=&H80
device_request.bRequest=&H06
device_request.wValue=&H0300 + @device_descriptor_ptr.iSerialNumber
device_request.wIndex=&H0409
device_request.wLength=&HDF
'set up request
urb.transaction_token=&H2D
urb.chain_end_flag=0
urb.dev_add=devadd%
urb.end_point=0
urb.error_code=0
urb.status=0
urb.transaction_flags=0
urb.buffer_seg=varseg(inbuffer2)
urb.buffer_off=varptr(inbuffer2)
urb.buffer_length=&HDF
urb.actual_length=maxlen
urb.setup_buffer_seg=varseg(device_request)
urb.setup_buffer_off=varptr(device_request)
urb.start_frame=0
urb.nr_of_packets=0
urb.int_interval=0
urb.error_count=0
urb.timeout=0
urb.next_urb_seg=0
urb.next_urb_off=0
reg 8,varseg(urb)
reg 4,varptr(urb)
call interrupt &H65
print
print "Serial number: ";
a%=ascii(mid$(inbuffer2,1,1))
print mid$(inbuffer2,3,a%)
end if
print
input "Press enter to continue", a$
print "Retrieving configuration descriptor..."
'determine length of configuration descriptor
'configuration descriptor
device_request.bmRequestType=&H80
device_request.bRequest=6
device_request.wValue=&H0200
device_request.wIndex=0
device_request.wLength=&H08
'set up configuration descriptor request
urb.transaction_token=&H2D
urb.chain_end_flag=0
urb.dev_add=devadd%
urb.end_point=0
urb.error_code=0
urb.status=0
urb.transaction_flags=0
urb.buffer_seg=varseg(inbuffer)
urb.buffer_off=varptr(inbuffer)
urb.buffer_length=8 'for configuration descriptor
urb.actual_length=maxlen%
urb.setup_buffer_seg=varseg(device_request)
urb.setup_buffer_off=varptr(device_request)
urb.start_frame=0
urb.nr_of_packets=0
urb.int_interval=0
urb.error_count=0
urb.timeout=0
urb.next_urb_seg=0
urb.next_urb_off=0
'now call DosUHCI
reg 8,varseg(urb)
reg 4,varptr(urb)
call interrupt &H65
configuration_descriptor_ptr = varptr32(inbuffer)
conf_total_length = @configuration_descriptor_ptr.wTotalLength
'full configuration descriptor
device_request.bmRequestType=&H80
device_request.bRequest=6
device_request.wValue=&H0200
device_request.wIndex=0
device_request.wLength=conf_total_length
'set up configuration descriptor request
urb.transaction_token=&H2D
urb.chain_end_flag=0
urb.dev_add=devadd%
urb.end_point=0
urb.error_code=0
urb.status=0
urb.transaction_flags=0
urb.buffer_seg=varseg(inbuffer)
urb.buffer_off=varptr(inbuffer)
urb.buffer_length=conf_total_length 'for configuration descriptor
urb.actual_length=maxlen%
urb.setup_buffer_seg=varseg(device_request)
urb.setup_buffer_off=varptr(device_request)
urb.start_frame=0
urb.nr_of_packets=0
urb.int_interval=0
urb.error_count=0
urb.timeout=0
urb.next_urb_seg=0
urb.next_urb_off=0
'now call DosUHCI
reg 8,varseg(urb)
reg 4,varptr(urb)
call interrupt &H65
configuration_descriptor_ptr = varptr32(inbuffer)
cls
print
print "Configuration Descriptor:"
print "Length: " @configuration_descriptor_ptr.bLength
print "Descriptor type: " @configuration_descriptor_ptr.bDescriptorType
print "Total length: " @configuration_descriptor_ptr.wTotalLength
print "Nr. of interfaces: " @configuration_descriptor_ptr.bNumInterfaces
print "Nr. of this configuration:" @configuration_descriptor_ptr.bConfigurationValue
print "String descriptor index: " @configuration_descriptor_ptr.iConfiguration
print "Attributes: " @configuration_descriptor_ptr.bmAttributes;
a%= @configuration_descriptor_ptr.bmAttributes
if (a% and 128) >0 then print "Bus powered ";
if (a% and 64) >0 then print "Self powered ";
if (a% and 32) >0 then print "Remote Wakeup ";
print
print "Maximum power: " @configuration_descriptor_ptr.bMaxPower "=" 2*@configuration_descriptor_ptr.bMaxPower "mA"
'print "Returned:" urb.actual_length
interface_descriptor_ptr = configuration_descriptor_ptr + @configuration_descriptor_ptr.bLength
j=1 'interface counter
while @interface_descriptor_ptr.bDescriptorType = 4
print
print "Interface Descriptor"+str$(j)+":"
print "Length: " @interface_descriptor_ptr.bLength
print "Descriptor type: " @interface_descriptor_ptr.bDescriptorType
print "Interface nr.: " @interface_descriptor_ptr.bInterfaceNumber
print "Alternate setting nr.: " @interface_descriptor_ptr.bAlternateSetting
print "Nr of endpoints: " @interface_descriptor_ptr.bNumEndpoints
print "Class code: " @interface_descriptor_ptr.bInterfaceClass;
if @interface_descriptor_ptr.binterfaceClass=1 then
print "Audio device"
elseif @interface_descriptor_ptr.binterfaceClass=2 then
print "Modem device"
elseif @interface_descriptor_ptr.binterfaceClass=3 then
print "Human interface device - mouse, keyboard, etc."
elseif @interface_descriptor_ptr.binterfaceClass=6 then
print "Scanner / imaging device"
elseif @interface_descriptor_ptr.binterfaceClass=7 then
print "Printer"
elseif @interface_descriptor_ptr.binterfaceClass=8 then
print "Mass storage device"
elseif @interface_descriptor_ptr.binterfaceClass=9 then
print "Hub"
elseif @interface_descriptor_ptr.binterfaceClass=&H0B then
print "Chip/smart card interface device"
elseif @interface_descriptor_ptr.binterfaceClass=&H0E then
print "Video device"
elseif @interface_descriptor_ptr.binterfaceClass=&HE0 then
print "Bluetooth"
elseif @interface_descriptor_ptr.binterfaceClass=255 then
print "Vendor specified class code"
else
print
end if
print "Subclass code: " @interface_descriptor_ptr.bInterfaceSubClass
print "Protocol code: " @interface_descriptor_ptr.bInterfaceProtocol
print "String descriptor index: " @interface_descriptor_ptr.iInterface
print
input "Press enter to continue", a$
cls
if @interface_descriptor_ptr.iInterface > 0 then
device_request.bmRequestType=&H80
device_request.bRequest=&H06
device_request.wValue=&H0300 + @interface_descriptor_ptr.iInterface
device_request.wIndex=&H0409
device_request.wLength=&H1FF
'set up request
urb.transaction_token=&H2D
urb.chain_end_flag=0
urb.dev_add=devadd%
urb.end_point=0
urb.error_code=0
urb.status=0
urb.transaction_flags=0
urb.buffer_seg=varseg(inbuffer2)
urb.buffer_off=varptr(inbuffer2)
urb.buffer_length=&H1FF
urb.actual_length=maxlen%
urb.setup_buffer_seg=varseg(device_request)
urb.setup_buffer_off=varptr(device_request)
urb.start_frame=0
urb.nr_of_packets=0
urb.int_interval=0
urb.error_count=0
urb.timeout=0
urb.next_urb_seg=0
urb.next_urb_off=0
reg 8,varseg(urb)
reg 4,varptr(urb)
call interrupt &H65
print
print "Interface: ";
a%=ascii(mid$(inbuffer2,1,1))
print mid$(inbuffer2,3,a%)
print
input "Press enter to continue", a$
cls
end if
endpoint_descriptor_ptr = interface_descriptor_ptr + @interface_descriptor_ptr.bLength
if @endpoint_descriptor_ptr.bDescriptorType = &H21 then
'jump over this descriptor
endpoint_descriptor_ptr = endpoint_descriptor_ptr + @endpoint_descriptor_ptr.bLength
end if
for i=1 to @interface_descriptor_ptr.bNumEndpoints
print
print "Endpoint Descriptor"+str$(i)+":"
print "Length: " @endpoint_descriptor_ptr.bLength
print "Descriptor type: " @endpoint_descriptor_ptr.bDescriptorType
'print "Endpoint address:" hex$(@endpoint_descriptor_ptr.bEndpointAddress) "Hex"
a% = @endpoint_descriptor_ptr.bEndpointAddress
a%=a% and &H007F
print "Endpoint address:" a%;
if @endpoint_descriptor_ptr.bEndpointAddress > 127 then
print "IN"
else
print "OUT"
end if
print "Attributes: " @endpoint_descriptor_ptr.bmAttributes;
a%=@endpoint_descriptor_ptr.bmAttributes
a%=a% and &H0003
if a%=0 then
print "Control"
elseif a%=1 then
print "Isochronous"
elseif a%=2 then
print "Bulk"
elseif a%=3 then
print "Interrupt"
end if
print "Max packet size: " @endpoint_descriptor_ptr.wMaxPacketSize
print "Polling interval:" @endpoint_descriptor_ptr.bInterval
endpoint_descriptor_ptr = endpoint_descriptor_ptr + @endpoint_descriptor_ptr.bLength
next i 'endpoint loop
input "Press enter to continue", a$
cls
interface_descriptor_ptr = endpoint_descriptor_ptr 'advanced above
incr j 'interface counter
wend 'interface loop
do_end:
color 7,0
cls
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -