Upload files to 'HID_Reader'

This commit is contained in:
Adema 2022-02-03 13:57:04 +01:00
parent 7b00545f7e
commit 51d14bfbdc
4 changed files with 1790 additions and 0 deletions

146
HID_Reader/HID.bas Normal file
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff