> Hello wander.lairson:
>       First of all,thanks for your contribution for the opensource community
> and the work for libusb, I appricate it very much.
>       Currently I want to fetch the serial number of the massive storage
> device,which need the string descriptor. Unfortunately,the python interface
> hasn't wrapped the API yet. I tried to implement it myself and copy some of
> the __read function code. Like this:
>>
>> def get_string_descriptor_ascii(self,dev_handle,desc_index):
>>
>>         """Added by GaoHong"""
>>
>>         buffer = array.array('B','\x00' * 255)
>>
>>         address, length = buffer.buffer_info()
>>
>>
>>  _check(_lib.libusb_get_string_descriptor_ascii(dev_handle,desc_index,cast(address,
>> POINTER(c_ubyte)),length))

I am not sure if it is the problem (because I don't know how ctypes
pushes arguments in the stack), but if you haven't supplied the
function prototype, desc_index will be treated as an integer instead
of a 8 bits variable (as in the libusb_get_string_descriptor_ascii
interface). You might try this to see if it is a problem:

_check(_lib.libusb_get_string_descriptor_ascii(dev_handle,c_uint8(desc_index),cast(address,POINTER(c_ubyte)),length))

If not, I am affraid you will have to play with WinDBG to see what's
going on. Also, try to write a little C program that call
libusb_get_string_descriptor_ascii. I may cut off the possiblity of a
bug in libusb.

PS: I could debug it for you, but currently I do have no free time for
it, I am really sorry.

>>
>>         return data
>
> but the result always raise WindowsError: exception: access violation
> reading 0x00000010
> File "E:\my_doc\My Dev\python\GWP 0902\usb_finder.py", line 60, in <module>
>   print
> 'Manufacturer:',back.get_string_descriptor_ascii(dev._ctx.handle,dev.iManufacturer)
> File "D:\Python26\Lib\site-packages\usb\_debug.py", line 53, in do_trace
>   return f(*args, **named_args)
> File "D:\Python26\Lib\site-packages\usb\backend\libusb10.py", line 593, in
> get_string_descriptor_ascii
>   _check(_lib.libusb_get_string_descriptor_ascii(dev_handle,desc_index,cast(address,
> POINTER(c_ubyte)),length-1))
> I don't know why,the only difference from __read function:
>>
>> def __read(self, fn, dev_handle, ep, intf, size, timeout):
>>
>>         buffer = array.array('B', '\x00' * size)
>>
>>         address, length = buffer.buffer_info()
>>
>>         transferred = c_int()
>>
>>         _check(fn(dev_handle,
>>
>>                   ep,
>>
>>                   cast(address, POINTER(c_ubyte)),
>>
>>                   length,
>>
>>                   byref(transferred),
>>
>>                   timeout))
>>
>>         return buffer[:transferred.value]
>
> is the called function.
> Can you tell me why? Thank you very much.
> --
> It's a long journey to go! :-)
> Legend since 1985...
>



-- 
Best Regards,
Wander Lairson Costa

------------------------------------------------------------------------------
Automate Storage Tiering Simply
Optimize IT performance and efficiency through flexible, powerful, 
automated storage tiering capabilities. View this brief to learn how
you can reduce costs and improve performance. 
http://p.sf.net/sfu/dell-sfdev2dev
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users

Reply via email to