⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbview.bas

📁 DOS下的USB驱动源码,包括UHCI
💻 BAS
📖 第 1 页 / 共 2 页
字号:
  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 + -