Index: uspace/app/usbinfo/info.c
===================================================================
--- uspace/app/usbinfo/info.c	(revision 3954a63bd87b69fbec5d8bc2146206516a2c83ea)
+++ uspace/app/usbinfo/info.c	(revision 6bec59bee36bbb7344227073a8e47f3537a0b284)
@@ -294,4 +294,49 @@
 }
 
+
+void dump_status(usbinfo_device_t *dev)
+{
+	int rc;
+	uint16_t device_status = 0;
+	uint16_t ctrl_pipe_status = 0;
+
+	/* Device status first. */
+	rc = usb_request_get_status(&dev->ctrl_pipe,
+	    USB_REQUEST_RECIPIENT_DEVICE, 0,
+	    &device_status);
+	if (rc != EOK) {
+		printf("%sFailed to get device status: %s.\n",
+		    get_indent(0), str_error(rc));
+		goto try_ctrl_pipe_status;
+	}
+
+	printf("%sDevice status 0x%04x: power=%s, remote-wakeup=%s.\n",
+	    get_indent(0),
+	    device_status,
+	    device_status & USB_DEVICE_STATUS_SELF_POWERED ? "self" : "bus",
+	    device_status & USB_DEVICE_STATUS_REMOTE_WAKEUP ? "yes" : "no");
+
+	/* Interface is not interesting, skipping ;-). */
+
+	/* Control endpoint zero. */
+try_ctrl_pipe_status:
+	rc = usb_request_get_status(&dev->ctrl_pipe,
+	    USB_REQUEST_RECIPIENT_ENDPOINT, 0,
+	    &ctrl_pipe_status);
+	if (rc != EOK) {
+		printf("%sFailed to get control endpoint status: %s.\n",
+		    get_indent(0), str_error(rc));
+		goto leave;
+	}
+
+	printf("%sControl endpoint zero status %04X: halted=%s.\n",
+	    get_indent(0),
+	    ctrl_pipe_status,
+	    ctrl_pipe_status & USB_ENDPOINT_STATUS_HALTED ? "yes" : "no");
+
+leave:
+	return;
+}
+
 /** @}
  */
Index: uspace/app/usbinfo/main.c
===================================================================
--- uspace/app/usbinfo/main.c	(revision 3954a63bd87b69fbec5d8bc2146206516a2c83ea)
+++ uspace/app/usbinfo/main.c	(revision 6bec59bee36bbb7344227073a8e47f3537a0b284)
@@ -136,4 +136,5 @@
 	_OPTION("-T --descriptor-tree-full", "Print detailed descriptor tree");
 	_OPTION("-s --strings", "Try to print all string descriptors.");
+	_OPTION("-S --status", "Get status of the device.");
 
 	printf("\n");
@@ -152,7 +153,8 @@
 	{"descriptor-tree-full", no_argument, NULL, 'T'},
 	{"strings", no_argument, NULL, 's'},
+	{"status", no_argument, NULL, 'S'},
 	{0, 0, NULL, 0}
 };
-static const char *short_options = "himtTs";
+static const char *short_options = "himtTsS";
 
 static usbinfo_action_t actions[] = {
@@ -180,4 +182,9 @@
 		.opt = 's',
 		.action = dump_strings,
+		.active = false
+	},
+	{
+		.opt = 'S',
+		.action = dump_status,
 		.active = false
 	},
Index: uspace/app/usbinfo/usbinfo.h
===================================================================
--- uspace/app/usbinfo/usbinfo.h	(revision 3954a63bd87b69fbec5d8bc2146206516a2c83ea)
+++ uspace/app/usbinfo/usbinfo.h	(revision 6bec59bee36bbb7344227073a8e47f3537a0b284)
@@ -84,4 +84,5 @@
 void dump_descriptor_tree_full(usbinfo_device_t *);
 void dump_strings(usbinfo_device_t *);
+void dump_status(usbinfo_device_t *);
 
 
