Merge branch 'usb' into utf2
This commit is contained in:
commit
42b29c0fab
4 changed files with 52 additions and 42 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* bus/usb/usb.c (grub_usb_get_string): Move from here ...
|
||||||
|
* commands/usbtest.c (grub_usb_get_string): ... move here.
|
||||||
|
(usb_print_str): Fix error handling.
|
||||||
|
* include/grub/usb.h (grub_usb_get_string): Remove.
|
||||||
|
|
||||||
2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* kern/file.c (grub_file_read): Check offset.
|
* kern/file.c (grub_file_read): Check offset.
|
||||||
|
|
|
@ -155,42 +155,6 @@ grub_usb_get_endpdescriptor (grub_usb_device_t usbdev, int addr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_usb_err_t
|
|
||||||
grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid,
|
|
||||||
char **string)
|
|
||||||
{
|
|
||||||
struct grub_usb_desc_str descstr;
|
|
||||||
struct grub_usb_desc_str *descstrp;
|
|
||||||
grub_usb_err_t err;
|
|
||||||
|
|
||||||
/* Only get the length. */
|
|
||||||
err = grub_usb_control_msg (dev, 1 << 7,
|
|
||||||
0x06, (3 << 8) | index,
|
|
||||||
langid, 1, (char *) &descstr);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
descstrp = grub_malloc (descstr.length);
|
|
||||||
if (! descstrp)
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
|
||||||
err = grub_usb_control_msg (dev, 1 << 7,
|
|
||||||
0x06, (3 << 8) | index,
|
|
||||||
langid, descstr.length, (char *) descstrp);
|
|
||||||
|
|
||||||
*string = grub_malloc (descstr.length / 2);
|
|
||||||
if (! *string)
|
|
||||||
{
|
|
||||||
grub_free (descstrp);
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_utf16_to_utf8 ((grub_uint8_t *) *string, descstrp->str, descstrp->length / 2 - 1);
|
|
||||||
(*string)[descstr.length / 2 - 1] = '\0';
|
|
||||||
grub_free (descstrp);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_usb_err_t
|
grub_usb_err_t
|
||||||
grub_usb_device_initialize (grub_usb_device_t dev)
|
grub_usb_device_initialize (grub_usb_device_t dev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -59,19 +59,61 @@ static const char *usb_devspeed[] =
|
||||||
"High"
|
"High"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static grub_usb_err_t
|
||||||
|
grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid,
|
||||||
|
char **string)
|
||||||
|
{
|
||||||
|
struct grub_usb_desc_str descstr;
|
||||||
|
struct grub_usb_desc_str *descstrp;
|
||||||
|
grub_usb_err_t err;
|
||||||
|
|
||||||
|
/* Only get the length. */
|
||||||
|
err = grub_usb_control_msg (dev, 1 << 7,
|
||||||
|
0x06, (3 << 8) | index,
|
||||||
|
langid, 1, (char *) &descstr);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
descstrp = grub_malloc (descstr.length);
|
||||||
|
if (! descstrp)
|
||||||
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
|
err = grub_usb_control_msg (dev, 1 << 7,
|
||||||
|
0x06, (3 << 8) | index,
|
||||||
|
langid, descstr.length, (char *) descstrp);
|
||||||
|
|
||||||
|
*string = grub_malloc (descstr.length / 2);
|
||||||
|
if (! *string)
|
||||||
|
{
|
||||||
|
grub_free (descstrp);
|
||||||
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_utf16_to_utf8 ((grub_uint8_t *) *string, descstrp->str, descstrp->length / 2 - 1);
|
||||||
|
(*string)[descstr.length / 2 - 1] = '\0';
|
||||||
|
grub_free (descstrp);
|
||||||
|
|
||||||
|
return GRUB_USB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usb_print_str (const char *description, grub_usb_device_t dev, int idx)
|
usb_print_str (const char *description, grub_usb_device_t dev, int idx)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
|
grub_usb_err_t err;
|
||||||
/* XXX: LANGID */
|
/* XXX: LANGID */
|
||||||
|
|
||||||
if (! idx)
|
if (! idx)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
grub_usb_get_string (dev, idx, 0x0409, &name);
|
err = grub_usb_get_string (dev, idx, 0x0409, &name);
|
||||||
|
if (err)
|
||||||
|
grub_printf ("Error %d retrieving %s\n", err, description);
|
||||||
|
else
|
||||||
|
{
|
||||||
grub_printf ("%s: `%s'\n", description, name);
|
grub_printf ("%s: `%s'\n", description, name);
|
||||||
grub_free (name);
|
grub_free (name);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
usb_iterate (grub_usb_device_t dev)
|
usb_iterate (grub_usb_device_t dev)
|
||||||
|
|
|
@ -64,9 +64,6 @@ grub_usb_err_t grub_usb_clear_halt (grub_usb_device_t dev, int endpoint);
|
||||||
grub_usb_err_t grub_usb_set_configuration (grub_usb_device_t dev,
|
grub_usb_err_t grub_usb_set_configuration (grub_usb_device_t dev,
|
||||||
int configuration);
|
int configuration);
|
||||||
|
|
||||||
grub_usb_err_t grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index,
|
|
||||||
int langid, char **string);
|
|
||||||
|
|
||||||
void grub_usb_controller_dev_register (grub_usb_controller_dev_t usb);
|
void grub_usb_controller_dev_register (grub_usb_controller_dev_t usb);
|
||||||
|
|
||||||
void grub_usb_controller_dev_unregister (grub_usb_controller_dev_t usb);
|
void grub_usb_controller_dev_unregister (grub_usb_controller_dev_t usb);
|
||||||
|
|
Loading…
Reference in a new issue