Upload files to 'HID_Reader'
This commit is contained in:
parent
7b00545f7e
commit
51d14bfbdc
146
HID_Reader/HID.bas
Normal file
146
HID_Reader/HID.bas
Normal file
@ -0,0 +1,146 @@
|
||||
'Free basic Address Event Representation
|
||||
|
||||
#include once "libusb-1.0.bi"
|
||||
#include once "hidlib.bas"
|
||||
#include once "HID_info.bas"
|
||||
#include once "comlinepar.bas"
|
||||
|
||||
counter = 0
|
||||
|
||||
For i as integer = 0 To 63
|
||||
databuffer(i) = 100+i
|
||||
Next i
|
||||
|
||||
'#include once "caerdeviceinfo.bas"
|
||||
|
||||
|
||||
returnvalue = libusb_init(NULL)
|
||||
If returnvalue < 0 Then
|
||||
End returnvalue
|
||||
End If
|
||||
|
||||
cnt = libusb_get_device_list(NULL, @ppList)
|
||||
If (cnt < 0) then
|
||||
End cnt
|
||||
End if
|
||||
|
||||
'? "Found ";cnt ;" usb devices"
|
||||
'?
|
||||
? "Looking for "; Hex(Vendor,4); ":"; Hex(Product,4)
|
||||
?
|
||||
|
||||
for i as integer = 0 to cnt-1
|
||||
pDevice = ppList[i]
|
||||
returnvalue = libusb_get_device_descriptor(pDevice, @desc)
|
||||
'? Hex(desc.idVendor,4); ":"; Hex(desc.idProduct,4)
|
||||
If Hex(desc.idVendor,4) = Hex(Vendor,4) And Hex(desc.idProduct,4) = Hex(Product,4) Then
|
||||
?
|
||||
? "Found the device "; pDevice
|
||||
DHandle(counter) = open_device(pDevice)
|
||||
|
||||
returnvalue = print_device_descriptor(desc, sup_out)
|
||||
returnvalue = print_vendor_info(DHandle(counter), desc, 0)
|
||||
|
||||
returnvalue = libusb_get_config_descriptor(pDevice, 0, @Dconfig)
|
||||
If returnvalue = 0 Then
|
||||
returnvalue = print_config_descriptor(Dconfig, sup_out)
|
||||
For ii as integer = 0 To Dconfig->bNumInterfaces - 1
|
||||
inter = @Dconfig->interface[ii]
|
||||
Print "Number of alternate settings: ";inter->num_altsetting
|
||||
For j as integer = 0 To inter->num_altsetting - 1
|
||||
interdesc = @inter->altsetting[j]
|
||||
returnvalue = print_interface_descriptor(interdesc, sup_out)
|
||||
returnvalue = print_interface_info(DHandle(counter), interdesc, sup_out)
|
||||
? "number of endpoints: "; interdesc->bNumEndpoints
|
||||
For k as integer = 0 To interdesc->bNumEndpoints - 1
|
||||
epdesc = @interdesc->endpoint[k]
|
||||
returnvalue = print_endpoint_descriptor(epdesc, sup_out)
|
||||
if (sup_out = 0) then
|
||||
? ii;" ";j;" ";k
|
||||
End If
|
||||
If (epdesc->bEndpointAddress >= 128) then
|
||||
in_endpoint(in_cnt) = epdesc->bEndpointAddress
|
||||
in_packsize(in_cnt) = epdesc->wMaxPacketSize
|
||||
in_cnt = in_cnt + 1
|
||||
End if
|
||||
If (epdesc->bEndpointAddress < 128) then
|
||||
out_endpoint(out_cnt) = epdesc->bEndpointAddress
|
||||
out_packsize(out_cnt) = epdesc->wMaxPacketSize
|
||||
out_cnt = out_cnt + 1
|
||||
End if
|
||||
If (sup_out = 0) then
|
||||
? "ep address "; epdesc->bEndpointAddress
|
||||
? "in "; in_endpoint(in_cnt)
|
||||
? "out "; out_endpoint(out_cnt)
|
||||
End If
|
||||
Next k
|
||||
Next j
|
||||
Next ii
|
||||
Else
|
||||
? "Error getting config descriptor"
|
||||
End returnvalue
|
||||
End IF
|
||||
|
||||
counter = counter + 1
|
||||
|
||||
End If
|
||||
next i
|
||||
|
||||
? "number of attached devices "; counter
|
||||
?
|
||||
|
||||
If (counter>0) then
|
||||
|
||||
|
||||
|
||||
Print "press Esc to quit"
|
||||
|
||||
? "in endpoint 0: "; in_endpoint(0)
|
||||
? "in endpoint 1: "; in_endpoint(1)
|
||||
? "out endpoint 0: "; out_endpoint(0)
|
||||
? "out endpoint 1: "; out_endpoint(1)
|
||||
|
||||
countbytes = 0
|
||||
|
||||
Do
|
||||
|
||||
returnvalues = bulk_tranfer(DHandle(counter-1), in_endpoint(0), dbuf, in_packsize(0), 1, 0)
|
||||
If (returnvalues.B = -4) then
|
||||
Exit Do
|
||||
End If
|
||||
If (returnvalues.B <> -7) then
|
||||
If (returnvalues.A>0) then
|
||||
'? returnvalues.A; " bytes received"
|
||||
'? "aantal * "; returnvalues.A; " = "; countbytes
|
||||
countbytes = countbytes + returnvalues.A
|
||||
For ii as integer = 0 To returnvalues.A - 1 Step 4
|
||||
if (databuffer(ii) <> databuffer_oud1) or (databuffer(ii+1) <> databuffer_oud2) or (databuffer(ii+2) <> databuffer_oud3) or (databuffer(ii+3) <> databuffer_oud4 )then
|
||||
? databuffer(ii); ", "; databuffer(ii+1); ", "; databuffer(ii+2); ", "; databuffer(ii+3); ", "
|
||||
End If
|
||||
databuffer_oud1 = databuffer(ii)
|
||||
databuffer_oud2 = databuffer(ii+1)
|
||||
databuffer_oud3 = databuffer(ii+2)
|
||||
databuffer_oud4 = databuffer(ii+3)
|
||||
Next ii
|
||||
'?
|
||||
'? "packet nr."; 256*databuffer(62)+databuffer(63)
|
||||
End If
|
||||
End If
|
||||
key = Inkey
|
||||
If (key <> "") then
|
||||
? countbytes
|
||||
' ? "key pressed: "; asc(key)
|
||||
' databuffer(0) = asc(key)
|
||||
' returnvalues = transfer_data(DHandle(counter-1), out_endpoint(0), dbuf, out_packsize(0), 100, 100)
|
||||
End If
|
||||
|
||||
Loop Until key = chr$(27)
|
||||
|
||||
returnvalue = close_device(DHandle(counter-1))
|
||||
End If
|
||||
|
||||
|
||||
returnvalue = exit_prog(ppList)
|
||||
|
||||
sleep
|
||||
|
141
HID_Reader/HID_info.bas
Normal file
141
HID_Reader/HID_info.bas
Normal file
@ -0,0 +1,141 @@
|
||||
Declare Function print_device_descriptor(descr as libusb_device_descriptor, suppress as UByte) as long
|
||||
Declare Function print_config_descriptor(D_config as libusb_config_descriptor ptr, suppress as UByte) as long
|
||||
Declare Function print_vendor_info(handle as libusb_device_handle ptr, descr as libusb_device_descriptor, suppress as UByte) as long
|
||||
Declare Function print_interface_descriptor(inter_desc as const libusb_interface_descriptor Ptr, suppress as UByte) as long
|
||||
Declare Function print_interface_info(handle as libusb_device_handle ptr, inter_descr as const libusb_interface_descriptor Ptr, suppress as UByte) as long
|
||||
Declare Function print_endpoint_descriptor(ep_desc as Const libusb_endpoint_descriptor Ptr, suppress as UByte) as long
|
||||
|
||||
Function print_device_descriptor(descr as libusb_device_descriptor, suppress as UByte) as long
|
||||
If (suppress = 0) then
|
||||
?
|
||||
? "******** device_descriptor ********"
|
||||
? "bLength "; descr.bLength
|
||||
? "bdescriptor type "; "0x"; Hex(descr.bDescriptorType, 2)
|
||||
? "bcdUSB "; "0x"; Hex(descr.bcdUSB, 4)
|
||||
? "bDeviceClass "; "0x"; Hex(descr.bDeviceClass, 4)
|
||||
? "bDeviceSubClass "; "0x"; Hex(descr.bDeviceSubClass, 2)
|
||||
? "bDeviceProtocol "; "0x"; Hex(descr.bDeviceProtocol, 2)
|
||||
? "bMaxPacketSize0 "; descr.bMaxPacketSize0
|
||||
? "idVendor "; "0x"; Hex(descr.idVendor, 4)
|
||||
? "idProduct "; "0x"; Hex(descr.idProduct, 4)
|
||||
? "bcdDevice "; "0x"; Hex(descr.bcdDevice, 4)
|
||||
? "iManufacturer "; descr.iManufacturer
|
||||
? "iProduct "; descr.iProduct
|
||||
? "iSerialNumber "; descr.iSerialNumber
|
||||
? "bNumConfigurations "; descr.bNumConfigurations
|
||||
?
|
||||
End If
|
||||
return 0
|
||||
End Function
|
||||
|
||||
Function print_config_descriptor(D_config as libusb_config_descriptor ptr, suppress as UByte) as long
|
||||
If (suppress = 0) then
|
||||
?
|
||||
? "******** config_descriptor ********"
|
||||
? "bLength: "; D_config->bLength
|
||||
? "bDescriptorType: "; D_config->bDescriptorType
|
||||
? "wTotalLength: "; D_config->wTotalLength
|
||||
? "bNumInterfaces: "; D_config->bNumInterfaces
|
||||
? "bConfigurationValue: "; D_config->bConfigurationValue
|
||||
? "iConfiguration: "; D_config->iConfiguration
|
||||
? "bmAttributes: "; D_config->bmAttributes
|
||||
? "MaxPower: "; D_config->MaxPower; "mA"
|
||||
?
|
||||
End If
|
||||
return 0
|
||||
End Function
|
||||
|
||||
Function print_interface_descriptor(inter_desc as const libusb_interface_descriptor Ptr, suppress as UByte) as long
|
||||
If (suppress = 0) then
|
||||
?
|
||||
? "******** interface_descriptor ********"
|
||||
? "bLength: "; inter_desc->bLength
|
||||
? "bDescriptorType: "; inter_desc->bDescriptorType
|
||||
? "bInterfaceNumber: "; inter_desc->bInterfaceNumber
|
||||
? "bAlternateSetting: "; inter_desc->bAlternateSetting
|
||||
? "bNumEndpoints: "; inter_desc->bNumEndpoints
|
||||
? "bInterfaceClass: "; inter_desc->bInterfaceClass
|
||||
? "bInterfaceSubClass: "; inter_desc->bInterfaceSubClass
|
||||
? "bInterfaceProtocol: "; inter_desc->bInterfaceProtocol
|
||||
? "iInterface: "; inter_desc->iInterface
|
||||
End If
|
||||
return 0
|
||||
End Function
|
||||
|
||||
Function print_endpoint_descriptor(ep_desc as Const libusb_endpoint_descriptor Ptr, suppress as UByte) as long
|
||||
If (suppress = 0) then
|
||||
?
|
||||
? "******** endpoint descriptor ********"
|
||||
? "bLength: "; ep_desc->bLength
|
||||
? "bDescriptorType: "; ep_desc->bDescriptorType
|
||||
? "bEndpointAddress: "; "0x"; Hex(ep_desc->bEndpointAddress)
|
||||
? "bmAttributes: "; ep_desc->bmAttributes
|
||||
? "wMaxPacketSize: "; ep_desc->wMaxPacketSize
|
||||
? "bInterval: "; ep_desc->bInterval
|
||||
? "bRefresh: "; ep_desc->bRefresh
|
||||
? "bSynchAddress: "; ep_desc->bSynchAddress
|
||||
End If
|
||||
return 0
|
||||
End Function
|
||||
|
||||
Function print_vendor_info(handle as libusb_device_handle ptr, descr as libusb_device_descriptor, suppress as UByte) as long
|
||||
dim as long returnvalue
|
||||
dim as ubyte device_info(64)
|
||||
If (suppress = 0) then
|
||||
|
||||
?
|
||||
? "******** Vendor information ********"
|
||||
|
||||
returnvalue = libusb_get_string_descriptor_ascii(handle, descr.iProduct, @device_info(0), 64)
|
||||
If returnvalue > 0 Then
|
||||
? "Product ";
|
||||
For i as integer = 0 to returnvalue - 1
|
||||
? chr(device_info(i));
|
||||
Next
|
||||
End If
|
||||
?
|
||||
|
||||
returnvalue = libusb_get_string_descriptor_ascii(handle, descr.iManufacturer, @device_info(0), 64)
|
||||
If returnvalue > 0 Then
|
||||
? "Manufacturer ";
|
||||
For i as integer = 0 to returnvalue - 1
|
||||
? chr(device_info(i));
|
||||
Next
|
||||
End If
|
||||
?
|
||||
|
||||
returnvalue = libusb_get_string_descriptor_ascii(handle, descr.iSerialNumber, @device_info(0), 64)
|
||||
If returnvalue > 0 Then
|
||||
? "SerialNumber ";
|
||||
For i as integer = 0 to returnvalue - 1
|
||||
? chr(device_info(i));
|
||||
Next
|
||||
End If
|
||||
?
|
||||
?
|
||||
End If
|
||||
return 0
|
||||
End Function
|
||||
|
||||
Function print_interface_info(handle as libusb_device_handle ptr, inter_descr as const libusb_interface_descriptor Ptr, suppress as UByte) as long
|
||||
dim as long returnvalue
|
||||
dim as ubyte device_info(64)
|
||||
|
||||
If (suppress = 0) then
|
||||
?
|
||||
? "******** Interface information ********"
|
||||
|
||||
returnvalue = libusb_get_string_descriptor_ascii(handle, inter_descr->iInterface, @device_info(0), 64)
|
||||
If returnvalue > 0 Then
|
||||
? "Interface ";
|
||||
For i as integer = 0 to returnvalue - 1
|
||||
? chr(device_info(i));
|
||||
Next
|
||||
Else
|
||||
? returnvalue
|
||||
End If
|
||||
?
|
||||
?
|
||||
End If
|
||||
return 0
|
||||
End Function
|
140
HID_Reader/hidlib.bas
Normal file
140
HID_Reader/hidlib.bas
Normal file
@ -0,0 +1,140 @@
|
||||
Type multireturn
|
||||
As long A,B,C
|
||||
End Type
|
||||
|
||||
'dim as uinteger Vendor = &h154B
|
||||
'dim as uinteger Product = &hF009
|
||||
'dim shared as uinteger Vendor = &h152A
|
||||
'dim as uinteger Product = &h841d
|
||||
dim shared as uinteger Vendor = &h04B4
|
||||
dim as uinteger Product = &h00F1
|
||||
'dim as uinteger Vendor = &h16C0
|
||||
'dim as uinteger Product = &h0486
|
||||
dim as libusb_device_handle ptr DHandle(10)
|
||||
dim shared as libusb_device_descriptor desc
|
||||
dim as libusb_transfer_cb_fn call_back
|
||||
dim as libusb_config_descriptor ptr Dconfig
|
||||
dim as integer conf
|
||||
dim as libusb_device ptr pDevice
|
||||
dim as libusb_device ptr ptr ppList
|
||||
dim as integer cnt = 0
|
||||
dim as Long returnvalue
|
||||
dim as Const libusb_interface Ptr inter
|
||||
dim as Const libusb_interface_descriptor Ptr interdesc
|
||||
dim shared as Const libusb_endpoint_descriptor Ptr epdesc
|
||||
dim as libusb_transfer Ptr xfr
|
||||
dim as uinteger size = 2048
|
||||
dim as Ubyte databuffer(size)
|
||||
dim as Ubyte databuffer_oud1 = 0
|
||||
dim as Ubyte databuffer_oud2 = 0
|
||||
dim as Ubyte databuffer_oud3 = 0
|
||||
dim as Ubyte databuffer_oud4 = 0
|
||||
dim as Ubyte ptr dbuf = @databuffer(0)
|
||||
dim as Ubyte in_endpoint(10)
|
||||
dim as uinteger in_packsize(10)
|
||||
dim as Ubyte in_cnt = 0
|
||||
dim as Ubyte out_cnt = 0
|
||||
dim as Ubyte out_endpoint(10)
|
||||
dim as uinteger out_packsize(10)
|
||||
dim as Ubyte counter
|
||||
dim as multireturn returnvalues
|
||||
dim as String key
|
||||
dim as uinteger countbytes = 0
|
||||
dim as Ubyte sup_out = 1
|
||||
|
||||
Declare Function open_device(device as libusb_device ptr) as libusb_device_handle ptr
|
||||
Declare Function close_device(handle as libusb_device_handle ptr) as long
|
||||
Declare Function exit_prog(ppList as libusb_device ptr ptr) as long
|
||||
Declare Function transfer_data(handle as libusb_device_handle ptr, endp as UByte, databuf As UByte Ptr, number as long, timeout As ULong, suppress as UByte) as multireturn
|
||||
Declare Function bulk_tranfer(handle as libusb_device_handle ptr, endp as UByte, databuf As UByte Ptr, number as long, timeout As ULong, suppress as UByte) as multireturn
|
||||
|
||||
Function open_device(device as libusb_device ptr) as libusb_device_handle ptr
|
||||
dim as long returnvalue
|
||||
dim as libusb_device_handle ptr Handle
|
||||
|
||||
returnvalue = libusb_open(device, @Handle)
|
||||
? "dev_handle "; Handle
|
||||
? "Error Detail "; returnvalue
|
||||
|
||||
? *(libusb_error_name(returnvalue))
|
||||
|
||||
returnvalue = libusb_reset_device(Handle)
|
||||
? "Error Reset Device "; returnvalue
|
||||
?
|
||||
|
||||
If Handle > 0 Then
|
||||
returnvalue = libusb_kernel_driver_active(Handle, 0) ''check if kernel has attached a driver
|
||||
? "Check attached "; returnvalue
|
||||
If returnvalue > 0 Then ''if so
|
||||
returnvalue = libusb_detach_kernel_driver(Handle, 0) ''detach it
|
||||
? "Detached "; returnvalue
|
||||
End If
|
||||
returnvalue = libusb_claim_interface(Handle, 0) ''now we can claim the interface
|
||||
? "Claim "; returnvalue
|
||||
?
|
||||
End If
|
||||
return Handle
|
||||
End Function
|
||||
|
||||
Function close_device(handle as libusb_device_handle ptr) as long
|
||||
dim as long returnvalue
|
||||
|
||||
returnvalue = libusb_release_interface(handle, 0)
|
||||
?
|
||||
? "release :"; returnvalue
|
||||
libusb_close(handle)
|
||||
return returnvalue
|
||||
End Function
|
||||
|
||||
Function exit_prog(ppList as libusb_device ptr ptr) as long
|
||||
? "ok"
|
||||
libusb_free_device_list(ppList, 1)
|
||||
libusb_exit(NULL)
|
||||
? "end"
|
||||
return 1
|
||||
End Function
|
||||
|
||||
Function print_info()as long
|
||||
return 1
|
||||
End Function
|
||||
|
||||
Function transfer_data(handle as libusb_device_handle ptr, endp as UByte, databuf As UByte Ptr, number as long, timeout As ULong, suppress as UByte) as multireturn
|
||||
Dim As multireturn returnvalues
|
||||
dim as long returnvalue
|
||||
dim as long length = 0
|
||||
|
||||
returnvalue = libusb_interrupt_transfer(handle, endp, databuf, number, @length, timeout)
|
||||
|
||||
If (suppress = 0) then
|
||||
?
|
||||
? "returnvalue "; returnvalue
|
||||
? *(libusb_error_name(returnvalue))
|
||||
End if
|
||||
|
||||
returnvalues.A = length
|
||||
returnvalues.B = returnvalue
|
||||
|
||||
return returnvalues
|
||||
End Function
|
||||
|
||||
|
||||
|
||||
Function bulk_tranfer(handle as libusb_device_handle ptr, endp as UByte, databuf As UByte Ptr, number as long, timeout As ULong, suppress as UByte) as multireturn
|
||||
|
||||
Dim As multireturn returnvalues
|
||||
dim as long returnvalue
|
||||
dim as long length = 0
|
||||
|
||||
returnvalue = libusb_bulk_transfer(handle, endp, databuf, number, @length, timeout)
|
||||
|
||||
If (suppress = 0) then
|
||||
'?
|
||||
'? "returnvalue "; returnvalue
|
||||
'? *(libusb_error_name(returnvalue))
|
||||
End if
|
||||
|
||||
returnvalues.A = length
|
||||
returnvalues.B = returnvalue
|
||||
|
||||
return returnvalues
|
||||
End Function
|
1363
HID_Reader/libusb-1.0.bi
Normal file
1363
HID_Reader/libusb-1.0.bi
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user