def get_device_languages(hub_handle, device_port, buf=None):
 buf = alloc_descriptor_buf(buf)
 def initbuf(b):
  p = cast(b, PUSB_DESCRIPTOR_REQUEST).contents
  p.ConnectionIndex = device_port
  sp = p.SetupPacket
  (sp.bmRequest, sp.bRequest) = (128, USB_REQUEST_GET_DESCRIPTOR)
  sp.wValue[1] = USB_STRING_DESCRIPTOR_TYPE
  sp.wLength = (MAXIMUM_USB_STRING_LENGTH + 2)
 (buf, bytes_returned) = device_io_control(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, buf, buf, initbuf)
 data = cast(buf, PUSB_DESCRIPTOR_REQUEST).contents.Data
 (sz, dtype) = (data.bLength, data.bType)
 if (dtype != 3):
  raise WindowsError((u'Invalid datatype for string descriptor: 0x%x' % dtype))
 data = cast(data.String, POINTER((USHORT * (sz // 2))))
 return (buf, filter(None, data.contents))

def get_device_languages ( hub_handle , device_port , buf = None ) : buf = alloc_descriptor_buf ( buf ) def initbuf ( b ) : p = cast ( b , PUSB_DESCRIPTOR_REQUEST ) . contents p . ConnectionIndex = device_port sp = p . SetupPacket ( sp . bmRequest , sp . bRequest ) = ( 128 , USB_REQUEST_GET_DESCRIPTOR ) sp . wValue [ 1 ] = USB_STRING_DESCRIPTOR_TYPE sp . wLength = ( MAXIMUM_USB_STRING_LENGTH + 2 ) ( buf , bytes_returned ) = device_io_control ( hub_handle , IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION , buf , buf , initbuf ) data = cast ( buf , PUSB_DESCRIPTOR_REQUEST ) . contents . Data ( sz , dtype ) = ( data . bLength , data . bType ) if ( dtype != 3 ) : raise WindowsError ( ( u'Invalid datatype for string descriptor: 0x%x' % dtype ) ) data = cast ( data . String , POINTER ( ( USHORT * ( sz // 2 ) ) ) ) return ( buf , filter ( None , data . contents ) )
get the languages supported by the device for strings .