Hi Wander,
I have refreshed the patch so it applies against svn 0.x branch.
Cheers, Tormod
On Wed, Feb 3, 2010 at 1:47 AM, <pyusb-users@lists.sourceforge.net> wrote:
> Hello Tormod,
>
> Would you mind making the patch for latest svn code?
> Thank you very much for you contribution.
>
> Wander
>
> 2010/2/3 <pyusb-users@lists.sourceforge.net>:
>> Hi,
>> This is a patch for pyusb 0.4.1.
>>
>> Currently, getString(index, len, -1) returns a plain string, but when
>> providing a langid like in getString(index, len, 0x409) it returns the
>> raw string descriptor which then has to be converted into a plain
>> string. The patch makes the latter case return a plain string like in
>> the former case. The conversion is similar to the one done in the
>> libusb-0.1 usb_get_string_simple() function.
>>
>> I tried to check how this is done in pyusb 1.x, but AFAICS the
>> getString() method is not implemented there yet.
>>
>> Tormod
>>
diff -u pyusb-0.4.1/pyusb.c.orig pyusb-0.4.1/pyusb.c
--- pyusb-0.4.1.orig/pyusb.c
+++ pyusb-0.4.1/pyusb.c
@@ -1732,6 +1732,7 @@
unsigned long len;
PyObject *retStr;
char *buffer;
+ char *rawbuffer;
int ret;
Py_usb_DeviceHandle *_self = (Py_usb_DeviceHandle *) self;
@@ -1759,19 +1760,33 @@
++len; /* for NULL termination */
buffer = (char *) PyMem_Malloc(len);
if (!buffer) return NULL;
+ rawbuffer = (char *) PyMem_Malloc(len*2); /* for string descriptor */
+ if (!rawbuffer) return NULL;
Py_BEGIN_ALLOW_THREADS
if (-1 == langid) {
ret = usb_get_string_simple(_self->deviceHandle, index, buffer, len);
} else {
- ret = usb_get_string(_self->deviceHandle, index, langid, buffer, len);
+ int di, si;
+
+ ret = usb_get_string(_self->deviceHandle, index, langid, rawbuffer, len*2);
+ /* convert string descriptor to ascii string */
+ for (di = 0, si = 2; si < rawbuffer[0] && si < ret-1; si += 2) {
+ if (rawbuffer[si + 1]) /* high byte */
+ buffer[di++] = '?';
+ else
+ buffer[di++] = rawbuffer[si];
+ }
+ buffer[di] = 0;
+ ret = di;
}
Py_END_ALLOW_THREADS
if (ret < 0) {
PyMem_Free(buffer);
+ PyMem_Free(rawbuffer);
PyUSB_Error(ret);
return NULL;
}
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
pyusb-users mailing list
pyusb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pyusb-users